diff --git a/speakeasy/.eslintrc.yml b/speakeasy/.eslintrc.yml new file mode 100755 index 0000000..565e624 --- /dev/null +++ b/speakeasy/.eslintrc.yml @@ -0,0 +1,17 @@ +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/speakeasy/.gitattributes b/speakeasy/.gitattributes new file mode 100755 index 0000000..113eead --- /dev/null +++ b/speakeasy/.gitattributes @@ -0,0 +1,2 @@ +# This allows generated code to be indexed correctly +*.ts linguist-generated=false \ No newline at end of file diff --git a/speakeasy/.gitignore b/speakeasy/.gitignore new file mode 100755 index 0000000..1eae0cf --- /dev/null +++ b/speakeasy/.gitignore @@ -0,0 +1,2 @@ +dist/ +node_modules/ diff --git a/speakeasy/README.md b/speakeasy/README.md new file mode 100755 index 0000000..76e8a56 --- /dev/null +++ b/speakeasy/README.md @@ -0,0 +1,138 @@ +# openapi + +
+ + + +
+ + +# SDK Installation + +## NPM + +```bash +npm add openapi +``` + +## Yarn + +```bash +yarn add openapi +``` + + +## SDK Example Usage + + + +```typescript +import { SDK } from "openapi"; + +(async () => { + const sdk = new SDK({ + apiKey: "", + }); + + const res = await sdk.apis.getApis({ + metadata: { + South: ["Southwest"], + }, + op: { + and: false, + }, + }); + + if (res.statusCode == 200) { + // handle response + } +})(); + +``` + + + +# Available Resources and Operations + +## [SDK](docs/sdks/sdk/README.md) + +* [validateApiKey](docs/sdks/sdk/README.md#validateapikey) - Validate the current api key. + +## [apiEndpoints](docs/sdks/apiendpoints/README.md) + +* [deleteApiEndpoint](docs/sdks/apiendpoints/README.md#deleteapiendpoint) - Delete an ApiEndpoint. +* [findApiEndpoint](docs/sdks/apiendpoints/README.md#findapiendpoint) - Find an ApiEndpoint via its displayName. +* [generateOpenApiSpecForApiEndpoint](docs/sdks/apiendpoints/README.md#generateopenapispecforapiendpoint) - Generate an OpenAPI specification for a particular ApiEndpoint. +* [generatePostmanCollectionForApiEndpoint](docs/sdks/apiendpoints/README.md#generatepostmancollectionforapiendpoint) - Generate a Postman collection for a particular ApiEndpoint. +* [getAllApiEndpoints](docs/sdks/apiendpoints/README.md#getallapiendpoints) - Get all Api endpoints for a particular apiID. +* [getAllForVersionApiEndpoints](docs/sdks/apiendpoints/README.md#getallforversionapiendpoints) - Get all ApiEndpoints for a particular apiID and versionID. +* [getApiEndpoint](docs/sdks/apiendpoints/README.md#getapiendpoint) - Get an ApiEndpoint. +* [upsertApiEndpoint](docs/sdks/apiendpoints/README.md#upsertapiendpoint) - Upsert an ApiEndpoint. + +## [apis](docs/sdks/apis/README.md) + +* [deleteApi](docs/sdks/apis/README.md#deleteapi) - Delete an Api. +* [generateOpenApiSpec](docs/sdks/apis/README.md#generateopenapispec) - Generate an OpenAPI specification for a particular Api. +* [generatePostmanCollection](docs/sdks/apis/README.md#generatepostmancollection) - Generate a Postman collection for a particular Api. +* [getAllApiVersions](docs/sdks/apis/README.md#getallapiversions) - Get all Api versions for a particular ApiEndpoint. +* [getApis](docs/sdks/apis/README.md#getapis) - Get a list of Apis for a given workspace +* [upsertApi](docs/sdks/apis/README.md#upsertapi) - Upsert an Api + +## [embeds](docs/sdks/embeds/README.md) + +* [getEmbedAccessToken](docs/sdks/embeds/README.md#getembedaccesstoken) - Get an embed access token for the current workspace. +* [getValidEmbedAccessTokens](docs/sdks/embeds/README.md#getvalidembedaccesstokens) - Get all valid embed access tokens for the current workspace. +* [revokeEmbedAccessToken](docs/sdks/embeds/README.md#revokeembedaccesstoken) - Revoke an embed access EmbedToken. + +## [metadata](docs/sdks/metadata/README.md) + +* [deleteVersionMetadata](docs/sdks/metadata/README.md#deleteversionmetadata) - Delete metadata for a particular apiID and versionID. +* [getVersionMetadata](docs/sdks/metadata/README.md#getversionmetadata) - Get all metadata for a particular apiID and versionID. +* [insertVersionMetadata](docs/sdks/metadata/README.md#insertversionmetadata) - Insert metadata for a particular apiID and versionID. + +## [plugins](docs/sdks/plugins/README.md) + +* [getPlugins](docs/sdks/plugins/README.md#getplugins) - Get all plugins for the current workspace. +* [runPlugin](docs/sdks/plugins/README.md#runplugin) - Run a plugin +* [upsertPlugin](docs/sdks/plugins/README.md#upsertplugin) - Upsert a plugin + +## [requests](docs/sdks/requests/README.md) + +* [generateRequestPostmanCollection](docs/sdks/requests/README.md#generaterequestpostmancollection) - Generate a Postman collection for a particular request. +* [getRequestFromEventLog](docs/sdks/requests/README.md#getrequestfromeventlog) - Get information about a particular request. +* [queryEventLog](docs/sdks/requests/README.md#queryeventlog) - Query the event log to retrieve a list of requests. + +## [schemas](docs/sdks/schemas/README.md) + +* [deleteSchema](docs/sdks/schemas/README.md#deleteschema) - Delete a particular schema revision for an Api. +* [downloadSchema](docs/sdks/schemas/README.md#downloadschema) - Download the latest schema for a particular apiID. +* [downloadSchemaRevision](docs/sdks/schemas/README.md#downloadschemarevision) - Download a particular schema revision for an Api. +* [getSchema](docs/sdks/schemas/README.md#getschema) - Get information about the latest schema. +* [getSchemaDiff](docs/sdks/schemas/README.md#getschemadiff) - Get a diff of two schema revisions for an Api. +* [getSchemaRevision](docs/sdks/schemas/README.md#getschemarevision) - Get information about a particular schema revision for an Api. +* [getSchemas](docs/sdks/schemas/README.md#getschemas) - Get information about all schemas associated with a particular apiID. +* [registerSchema](docs/sdks/schemas/README.md#registerschema) - Register a schema. + + + + + + + + + + +# Development + +## Maturity + +This SDK is in beta, and there may be breaking changes between versions without a major version update. Therefore, we recommend pinning usage +to a specific package version. This way, you can install the same version each time without breaking changes unless you are intentionally +looking for the latest version. + +## Contributions + +While we value open-source contributions to this SDK, this library is generated programmatically. +Feel free to open a PR or a Github issue as a proof of concept and we'll do our best to include it in a future release! + +### SDK Created by [Speakeasy](https://docs.speakeasyapi.dev/docs/using-speakeasy/client-sdks) diff --git a/speakeasy/RELEASES.md b/speakeasy/RELEASES.md new file mode 100644 index 0000000..9d9a6f3 --- /dev/null +++ b/speakeasy/RELEASES.md @@ -0,0 +1,11 @@ + + +## 2023-10-18 08:22:40 +### Changes +Based on: +- OpenAPI Doc 0.3.0 https://docs.speakeasyapi.dev/openapi.yaml +- Speakeasy CLI 1.101.0 (2.161.0) https://github.com/speakeasy-api/speakeasy +### Generated +- [typescript v0.1.0] speakeasy +### Releases +- [NPM v0.1.0] https://www.npmjs.com/package/openapi/v/0.1.0 - speakeasy \ No newline at end of file diff --git a/speakeasy/USAGE.md b/speakeasy/USAGE.md new file mode 100755 index 0000000..fc7e82f --- /dev/null +++ b/speakeasy/USAGE.md @@ -0,0 +1,27 @@ + + + +```typescript +import { SDK } from "openapi"; + +(async () => { + const sdk = new SDK({ + apiKey: "", + }); + + const res = await sdk.apis.getApis({ + metadata: { + South: ["Southwest"], + }, + op: { + and: false, + }, + }); + + if (res.statusCode == 200) { + // handle response + } +})(); + +``` + \ No newline at end of file diff --git a/speakeasy/docs/models/operations/deleteapiendpointrequest.md b/speakeasy/docs/models/operations/deleteapiendpointrequest.md new file mode 100755 index 0000000..1aab85e --- /dev/null +++ b/speakeasy/docs/models/operations/deleteapiendpointrequest.md @@ -0,0 +1,10 @@ +# DeleteApiEndpointRequest + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | +| `apiEndpointID` | *string* | :heavy_check_mark: | The ID of the ApiEndpoint to delete. | +| `apiID` | *string* | :heavy_check_mark: | The ID of the Api the ApiEndpoint belongs to. | +| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api the ApiEndpoint belongs to. | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/deleteapiendpointresponse.md b/speakeasy/docs/models/operations/deleteapiendpointresponse.md new file mode 100755 index 0000000..510836e --- /dev/null +++ b/speakeasy/docs/models/operations/deleteapiendpointresponse.md @@ -0,0 +1,11 @@ +# DeleteApiEndpointResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/deleteapirequest.md b/speakeasy/docs/models/operations/deleteapirequest.md new file mode 100755 index 0000000..5556d24 --- /dev/null +++ b/speakeasy/docs/models/operations/deleteapirequest.md @@ -0,0 +1,9 @@ +# DeleteApiRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | +| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to delete. | +| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api to delete. | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/deleteapiresponse.md b/speakeasy/docs/models/operations/deleteapiresponse.md new file mode 100755 index 0000000..5347b8f --- /dev/null +++ b/speakeasy/docs/models/operations/deleteapiresponse.md @@ -0,0 +1,11 @@ +# DeleteApiResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/deleteschemarequest.md b/speakeasy/docs/models/operations/deleteschemarequest.md new file mode 100755 index 0000000..3c928c6 --- /dev/null +++ b/speakeasy/docs/models/operations/deleteschemarequest.md @@ -0,0 +1,10 @@ +# DeleteSchemaRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | +| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to delete schemas for. | +| `revisionID` | *string* | :heavy_check_mark: | The revision ID of the schema to delete. | +| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api to delete metadata for. | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/deleteschemaresponse.md b/speakeasy/docs/models/operations/deleteschemaresponse.md new file mode 100755 index 0000000..785e598 --- /dev/null +++ b/speakeasy/docs/models/operations/deleteschemaresponse.md @@ -0,0 +1,11 @@ +# DeleteSchemaResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/deleteversionmetadatarequest.md b/speakeasy/docs/models/operations/deleteversionmetadatarequest.md new file mode 100755 index 0000000..4821fc5 --- /dev/null +++ b/speakeasy/docs/models/operations/deleteversionmetadatarequest.md @@ -0,0 +1,11 @@ +# DeleteVersionMetadataRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | +| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to delete metadata for. | +| `metaKey` | *string* | :heavy_check_mark: | The key of the metadata to delete. | +| `metaValue` | *string* | :heavy_check_mark: | The value of the metadata to delete. | +| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api to delete metadata for. | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/deleteversionmetadataresponse.md b/speakeasy/docs/models/operations/deleteversionmetadataresponse.md new file mode 100755 index 0000000..fec8e5c --- /dev/null +++ b/speakeasy/docs/models/operations/deleteversionmetadataresponse.md @@ -0,0 +1,11 @@ +# DeleteVersionMetadataResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/downloadschemarequest.md b/speakeasy/docs/models/operations/downloadschemarequest.md new file mode 100755 index 0000000..9151719 --- /dev/null +++ b/speakeasy/docs/models/operations/downloadschemarequest.md @@ -0,0 +1,9 @@ +# DownloadSchemaRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | +| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to download the schema for. | +| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api to delete metadata for. | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/downloadschemaresponse.md b/speakeasy/docs/models/operations/downloadschemaresponse.md new file mode 100755 index 0000000..d6a084f --- /dev/null +++ b/speakeasy/docs/models/operations/downloadschemaresponse.md @@ -0,0 +1,12 @@ +# DownloadSchemaResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response | +| `schema` | *Uint8Array* | :heavy_minus_sign: | OK | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/downloadschemarevisionrequest.md b/speakeasy/docs/models/operations/downloadschemarevisionrequest.md new file mode 100755 index 0000000..1ace8bb --- /dev/null +++ b/speakeasy/docs/models/operations/downloadschemarevisionrequest.md @@ -0,0 +1,10 @@ +# DownloadSchemaRevisionRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | +| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to retrieve schemas for. | +| `revisionID` | *string* | :heavy_check_mark: | The revision ID of the schema to retrieve. | +| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api to delete metadata for. | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/downloadschemarevisionresponse.md b/speakeasy/docs/models/operations/downloadschemarevisionresponse.md new file mode 100755 index 0000000..dbe5888 --- /dev/null +++ b/speakeasy/docs/models/operations/downloadschemarevisionresponse.md @@ -0,0 +1,12 @@ +# DownloadSchemaRevisionResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response | +| `schema` | *Uint8Array* | :heavy_minus_sign: | OK | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/findapiendpointrequest.md b/speakeasy/docs/models/operations/findapiendpointrequest.md new file mode 100755 index 0000000..38ca90c --- /dev/null +++ b/speakeasy/docs/models/operations/findapiendpointrequest.md @@ -0,0 +1,10 @@ +# FindApiEndpointRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | +| `apiID` | *string* | :heavy_check_mark: | The ID of the Api the ApiEndpoint belongs to. | +| `displayName` | *string* | :heavy_check_mark: | The displayName of the ApiEndpoint to find (set by operationId from OpenAPI schema). | +| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api the ApiEndpoint belongs to. | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/findapiendpointresponse.md b/speakeasy/docs/models/operations/findapiendpointresponse.md new file mode 100755 index 0000000..30448d6 --- /dev/null +++ b/speakeasy/docs/models/operations/findapiendpointresponse.md @@ -0,0 +1,12 @@ +# FindApiEndpointResponse + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | +| `apiEndpoint` | [shared.ApiEndpoint](../../models/shared/apiendpoint.md) | :heavy_minus_sign: | OK | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/generateopenapispecforapiendpointrequest.md b/speakeasy/docs/models/operations/generateopenapispecforapiendpointrequest.md new file mode 100755 index 0000000..b93ca88 --- /dev/null +++ b/speakeasy/docs/models/operations/generateopenapispecforapiendpointrequest.md @@ -0,0 +1,10 @@ +# GenerateOpenApiSpecForApiEndpointRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| `apiEndpointID` | *string* | :heavy_check_mark: | The ID of the ApiEndpoint to generate an OpenAPI specification for. | +| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to generate an OpenAPI specification for. | +| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api to generate an OpenAPI specification for. | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/generateopenapispecforapiendpointresponse.md b/speakeasy/docs/models/operations/generateopenapispecforapiendpointresponse.md new file mode 100755 index 0000000..2a8ab95 --- /dev/null +++ b/speakeasy/docs/models/operations/generateopenapispecforapiendpointresponse.md @@ -0,0 +1,12 @@ +# GenerateOpenApiSpecForApiEndpointResponse + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response | +| `generateOpenApiSpecDiff` | [shared.GenerateOpenApiSpecDiff](../../models/shared/generateopenapispecdiff.md) | :heavy_minus_sign: | OK | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/generateopenapispecrequest.md b/speakeasy/docs/models/operations/generateopenapispecrequest.md new file mode 100755 index 0000000..a5c7083 --- /dev/null +++ b/speakeasy/docs/models/operations/generateopenapispecrequest.md @@ -0,0 +1,9 @@ +# GenerateOpenApiSpecRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to generate an OpenAPI specification for. | +| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api to generate an OpenAPI specification for. | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/generateopenapispecresponse.md b/speakeasy/docs/models/operations/generateopenapispecresponse.md new file mode 100755 index 0000000..cd4de3b --- /dev/null +++ b/speakeasy/docs/models/operations/generateopenapispecresponse.md @@ -0,0 +1,12 @@ +# GenerateOpenApiSpecResponse + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response | +| `generateOpenApiSpecDiff` | [shared.GenerateOpenApiSpecDiff](../../models/shared/generateopenapispecdiff.md) | :heavy_minus_sign: | OK | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/generatepostmancollectionforapiendpointrequest.md b/speakeasy/docs/models/operations/generatepostmancollectionforapiendpointrequest.md new file mode 100755 index 0000000..6740ce7 --- /dev/null +++ b/speakeasy/docs/models/operations/generatepostmancollectionforapiendpointrequest.md @@ -0,0 +1,10 @@ +# GeneratePostmanCollectionForApiEndpointRequest + + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | +| `apiEndpointID` | *string* | :heavy_check_mark: | The ID of the ApiEndpoint to generate a Postman collection for. | +| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to generate a Postman collection for. | +| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api to generate a Postman collection for. | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/generatepostmancollectionforapiendpointresponse.md b/speakeasy/docs/models/operations/generatepostmancollectionforapiendpointresponse.md new file mode 100755 index 0000000..ac11c86 --- /dev/null +++ b/speakeasy/docs/models/operations/generatepostmancollectionforapiendpointresponse.md @@ -0,0 +1,12 @@ +# GeneratePostmanCollectionForApiEndpointResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response | +| `postmanCollection` | *Uint8Array* | :heavy_minus_sign: | OK | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/generatepostmancollectionrequest.md b/speakeasy/docs/models/operations/generatepostmancollectionrequest.md new file mode 100755 index 0000000..6b158e6 --- /dev/null +++ b/speakeasy/docs/models/operations/generatepostmancollectionrequest.md @@ -0,0 +1,9 @@ +# GeneratePostmanCollectionRequest + + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | +| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to generate a Postman collection for. | +| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api to generate a Postman collection for. | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/generatepostmancollectionresponse.md b/speakeasy/docs/models/operations/generatepostmancollectionresponse.md new file mode 100755 index 0000000..038dbf3 --- /dev/null +++ b/speakeasy/docs/models/operations/generatepostmancollectionresponse.md @@ -0,0 +1,12 @@ +# GeneratePostmanCollectionResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response | +| `postmanCollection` | *Uint8Array* | :heavy_minus_sign: | OK | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/generaterequestpostmancollectionrequest.md b/speakeasy/docs/models/operations/generaterequestpostmancollectionrequest.md new file mode 100755 index 0000000..5b0eecc --- /dev/null +++ b/speakeasy/docs/models/operations/generaterequestpostmancollectionrequest.md @@ -0,0 +1,8 @@ +# GenerateRequestPostmanCollectionRequest + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------- | ---------------------------------- | ---------------------------------- | ---------------------------------- | +| `requestID` | *string* | :heavy_check_mark: | The ID of the request to retrieve. | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/generaterequestpostmancollectionresponse.md b/speakeasy/docs/models/operations/generaterequestpostmancollectionresponse.md new file mode 100755 index 0000000..c3e879e --- /dev/null +++ b/speakeasy/docs/models/operations/generaterequestpostmancollectionresponse.md @@ -0,0 +1,12 @@ +# GenerateRequestPostmanCollectionResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response | +| `postmanCollection` | *Uint8Array* | :heavy_minus_sign: | OK | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/getallapiendpointsrequest.md b/speakeasy/docs/models/operations/getallapiendpointsrequest.md new file mode 100755 index 0000000..68d6193 --- /dev/null +++ b/speakeasy/docs/models/operations/getallapiendpointsrequest.md @@ -0,0 +1,8 @@ +# GetAllApiEndpointsRequest + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------- | ----------------------------------------------- | ----------------------------------------------- | ----------------------------------------------- | +| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to retrieve ApiEndpoints for. | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/getallapiendpointsresponse.md b/speakeasy/docs/models/operations/getallapiendpointsresponse.md new file mode 100755 index 0000000..39fea2b --- /dev/null +++ b/speakeasy/docs/models/operations/getallapiendpointsresponse.md @@ -0,0 +1,12 @@ +# GetAllApiEndpointsResponse + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | +| `apiEndpoints` | [shared.ApiEndpoint](../../models/shared/apiendpoint.md)[] | :heavy_minus_sign: | OK | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/getallapiversionsop.md b/speakeasy/docs/models/operations/getallapiversionsop.md new file mode 100755 index 0000000..6649bfa --- /dev/null +++ b/speakeasy/docs/models/operations/getallapiversionsop.md @@ -0,0 +1,10 @@ +# GetAllApiVersionsOp + +Configuration for filter operations + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- | +| `and` | *boolean* | :heavy_check_mark: | Whether to AND or OR the filters | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/getallapiversionsrequest.md b/speakeasy/docs/models/operations/getallapiversionsrequest.md new file mode 100755 index 0000000..f94c256 --- /dev/null +++ b/speakeasy/docs/models/operations/getallapiversionsrequest.md @@ -0,0 +1,10 @@ +# GetAllApiVersionsRequest + + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | +| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to retrieve. | +| `metadata` | Record | :heavy_minus_sign: | Metadata to filter Apis on | +| `op` | [GetAllApiVersionsOp](../../models/operations/getallapiversionsop.md) | :heavy_minus_sign: | Configuration for filter operations | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/getallapiversionsresponse.md b/speakeasy/docs/models/operations/getallapiversionsresponse.md new file mode 100755 index 0000000..7c17be3 --- /dev/null +++ b/speakeasy/docs/models/operations/getallapiversionsresponse.md @@ -0,0 +1,12 @@ +# GetAllApiVersionsResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | +| `apis` | [shared.Api](../../models/shared/api.md)[] | :heavy_minus_sign: | OK | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/getallforversionapiendpointsrequest.md b/speakeasy/docs/models/operations/getallforversionapiendpointsrequest.md new file mode 100755 index 0000000..aa0763a --- /dev/null +++ b/speakeasy/docs/models/operations/getallforversionapiendpointsrequest.md @@ -0,0 +1,9 @@ +# GetAllForVersionApiEndpointsRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | +| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to retrieve ApiEndpoints for. | +| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api to retrieve ApiEndpoints for. | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/getallforversionapiendpointsresponse.md b/speakeasy/docs/models/operations/getallforversionapiendpointsresponse.md new file mode 100755 index 0000000..87d0be9 --- /dev/null +++ b/speakeasy/docs/models/operations/getallforversionapiendpointsresponse.md @@ -0,0 +1,12 @@ +# GetAllForVersionApiEndpointsResponse + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | +| `apiEndpoints` | [shared.ApiEndpoint](../../models/shared/apiendpoint.md)[] | :heavy_minus_sign: | OK | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/getapiendpointrequest.md b/speakeasy/docs/models/operations/getapiendpointrequest.md new file mode 100755 index 0000000..1768fd4 --- /dev/null +++ b/speakeasy/docs/models/operations/getapiendpointrequest.md @@ -0,0 +1,10 @@ +# GetApiEndpointRequest + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | +| `apiEndpointID` | *string* | :heavy_check_mark: | The ID of the ApiEndpoint to retrieve. | +| `apiID` | *string* | :heavy_check_mark: | The ID of the Api the ApiEndpoint belongs to. | +| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api the ApiEndpoint belongs to. | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/getapiendpointresponse.md b/speakeasy/docs/models/operations/getapiendpointresponse.md new file mode 100755 index 0000000..2187ba8 --- /dev/null +++ b/speakeasy/docs/models/operations/getapiendpointresponse.md @@ -0,0 +1,12 @@ +# GetApiEndpointResponse + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | +| `apiEndpoint` | [shared.ApiEndpoint](../../models/shared/apiendpoint.md) | :heavy_minus_sign: | OK | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/getapisop.md b/speakeasy/docs/models/operations/getapisop.md new file mode 100755 index 0000000..a90a1b3 --- /dev/null +++ b/speakeasy/docs/models/operations/getapisop.md @@ -0,0 +1,10 @@ +# GetApisOp + +Configuration for filter operations + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- | +| `and` | *boolean* | :heavy_check_mark: | Whether to AND or OR the filters | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/getapisrequest.md b/speakeasy/docs/models/operations/getapisrequest.md new file mode 100755 index 0000000..e53766b --- /dev/null +++ b/speakeasy/docs/models/operations/getapisrequest.md @@ -0,0 +1,9 @@ +# GetApisRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | +| `metadata` | Record | :heavy_minus_sign: | Metadata to filter Apis on | +| `op` | [GetApisOp](../../models/operations/getapisop.md) | :heavy_minus_sign: | Configuration for filter operations | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/getapisresponse.md b/speakeasy/docs/models/operations/getapisresponse.md new file mode 100755 index 0000000..e0204b3 --- /dev/null +++ b/speakeasy/docs/models/operations/getapisresponse.md @@ -0,0 +1,12 @@ +# GetApisResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | +| `apis` | [shared.Api](../../models/shared/api.md)[] | :heavy_minus_sign: | OK | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/getembedaccesstokenrequest.md b/speakeasy/docs/models/operations/getembedaccesstokenrequest.md new file mode 100755 index 0000000..bf62ce0 --- /dev/null +++ b/speakeasy/docs/models/operations/getembedaccesstokenrequest.md @@ -0,0 +1,10 @@ +# GetEmbedAccessTokenRequest + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | +| `description` | *string* | :heavy_minus_sign: | The description of the embed access token. | +| `duration` | *number* | :heavy_minus_sign: | The duration (in minutes) of the embed access token. | +| `filters` | [shared.Filters](../../models/shared/filters.md) | :heavy_minus_sign: | The filter to apply to the query. | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/getembedaccesstokenresponse.md b/speakeasy/docs/models/operations/getembedaccesstokenresponse.md new file mode 100755 index 0000000..dbae08f --- /dev/null +++ b/speakeasy/docs/models/operations/getembedaccesstokenresponse.md @@ -0,0 +1,12 @@ +# GetEmbedAccessTokenResponse + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `embedAccessTokenResponse` | [shared.EmbedAccessTokenResponse](../../models/shared/embedaccesstokenresponse.md) | :heavy_minus_sign: | OK | +| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/getpluginsresponse.md b/speakeasy/docs/models/operations/getpluginsresponse.md new file mode 100755 index 0000000..af3bac5 --- /dev/null +++ b/speakeasy/docs/models/operations/getpluginsresponse.md @@ -0,0 +1,12 @@ +# GetPluginsResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response | +| `plugins` | [shared.Plugin](../../models/shared/plugin.md)[] | :heavy_minus_sign: | OK | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/getrequestfromeventlogrequest.md b/speakeasy/docs/models/operations/getrequestfromeventlogrequest.md new file mode 100755 index 0000000..272d0cc --- /dev/null +++ b/speakeasy/docs/models/operations/getrequestfromeventlogrequest.md @@ -0,0 +1,8 @@ +# GetRequestFromEventLogRequest + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------- | ---------------------------------- | ---------------------------------- | ---------------------------------- | +| `requestID` | *string* | :heavy_check_mark: | The ID of the request to retrieve. | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/getrequestfromeventlogresponse.md b/speakeasy/docs/models/operations/getrequestfromeventlogresponse.md new file mode 100755 index 0000000..9c032e5 --- /dev/null +++ b/speakeasy/docs/models/operations/getrequestfromeventlogresponse.md @@ -0,0 +1,12 @@ +# GetRequestFromEventLogResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | +| `unboundedRequest` | [shared.UnboundedRequest](../../models/shared/unboundedrequest.md) | :heavy_minus_sign: | OK | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/getschemadiffrequest.md b/speakeasy/docs/models/operations/getschemadiffrequest.md new file mode 100755 index 0000000..0d8c0da --- /dev/null +++ b/speakeasy/docs/models/operations/getschemadiffrequest.md @@ -0,0 +1,11 @@ +# GetSchemaDiffRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | +| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to retrieve schemas for. | +| `baseRevisionID` | *string* | :heavy_check_mark: | The base revision ID of the schema to retrieve. | +| `targetRevisionID` | *string* | :heavy_check_mark: | The target revision ID of the schema to retrieve. | +| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api to delete metadata for. | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/getschemadiffresponse.md b/speakeasy/docs/models/operations/getschemadiffresponse.md new file mode 100755 index 0000000..6f3c8f6 --- /dev/null +++ b/speakeasy/docs/models/operations/getschemadiffresponse.md @@ -0,0 +1,12 @@ +# GetSchemaDiffResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response | +| `schemaDiff` | [shared.SchemaDiff](../../models/shared/schemadiff.md) | :heavy_minus_sign: | OK | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/getschemarequest.md b/speakeasy/docs/models/operations/getschemarequest.md new file mode 100755 index 0000000..c33a815 --- /dev/null +++ b/speakeasy/docs/models/operations/getschemarequest.md @@ -0,0 +1,9 @@ +# GetSchemaRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | +| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to get the schema for. | +| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api to delete metadata for. | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/getschemaresponse.md b/speakeasy/docs/models/operations/getschemaresponse.md new file mode 100755 index 0000000..9f73e36 --- /dev/null +++ b/speakeasy/docs/models/operations/getschemaresponse.md @@ -0,0 +1,12 @@ +# GetSchemaResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response | +| `schema` | [shared.Schema](../../models/shared/schema.md) | :heavy_minus_sign: | OK | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/getschemarevisionrequest.md b/speakeasy/docs/models/operations/getschemarevisionrequest.md new file mode 100755 index 0000000..d3599b5 --- /dev/null +++ b/speakeasy/docs/models/operations/getschemarevisionrequest.md @@ -0,0 +1,10 @@ +# GetSchemaRevisionRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | +| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to retrieve schemas for. | +| `revisionID` | *string* | :heavy_check_mark: | The revision ID of the schema to retrieve. | +| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api to delete metadata for. | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/getschemarevisionresponse.md b/speakeasy/docs/models/operations/getschemarevisionresponse.md new file mode 100755 index 0000000..8122fda --- /dev/null +++ b/speakeasy/docs/models/operations/getschemarevisionresponse.md @@ -0,0 +1,12 @@ +# GetSchemaRevisionResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response | +| `schema` | [shared.Schema](../../models/shared/schema.md) | :heavy_minus_sign: | OK | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/getschemasrequest.md b/speakeasy/docs/models/operations/getschemasrequest.md new file mode 100755 index 0000000..ded921c --- /dev/null +++ b/speakeasy/docs/models/operations/getschemasrequest.md @@ -0,0 +1,9 @@ +# GetSchemasRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | +| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to retrieve schemas for. | +| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api to delete metadata for. | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/getschemasresponse.md b/speakeasy/docs/models/operations/getschemasresponse.md new file mode 100755 index 0000000..ad2aacf --- /dev/null +++ b/speakeasy/docs/models/operations/getschemasresponse.md @@ -0,0 +1,12 @@ +# GetSchemasResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response | +| `schemata` | [shared.Schema](../../models/shared/schema.md)[] | :heavy_minus_sign: | OK | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/getvalidembedaccesstokensresponse.md b/speakeasy/docs/models/operations/getvalidembedaccesstokensresponse.md new file mode 100755 index 0000000..4bc8851 --- /dev/null +++ b/speakeasy/docs/models/operations/getvalidembedaccesstokensresponse.md @@ -0,0 +1,12 @@ +# GetValidEmbedAccessTokensResponse + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `embedTokens` | [shared.EmbedToken](../../models/shared/embedtoken.md)[] | :heavy_minus_sign: | OK | +| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/getversionmetadatarequest.md b/speakeasy/docs/models/operations/getversionmetadatarequest.md new file mode 100755 index 0000000..d61d54e --- /dev/null +++ b/speakeasy/docs/models/operations/getversionmetadatarequest.md @@ -0,0 +1,9 @@ +# GetVersionMetadataRequest + + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | +| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to retrieve metadata for. | +| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api to retrieve metadata for. | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/getversionmetadataresponse.md b/speakeasy/docs/models/operations/getversionmetadataresponse.md new file mode 100755 index 0000000..42bc973 --- /dev/null +++ b/speakeasy/docs/models/operations/getversionmetadataresponse.md @@ -0,0 +1,12 @@ +# GetVersionMetadataResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | +| `versionMetadata` | [shared.VersionMetadata](../../models/shared/versionmetadata.md)[] | :heavy_minus_sign: | OK | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/insertversionmetadatarequest.md b/speakeasy/docs/models/operations/insertversionmetadatarequest.md new file mode 100755 index 0000000..02e8a87 --- /dev/null +++ b/speakeasy/docs/models/operations/insertversionmetadatarequest.md @@ -0,0 +1,10 @@ +# InsertVersionMetadataRequest + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | +| `versionMetadataInput` | [shared.VersionMetadataInput](../../models/shared/versionmetadatainput.md) | :heavy_check_mark: | A JSON representation of the metadata to insert. | +| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to insert metadata for. | +| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api to insert metadata for. | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/insertversionmetadataresponse.md b/speakeasy/docs/models/operations/insertversionmetadataresponse.md new file mode 100755 index 0000000..7e1fa16 --- /dev/null +++ b/speakeasy/docs/models/operations/insertversionmetadataresponse.md @@ -0,0 +1,12 @@ +# InsertVersionMetadataResponse + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | +| `versionMetadata` | [shared.VersionMetadata](../../models/shared/versionmetadata.md) | :heavy_minus_sign: | OK | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/queryeventlogrequest.md b/speakeasy/docs/models/operations/queryeventlogrequest.md new file mode 100755 index 0000000..2bf8295 --- /dev/null +++ b/speakeasy/docs/models/operations/queryeventlogrequest.md @@ -0,0 +1,8 @@ +# QueryEventLogRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | +| `filters` | [shared.Filters](../../models/shared/filters.md) | :heavy_minus_sign: | The filter to apply to the query. | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/queryeventlogresponse.md b/speakeasy/docs/models/operations/queryeventlogresponse.md new file mode 100755 index 0000000..c2b22a5 --- /dev/null +++ b/speakeasy/docs/models/operations/queryeventlogresponse.md @@ -0,0 +1,12 @@ +# QueryEventLogResponse + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | +| `boundedRequests` | [shared.BoundedRequest](../../models/shared/boundedrequest.md)[] | :heavy_minus_sign: | OK | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/registerschemarequest.md b/speakeasy/docs/models/operations/registerschemarequest.md new file mode 100755 index 0000000..bb89263 --- /dev/null +++ b/speakeasy/docs/models/operations/registerschemarequest.md @@ -0,0 +1,10 @@ +# RegisterSchemaRequest + + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| `requestBody` | [RegisterSchemaRequestBody](../../models/operations/registerschemarequestbody.md) | :heavy_check_mark: | The schema file to upload provided as a multipart/form-data file segment. | +| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to get the schema for. | +| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api to delete metadata for. | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/registerschemarequestbody.md b/speakeasy/docs/models/operations/registerschemarequestbody.md new file mode 100755 index 0000000..6bac149 --- /dev/null +++ b/speakeasy/docs/models/operations/registerschemarequestbody.md @@ -0,0 +1,10 @@ +# RegisterSchemaRequestBody + +The schema file to upload provided as a multipart/form-data file segment. + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | +| `file` | [RegisterSchemaRequestBodyFile](../../models/operations/registerschemarequestbodyfile.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/registerschemarequestbodyfile.md b/speakeasy/docs/models/operations/registerschemarequestbodyfile.md new file mode 100755 index 0000000..cf78080 --- /dev/null +++ b/speakeasy/docs/models/operations/registerschemarequestbodyfile.md @@ -0,0 +1,9 @@ +# RegisterSchemaRequestBodyFile + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `content` | *Uint8Array* | :heavy_check_mark: | N/A | +| `file` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/registerschemaresponse.md b/speakeasy/docs/models/operations/registerschemaresponse.md new file mode 100755 index 0000000..2e65b8d --- /dev/null +++ b/speakeasy/docs/models/operations/registerschemaresponse.md @@ -0,0 +1,11 @@ +# RegisterSchemaResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/revokeembedaccesstokenrequest.md b/speakeasy/docs/models/operations/revokeembedaccesstokenrequest.md new file mode 100755 index 0000000..8a6c1f7 --- /dev/null +++ b/speakeasy/docs/models/operations/revokeembedaccesstokenrequest.md @@ -0,0 +1,8 @@ +# RevokeEmbedAccessTokenRequest + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | +| `tokenID` | *string* | :heavy_check_mark: | The ID of the EmbedToken to revoke. | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/revokeembedaccesstokenresponse.md b/speakeasy/docs/models/operations/revokeembedaccesstokenresponse.md new file mode 100755 index 0000000..85f4ef5 --- /dev/null +++ b/speakeasy/docs/models/operations/revokeembedaccesstokenresponse.md @@ -0,0 +1,11 @@ +# RevokeEmbedAccessTokenResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/runpluginrequest.md b/speakeasy/docs/models/operations/runpluginrequest.md new file mode 100755 index 0000000..fc49da4 --- /dev/null +++ b/speakeasy/docs/models/operations/runpluginrequest.md @@ -0,0 +1,9 @@ +# RunPluginRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | +| `filters` | [shared.Filters](../../models/shared/filters.md) | :heavy_minus_sign: | The filter to apply to the query. | +| `pluginID` | *string* | :heavy_check_mark: | The ID of the plugin to run. | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/runpluginresponse.md b/speakeasy/docs/models/operations/runpluginresponse.md new file mode 100755 index 0000000..9093d59 --- /dev/null +++ b/speakeasy/docs/models/operations/runpluginresponse.md @@ -0,0 +1,12 @@ +# RunPluginResponse + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | +| `boundedRequests` | [shared.BoundedRequest](../../models/shared/boundedrequest.md)[] | :heavy_minus_sign: | OK | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/upsertapiendpointrequest.md b/speakeasy/docs/models/operations/upsertapiendpointrequest.md new file mode 100755 index 0000000..56265b9 --- /dev/null +++ b/speakeasy/docs/models/operations/upsertapiendpointrequest.md @@ -0,0 +1,11 @@ +# UpsertApiEndpointRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `apiEndpointInput` | [shared.ApiEndpointInput](../../models/shared/apiendpointinput.md) | :heavy_check_mark: | A JSON representation of the ApiEndpoint to upsert. | +| `apiEndpointID` | *string* | :heavy_check_mark: | The ID of the ApiEndpoint to upsert. | +| `apiID` | *string* | :heavy_check_mark: | The ID of the Api the ApiEndpoint belongs to. | +| `versionID` | *string* | :heavy_check_mark: | The version ID of the Api the ApiEndpoint belongs to. | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/upsertapiendpointresponse.md b/speakeasy/docs/models/operations/upsertapiendpointresponse.md new file mode 100755 index 0000000..559dab4 --- /dev/null +++ b/speakeasy/docs/models/operations/upsertapiendpointresponse.md @@ -0,0 +1,12 @@ +# UpsertApiEndpointResponse + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | +| `apiEndpoint` | [shared.ApiEndpoint](../../models/shared/apiendpoint.md) | :heavy_minus_sign: | OK | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/upsertapirequest.md b/speakeasy/docs/models/operations/upsertapirequest.md new file mode 100755 index 0000000..dfcc7f4 --- /dev/null +++ b/speakeasy/docs/models/operations/upsertapirequest.md @@ -0,0 +1,9 @@ +# UpsertApiRequest + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `apiInput` | [shared.ApiInput](../../models/shared/apiinput.md) | :heavy_check_mark: | A JSON representation of the Api to upsert | +| `apiID` | *string* | :heavy_check_mark: | The ID of the Api to upsert. | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/upsertapiresponse.md b/speakeasy/docs/models/operations/upsertapiresponse.md new file mode 100755 index 0000000..6c3fcb3 --- /dev/null +++ b/speakeasy/docs/models/operations/upsertapiresponse.md @@ -0,0 +1,12 @@ +# UpsertApiResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | +| `api` | [shared.Api](../../models/shared/api.md) | :heavy_minus_sign: | OK | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/upsertpluginresponse.md b/speakeasy/docs/models/operations/upsertpluginresponse.md new file mode 100755 index 0000000..f9efa5f --- /dev/null +++ b/speakeasy/docs/models/operations/upsertpluginresponse.md @@ -0,0 +1,12 @@ +# UpsertPluginResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response | +| `plugin` | [shared.Plugin](../../models/shared/plugin.md) | :heavy_minus_sign: | OK | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/speakeasy/docs/models/operations/validateapikeyresponse.md b/speakeasy/docs/models/operations/validateapikeyresponse.md new file mode 100755 index 0000000..9b9efad --- /dev/null +++ b/speakeasy/docs/models/operations/validateapikeyresponse.md @@ -0,0 +1,11 @@ +# ValidateApiKeyResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `error` | [shared.ErrorT](../../models/shared/errort.md) | :heavy_minus_sign: | Default error response | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/speakeasy/docs/models/shared/api.md b/speakeasy/docs/models/shared/api.md new file mode 100755 index 0000000..915561a --- /dev/null +++ b/speakeasy/docs/models/shared/api.md @@ -0,0 +1,17 @@ +# Api + +An Api is representation of a API (a collection of API Endpoints) within the Speakeasy Platform. + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | +| `apiId` | *string* | :heavy_check_mark: | The ID of this Api. This is a human-readable name (subject to change). | +| `createdAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | Creation timestamp. | +| `description` | *string* | :heavy_check_mark: | A detailed description of the Api. | +| `matched` | *boolean* | :heavy_minus_sign: | Determines if all the endpoints within the Api are found in the OpenAPI spec associated with the Api. | +| `metaData` | Record | :heavy_minus_sign: | A set of values associated with a meta_data key. This field is only set on get requests. | +| `updatedAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | Last update timestamp. | +| `versionId` | *string* | :heavy_check_mark: | The version ID of this Api. This is semantic version identifier. | +| `workspaceId` | *string* | :heavy_check_mark: | The workspace ID this Api belongs to. | \ No newline at end of file diff --git a/speakeasy/docs/models/shared/apiendpoint.md b/speakeasy/docs/models/shared/apiendpoint.md new file mode 100755 index 0000000..8b53d75 --- /dev/null +++ b/speakeasy/docs/models/shared/apiendpoint.md @@ -0,0 +1,20 @@ +# ApiEndpoint + +An ApiEndpoint is a description of an Endpoint for an API. + + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| `apiEndpointId` | *string* | :heavy_check_mark: | The ID of this ApiEndpoint. This is a hash of the method and path. | +| `apiId` | *string* | :heavy_check_mark: | The ID of the Api this ApiEndpoint belongs to. | +| `createdAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | Creation timestamp. | +| `description` | *string* | :heavy_check_mark: | A detailed description of the ApiEndpoint. | +| `displayName` | *string* | :heavy_check_mark: | A human-readable name for the ApiEndpoint. | +| `matched` | *boolean* | :heavy_minus_sign: | Determines if the endpoint was found in the OpenAPI spec associated with the parent Api. | +| `method` | *string* | :heavy_check_mark: | HTTP verb. | +| `path` | *string* | :heavy_check_mark: | Path that handles this Api. | +| `updatedAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | Last update timestamp. | +| `versionId` | *string* | :heavy_check_mark: | The version ID of the Api this ApiEndpoint belongs to. | +| `workspaceId` | *string* | :heavy_check_mark: | The workspace ID this ApiEndpoint belongs to. | \ No newline at end of file diff --git a/speakeasy/docs/models/shared/apiendpointinput.md b/speakeasy/docs/models/shared/apiendpointinput.md new file mode 100755 index 0000000..7846dbc --- /dev/null +++ b/speakeasy/docs/models/shared/apiendpointinput.md @@ -0,0 +1,15 @@ +# ApiEndpointInput + +An ApiEndpoint is a description of an Endpoint for an API. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `apiEndpointId` | *string* | :heavy_check_mark: | The ID of this ApiEndpoint. This is a hash of the method and path. | +| `description` | *string* | :heavy_check_mark: | A detailed description of the ApiEndpoint. | +| `displayName` | *string* | :heavy_check_mark: | A human-readable name for the ApiEndpoint. | +| `method` | *string* | :heavy_check_mark: | HTTP verb. | +| `path` | *string* | :heavy_check_mark: | Path that handles this Api. | +| `versionId` | *string* | :heavy_check_mark: | The version ID of the Api this ApiEndpoint belongs to. | \ No newline at end of file diff --git a/speakeasy/docs/models/shared/apiinput.md b/speakeasy/docs/models/shared/apiinput.md new file mode 100755 index 0000000..2890930 --- /dev/null +++ b/speakeasy/docs/models/shared/apiinput.md @@ -0,0 +1,13 @@ +# ApiInput + +An Api is representation of a API (a collection of API Endpoints) within the Speakeasy Platform. + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | +| `apiId` | *string* | :heavy_check_mark: | The ID of this Api. This is a human-readable name (subject to change). | +| `description` | *string* | :heavy_check_mark: | A detailed description of the Api. | +| `metaData` | Record | :heavy_minus_sign: | A set of values associated with a meta_data key. This field is only set on get requests. | +| `versionId` | *string* | :heavy_check_mark: | The version ID of this Api. This is semantic version identifier. | \ No newline at end of file diff --git a/speakeasy/docs/models/shared/boundedrequest.md b/speakeasy/docs/models/shared/boundedrequest.md new file mode 100755 index 0000000..d0269d8 --- /dev/null +++ b/speakeasy/docs/models/shared/boundedrequest.md @@ -0,0 +1,23 @@ +# BoundedRequest + +A BoundedRequest is a request that has been logged by the Speakeasy without the contents of the request. + + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| `apiEndpointId` | *string* | :heavy_check_mark: | The ID of the ApiEndpoint this request was made to. | +| `apiId` | *string* | :heavy_check_mark: | The ID of the Api this request was made to. | +| `createdAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | Creation timestamp. | +| `customerId` | *string* | :heavy_check_mark: | The ID of the customer that made this request. | +| `latency` | *number* | :heavy_check_mark: | The latency of the request. | +| `metadata` | [RequestMetadata](../../models/shared/requestmetadata.md)[] | :heavy_minus_sign: | Metadata associated with this request | +| `method` | *string* | :heavy_check_mark: | HTTP verb. | +| `path` | *string* | :heavy_check_mark: | The path of the request. | +| `requestFinishTime` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | The time the request finished. | +| `requestId` | *string* | :heavy_check_mark: | The ID of this request. | +| `requestStartTime` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | The time the request was made. | +| `status` | *number* | :heavy_check_mark: | The status code of the request. | +| `versionId` | *string* | :heavy_check_mark: | The version ID of the Api this request was made to. | +| `workspaceId` | *string* | :heavy_check_mark: | The workspace ID this request was made to. | \ No newline at end of file diff --git a/speakeasy/docs/models/shared/embedaccesstokenresponse.md b/speakeasy/docs/models/shared/embedaccesstokenresponse.md new file mode 100755 index 0000000..bbb9bd5 --- /dev/null +++ b/speakeasy/docs/models/shared/embedaccesstokenresponse.md @@ -0,0 +1,10 @@ +# EmbedAccessTokenResponse + +An EmbedAccessTokenResponse contains a token that can be used to embed a Speakeasy dashboard. + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `accessToken` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/speakeasy/docs/models/shared/embedtoken.md b/speakeasy/docs/models/shared/embedtoken.md new file mode 100755 index 0000000..654671e --- /dev/null +++ b/speakeasy/docs/models/shared/embedtoken.md @@ -0,0 +1,19 @@ +# EmbedToken + +A representation of an embed token granted for working with Speakeasy components. + + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| `createdAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | Creation timestamp. | +| `createdBy` | *string* | :heavy_check_mark: | The ID of the user that created this token. | +| `description` | *string* | :heavy_check_mark: | A detailed description of the EmbedToken. | +| `expiresAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | The time this token expires. | +| `filters` | *string* | :heavy_check_mark: | The filters applied to this token. | +| `id` | *string* | :heavy_check_mark: | The ID of this EmbedToken. | +| `lastUsed` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_minus_sign: | The last time this token was used. | +| `revokedAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_minus_sign: | The time this token was revoked. | +| `revokedBy` | *string* | :heavy_minus_sign: | The ID of the user that revoked this token. | +| `workspaceId` | *string* | :heavy_check_mark: | The workspace ID this token belongs to. | \ No newline at end of file diff --git a/speakeasy/docs/models/shared/errort.md b/speakeasy/docs/models/shared/errort.md new file mode 100755 index 0000000..4a34a22 --- /dev/null +++ b/speakeasy/docs/models/shared/errort.md @@ -0,0 +1,11 @@ +# ErrorT + +The `Status` type defines a logical error model + + +## Fields + +| Field | Type | Required | Description | +| --------------------------------- | --------------------------------- | --------------------------------- | --------------------------------- | +| `message` | *string* | :heavy_check_mark: | A developer-facing error message. | +| `statusCode` | *number* | :heavy_check_mark: | The HTTP status code | \ No newline at end of file diff --git a/speakeasy/docs/models/shared/filter.md b/speakeasy/docs/models/shared/filter.md new file mode 100755 index 0000000..7fbba85 --- /dev/null +++ b/speakeasy/docs/models/shared/filter.md @@ -0,0 +1,12 @@ +# Filter + +A filter is a key-value pair that can be used to filter a list of requests. + + +## Fields + +| Field | Type | Required | Description | +| --------------------------- | --------------------------- | --------------------------- | --------------------------- | +| `key` | *string* | :heavy_check_mark: | The key of the filter. | +| `operator` | *string* | :heavy_check_mark: | The operator of the filter. | +| `value` | *string* | :heavy_check_mark: | The value of the filter. | \ No newline at end of file diff --git a/speakeasy/docs/models/shared/filters.md b/speakeasy/docs/models/shared/filters.md new file mode 100755 index 0000000..f73f696 --- /dev/null +++ b/speakeasy/docs/models/shared/filters.md @@ -0,0 +1,13 @@ +# Filters + +Filters are used to query requests. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | +| `filters` | [Filter](../../models/shared/filter.md)[] | :heavy_check_mark: | A list of filters to apply to the query. | +| `limit` | *number* | :heavy_check_mark: | The maximum number of results to return. | +| `offset` | *number* | :heavy_check_mark: | The offset to start the query from. | +| `operator` | *string* | :heavy_check_mark: | The operator to use when combining filters. | \ No newline at end of file diff --git a/speakeasy/docs/models/shared/generateopenapispecdiff.md b/speakeasy/docs/models/shared/generateopenapispecdiff.md new file mode 100755 index 0000000..60baeed --- /dev/null +++ b/speakeasy/docs/models/shared/generateopenapispecdiff.md @@ -0,0 +1,9 @@ +# GenerateOpenApiSpecDiff + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `currentSchema` | *string* | :heavy_check_mark: | N/A | +| `newSchema` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/speakeasy/docs/models/shared/plugin.md b/speakeasy/docs/models/shared/plugin.md new file mode 100755 index 0000000..936fe5c --- /dev/null +++ b/speakeasy/docs/models/shared/plugin.md @@ -0,0 +1,16 @@ +# Plugin + +A plugin is a short script that is run against ingested requests + + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| `code` | *string* | :heavy_check_mark: | N/A | +| `createdAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_minus_sign: | N/A | +| `evalHash` | *string* | :heavy_minus_sign: | N/A | +| `pluginId` | *string* | :heavy_check_mark: | N/A | +| `title` | *string* | :heavy_check_mark: | N/A | +| `updatedAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_minus_sign: | N/A | +| `workspaceId` | *string* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/speakeasy/docs/models/shared/requestmetadata.md b/speakeasy/docs/models/shared/requestmetadata.md new file mode 100755 index 0000000..57fe5c1 --- /dev/null +++ b/speakeasy/docs/models/shared/requestmetadata.md @@ -0,0 +1,11 @@ +# RequestMetadata + +Key-Value pairs associated with a request + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `key` | *string* | :heavy_minus_sign: | N/A | +| `value` | *string* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/speakeasy/docs/models/shared/schema.md b/speakeasy/docs/models/shared/schema.md new file mode 100755 index 0000000..8f93b09 --- /dev/null +++ b/speakeasy/docs/models/shared/schema.md @@ -0,0 +1,15 @@ +# Schema + +A Schema represents an API schema for a particular Api and Version. + + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| `apiId` | *string* | :heavy_check_mark: | The ID of the Api this Schema belongs to. | +| `createdAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | Creation timestamp. | +| `description` | *string* | :heavy_check_mark: | A detailed description of the Schema. | +| `revisionId` | *string* | :heavy_check_mark: | An ID referencing this particular revision of the Schema. | +| `versionId` | *string* | :heavy_check_mark: | The version ID of the Api this Schema belongs to. | +| `workspaceId` | *string* | :heavy_check_mark: | The workspace ID this Schema belongs to. | \ No newline at end of file diff --git a/speakeasy/docs/models/shared/schemadiff.md b/speakeasy/docs/models/shared/schemadiff.md new file mode 100755 index 0000000..e9f0531 --- /dev/null +++ b/speakeasy/docs/models/shared/schemadiff.md @@ -0,0 +1,12 @@ +# SchemaDiff + +A SchemaDiff represents a diff of two Schemas. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `additions` | *string*[] | :heavy_check_mark: | Holds every addition change in the diff. | +| `deletions` | *string*[] | :heavy_check_mark: | Holds every deletion change in the diff. | +| `modifications` | Record | :heavy_check_mark: | Holds every modification change in the diff. | \ No newline at end of file diff --git a/speakeasy/docs/models/shared/schemadiffvaluechange.md b/speakeasy/docs/models/shared/schemadiffvaluechange.md new file mode 100755 index 0000000..6d1ef6b --- /dev/null +++ b/speakeasy/docs/models/shared/schemadiffvaluechange.md @@ -0,0 +1,9 @@ +# SchemaDiffValueChange + + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | +| `from` | *string* | :heavy_check_mark: | Represents the previous value of the element. | +| `to` | *string* | :heavy_check_mark: | Represents the current value of the element. | \ No newline at end of file diff --git a/speakeasy/docs/models/shared/security.md b/speakeasy/docs/models/shared/security.md new file mode 100755 index 0000000..726a39d --- /dev/null +++ b/speakeasy/docs/models/shared/security.md @@ -0,0 +1,8 @@ +# Security + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| `apiKey` | *string* | :heavy_check_mark: | N/A | | \ No newline at end of file diff --git a/speakeasy/docs/models/shared/unboundedrequest.md b/speakeasy/docs/models/shared/unboundedrequest.md new file mode 100755 index 0000000..cea0835 --- /dev/null +++ b/speakeasy/docs/models/shared/unboundedrequest.md @@ -0,0 +1,14 @@ +# UnboundedRequest + +An UnboundedRequest represents the HAR content capture by Speakeasy when logging a request. + + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| `createdAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | Creation timestamp. | +| `har` | *string* | :heavy_check_mark: | The HAR content of the request. | +| `harSizeBytes` | *number* | :heavy_check_mark: | The size of the HAR content in bytes. | +| `requestId` | *string* | :heavy_check_mark: | The ID of this request. | +| `workspaceId` | *string* | :heavy_check_mark: | The workspace ID this request was made to. | \ No newline at end of file diff --git a/speakeasy/docs/models/shared/versionmetadata.md b/speakeasy/docs/models/shared/versionmetadata.md new file mode 100755 index 0000000..7348c88 --- /dev/null +++ b/speakeasy/docs/models/shared/versionmetadata.md @@ -0,0 +1,15 @@ +# VersionMetadata + +A set of keys and associated values, attached to a particular version of an Api. + + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| `apiId` | *string* | :heavy_check_mark: | The ID of the Api this Metadata belongs to. | +| `createdAt` | [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) | :heavy_check_mark: | Creation timestamp. | +| `metaKey` | *string* | :heavy_check_mark: | The key for this metadata. | +| `metaValue` | *string* | :heavy_check_mark: | One of the values for this metadata. | +| `versionId` | *string* | :heavy_check_mark: | The version ID of the Api this Metadata belongs to. | +| `workspaceId` | *string* | :heavy_check_mark: | The workspace ID this Metadata belongs to. | \ No newline at end of file diff --git a/speakeasy/docs/models/shared/versionmetadatainput.md b/speakeasy/docs/models/shared/versionmetadatainput.md new file mode 100755 index 0000000..b556498 --- /dev/null +++ b/speakeasy/docs/models/shared/versionmetadatainput.md @@ -0,0 +1,11 @@ +# VersionMetadataInput + +A set of keys and associated values, attached to a particular version of an Api. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | +| `metaKey` | *string* | :heavy_check_mark: | The key for this metadata. | +| `metaValue` | *string* | :heavy_check_mark: | One of the values for this metadata. | \ No newline at end of file diff --git a/speakeasy/docs/sdks/apiendpoints/README.md b/speakeasy/docs/sdks/apiendpoints/README.md new file mode 100755 index 0000000..afe436c --- /dev/null +++ b/speakeasy/docs/sdks/apiendpoints/README.md @@ -0,0 +1,336 @@ +# ApiEndpoints +(*apiEndpoints*) + +## Overview + +REST APIs for managing ApiEndpoint entities + +### Available Operations + +* [deleteApiEndpoint](#deleteapiendpoint) - Delete an ApiEndpoint. +* [findApiEndpoint](#findapiendpoint) - Find an ApiEndpoint via its displayName. +* [generateOpenApiSpecForApiEndpoint](#generateopenapispecforapiendpoint) - Generate an OpenAPI specification for a particular ApiEndpoint. +* [generatePostmanCollectionForApiEndpoint](#generatepostmancollectionforapiendpoint) - Generate a Postman collection for a particular ApiEndpoint. +* [getAllApiEndpoints](#getallapiendpoints) - Get all Api endpoints for a particular apiID. +* [getAllForVersionApiEndpoints](#getallforversionapiendpoints) - Get all ApiEndpoints for a particular apiID and versionID. +* [getApiEndpoint](#getapiendpoint) - Get an ApiEndpoint. +* [upsertApiEndpoint](#upsertapiendpoint) - Upsert an ApiEndpoint. + +## deleteApiEndpoint + +Delete an ApiEndpoint. This will also delete all associated Request Logs (if using a Postgres datastore). + +### Example Usage + +```typescript +import { SDK } from "openapi"; + +(async() => { + const sdk = new SDK({ + apiKey: "", + }); + + const res = await sdk.apiEndpoints.deleteApiEndpoint({ + apiEndpointID: "blue", + apiID: "Gasoline", + versionID: "Southwest", + }); + + if (res.statusCode == 200) { + // handle response + } +})(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | +| `request` | [operations.DeleteApiEndpointRequest](../../models/operations/deleteapiendpointrequest.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. | + + +### Response + +**Promise<[operations.DeleteApiEndpointResponse](../../models/operations/deleteapiendpointresponse.md)>** + + +## findApiEndpoint + +Find an ApiEndpoint via its displayName (set by operationId from a registered OpenAPI schema). +This is useful for finding the ID of an ApiEndpoint to use in the /v1/apis/{apiID}/version/{versionID}/api_endpoints/{apiEndpointID} endpoints. + +### Example Usage + +```typescript +import { SDK } from "openapi"; + +(async() => { + const sdk = new SDK({ + apiKey: "", + }); + + const res = await sdk.apiEndpoints.findApiEndpoint({ + apiID: "Cotton", + displayName: "Chief", + versionID: "Wooden", + }); + + if (res.statusCode == 200) { + // handle response + } +})(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| `request` | [operations.FindApiEndpointRequest](../../models/operations/findapiendpointrequest.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. | + + +### Response + +**Promise<[operations.FindApiEndpointResponse](../../models/operations/findapiendpointresponse.md)>** + + +## generateOpenApiSpecForApiEndpoint + +This endpoint will generate a new operation in any registered OpenAPI document if the operation does not already exist in the document. +Returns the original document and the newly generated document allowing a diff to be performed to see what has changed. + +### Example Usage + +```typescript +import { SDK } from "openapi"; + +(async() => { + const sdk = new SDK({ + apiKey: "", + }); + + const res = await sdk.apiEndpoints.generateOpenApiSpecForApiEndpoint({ + apiEndpointID: "Mazda", + apiID: "web", + versionID: "explicabo", + }); + + if (res.statusCode == 200) { + // handle response + } +})(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | +| `request` | [operations.GenerateOpenApiSpecForApiEndpointRequest](../../models/operations/generateopenapispecforapiendpointrequest.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. | + + +### Response + +**Promise<[operations.GenerateOpenApiSpecForApiEndpointResponse](../../models/operations/generateopenapispecforapiendpointresponse.md)>** + + +## generatePostmanCollectionForApiEndpoint + +Generates a postman collection that allows the endpoint to be called from postman variables produced for any path/query/header parameters included in the OpenAPI document. + +### Example Usage + +```typescript +import { SDK } from "openapi"; + +(async() => { + const sdk = new SDK({ + apiKey: "", + }); + + const res = await sdk.apiEndpoints.generatePostmanCollectionForApiEndpoint({ + apiEndpointID: "indigo", + apiID: "barring", + versionID: "Senior", + }); + + if (res.statusCode == 200) { + // handle response + } +})(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| `request` | [operations.GeneratePostmanCollectionForApiEndpointRequest](../../models/operations/generatepostmancollectionforapiendpointrequest.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. | + + +### Response + +**Promise<[operations.GeneratePostmanCollectionForApiEndpointResponse](../../models/operations/generatepostmancollectionforapiendpointresponse.md)>** + + +## getAllApiEndpoints + +Get all Api endpoints for a particular apiID. + +### Example Usage + +```typescript +import { SDK } from "openapi"; + +(async() => { + const sdk = new SDK({ + apiKey: "", + }); + + const res = await sdk.apiEndpoints.getAllApiEndpoints({ + apiID: "unless", + }); + + if (res.statusCode == 200) { + // handle response + } +})(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| `request` | [operations.GetAllApiEndpointsRequest](../../models/operations/getallapiendpointsrequest.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. | + + +### Response + +**Promise<[operations.GetAllApiEndpointsResponse](../../models/operations/getallapiendpointsresponse.md)>** + + +## getAllForVersionApiEndpoints + +Get all ApiEndpoints for a particular apiID and versionID. + +### Example Usage + +```typescript +import { SDK } from "openapi"; + +(async() => { + const sdk = new SDK({ + apiKey: "", + }); + + const res = await sdk.apiEndpoints.getAllForVersionApiEndpoints({ + apiID: "now", + versionID: "Diesel", + }); + + if (res.statusCode == 200) { + // handle response + } +})(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | +| `request` | [operations.GetAllForVersionApiEndpointsRequest](../../models/operations/getallforversionapiendpointsrequest.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. | + + +### Response + +**Promise<[operations.GetAllForVersionApiEndpointsResponse](../../models/operations/getallforversionapiendpointsresponse.md)>** + + +## getApiEndpoint + +Get an ApiEndpoint. + +### Example Usage + +```typescript +import { SDK } from "openapi"; + +(async() => { + const sdk = new SDK({ + apiKey: "", + }); + + const res = await sdk.apiEndpoints.getApiEndpoint({ + apiEndpointID: "flog", + apiID: "synthesize", + versionID: "Barium", + }); + + if (res.statusCode == 200) { + // handle response + } +})(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | +| `request` | [operations.GetApiEndpointRequest](../../models/operations/getapiendpointrequest.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. | + + +### Response + +**Promise<[operations.GetApiEndpointResponse](../../models/operations/getapiendpointresponse.md)>** + + +## upsertApiEndpoint + +Upsert an ApiEndpoint. If the ApiEndpoint does not exist it will be created, otherwise it will be updated. + +### Example Usage + +```typescript +import { SDK } from "openapi"; + +(async() => { + const sdk = new SDK({ + apiKey: "", + }); + + const res = await sdk.apiEndpoints.upsertApiEndpoint({ + apiEndpointInput: { + apiEndpointId: "Facilitator", + description: "Cross-group bottom-line productivity", + displayName: "nor", + method: "Northwest", + path: "/private", + versionId: "what", + }, + apiEndpointID: "Trans", + apiID: "Kia", + versionID: "Electronic", + }); + + if (res.statusCode == 200) { + // handle response + } +})(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | +| `request` | [operations.UpsertApiEndpointRequest](../../models/operations/upsertapiendpointrequest.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. | + + +### Response + +**Promise<[operations.UpsertApiEndpointResponse](../../models/operations/upsertapiendpointresponse.md)>** + diff --git a/speakeasy/docs/sdks/apis/README.md b/speakeasy/docs/sdks/apis/README.md new file mode 100755 index 0000000..d55b792 --- /dev/null +++ b/speakeasy/docs/sdks/apis/README.md @@ -0,0 +1,269 @@ +# Apis +(*apis*) + +## Overview + +REST APIs for managing Api entities + +### Available Operations + +* [deleteApi](#deleteapi) - Delete an Api. +* [generateOpenApiSpec](#generateopenapispec) - Generate an OpenAPI specification for a particular Api. +* [generatePostmanCollection](#generatepostmancollection) - Generate a Postman collection for a particular Api. +* [getAllApiVersions](#getallapiversions) - Get all Api versions for a particular ApiEndpoint. +* [getApis](#getapis) - Get a list of Apis for a given workspace +* [upsertApi](#upsertapi) - Upsert an Api + +## deleteApi + +Delete a particular version of an Api. The will also delete all associated ApiEndpoints, Metadata, Schemas & Request Logs (if using a Postgres datastore). + +### Example Usage + +```typescript +import { SDK } from "openapi"; + +(async() => { + const sdk = new SDK({ + apiKey: "", + }); + + const res = await sdk.apis.deleteApi({ + apiID: "plaintive", + versionID: "THX", + }); + + if (res.statusCode == 200) { + // handle response + } +})(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | +| `request` | [operations.DeleteApiRequest](../../models/operations/deleteapirequest.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. | + + +### Response + +**Promise<[operations.DeleteApiResponse](../../models/operations/deleteapiresponse.md)>** + + +## generateOpenApiSpec + +This endpoint will generate any missing operations in any registered OpenAPI document if the operation does not already exist in the document. +Returns the original document and the newly generated document allowing a diff to be performed to see what has changed. + +### Example Usage + +```typescript +import { SDK } from "openapi"; + +(async() => { + const sdk = new SDK({ + apiKey: "", + }); + + const res = await sdk.apis.generateOpenApiSpec({ + apiID: "fixed", + versionID: "bandwidth", + }); + + if (res.statusCode == 200) { + // handle response + } +})(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | +| `request` | [operations.GenerateOpenApiSpecRequest](../../models/operations/generateopenapispecrequest.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. | + + +### Response + +**Promise<[operations.GenerateOpenApiSpecResponse](../../models/operations/generateopenapispecresponse.md)>** + + +## generatePostmanCollection + +Generates a postman collection containing all endpoints for a particular API. Includes variables produced for any path/query/header parameters included in the OpenAPI document. + +### Example Usage + +```typescript +import { SDK } from "openapi"; + +(async() => { + const sdk = new SDK({ + apiKey: "", + }); + + const res = await sdk.apis.generatePostmanCollection({ + apiID: "Paradigm", + versionID: "olive", + }); + + if (res.statusCode == 200) { + // handle response + } +})(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | +| `request` | [operations.GeneratePostmanCollectionRequest](../../models/operations/generatepostmancollectionrequest.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. | + + +### Response + +**Promise<[operations.GeneratePostmanCollectionResponse](../../models/operations/generatepostmancollectionresponse.md)>** + + +## getAllApiVersions + +Get all Api versions for a particular ApiEndpoint. +Supports filtering the versions based on metadata attributes. + +### Example Usage + +```typescript +import { SDK } from "openapi"; + +(async() => { + const sdk = new SDK({ + apiKey: "", + }); + + const res = await sdk.apis.getAllApiVersions({ + apiID: "azure", + metadata: { + "enhance": [ + "Garrison", + ], + }, + op: { + and: false, + }, + }); + + if (res.statusCode == 200) { + // handle response + } +})(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | +| `request` | [operations.GetAllApiVersionsRequest](../../models/operations/getallapiversionsrequest.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. | + + +### Response + +**Promise<[operations.GetAllApiVersionsResponse](../../models/operations/getallapiversionsresponse.md)>** + + +## getApis + +Get a list of all Apis and their versions for a given workspace. +Supports filtering the APIs based on metadata attributes. + +### Example Usage + +```typescript +import { SDK } from "openapi"; + +(async() => { + const sdk = new SDK({ + apiKey: "", + }); + + const res = await sdk.apis.getApis({ + metadata: { + "South": [ + "Southwest", + ], + }, + op: { + and: false, + }, + }); + + if (res.statusCode == 200) { + // handle response + } +})(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | +| `request` | [operations.GetApisRequest](../../models/operations/getapisrequest.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. | + + +### Response + +**Promise<[operations.GetApisResponse](../../models/operations/getapisresponse.md)>** + + +## upsertApi + +Upsert an Api. If the Api does not exist, it will be created. +If the Api exists, it will be updated. + +### Example Usage + +```typescript +import { SDK } from "openapi"; + +(async() => { + const sdk = new SDK({ + apiKey: "", + }); + + const res = await sdk.apis.upsertApi({ + apiInput: { + apiId: "Van", + description: "Front-line zero defect algorithm", + metaData: { + "Balanced": [ + "West", + ], + }, + versionId: "pixel", + }, + apiID: "Buckinghamshire", + }); + + if (res.statusCode == 200) { + // handle response + } +})(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | +| `request` | [operations.UpsertApiRequest](../../models/operations/upsertapirequest.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. | + + +### Response + +**Promise<[operations.UpsertApiResponse](../../models/operations/upsertapiresponse.md)>** + diff --git a/speakeasy/docs/sdks/embeds/README.md b/speakeasy/docs/sdks/embeds/README.md new file mode 100755 index 0000000..078bffe --- /dev/null +++ b/speakeasy/docs/sdks/embeds/README.md @@ -0,0 +1,132 @@ +# Embeds +(*embeds*) + +## Overview + +REST APIs for managing embeds + +### Available Operations + +* [getEmbedAccessToken](#getembedaccesstoken) - Get an embed access token for the current workspace. +* [getValidEmbedAccessTokens](#getvalidembedaccesstokens) - Get all valid embed access tokens for the current workspace. +* [revokeEmbedAccessToken](#revokeembedaccesstoken) - Revoke an embed access EmbedToken. + +## getEmbedAccessToken + +Returns an embed access token for the current workspace. This can be used to authenticate access to externally embedded content. +Filters can be applied allowing views to be filtered to things like particular customerIds. + +### Example Usage + +```typescript +import { SDK } from "openapi"; + +(async() => { + const sdk = new SDK({ + apiKey: "", + }); + + const res = await sdk.embeds.getEmbedAccessToken({ + filters: { + filters: [ + { + key: "", + operator: "along", + value: "quos", + }, + ], + limit: 263313, + offset: 411277, + operator: "male", + }, + }); + + if (res.statusCode == 200) { + // handle response + } +})(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | +| `request` | [operations.GetEmbedAccessTokenRequest](../../models/operations/getembedaccesstokenrequest.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. | + + +### Response + +**Promise<[operations.GetEmbedAccessTokenResponse](../../models/operations/getembedaccesstokenresponse.md)>** + + +## getValidEmbedAccessTokens + +Get all valid embed access tokens for the current workspace. + +### Example Usage + +```typescript +import { SDK } from "openapi"; + +(async() => { + const sdk = new SDK({ + apiKey: "", + }); + + const res = await sdk.embeds.getValidEmbedAccessTokens(); + + if (res.statusCode == 200) { + // handle response + } +})(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. | + + +### Response + +**Promise<[operations.GetValidEmbedAccessTokensResponse](../../models/operations/getvalidembedaccesstokensresponse.md)>** + + +## revokeEmbedAccessToken + +Revoke an embed access EmbedToken. + +### Example Usage + +```typescript +import { SDK } from "openapi"; + +(async() => { + const sdk = new SDK({ + apiKey: "", + }); + + const res = await sdk.embeds.revokeEmbedAccessToken({ + tokenID: "Ball", + }); + + if (res.statusCode == 200) { + // handle response + } +})(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | +| `request` | [operations.RevokeEmbedAccessTokenRequest](../../models/operations/revokeembedaccesstokenrequest.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. | + + +### Response + +**Promise<[operations.RevokeEmbedAccessTokenResponse](../../models/operations/revokeembedaccesstokenresponse.md)>** + diff --git a/speakeasy/docs/sdks/metadata/README.md b/speakeasy/docs/sdks/metadata/README.md new file mode 100755 index 0000000..1471a85 --- /dev/null +++ b/speakeasy/docs/sdks/metadata/README.md @@ -0,0 +1,132 @@ +# Metadata +(*metadata*) + +## Overview + +REST APIs for managing Version Metadata entities + +### Available Operations + +* [deleteVersionMetadata](#deleteversionmetadata) - Delete metadata for a particular apiID and versionID. +* [getVersionMetadata](#getversionmetadata) - Get all metadata for a particular apiID and versionID. +* [insertVersionMetadata](#insertversionmetadata) - Insert metadata for a particular apiID and versionID. + +## deleteVersionMetadata + +Delete metadata for a particular apiID and versionID. + +### Example Usage + +```typescript +import { SDK } from "openapi"; + +(async() => { + const sdk = new SDK({ + apiKey: "", + }); + + const res = await sdk.metadata.deleteVersionMetadata({ + apiID: "Hydrogen", + metaKey: "Cargo", + metaValue: "Minnetonka", + versionID: "communities", + }); + + if (res.statusCode == 200) { + // handle response + } +})(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | +| `request` | [operations.DeleteVersionMetadataRequest](../../models/operations/deleteversionmetadatarequest.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. | + + +### Response + +**Promise<[operations.DeleteVersionMetadataResponse](../../models/operations/deleteversionmetadataresponse.md)>** + + +## getVersionMetadata + +Get all metadata for a particular apiID and versionID. + +### Example Usage + +```typescript +import { SDK } from "openapi"; + +(async() => { + const sdk = new SDK({ + apiKey: "", + }); + + const res = await sdk.metadata.getVersionMetadata({ + apiID: "Bronze", + versionID: "Buckinghamshire", + }); + + if (res.statusCode == 200) { + // handle response + } +})(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| `request` | [operations.GetVersionMetadataRequest](../../models/operations/getversionmetadatarequest.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. | + + +### Response + +**Promise<[operations.GetVersionMetadataResponse](../../models/operations/getversionmetadataresponse.md)>** + + +## insertVersionMetadata + +Insert metadata for a particular apiID and versionID. + +### Example Usage + +```typescript +import { SDK } from "openapi"; + +(async() => { + const sdk = new SDK({ + apiKey: "", + }); + + const res = await sdk.metadata.insertVersionMetadata({ + versionMetadataInput: { + metaKey: "Borders", + metaValue: "Potassium", + }, + apiID: "Bedfordshire", + versionID: "Dram", + }); + + if (res.statusCode == 200) { + // handle response + } +})(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | +| `request` | [operations.InsertVersionMetadataRequest](../../models/operations/insertversionmetadatarequest.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. | + + +### Response + +**Promise<[operations.InsertVersionMetadataResponse](../../models/operations/insertversionmetadataresponse.md)>** + diff --git a/speakeasy/docs/sdks/plugins/README.md b/speakeasy/docs/sdks/plugins/README.md new file mode 100755 index 0000000..93fcb71 --- /dev/null +++ b/speakeasy/docs/sdks/plugins/README.md @@ -0,0 +1,135 @@ +# Plugins +(*plugins*) + +## Overview + +REST APIs for managing and running plugins + +### Available Operations + +* [getPlugins](#getplugins) - Get all plugins for the current workspace. +* [runPlugin](#runplugin) - Run a plugin +* [upsertPlugin](#upsertplugin) - Upsert a plugin + +## getPlugins + +Get all plugins for the current workspace. + +### Example Usage + +```typescript +import { SDK } from "openapi"; + +(async() => { + const sdk = new SDK({ + apiKey: "", + }); + + const res = await sdk.plugins.getPlugins(); + + if (res.statusCode == 200) { + // handle response + } +})(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. | + + +### Response + +**Promise<[operations.GetPluginsResponse](../../models/operations/getpluginsresponse.md)>** + + +## runPlugin + +Run a plugin + +### Example Usage + +```typescript +import { SDK } from "openapi"; + +(async() => { + const sdk = new SDK({ + apiKey: "", + }); + + const res = await sdk.plugins.runPlugin({ + filters: { + filters: [ + { + key: "", + operator: "Designer", + value: "Pickup", + }, + ], + limit: 455139, + offset: 173644, + operator: "Indiana", + }, + pluginID: "Chrysler", + }); + + if (res.statusCode == 200) { + // handle response + } +})(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | +| `request` | [operations.RunPluginRequest](../../models/operations/runpluginrequest.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. | + + +### Response + +**Promise<[operations.RunPluginResponse](../../models/operations/runpluginresponse.md)>** + + +## upsertPlugin + +Upsert a plugin + +### Example Usage + +```typescript +import { SDK } from "openapi"; + +(async() => { + const sdk = new SDK({ + apiKey: "", + }); + + const res = await sdk.plugins.upsertPlugin({ + code: "Fish", + pluginId: "Rock", + title: "North", + workspaceId: "exuding", + }); + + if (res.statusCode == 200) { + // handle response + } +})(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| `request` | [shared.Plugin](../../models/shared/plugin.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. | + + +### Response + +**Promise<[operations.UpsertPluginResponse](../../models/operations/upsertpluginresponse.md)>** + diff --git a/speakeasy/docs/sdks/requests/README.md b/speakeasy/docs/sdks/requests/README.md new file mode 100755 index 0000000..eb2db55 --- /dev/null +++ b/speakeasy/docs/sdks/requests/README.md @@ -0,0 +1,136 @@ +# Requests +(*requests*) + +## Overview + +REST APIs for retrieving request information + +### Available Operations + +* [generateRequestPostmanCollection](#generaterequestpostmancollection) - Generate a Postman collection for a particular request. +* [getRequestFromEventLog](#getrequestfromeventlog) - Get information about a particular request. +* [queryEventLog](#queryeventlog) - Query the event log to retrieve a list of requests. + +## generateRequestPostmanCollection + +Generates a Postman collection for a particular request. +Allowing it to be replayed with the same inputs that were captured by the SDK. + +### Example Usage + +```typescript +import { SDK } from "openapi"; + +(async() => { + const sdk = new SDK({ + apiKey: "", + }); + + const res = await sdk.requests.generateRequestPostmanCollection({ + requestID: "Architect", + }); + + if (res.statusCode == 200) { + // handle response + } +})(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | +| `request` | [operations.GenerateRequestPostmanCollectionRequest](../../models/operations/generaterequestpostmancollectionrequest.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. | + + +### Response + +**Promise<[operations.GenerateRequestPostmanCollectionResponse](../../models/operations/generaterequestpostmancollectionresponse.md)>** + + +## getRequestFromEventLog + +Get information about a particular request. + +### Example Usage + +```typescript +import { SDK } from "openapi"; + +(async() => { + const sdk = new SDK({ + apiKey: "", + }); + + const res = await sdk.requests.getRequestFromEventLog({ + requestID: "Chevrolet", + }); + + if (res.statusCode == 200) { + // handle response + } +})(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | +| `request` | [operations.GetRequestFromEventLogRequest](../../models/operations/getrequestfromeventlogrequest.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. | + + +### Response + +**Promise<[operations.GetRequestFromEventLogResponse](../../models/operations/getrequestfromeventlogresponse.md)>** + + +## queryEventLog + +Supports retrieving a list of request captured by the SDK for this workspace. +Allows the filtering of requests on a number of criteria such as ApiID, VersionID, Path, Method, etc. + +### Example Usage + +```typescript +import { SDK } from "openapi"; + +(async() => { + const sdk = new SDK({ + apiKey: "", + }); + + const res = await sdk.requests.queryEventLog({ + filters: { + filters: [ + { + key: "", + operator: "Cotton", + value: "Interactions", + }, + ], + limit: 6323, + offset: 788512, + operator: "Practical", + }, + }); + + if (res.statusCode == 200) { + // handle response + } +})(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | +| `request` | [operations.QueryEventLogRequest](../../models/operations/queryeventlogrequest.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. | + + +### Response + +**Promise<[operations.QueryEventLogResponse](../../models/operations/queryeventlogresponse.md)>** + diff --git a/speakeasy/docs/sdks/schemas/README.md b/speakeasy/docs/sdks/schemas/README.md new file mode 100755 index 0000000..621865e --- /dev/null +++ b/speakeasy/docs/sdks/schemas/README.md @@ -0,0 +1,336 @@ +# Schemas +(*schemas*) + +## Overview + +REST APIs for managing Schema entities + +### Available Operations + +* [deleteSchema](#deleteschema) - Delete a particular schema revision for an Api. +* [downloadSchema](#downloadschema) - Download the latest schema for a particular apiID. +* [downloadSchemaRevision](#downloadschemarevision) - Download a particular schema revision for an Api. +* [getSchema](#getschema) - Get information about the latest schema. +* [getSchemaDiff](#getschemadiff) - Get a diff of two schema revisions for an Api. +* [getSchemaRevision](#getschemarevision) - Get information about a particular schema revision for an Api. +* [getSchemas](#getschemas) - Get information about all schemas associated with a particular apiID. +* [registerSchema](#registerschema) - Register a schema. + +## deleteSchema + +Delete a particular schema revision for an Api. + +### Example Usage + +```typescript +import { SDK } from "openapi"; + +(async() => { + const sdk = new SDK({ + apiKey: "", + }); + + const res = await sdk.schemas.deleteSchema({ + apiID: "West", + revisionID: "Tricycle", + versionID: "Funk", + }); + + if (res.statusCode == 200) { + // handle response + } +})(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | +| `request` | [operations.DeleteSchemaRequest](../../models/operations/deleteschemarequest.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. | + + +### Response + +**Promise<[operations.DeleteSchemaResponse](../../models/operations/deleteschemaresponse.md)>** + + +## downloadSchema + +Download the latest schema for a particular apiID. + +### Example Usage + +```typescript +import { SDK } from "openapi"; + +(async() => { + const sdk = new SDK({ + apiKey: "", + }); + + const res = await sdk.schemas.downloadSchema({ + apiID: "SMTP", + versionID: "North", + }); + + if (res.statusCode == 200) { + // handle response + } +})(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | +| `request` | [operations.DownloadSchemaRequest](../../models/operations/downloadschemarequest.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. | + + +### Response + +**Promise<[operations.DownloadSchemaResponse](../../models/operations/downloadschemaresponse.md)>** + + +## downloadSchemaRevision + +Download a particular schema revision for an Api. + +### Example Usage + +```typescript +import { SDK } from "openapi"; + +(async() => { + const sdk = new SDK({ + apiKey: "", + }); + + const res = await sdk.schemas.downloadSchemaRevision({ + apiID: "Cargo", + revisionID: "hacking", + versionID: "firewall", + }); + + if (res.statusCode == 200) { + // handle response + } +})(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | +| `request` | [operations.DownloadSchemaRevisionRequest](../../models/operations/downloadschemarevisionrequest.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. | + + +### Response + +**Promise<[operations.DownloadSchemaRevisionResponse](../../models/operations/downloadschemarevisionresponse.md)>** + + +## getSchema + +Returns information about the last uploaded schema for a particular API version. +This won't include the schema itself, that can be retrieved via the downloadSchema operation. + +### Example Usage + +```typescript +import { SDK } from "openapi"; + +(async() => { + const sdk = new SDK({ + apiKey: "", + }); + + const res = await sdk.schemas.getSchema({ + apiID: "Handcrafted", + versionID: "Hybrid", + }); + + if (res.statusCode == 200) { + // handle response + } +})(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | +| `request` | [operations.GetSchemaRequest](../../models/operations/getschemarequest.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. | + + +### Response + +**Promise<[operations.GetSchemaResponse](../../models/operations/getschemaresponse.md)>** + + +## getSchemaDiff + +Get a diff of two schema revisions for an Api. + +### Example Usage + +```typescript +import { SDK } from "openapi"; + +(async() => { + const sdk = new SDK({ + apiKey: "", + }); + + const res = await sdk.schemas.getSchemaDiff({ + apiID: "North", + baseRevisionID: "Central", + targetRevisionID: "South", + versionID: "Van", + }); + + if (res.statusCode == 200) { + // handle response + } +})(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | +| `request` | [operations.GetSchemaDiffRequest](../../models/operations/getschemadiffrequest.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. | + + +### Response + +**Promise<[operations.GetSchemaDiffResponse](../../models/operations/getschemadiffresponse.md)>** + + +## getSchemaRevision + +Returns information about the last uploaded schema for a particular schema revision. +This won't include the schema itself, that can be retrieved via the downloadSchema operation. + +### Example Usage + +```typescript +import { SDK } from "openapi"; + +(async() => { + const sdk = new SDK({ + apiKey: "", + }); + + const res = await sdk.schemas.getSchemaRevision({ + apiID: "City", + revisionID: "web", + versionID: "sternly", + }); + + if (res.statusCode == 200) { + // handle response + } +})(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | +| `request` | [operations.GetSchemaRevisionRequest](../../models/operations/getschemarevisionrequest.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. | + + +### Response + +**Promise<[operations.GetSchemaRevisionResponse](../../models/operations/getschemarevisionresponse.md)>** + + +## getSchemas + +Returns information the schemas associated with a particular apiID. +This won't include the schemas themselves, they can be retrieved via the downloadSchema operation. + +### Example Usage + +```typescript +import { SDK } from "openapi"; + +(async() => { + const sdk = new SDK({ + apiKey: "", + }); + + const res = await sdk.schemas.getSchemas({ + apiID: "indigo", + versionID: "Fantastic", + }); + + if (res.statusCode == 200) { + // handle response + } +})(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | +| `request` | [operations.GetSchemasRequest](../../models/operations/getschemasrequest.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. | + + +### Response + +**Promise<[operations.GetSchemasResponse](../../models/operations/getschemasresponse.md)>** + + +## registerSchema + +Allows uploading a schema for a particular API version. +This will be used to populate ApiEndpoints and used as a base for any schema generation if present. + +### Example Usage + +```typescript +import { SDK } from "openapi"; + +(async() => { + const sdk = new SDK({ + apiKey: "", + }); + + const res = await sdk.schemas.registerSchema({ + requestBody: { + file: { + content: "mg|mf\".]!\" as bytes <<<>>>, + file: "Avon", + }, + }, + apiID: "Pants", + versionID: "Table", + }); + + if (res.statusCode == 200) { + // handle response + } +})(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | +| `request` | [operations.RegisterSchemaRequest](../../models/operations/registerschemarequest.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. | + + +### Response + +**Promise<[operations.RegisterSchemaResponse](../../models/operations/registerschemaresponse.md)>** + diff --git a/speakeasy/docs/sdks/sdk/README.md b/speakeasy/docs/sdks/sdk/README.md new file mode 100755 index 0000000..da6aad7 --- /dev/null +++ b/speakeasy/docs/sdks/sdk/README.md @@ -0,0 +1,46 @@ +# SDK + + +## Overview + +Speakeasy API: The Speakeasy API allows teams to manage common operations with their APIs + +The Speakeasy Platform Documentation + +### Available Operations + +* [validateApiKey](#validateapikey) - Validate the current api key. + +## validateApiKey + +Validate the current api key. + +### Example Usage + +```typescript +import { SDK } from "openapi"; + +(async() => { + const sdk = new SDK({ + apiKey: "", + }); + + const res = await sdk.sdk.validateApiKey(); + + if (res.statusCode == 200) { + // handle response + } +})(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. | + + +### Response + +**Promise<[operations.ValidateApiKeyResponse](../../models/operations/validateapikeyresponse.md)>** + diff --git a/speakeasy/files.gen b/speakeasy/files.gen new file mode 100755 index 0000000..1ece346 --- /dev/null +++ b/speakeasy/files.gen @@ -0,0 +1,181 @@ +src/sdk/apiendpoints.ts +src/sdk/apis.ts +src/sdk/embeds.ts +src/sdk/metadata.ts +src/sdk/plugins.ts +src/sdk/requests.ts +src/sdk/schemas.ts +src/sdk/sdk.ts +.eslintrc.yml +jest.config.js +package-lock.json +package.json +src/index.ts +src/internal/utils/contenttype.ts +src/internal/utils/headers.ts +src/internal/utils/index.ts +src/internal/utils/pathparams.ts +src/internal/utils/queryparams.ts +src/internal/utils/requestbody.ts +src/internal/utils/retries.ts +src/internal/utils/security.ts +src/internal/utils/utils.ts +src/sdk/index.ts +src/sdk/models/errors/sdkerror.ts +src/sdk/types/index.ts +src/sdk/types/rfcdate.ts +tsconfig.json +src/sdk/models/operations/deleteapiendpoint.ts +src/sdk/models/operations/findapiendpoint.ts +src/sdk/models/operations/generateopenapispecforapiendpoint.ts +src/sdk/models/operations/generatepostmancollectionforapiendpoint.ts +src/sdk/models/operations/getallapiendpoints.ts +src/sdk/models/operations/getallforversionapiendpoints.ts +src/sdk/models/operations/getapiendpoint.ts +src/sdk/models/operations/upsertapiendpoint.ts +src/sdk/models/operations/deleteapi.ts +src/sdk/models/operations/generateopenapispec.ts +src/sdk/models/operations/generatepostmancollection.ts +src/sdk/models/operations/getallapiversions.ts +src/sdk/models/operations/getapis.ts +src/sdk/models/operations/upsertapi.ts +src/sdk/models/operations/getembedaccesstoken.ts +src/sdk/models/operations/getvalidembedaccesstokens.ts +src/sdk/models/operations/revokeembedaccesstoken.ts +src/sdk/models/operations/deleteversionmetadata.ts +src/sdk/models/operations/getversionmetadata.ts +src/sdk/models/operations/insertversionmetadata.ts +src/sdk/models/operations/getplugins.ts +src/sdk/models/operations/runplugin.ts +src/sdk/models/operations/upsertplugin.ts +src/sdk/models/operations/generaterequestpostmancollection.ts +src/sdk/models/operations/getrequestfromeventlog.ts +src/sdk/models/operations/queryeventlog.ts +src/sdk/models/operations/deleteschema.ts +src/sdk/models/operations/downloadschema.ts +src/sdk/models/operations/downloadschemarevision.ts +src/sdk/models/operations/getschema.ts +src/sdk/models/operations/getschemadiff.ts +src/sdk/models/operations/getschemarevision.ts +src/sdk/models/operations/getschemas.ts +src/sdk/models/operations/registerschema.ts +src/sdk/models/operations/validateapikey.ts +src/sdk/models/operations/index.ts +src/sdk/models/shared/error.ts +src/sdk/models/shared/apiendpoint.ts +src/sdk/models/shared/generateopenapispecdiff.ts +src/sdk/models/shared/api.ts +src/sdk/models/shared/embedaccesstokenresponse.ts +src/sdk/models/shared/filters.ts +src/sdk/models/shared/filter.ts +src/sdk/models/shared/embedtoken.ts +src/sdk/models/shared/versionmetadata.ts +src/sdk/models/shared/plugin.ts +src/sdk/models/shared/boundedrequest.ts +src/sdk/models/shared/requestmetadata.ts +src/sdk/models/shared/unboundedrequest.ts +src/sdk/models/shared/schema.ts +src/sdk/models/shared/schemadiff.ts +src/sdk/models/shared/security.ts +src/sdk/models/shared/index.ts +src/sdk/models/errors/index.ts +USAGE.md +docs/models/operations/deleteapiendpointrequest.md +docs/models/operations/deleteapiendpointresponse.md +docs/models/operations/findapiendpointrequest.md +docs/models/operations/findapiendpointresponse.md +docs/models/operations/generateopenapispecforapiendpointrequest.md +docs/models/operations/generateopenapispecforapiendpointresponse.md +docs/models/operations/generatepostmancollectionforapiendpointrequest.md +docs/models/operations/generatepostmancollectionforapiendpointresponse.md +docs/models/operations/getallapiendpointsrequest.md +docs/models/operations/getallapiendpointsresponse.md +docs/models/operations/getallforversionapiendpointsrequest.md +docs/models/operations/getallforversionapiendpointsresponse.md +docs/models/operations/getapiendpointrequest.md +docs/models/operations/getapiendpointresponse.md +docs/models/operations/upsertapiendpointrequest.md +docs/models/operations/upsertapiendpointresponse.md +docs/models/operations/deleteapirequest.md +docs/models/operations/deleteapiresponse.md +docs/models/operations/generateopenapispecrequest.md +docs/models/operations/generateopenapispecresponse.md +docs/models/operations/generatepostmancollectionrequest.md +docs/models/operations/generatepostmancollectionresponse.md +docs/models/operations/getallapiversionsop.md +docs/models/operations/getallapiversionsrequest.md +docs/models/operations/getallapiversionsresponse.md +docs/models/operations/getapisop.md +docs/models/operations/getapisrequest.md +docs/models/operations/getapisresponse.md +docs/models/operations/upsertapirequest.md +docs/models/operations/upsertapiresponse.md +docs/models/operations/getembedaccesstokenrequest.md +docs/models/operations/getembedaccesstokenresponse.md +docs/models/operations/getvalidembedaccesstokensresponse.md +docs/models/operations/revokeembedaccesstokenrequest.md +docs/models/operations/revokeembedaccesstokenresponse.md +docs/models/operations/deleteversionmetadatarequest.md +docs/models/operations/deleteversionmetadataresponse.md +docs/models/operations/getversionmetadatarequest.md +docs/models/operations/getversionmetadataresponse.md +docs/models/operations/insertversionmetadatarequest.md +docs/models/operations/insertversionmetadataresponse.md +docs/models/operations/getpluginsresponse.md +docs/models/operations/runpluginrequest.md +docs/models/operations/runpluginresponse.md +docs/models/operations/upsertpluginresponse.md +docs/models/operations/generaterequestpostmancollectionrequest.md +docs/models/operations/generaterequestpostmancollectionresponse.md +docs/models/operations/getrequestfromeventlogrequest.md +docs/models/operations/getrequestfromeventlogresponse.md +docs/models/operations/queryeventlogrequest.md +docs/models/operations/queryeventlogresponse.md +docs/models/operations/deleteschemarequest.md +docs/models/operations/deleteschemaresponse.md +docs/models/operations/downloadschemarequest.md +docs/models/operations/downloadschemaresponse.md +docs/models/operations/downloadschemarevisionrequest.md +docs/models/operations/downloadschemarevisionresponse.md +docs/models/operations/getschemarequest.md +docs/models/operations/getschemaresponse.md +docs/models/operations/getschemadiffrequest.md +docs/models/operations/getschemadiffresponse.md +docs/models/operations/getschemarevisionrequest.md +docs/models/operations/getschemarevisionresponse.md +docs/models/operations/getschemasrequest.md +docs/models/operations/getschemasresponse.md +docs/models/operations/registerschemarequestbodyfile.md +docs/models/operations/registerschemarequestbody.md +docs/models/operations/registerschemarequest.md +docs/models/operations/registerschemaresponse.md +docs/models/operations/validateapikeyresponse.md +docs/models/shared/errort.md +docs/models/shared/apiendpointinput.md +docs/models/shared/apiendpoint.md +docs/models/shared/generateopenapispecdiff.md +docs/models/shared/apiinput.md +docs/models/shared/api.md +docs/models/shared/embedaccesstokenresponse.md +docs/models/shared/filters.md +docs/models/shared/filter.md +docs/models/shared/embedtoken.md +docs/models/shared/versionmetadatainput.md +docs/models/shared/versionmetadata.md +docs/models/shared/plugin.md +docs/models/shared/boundedrequest.md +docs/models/shared/requestmetadata.md +docs/models/shared/unboundedrequest.md +docs/models/shared/schema.md +docs/models/shared/schemadiffvaluechange.md +docs/models/shared/schemadiff.md +docs/models/shared/security.md +docs/sdks/sdk/README.md +docs/sdks/apiendpoints/README.md +docs/sdks/apis/README.md +docs/sdks/embeds/README.md +docs/sdks/metadata/README.md +docs/sdks/plugins/README.md +docs/sdks/requests/README.md +docs/sdks/schemas/README.md +.gitattributes \ No newline at end of file diff --git a/speakeasy/gen.yaml b/speakeasy/gen.yaml new file mode 100755 index 0000000..ae71986 --- /dev/null +++ b/speakeasy/gen.yaml @@ -0,0 +1,24 @@ +configVersion: 1.0.0 +management: + docChecksum: ba638b2ad28966c596e28321a2003686 + docVersion: 0.3.0 + speakeasyVersion: 1.101.0 + generationVersion: 2.161.0 +generation: + sdkClassName: SDK + singleTagPerOp: false +features: + typescript: + acceptHeaders: 2.81.1 + core: 2.90.4 + examples: 2.81.3 + globalSecurity: 2.82.0 + globalServerURLs: 2.82.0 + inputOutputModels: 2.81.1 + serverIDs: 2.81.1 +typescript: + version: 0.1.0 + author: Speakeasy + flattenGlobalSecurity: true + maxMethodParams: 0 + packageName: openapi diff --git a/speakeasy/jest.config.js b/speakeasy/jest.config.js new file mode 100755 index 0000000..e3f8611 --- /dev/null +++ b/speakeasy/jest.config.js @@ -0,0 +1,5 @@ +module.exports = { + preset: "ts-jest", + testEnvironment: "node", + testPathIgnorePatterns: ["/__tests__/helpers.ts", "/__tests__/common_helpers.ts"], +}; diff --git a/speakeasy/package-lock.json b/speakeasy/package-lock.json new file mode 100755 index 0000000..5c8cc3f --- /dev/null +++ b/speakeasy/package-lock.json @@ -0,0 +1,8809 @@ +{ + "name": "openapi", + "version": "0.1.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "openapi", + "version": "0.1.0", + "dependencies": { + "axios": "^1.1.3", + "class-transformer": "^0.5.1", + "form-data": "^4.0.0", + "reflect-metadata": "^0.1.13" + }, + "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" + } + }, + "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==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.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==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.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==", + "dev": true, + "engines": { + "node": ">=6.9.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==", + "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" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "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==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.3", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.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==", + "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" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "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==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/types": "^7.21.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "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==", + "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" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/types": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.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==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=6.9.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==", + "dev": true, + "engines": { + "node": ">=6.9.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==", + "dev": true, + "dependencies": { + "@babel/template": "^7.21.9", + "@babel/traverse": "^7.22.1", + "@babel/types": "^7.22.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "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_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==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "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, + "engines": { + "node": ">=0.8.0" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "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" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.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" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.21.4", + "@babel/parser": "^7.21.9", + "@babel/types": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "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==", + "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" + }, + "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_modules/@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, + "dependencies": { + "@babel/helper-string-parser": "^7.21.5", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "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_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": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.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, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "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==", + "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" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "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==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.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==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "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, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "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, + "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" + }, + "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_modules/@istanbuljs/load-nyc-config/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" + }, + "engines": { + "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" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "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, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "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, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.5.0.tgz", + "integrity": "sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==", + "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" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "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==", + "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" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "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==", + "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" + } + }, + "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==", + "dev": true, + "dependencies": { + "expect": "^29.5.0", + "jest-snapshot": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.4.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "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==", + "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" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.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==", + "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" + } + }, + "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==", + "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" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/schemas": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", + "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.25.16" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.15", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "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" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.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==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.5.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.5.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.5.0.tgz", + "integrity": "sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==", + "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" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", + "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", + "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_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" + }, + "engines": { + "node": ">=6.0.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==", + "dev": true, + "engines": { + "node": ">=6.0.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==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "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==", + "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==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "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==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "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, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "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==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "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==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "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==", + "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==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "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==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "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==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "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==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "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==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "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==", + "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" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "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 + } + } + }, + "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==", + "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" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "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==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.56.0", + "@typescript-eslint/visitor-keys": "5.56.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "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==", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "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==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "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==", + "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" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_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==", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.56.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "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==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "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_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==", + "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_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "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" + }, + "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==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.5.0", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "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_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": { + "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==", + "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" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "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" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/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" + } + }, + "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, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" + } + }, + "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, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "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, + "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" + } + }, + "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, + "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" + } + }, + "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" + } + }, + "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, + "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" + } + }, + "jest-mock": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.5.0.tgz", + "integrity": "sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==", + "dev": true, + "requires": { + "@jest/types": "^29.5.0", + "@types/node": "*", + "jest-util": "^29.5.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==", + "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 + }, + "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, + "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" + } + }, + "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, + "requires": { + "jest-regex-util": "^29.4.3", + "jest-snapshot": "^29.5.0" + } + }, + "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, + "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" + } + }, + "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, + "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" + } + }, + "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, + "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 + } + } + }, + "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, + "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" + } + }, + "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, + "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" + } + } + } + }, + "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 + }, + "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 + }, + "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": { + "argparse": "^2.0.1" + } + }, + "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==", + "dev": true + }, + "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": { + "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 + }, + "jsonpath": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.1.1.tgz", + "integrity": "sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==", + "requires": { + "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 + }, + "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": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.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": { + "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": { + "p-locate": "^5.0.0" + } + }, + "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": { + "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": { + "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": { + "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" + } + }, + "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": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "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": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "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": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "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": { + "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-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-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 + }, + "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 + }, + "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, + "requires": { + "path-key": "^3.0.0" + } + }, + "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": { + "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==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "p-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": { + "yocto-queue": "^0.1.0" + } + }, + "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": { + "p-limit": "^3.0.2" + } + }, + "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": { + "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": { + "callsites": "^3.0.0" + } + }, + "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": { + "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 + }, + "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 + }, + "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 + }, + "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": { + "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 + }, + "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" + }, + "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" + } + } + } + }, + "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 + } + } + }, + "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, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, + "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": { + "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 + }, + "resolve": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "dev": true, + "requires": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "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, + "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 + } + } + }, + "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 + }, + "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 + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "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": { + "glob": "^7.1.3" + } + }, + "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": { + "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==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "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": { + "shebang-regex": "^3.0.0" + } + }, + "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 + }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "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 + } + } + }, + "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": { + "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==", + "dev": true, + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } + }, + "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, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "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": { + "ansi-regex": "^5.0.1" + } + }, + "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 + }, + "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 + }, + "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": { + "has-flag": "^4.0.0" + } + }, + "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 + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "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": { + "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": { + "is-number": "^7.0.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 + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "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": { + "prelude-ls": "^1.2.1" + } + }, + "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": { + "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 + }, + "underscore": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", + "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==" + }, + "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, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "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": { + "punycode": "^2.1.0" + } + }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "v8-to-istanbul": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", + "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.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 + } + } + }, + "walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "requires": { + "makeerror": "1.0.12" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "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==" + }, + "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, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "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": { + "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": { + "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 + } + } +} diff --git a/speakeasy/package.json b/speakeasy/package.json new file mode 100755 index 0000000..cc526d0 --- /dev/null +++ b/speakeasy/package.json @@ -0,0 +1,37 @@ +{ + "name": "openapi", + "version": "0.1.0", + "author": "Speakeasy", + "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" + }, + "dependencies": { + "axios": "^1.1.3", + "jsonpath": "^1.1.1", + "class-transformer": "^0.5.1", + "form-data": "^4.0.0", + "reflect-metadata": "^0.1.13" + }, + "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" + }, + "main": "dist/index.js", + "files": [ + "dist", + "docs", + "README.md" + ], + "repository": { + "type": "git", + "url": "https://github.com/TristanSpeakEasy/sdk-mono-repo-test.git", + "directory": "speakeasy" + } +} diff --git a/speakeasy/src/index.ts b/speakeasy/src/index.ts new file mode 100755 index 0000000..3130314 --- /dev/null +++ b/speakeasy/src/index.ts @@ -0,0 +1,5 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +export * from "./sdk"; diff --git a/speakeasy/src/internal/utils/contenttype.ts b/speakeasy/src/internal/utils/contenttype.ts new file mode 100755 index 0000000..9aaafa9 --- /dev/null +++ b/speakeasy/src/internal/utils/contenttype.ts @@ -0,0 +1,33 @@ +/* + * 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/speakeasy/src/internal/utils/headers.ts b/speakeasy/src/internal/utils/headers.ts new file mode 100755 index 0000000..d570fda --- /dev/null +++ b/speakeasy/src/internal/utils/headers.ts @@ -0,0 +1,138 @@ +/* + * 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/speakeasy/src/internal/utils/index.ts b/speakeasy/src/internal/utils/index.ts new file mode 100755 index 0000000..db8bb23 --- /dev/null +++ b/speakeasy/src/internal/utils/index.ts @@ -0,0 +1,12 @@ +/* + * 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/speakeasy/src/internal/utils/pathparams.ts b/speakeasy/src/internal/utils/pathparams.ts new file mode 100755 index 0000000..cdc9d8c --- /dev/null +++ b/speakeasy/src/internal/utils/pathparams.ts @@ -0,0 +1,79 @@ +/* + * 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/speakeasy/src/internal/utils/queryparams.ts b/speakeasy/src/internal/utils/queryparams.ts new file mode 100755 index 0000000..90f5653 --- /dev/null +++ b/speakeasy/src/internal/utils/queryparams.ts @@ -0,0 +1,244 @@ +/* + * 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; + + return `${paramKey}${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; + + return `${paramKey}=${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/speakeasy/src/internal/utils/requestbody.ts b/speakeasy/src/internal/utils/requestbody.ts new file mode 100755 index 0000000..f7a1f55 --- /dev/null +++ b/speakeasy/src/internal/utils/requestbody.ts @@ -0,0 +1,383 @@ +/* + * 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 "../../sdk/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}`}, + encodeFormUrlEncodeData(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 encodeFormUrlEncodeData = (data: any): FormData => { + const formData: FormData = new FormData(); + const fieldNames: string[] = Object.getOwnPropertyNames(data); + + if (isNumberRecord(data) || isBooleanRecord(data) || isStringRecord(data)) { + fieldNames.forEach((fname) => { + formData.append(fname, String(data[fname])); + }); + } else { + fieldNames.forEach((fname) => { + const formAnn: string = Reflect.getMetadata("form", data, fname); + if (formAnn === null) { + return; + } + const formDecorator: FormDecorator = parseFormDecorator(formAnn); + + if (formDecorator.JSON) { + formData.append( + formDecorator.Name ?? fname, + JSON.stringify(data[fname]) + ); + return; + } + + if (formDecorator.Style === "form") { + let parsed: Record; + if (formDecorator.Explode === true) { + parsed = formExplode(fname, data[fname]); + } else { + parsed = formNotExplode(fname, data[fname]); + } + + Object.keys(parsed).forEach((key) => { + parsed[key].forEach((v) => formData.append(key, v)); + }); + return; + } + }); + } + return formData; +}; + +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/speakeasy/src/internal/utils/retries.ts b/speakeasy/src/internal/utils/retries.ts new file mode 100755 index 0000000..8fea21d --- /dev/null +++ b/speakeasy/src/internal/utils/retries.ts @@ -0,0 +1,181 @@ +/* + * 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; + + while (true) { /* eslint-disable-line no-constant-condition */ + 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/speakeasy/src/internal/utils/security.ts b/speakeasy/src/internal/utils/security.ts new file mode 100755 index 0000000..8f183b4 --- /dev/null +++ b/speakeasy/src/internal/utils/security.ts @@ -0,0 +1,251 @@ +/* + * 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; + 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/speakeasy/src/internal/utils/utils.ts b/speakeasy/src/internal/utils/utils.ts new file mode 100755 index 0000000..03daf88 --- /dev/null +++ b/speakeasy/src/internal/utils/utils.ts @@ -0,0 +1,404 @@ +/* + * 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 "../../sdk/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/speakeasy/src/sdk/apiendpoints.ts b/speakeasy/src/sdk/apiendpoints.ts new file mode 100755 index 0000000..66bf1ec --- /dev/null +++ b/speakeasy/src/sdk/apiendpoints.ts @@ -0,0 +1,758 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import * as utils from "../internal/utils"; +import * as errors from "./models/errors"; +import * as operations from "./models/operations"; +import * as shared from "./models/shared"; +import { SDKConfiguration } from "./sdk"; +import { AxiosInstance, AxiosRequestConfig, AxiosResponse, RawAxiosRequestHeaders } from "axios"; + +/** + * REST APIs for managing ApiEndpoint entities + */ +export enum GeneratePostmanCollectionForApiEndpointAcceptEnum { + applicationJson = "application/json", + applicationOctetStream = "application/octet-stream", +} + +export class ApiEndpoints { + private sdkConfiguration: SDKConfiguration; + + constructor(sdkConfig: SDKConfiguration) { + this.sdkConfiguration = sdkConfig; + } + + /** + * Delete an ApiEndpoint. + * + * @remarks + * Delete an ApiEndpoint. This will also delete all associated Request Logs (if using a Postgres datastore). + */ + async deleteApiEndpoint( + req: operations.DeleteApiEndpointRequest, + config?: AxiosRequestConfig + ): Promise { + if (!(req instanceof utils.SpeakeasyBase)) { + req = new operations.DeleteApiEndpointRequest(req); + } + + const baseURL: string = utils.templateUrl( + this.sdkConfiguration.serverURL, + this.sdkConfiguration.serverDefaults + ); + const url: string = utils.generateURL( + baseURL, + "/v1/apis/{apiID}/version/{versionID}/api_endpoints/{apiEndpointID}", + 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 shared.Security(globalSecurity); + } + const properties = utils.parseSecurityProperties(globalSecurity); + 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: url, + method: "delete", + headers: headers, + responseType: "arraybuffer", + ...config, + }); + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.DeleteApiEndpointResponse = new operations.DeleteApiEndpointResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + const decodedRes = new TextDecoder().decode(httpRes?.data); + switch (true) { + case httpRes?.status == 200: + break; + default: + if (utils.matchContentType(contentType, `application/json`)) { + res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + } + + return res; + } + + /** + * Find an ApiEndpoint via its displayName. + * + * @remarks + * Find an ApiEndpoint via its displayName (set by operationId from a registered OpenAPI schema). + * This is useful for finding the ID of an ApiEndpoint to use in the /v1/apis/{apiID}/version/{versionID}/api_endpoints/{apiEndpointID} endpoints. + */ + async findApiEndpoint( + req: operations.FindApiEndpointRequest, + config?: AxiosRequestConfig + ): Promise { + if (!(req instanceof utils.SpeakeasyBase)) { + req = new operations.FindApiEndpointRequest(req); + } + + const baseURL: string = utils.templateUrl( + this.sdkConfiguration.serverURL, + this.sdkConfiguration.serverDefaults + ); + const url: string = utils.generateURL( + baseURL, + "/v1/apis/{apiID}/version/{versionID}/api_endpoints/find/{displayName}", + 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 shared.Security(globalSecurity); + } + const properties = utils.parseSecurityProperties(globalSecurity); + 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: url, + method: "get", + headers: headers, + responseType: "arraybuffer", + ...config, + }); + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.FindApiEndpointResponse = new operations.FindApiEndpointResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + const decodedRes = new TextDecoder().decode(httpRes?.data); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/json`)) { + res.apiEndpoint = utils.objectToClass( + JSON.parse(decodedRes), + shared.ApiEndpoint + ); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + default: + if (utils.matchContentType(contentType, `application/json`)) { + res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + } + + return res; + } + + /** + * Generate an OpenAPI specification for a particular ApiEndpoint. + * + * @remarks + * This endpoint will generate a new operation in any registered OpenAPI document if the operation does not already exist in the document. + * Returns the original document and the newly generated document allowing a diff to be performed to see what has changed. + */ + async generateOpenApiSpecForApiEndpoint( + req: operations.GenerateOpenApiSpecForApiEndpointRequest, + config?: AxiosRequestConfig + ): Promise { + if (!(req instanceof utils.SpeakeasyBase)) { + req = new operations.GenerateOpenApiSpecForApiEndpointRequest(req); + } + + const baseURL: string = utils.templateUrl( + this.sdkConfiguration.serverURL, + this.sdkConfiguration.serverDefaults + ); + const url: string = utils.generateURL( + baseURL, + "/v1/apis/{apiID}/version/{versionID}/api_endpoints/{apiEndpointID}/generate/openapi", + 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 shared.Security(globalSecurity); + } + const properties = utils.parseSecurityProperties(globalSecurity); + 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: url, + method: "get", + headers: headers, + responseType: "arraybuffer", + ...config, + }); + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.GenerateOpenApiSpecForApiEndpointResponse = + new operations.GenerateOpenApiSpecForApiEndpointResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + const decodedRes = new TextDecoder().decode(httpRes?.data); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/json`)) { + res.generateOpenApiSpecDiff = utils.objectToClass( + JSON.parse(decodedRes), + shared.GenerateOpenApiSpecDiff + ); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + default: + if (utils.matchContentType(contentType, `application/json`)) { + res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + } + + return res; + } + + /** + * Generate a Postman collection for a particular ApiEndpoint. + * + * @remarks + * Generates a postman collection that allows the endpoint to be called from postman variables produced for any path/query/header parameters included in the OpenAPI document. + */ + async generatePostmanCollectionForApiEndpoint( + req: operations.GeneratePostmanCollectionForApiEndpointRequest, + config?: AxiosRequestConfig, + acceptHeaderOverride?: GeneratePostmanCollectionForApiEndpointAcceptEnum + ): Promise { + if (!(req instanceof utils.SpeakeasyBase)) { + req = new operations.GeneratePostmanCollectionForApiEndpointRequest(req); + } + + const baseURL: string = utils.templateUrl( + this.sdkConfiguration.serverURL, + this.sdkConfiguration.serverDefaults + ); + const url: string = utils.generateURL( + baseURL, + "/v1/apis/{apiID}/version/{versionID}/api_endpoints/{apiEndpointID}/generate/postman", + 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 shared.Security(globalSecurity); + } + const properties = utils.parseSecurityProperties(globalSecurity); + const headers: RawAxiosRequestHeaders = { ...config?.headers, ...properties.headers }; + if (acceptHeaderOverride !== undefined) { + headers["Accept"] = acceptHeaderOverride.toString(); + } else { + headers["Accept"] = "application/json;q=1, application/octet-stream;q=0"; + } + + headers["user-agent"] = this.sdkConfiguration.userAgent; + + const httpRes: AxiosResponse = await client.request({ + validateStatus: () => true, + url: url, + method: "get", + headers: headers, + responseType: "arraybuffer", + ...config, + }); + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.GeneratePostmanCollectionForApiEndpointResponse = + new operations.GeneratePostmanCollectionForApiEndpointResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + const decodedRes = new TextDecoder().decode(httpRes?.data); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/octet-stream`)) { + res.postmanCollection = httpRes?.data; + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + default: + if (utils.matchContentType(contentType, `application/json`)) { + res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + } + + return res; + } + + /** + * Get all Api endpoints for a particular apiID. + */ + async getAllApiEndpoints( + req: operations.GetAllApiEndpointsRequest, + config?: AxiosRequestConfig + ): Promise { + if (!(req instanceof utils.SpeakeasyBase)) { + req = new operations.GetAllApiEndpointsRequest(req); + } + + const baseURL: string = utils.templateUrl( + this.sdkConfiguration.serverURL, + this.sdkConfiguration.serverDefaults + ); + const url: string = utils.generateURL(baseURL, "/v1/apis/{apiID}/api_endpoints", 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 shared.Security(globalSecurity); + } + const properties = utils.parseSecurityProperties(globalSecurity); + 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: url, + method: "get", + headers: headers, + responseType: "arraybuffer", + ...config, + }); + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.GetAllApiEndpointsResponse = + new operations.GetAllApiEndpointsResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + const decodedRes = new TextDecoder().decode(httpRes?.data); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/json`)) { + res.apiEndpoints = []; + const resFieldDepth: number = utils.getResFieldDepth(res); + res.apiEndpoints = utils.objectToClass( + JSON.parse(decodedRes), + shared.ApiEndpoint, + resFieldDepth + ); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + default: + if (utils.matchContentType(contentType, `application/json`)) { + res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + } + + return res; + } + + /** + * Get all ApiEndpoints for a particular apiID and versionID. + */ + async getAllForVersionApiEndpoints( + req: operations.GetAllForVersionApiEndpointsRequest, + config?: AxiosRequestConfig + ): Promise { + if (!(req instanceof utils.SpeakeasyBase)) { + req = new operations.GetAllForVersionApiEndpointsRequest(req); + } + + const baseURL: string = utils.templateUrl( + this.sdkConfiguration.serverURL, + this.sdkConfiguration.serverDefaults + ); + const url: string = utils.generateURL( + baseURL, + "/v1/apis/{apiID}/version/{versionID}/api_endpoints", + 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 shared.Security(globalSecurity); + } + const properties = utils.parseSecurityProperties(globalSecurity); + 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: url, + method: "get", + headers: headers, + responseType: "arraybuffer", + ...config, + }); + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.GetAllForVersionApiEndpointsResponse = + new operations.GetAllForVersionApiEndpointsResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + const decodedRes = new TextDecoder().decode(httpRes?.data); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/json`)) { + res.apiEndpoints = []; + const resFieldDepth: number = utils.getResFieldDepth(res); + res.apiEndpoints = utils.objectToClass( + JSON.parse(decodedRes), + shared.ApiEndpoint, + resFieldDepth + ); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + default: + if (utils.matchContentType(contentType, `application/json`)) { + res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + } + + return res; + } + + /** + * Get an ApiEndpoint. + */ + async getApiEndpoint( + req: operations.GetApiEndpointRequest, + config?: AxiosRequestConfig + ): Promise { + if (!(req instanceof utils.SpeakeasyBase)) { + req = new operations.GetApiEndpointRequest(req); + } + + const baseURL: string = utils.templateUrl( + this.sdkConfiguration.serverURL, + this.sdkConfiguration.serverDefaults + ); + const url: string = utils.generateURL( + baseURL, + "/v1/apis/{apiID}/version/{versionID}/api_endpoints/{apiEndpointID}", + 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 shared.Security(globalSecurity); + } + const properties = utils.parseSecurityProperties(globalSecurity); + 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: url, + method: "get", + headers: headers, + responseType: "arraybuffer", + ...config, + }); + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.GetApiEndpointResponse = new operations.GetApiEndpointResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + const decodedRes = new TextDecoder().decode(httpRes?.data); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/json`)) { + res.apiEndpoint = utils.objectToClass( + JSON.parse(decodedRes), + shared.ApiEndpoint + ); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + default: + if (utils.matchContentType(contentType, `application/json`)) { + res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + } + + return res; + } + + /** + * Upsert an ApiEndpoint. + * + * @remarks + * Upsert an ApiEndpoint. If the ApiEndpoint does not exist it will be created, otherwise it will be updated. + */ + async upsertApiEndpoint( + req: operations.UpsertApiEndpointRequest, + config?: AxiosRequestConfig + ): Promise { + if (!(req instanceof utils.SpeakeasyBase)) { + req = new operations.UpsertApiEndpointRequest(req); + } + + const baseURL: string = utils.templateUrl( + this.sdkConfiguration.serverURL, + this.sdkConfiguration.serverDefaults + ); + const url: string = utils.generateURL( + baseURL, + "/v1/apis/{apiID}/version/{versionID}/api_endpoints/{apiEndpointID}", + req + ); + + let [reqBodyHeaders, reqBody]: [object, any] = [{}, null]; + + try { + [reqBodyHeaders, reqBody] = utils.serializeRequestBody(req, "apiEndpointInput", "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 shared.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"; + + headers["user-agent"] = this.sdkConfiguration.userAgent; + + const httpRes: AxiosResponse = await client.request({ + validateStatus: () => true, + url: url, + method: "put", + headers: headers, + responseType: "arraybuffer", + data: reqBody, + ...config, + }); + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.UpsertApiEndpointResponse = new operations.UpsertApiEndpointResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + const decodedRes = new TextDecoder().decode(httpRes?.data); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/json`)) { + res.apiEndpoint = utils.objectToClass( + JSON.parse(decodedRes), + shared.ApiEndpoint + ); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + default: + if (utils.matchContentType(contentType, `application/json`)) { + res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + } + + return res; + } +} diff --git a/speakeasy/src/sdk/apis.ts b/speakeasy/src/sdk/apis.ts new file mode 100755 index 0000000..51e74b2 --- /dev/null +++ b/speakeasy/src/sdk/apis.ts @@ -0,0 +1,572 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import * as utils from "../internal/utils"; +import * as errors from "./models/errors"; +import * as operations from "./models/operations"; +import * as shared from "./models/shared"; +import { SDKConfiguration } from "./sdk"; +import { AxiosInstance, AxiosRequestConfig, AxiosResponse, RawAxiosRequestHeaders } from "axios"; + +/** + * REST APIs for managing Api entities + */ +export enum GeneratePostmanCollectionAcceptEnum { + applicationJson = "application/json", + applicationOctetStream = "application/octet-stream", +} + +export class Apis { + private sdkConfiguration: SDKConfiguration; + + constructor(sdkConfig: SDKConfiguration) { + this.sdkConfiguration = sdkConfig; + } + + /** + * Delete an Api. + * + * @remarks + * Delete a particular version of an Api. The will also delete all associated ApiEndpoints, Metadata, Schemas & Request Logs (if using a Postgres datastore). + */ + async deleteApi( + req: operations.DeleteApiRequest, + config?: AxiosRequestConfig + ): Promise { + if (!(req instanceof utils.SpeakeasyBase)) { + req = new operations.DeleteApiRequest(req); + } + + const baseURL: string = utils.templateUrl( + this.sdkConfiguration.serverURL, + this.sdkConfiguration.serverDefaults + ); + const url: string = utils.generateURL(baseURL, "/v1/apis/{apiID}/version/{versionID}", 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 shared.Security(globalSecurity); + } + const properties = utils.parseSecurityProperties(globalSecurity); + 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: url, + method: "delete", + headers: headers, + responseType: "arraybuffer", + ...config, + }); + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.DeleteApiResponse = new operations.DeleteApiResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + const decodedRes = new TextDecoder().decode(httpRes?.data); + switch (true) { + case httpRes?.status == 200: + break; + default: + if (utils.matchContentType(contentType, `application/json`)) { + res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + } + + return res; + } + + /** + * Generate an OpenAPI specification for a particular Api. + * + * @remarks + * This endpoint will generate any missing operations in any registered OpenAPI document if the operation does not already exist in the document. + * Returns the original document and the newly generated document allowing a diff to be performed to see what has changed. + */ + async generateOpenApiSpec( + req: operations.GenerateOpenApiSpecRequest, + config?: AxiosRequestConfig + ): Promise { + if (!(req instanceof utils.SpeakeasyBase)) { + req = new operations.GenerateOpenApiSpecRequest(req); + } + + const baseURL: string = utils.templateUrl( + this.sdkConfiguration.serverURL, + this.sdkConfiguration.serverDefaults + ); + const url: string = utils.generateURL( + baseURL, + "/v1/apis/{apiID}/version/{versionID}/generate/openapi", + 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 shared.Security(globalSecurity); + } + const properties = utils.parseSecurityProperties(globalSecurity); + 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: url, + method: "get", + headers: headers, + responseType: "arraybuffer", + ...config, + }); + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.GenerateOpenApiSpecResponse = + new operations.GenerateOpenApiSpecResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + const decodedRes = new TextDecoder().decode(httpRes?.data); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/json`)) { + res.generateOpenApiSpecDiff = utils.objectToClass( + JSON.parse(decodedRes), + shared.GenerateOpenApiSpecDiff + ); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + default: + if (utils.matchContentType(contentType, `application/json`)) { + res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + } + + return res; + } + + /** + * Generate a Postman collection for a particular Api. + * + * @remarks + * Generates a postman collection containing all endpoints for a particular API. Includes variables produced for any path/query/header parameters included in the OpenAPI document. + */ + async generatePostmanCollection( + req: operations.GeneratePostmanCollectionRequest, + config?: AxiosRequestConfig, + acceptHeaderOverride?: GeneratePostmanCollectionAcceptEnum + ): Promise { + if (!(req instanceof utils.SpeakeasyBase)) { + req = new operations.GeneratePostmanCollectionRequest(req); + } + + const baseURL: string = utils.templateUrl( + this.sdkConfiguration.serverURL, + this.sdkConfiguration.serverDefaults + ); + const url: string = utils.generateURL( + baseURL, + "/v1/apis/{apiID}/version/{versionID}/generate/postman", + 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 shared.Security(globalSecurity); + } + const properties = utils.parseSecurityProperties(globalSecurity); + const headers: RawAxiosRequestHeaders = { ...config?.headers, ...properties.headers }; + if (acceptHeaderOverride !== undefined) { + headers["Accept"] = acceptHeaderOverride.toString(); + } else { + headers["Accept"] = "application/json;q=1, application/octet-stream;q=0"; + } + + headers["user-agent"] = this.sdkConfiguration.userAgent; + + const httpRes: AxiosResponse = await client.request({ + validateStatus: () => true, + url: url, + method: "get", + headers: headers, + responseType: "arraybuffer", + ...config, + }); + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.GeneratePostmanCollectionResponse = + new operations.GeneratePostmanCollectionResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + const decodedRes = new TextDecoder().decode(httpRes?.data); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/octet-stream`)) { + res.postmanCollection = httpRes?.data; + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + default: + if (utils.matchContentType(contentType, `application/json`)) { + res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + } + + return res; + } + + /** + * Get all Api versions for a particular ApiEndpoint. + * + * @remarks + * Get all Api versions for a particular ApiEndpoint. + * Supports filtering the versions based on metadata attributes. + */ + async getAllApiVersions( + req: operations.GetAllApiVersionsRequest, + config?: AxiosRequestConfig + ): Promise { + if (!(req instanceof utils.SpeakeasyBase)) { + req = new operations.GetAllApiVersionsRequest(req); + } + + const baseURL: string = utils.templateUrl( + this.sdkConfiguration.serverURL, + this.sdkConfiguration.serverDefaults + ); + const url: string = utils.generateURL(baseURL, "/v1/apis/{apiID}", 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 shared.Security(globalSecurity); + } + const properties = utils.parseSecurityProperties(globalSecurity); + const headers: RawAxiosRequestHeaders = { ...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: url + queryParams, + method: "get", + headers: headers, + responseType: "arraybuffer", + ...config, + }); + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.GetAllApiVersionsResponse = new operations.GetAllApiVersionsResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + const decodedRes = new TextDecoder().decode(httpRes?.data); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/json`)) { + res.apis = []; + const resFieldDepth: number = utils.getResFieldDepth(res); + res.apis = utils.objectToClass( + JSON.parse(decodedRes), + shared.Api, + resFieldDepth + ); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + default: + if (utils.matchContentType(contentType, `application/json`)) { + res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + } + + return res; + } + + /** + * Get a list of Apis for a given workspace + * + * @remarks + * Get a list of all Apis and their versions for a given workspace. + * Supports filtering the APIs based on metadata attributes. + */ + async getApis( + req: operations.GetApisRequest, + config?: AxiosRequestConfig + ): Promise { + if (!(req instanceof utils.SpeakeasyBase)) { + req = new operations.GetApisRequest(req); + } + + const baseURL: string = utils.templateUrl( + this.sdkConfiguration.serverURL, + this.sdkConfiguration.serverDefaults + ); + const url: string = baseURL.replace(/\/$/, "") + "/v1/apis"; + 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 shared.Security(globalSecurity); + } + const properties = utils.parseSecurityProperties(globalSecurity); + const headers: RawAxiosRequestHeaders = { ...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: url + queryParams, + method: "get", + headers: headers, + responseType: "arraybuffer", + ...config, + }); + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.GetApisResponse = new operations.GetApisResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + const decodedRes = new TextDecoder().decode(httpRes?.data); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/json`)) { + res.apis = []; + const resFieldDepth: number = utils.getResFieldDepth(res); + res.apis = utils.objectToClass( + JSON.parse(decodedRes), + shared.Api, + resFieldDepth + ); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + default: + if (utils.matchContentType(contentType, `application/json`)) { + res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + } + + return res; + } + + /** + * Upsert an Api + * + * @remarks + * Upsert an Api. If the Api does not exist, it will be created. + * If the Api exists, it will be updated. + */ + async upsertApi( + req: operations.UpsertApiRequest, + config?: AxiosRequestConfig + ): Promise { + if (!(req instanceof utils.SpeakeasyBase)) { + req = new operations.UpsertApiRequest(req); + } + + const baseURL: string = utils.templateUrl( + this.sdkConfiguration.serverURL, + this.sdkConfiguration.serverDefaults + ); + const url: string = utils.generateURL(baseURL, "/v1/apis/{apiID}", req); + + let [reqBodyHeaders, reqBody]: [object, any] = [{}, null]; + + try { + [reqBodyHeaders, reqBody] = utils.serializeRequestBody(req, "apiInput", "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 shared.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"; + + headers["user-agent"] = this.sdkConfiguration.userAgent; + + const httpRes: AxiosResponse = await client.request({ + validateStatus: () => true, + url: url, + method: "put", + headers: headers, + responseType: "arraybuffer", + data: reqBody, + ...config, + }); + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.UpsertApiResponse = new operations.UpsertApiResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + const decodedRes = new TextDecoder().decode(httpRes?.data); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/json`)) { + res.api = utils.objectToClass(JSON.parse(decodedRes), shared.Api); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + default: + if (utils.matchContentType(contentType, `application/json`)) { + res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + } + + return res; + } +} diff --git a/speakeasy/src/sdk/embeds.ts b/speakeasy/src/sdk/embeds.ts new file mode 100755 index 0000000..99995a8 --- /dev/null +++ b/speakeasy/src/sdk/embeds.ts @@ -0,0 +1,271 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import * as utils from "../internal/utils"; +import * as errors from "./models/errors"; +import * as operations from "./models/operations"; +import * as shared from "./models/shared"; +import { SDKConfiguration } from "./sdk"; +import { AxiosInstance, AxiosRequestConfig, AxiosResponse, RawAxiosRequestHeaders } from "axios"; + +/** + * REST APIs for managing embeds + */ + +export class Embeds { + private sdkConfiguration: SDKConfiguration; + + constructor(sdkConfig: SDKConfiguration) { + this.sdkConfiguration = sdkConfig; + } + + /** + * Get an embed access token for the current workspace. + * + * @remarks + * Returns an embed access token for the current workspace. This can be used to authenticate access to externally embedded content. + * Filters can be applied allowing views to be filtered to things like particular customerIds. + */ + async getEmbedAccessToken( + req: operations.GetEmbedAccessTokenRequest, + config?: AxiosRequestConfig + ): Promise { + if (!(req instanceof utils.SpeakeasyBase)) { + req = new operations.GetEmbedAccessTokenRequest(req); + } + + const baseURL: string = utils.templateUrl( + this.sdkConfiguration.serverURL, + this.sdkConfiguration.serverDefaults + ); + const url: string = baseURL.replace(/\/$/, "") + "/v1/workspace/embed-access-token"; + 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 shared.Security(globalSecurity); + } + const properties = utils.parseSecurityProperties(globalSecurity); + const headers: RawAxiosRequestHeaders = { ...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: url + queryParams, + method: "get", + headers: headers, + responseType: "arraybuffer", + ...config, + }); + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.GetEmbedAccessTokenResponse = + new operations.GetEmbedAccessTokenResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + const decodedRes = new TextDecoder().decode(httpRes?.data); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/json`)) { + res.embedAccessTokenResponse = utils.objectToClass( + JSON.parse(decodedRes), + shared.EmbedAccessTokenResponse + ); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + default: + if (utils.matchContentType(contentType, `application/json`)) { + res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + } + + return res; + } + + /** + * Get all valid embed access tokens for the current workspace. + */ + async getValidEmbedAccessTokens( + config?: AxiosRequestConfig + ): Promise { + const baseURL: string = utils.templateUrl( + this.sdkConfiguration.serverURL, + this.sdkConfiguration.serverDefaults + ); + const url: string = baseURL.replace(/\/$/, "") + "/v1/workspace/embed-access-tokens/valid"; + 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 shared.Security(globalSecurity); + } + const properties = utils.parseSecurityProperties(globalSecurity); + 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: url, + method: "get", + headers: headers, + responseType: "arraybuffer", + ...config, + }); + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.GetValidEmbedAccessTokensResponse = + new operations.GetValidEmbedAccessTokensResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + const decodedRes = new TextDecoder().decode(httpRes?.data); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/json`)) { + res.embedTokens = []; + const resFieldDepth: number = utils.getResFieldDepth(res); + res.embedTokens = utils.objectToClass( + JSON.parse(decodedRes), + shared.EmbedToken, + resFieldDepth + ); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + default: + if (utils.matchContentType(contentType, `application/json`)) { + res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + } + + return res; + } + + /** + * Revoke an embed access EmbedToken. + */ + async revokeEmbedAccessToken( + req: operations.RevokeEmbedAccessTokenRequest, + config?: AxiosRequestConfig + ): Promise { + if (!(req instanceof utils.SpeakeasyBase)) { + req = new operations.RevokeEmbedAccessTokenRequest(req); + } + + const baseURL: string = utils.templateUrl( + this.sdkConfiguration.serverURL, + this.sdkConfiguration.serverDefaults + ); + const url: string = utils.generateURL( + baseURL, + "/v1/workspace/embed-access-tokens/{tokenID}", + 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 shared.Security(globalSecurity); + } + const properties = utils.parseSecurityProperties(globalSecurity); + 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: url, + method: "delete", + headers: headers, + responseType: "arraybuffer", + ...config, + }); + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.RevokeEmbedAccessTokenResponse = + new operations.RevokeEmbedAccessTokenResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + const decodedRes = new TextDecoder().decode(httpRes?.data); + switch (true) { + case httpRes?.status == 200: + break; + default: + if (utils.matchContentType(contentType, `application/json`)) { + res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + } + + return res; + } +} diff --git a/speakeasy/src/sdk/index.ts b/speakeasy/src/sdk/index.ts new file mode 100755 index 0000000..3130314 --- /dev/null +++ b/speakeasy/src/sdk/index.ts @@ -0,0 +1,5 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +export * from "./sdk"; diff --git a/speakeasy/src/sdk/metadata.ts b/speakeasy/src/sdk/metadata.ts new file mode 100755 index 0000000..8859632 --- /dev/null +++ b/speakeasy/src/sdk/metadata.ts @@ -0,0 +1,299 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import * as utils from "../internal/utils"; +import * as errors from "./models/errors"; +import * as operations from "./models/operations"; +import * as shared from "./models/shared"; +import { SDKConfiguration } from "./sdk"; +import { AxiosInstance, AxiosRequestConfig, AxiosResponse, RawAxiosRequestHeaders } from "axios"; + +/** + * REST APIs for managing Version Metadata entities + */ + +export class Metadata { + private sdkConfiguration: SDKConfiguration; + + constructor(sdkConfig: SDKConfiguration) { + this.sdkConfiguration = sdkConfig; + } + + /** + * Delete metadata for a particular apiID and versionID. + */ + async deleteVersionMetadata( + req: operations.DeleteVersionMetadataRequest, + config?: AxiosRequestConfig + ): Promise { + if (!(req instanceof utils.SpeakeasyBase)) { + req = new operations.DeleteVersionMetadataRequest(req); + } + + const baseURL: string = utils.templateUrl( + this.sdkConfiguration.serverURL, + this.sdkConfiguration.serverDefaults + ); + const url: string = utils.generateURL( + baseURL, + "/v1/apis/{apiID}/version/{versionID}/metadata/{metaKey}/{metaValue}", + 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 shared.Security(globalSecurity); + } + const properties = utils.parseSecurityProperties(globalSecurity); + 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: url, + method: "delete", + headers: headers, + responseType: "arraybuffer", + ...config, + }); + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.DeleteVersionMetadataResponse = + new operations.DeleteVersionMetadataResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + const decodedRes = new TextDecoder().decode(httpRes?.data); + switch (true) { + case httpRes?.status == 200: + break; + default: + if (utils.matchContentType(contentType, `application/json`)) { + res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + } + + return res; + } + + /** + * Get all metadata for a particular apiID and versionID. + */ + async getVersionMetadata( + req: operations.GetVersionMetadataRequest, + config?: AxiosRequestConfig + ): Promise { + if (!(req instanceof utils.SpeakeasyBase)) { + req = new operations.GetVersionMetadataRequest(req); + } + + const baseURL: string = utils.templateUrl( + this.sdkConfiguration.serverURL, + this.sdkConfiguration.serverDefaults + ); + const url: string = utils.generateURL( + baseURL, + "/v1/apis/{apiID}/version/{versionID}/metadata", + 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 shared.Security(globalSecurity); + } + const properties = utils.parseSecurityProperties(globalSecurity); + 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: url, + method: "get", + headers: headers, + responseType: "arraybuffer", + ...config, + }); + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.GetVersionMetadataResponse = + new operations.GetVersionMetadataResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + const decodedRes = new TextDecoder().decode(httpRes?.data); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/json`)) { + res.versionMetadata = []; + const resFieldDepth: number = utils.getResFieldDepth(res); + res.versionMetadata = utils.objectToClass( + JSON.parse(decodedRes), + shared.VersionMetadata, + resFieldDepth + ); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + default: + if (utils.matchContentType(contentType, `application/json`)) { + res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + } + + return res; + } + + /** + * Insert metadata for a particular apiID and versionID. + */ + async insertVersionMetadata( + req: operations.InsertVersionMetadataRequest, + config?: AxiosRequestConfig + ): Promise { + if (!(req instanceof utils.SpeakeasyBase)) { + req = new operations.InsertVersionMetadataRequest(req); + } + + const baseURL: string = utils.templateUrl( + this.sdkConfiguration.serverURL, + this.sdkConfiguration.serverDefaults + ); + const url: string = utils.generateURL( + baseURL, + "/v1/apis/{apiID}/version/{versionID}/metadata", + req + ); + + let [reqBodyHeaders, reqBody]: [object, any] = [{}, null]; + + try { + [reqBodyHeaders, reqBody] = utils.serializeRequestBody( + req, + "versionMetadataInput", + "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 shared.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"; + + headers["user-agent"] = this.sdkConfiguration.userAgent; + + const httpRes: AxiosResponse = await client.request({ + validateStatus: () => true, + url: url, + method: "post", + headers: headers, + responseType: "arraybuffer", + data: reqBody, + ...config, + }); + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.InsertVersionMetadataResponse = + new operations.InsertVersionMetadataResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + const decodedRes = new TextDecoder().decode(httpRes?.data); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/json`)) { + res.versionMetadata = utils.objectToClass( + JSON.parse(decodedRes), + shared.VersionMetadata + ); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + default: + if (utils.matchContentType(contentType, `application/json`)) { + res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + } + + return res; + } +} diff --git a/speakeasy/src/sdk/models/errors/index.ts b/speakeasy/src/sdk/models/errors/index.ts new file mode 100755 index 0000000..4779e6a --- /dev/null +++ b/speakeasy/src/sdk/models/errors/index.ts @@ -0,0 +1,5 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +export * from "./sdkerror"; diff --git a/speakeasy/src/sdk/models/errors/sdkerror.ts b/speakeasy/src/sdk/models/errors/sdkerror.ts new file mode 100755 index 0000000..0d69872 --- /dev/null +++ b/speakeasy/src/sdk/models/errors/sdkerror.ts @@ -0,0 +1,31 @@ +/* + * 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; + + constructor( + message: string, + statusCode: number, + body: string, + rawResponse: AxiosResponse + ) { + let bodyString = ""; + if (body?.length > 0) { + bodyString = `\n${body}`; + } + + super(`${message}: Status ${statusCode}${bodyString}`); + this.statusCode = statusCode; + this.body = body; + this.rawResponse = rawResponse; + + this.name = "SDKError"; + Object.setPrototypeOf(this, SDKError.prototype); + } +} diff --git a/speakeasy/src/sdk/models/operations/deleteapi.ts b/speakeasy/src/sdk/models/operations/deleteapi.ts new file mode 100755 index 0000000..68b872c --- /dev/null +++ b/speakeasy/src/sdk/models/operations/deleteapi.ts @@ -0,0 +1,47 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import * as shared from "../shared"; +import { AxiosResponse } from "axios"; + +export class DeleteApiRequest extends SpeakeasyBase { + /** + * The ID of the Api to delete. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" }) + apiID: string; + + /** + * The version ID of the Api to delete. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" }) + versionID: string; +} + +export class DeleteApiResponse extends SpeakeasyBase { + /** + * HTTP response content type for this operation + */ + @SpeakeasyMetadata() + contentType: string; + + /** + * Default error response + */ + @SpeakeasyMetadata() + error?: shared.ErrorT; + + /** + * HTTP response status code for this operation + */ + @SpeakeasyMetadata() + statusCode: number; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SpeakeasyMetadata() + rawResponse?: AxiosResponse; +} diff --git a/speakeasy/src/sdk/models/operations/deleteapiendpoint.ts b/speakeasy/src/sdk/models/operations/deleteapiendpoint.ts new file mode 100755 index 0000000..c37e6a0 --- /dev/null +++ b/speakeasy/src/sdk/models/operations/deleteapiendpoint.ts @@ -0,0 +1,53 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import * as shared from "../shared"; +import { AxiosResponse } from "axios"; + +export class DeleteApiEndpointRequest extends SpeakeasyBase { + /** + * The ID of the ApiEndpoint to delete. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiEndpointID" }) + apiEndpointID: string; + + /** + * The ID of the Api the ApiEndpoint belongs to. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" }) + apiID: string; + + /** + * The version ID of the Api the ApiEndpoint belongs to. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" }) + versionID: string; +} + +export class DeleteApiEndpointResponse extends SpeakeasyBase { + /** + * HTTP response content type for this operation + */ + @SpeakeasyMetadata() + contentType: string; + + /** + * Default error response + */ + @SpeakeasyMetadata() + error?: shared.ErrorT; + + /** + * HTTP response status code for this operation + */ + @SpeakeasyMetadata() + statusCode: number; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SpeakeasyMetadata() + rawResponse?: AxiosResponse; +} diff --git a/speakeasy/src/sdk/models/operations/deleteschema.ts b/speakeasy/src/sdk/models/operations/deleteschema.ts new file mode 100755 index 0000000..2165337 --- /dev/null +++ b/speakeasy/src/sdk/models/operations/deleteschema.ts @@ -0,0 +1,53 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import * as shared from "../shared"; +import { AxiosResponse } from "axios"; + +export class DeleteSchemaRequest extends SpeakeasyBase { + /** + * The ID of the Api to delete schemas for. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" }) + apiID: string; + + /** + * The revision ID of the schema to delete. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=revisionID" }) + revisionID: string; + + /** + * The version ID of the Api to delete metadata for. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" }) + versionID: string; +} + +export class DeleteSchemaResponse extends SpeakeasyBase { + /** + * HTTP response content type for this operation + */ + @SpeakeasyMetadata() + contentType: string; + + /** + * Default error response + */ + @SpeakeasyMetadata() + error?: shared.ErrorT; + + /** + * HTTP response status code for this operation + */ + @SpeakeasyMetadata() + statusCode: number; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SpeakeasyMetadata() + rawResponse?: AxiosResponse; +} diff --git a/speakeasy/src/sdk/models/operations/deleteversionmetadata.ts b/speakeasy/src/sdk/models/operations/deleteversionmetadata.ts new file mode 100755 index 0000000..66099d6 --- /dev/null +++ b/speakeasy/src/sdk/models/operations/deleteversionmetadata.ts @@ -0,0 +1,59 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import * as shared from "../shared"; +import { AxiosResponse } from "axios"; + +export class DeleteVersionMetadataRequest extends SpeakeasyBase { + /** + * The ID of the Api to delete metadata for. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" }) + apiID: string; + + /** + * The key of the metadata to delete. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=metaKey" }) + metaKey: string; + + /** + * The value of the metadata to delete. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=metaValue" }) + metaValue: string; + + /** + * The version ID of the Api to delete metadata for. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" }) + versionID: string; +} + +export class DeleteVersionMetadataResponse extends SpeakeasyBase { + /** + * HTTP response content type for this operation + */ + @SpeakeasyMetadata() + contentType: string; + + /** + * Default error response + */ + @SpeakeasyMetadata() + error?: shared.ErrorT; + + /** + * HTTP response status code for this operation + */ + @SpeakeasyMetadata() + statusCode: number; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SpeakeasyMetadata() + rawResponse?: AxiosResponse; +} diff --git a/speakeasy/src/sdk/models/operations/downloadschema.ts b/speakeasy/src/sdk/models/operations/downloadschema.ts new file mode 100755 index 0000000..c4ada0d --- /dev/null +++ b/speakeasy/src/sdk/models/operations/downloadschema.ts @@ -0,0 +1,53 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import * as shared from "../shared"; +import { AxiosResponse } from "axios"; + +export class DownloadSchemaRequest extends SpeakeasyBase { + /** + * The ID of the Api to download the schema for. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" }) + apiID: string; + + /** + * The version ID of the Api to delete metadata for. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" }) + versionID: string; +} + +export class DownloadSchemaResponse extends SpeakeasyBase { + /** + * HTTP response content type for this operation + */ + @SpeakeasyMetadata() + contentType: string; + + /** + * Default error response + */ + @SpeakeasyMetadata() + error?: shared.ErrorT; + + /** + * OK + */ + @SpeakeasyMetadata() + schema?: Uint8Array; + + /** + * HTTP response status code for this operation + */ + @SpeakeasyMetadata() + statusCode: number; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SpeakeasyMetadata() + rawResponse?: AxiosResponse; +} diff --git a/speakeasy/src/sdk/models/operations/downloadschemarevision.ts b/speakeasy/src/sdk/models/operations/downloadschemarevision.ts new file mode 100755 index 0000000..e01edb7 --- /dev/null +++ b/speakeasy/src/sdk/models/operations/downloadschemarevision.ts @@ -0,0 +1,59 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import * as shared from "../shared"; +import { AxiosResponse } from "axios"; + +export class DownloadSchemaRevisionRequest extends SpeakeasyBase { + /** + * The ID of the Api to retrieve schemas for. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" }) + apiID: string; + + /** + * The revision ID of the schema to retrieve. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=revisionID" }) + revisionID: string; + + /** + * The version ID of the Api to delete metadata for. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" }) + versionID: string; +} + +export class DownloadSchemaRevisionResponse extends SpeakeasyBase { + /** + * HTTP response content type for this operation + */ + @SpeakeasyMetadata() + contentType: string; + + /** + * Default error response + */ + @SpeakeasyMetadata() + error?: shared.ErrorT; + + /** + * OK + */ + @SpeakeasyMetadata() + schema?: Uint8Array; + + /** + * HTTP response status code for this operation + */ + @SpeakeasyMetadata() + statusCode: number; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SpeakeasyMetadata() + rawResponse?: AxiosResponse; +} diff --git a/speakeasy/src/sdk/models/operations/findapiendpoint.ts b/speakeasy/src/sdk/models/operations/findapiendpoint.ts new file mode 100755 index 0000000..1b55405 --- /dev/null +++ b/speakeasy/src/sdk/models/operations/findapiendpoint.ts @@ -0,0 +1,59 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import * as shared from "../shared"; +import { AxiosResponse } from "axios"; + +export class FindApiEndpointRequest extends SpeakeasyBase { + /** + * The ID of the Api the ApiEndpoint belongs to. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" }) + apiID: string; + + /** + * The displayName of the ApiEndpoint to find (set by operationId from OpenAPI schema). + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=displayName" }) + displayName: string; + + /** + * The version ID of the Api the ApiEndpoint belongs to. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" }) + versionID: string; +} + +export class FindApiEndpointResponse extends SpeakeasyBase { + /** + * OK + */ + @SpeakeasyMetadata() + apiEndpoint?: shared.ApiEndpoint; + + /** + * HTTP response content type for this operation + */ + @SpeakeasyMetadata() + contentType: string; + + /** + * Default error response + */ + @SpeakeasyMetadata() + error?: shared.ErrorT; + + /** + * HTTP response status code for this operation + */ + @SpeakeasyMetadata() + statusCode: number; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SpeakeasyMetadata() + rawResponse?: AxiosResponse; +} diff --git a/speakeasy/src/sdk/models/operations/generateopenapispec.ts b/speakeasy/src/sdk/models/operations/generateopenapispec.ts new file mode 100755 index 0000000..86bd6ed --- /dev/null +++ b/speakeasy/src/sdk/models/operations/generateopenapispec.ts @@ -0,0 +1,53 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import * as shared from "../shared"; +import { AxiosResponse } from "axios"; + +export class GenerateOpenApiSpecRequest extends SpeakeasyBase { + /** + * The ID of the Api to generate an OpenAPI specification for. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" }) + apiID: string; + + /** + * The version ID of the Api to generate an OpenAPI specification for. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" }) + versionID: string; +} + +export class GenerateOpenApiSpecResponse extends SpeakeasyBase { + /** + * HTTP response content type for this operation + */ + @SpeakeasyMetadata() + contentType: string; + + /** + * Default error response + */ + @SpeakeasyMetadata() + error?: shared.ErrorT; + + /** + * OK + */ + @SpeakeasyMetadata() + generateOpenApiSpecDiff?: shared.GenerateOpenApiSpecDiff; + + /** + * HTTP response status code for this operation + */ + @SpeakeasyMetadata() + statusCode: number; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SpeakeasyMetadata() + rawResponse?: AxiosResponse; +} diff --git a/speakeasy/src/sdk/models/operations/generateopenapispecforapiendpoint.ts b/speakeasy/src/sdk/models/operations/generateopenapispecforapiendpoint.ts new file mode 100755 index 0000000..3c8dd73 --- /dev/null +++ b/speakeasy/src/sdk/models/operations/generateopenapispecforapiendpoint.ts @@ -0,0 +1,59 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import * as shared from "../shared"; +import { AxiosResponse } from "axios"; + +export class GenerateOpenApiSpecForApiEndpointRequest extends SpeakeasyBase { + /** + * The ID of the ApiEndpoint to generate an OpenAPI specification for. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiEndpointID" }) + apiEndpointID: string; + + /** + * The ID of the Api to generate an OpenAPI specification for. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" }) + apiID: string; + + /** + * The version ID of the Api to generate an OpenAPI specification for. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" }) + versionID: string; +} + +export class GenerateOpenApiSpecForApiEndpointResponse extends SpeakeasyBase { + /** + * HTTP response content type for this operation + */ + @SpeakeasyMetadata() + contentType: string; + + /** + * Default error response + */ + @SpeakeasyMetadata() + error?: shared.ErrorT; + + /** + * OK + */ + @SpeakeasyMetadata() + generateOpenApiSpecDiff?: shared.GenerateOpenApiSpecDiff; + + /** + * HTTP response status code for this operation + */ + @SpeakeasyMetadata() + statusCode: number; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SpeakeasyMetadata() + rawResponse?: AxiosResponse; +} diff --git a/speakeasy/src/sdk/models/operations/generatepostmancollection.ts b/speakeasy/src/sdk/models/operations/generatepostmancollection.ts new file mode 100755 index 0000000..b37a583 --- /dev/null +++ b/speakeasy/src/sdk/models/operations/generatepostmancollection.ts @@ -0,0 +1,53 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import * as shared from "../shared"; +import { AxiosResponse } from "axios"; + +export class GeneratePostmanCollectionRequest extends SpeakeasyBase { + /** + * The ID of the Api to generate a Postman collection for. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" }) + apiID: string; + + /** + * The version ID of the Api to generate a Postman collection for. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" }) + versionID: string; +} + +export class GeneratePostmanCollectionResponse extends SpeakeasyBase { + /** + * HTTP response content type for this operation + */ + @SpeakeasyMetadata() + contentType: string; + + /** + * Default error response + */ + @SpeakeasyMetadata() + error?: shared.ErrorT; + + /** + * OK + */ + @SpeakeasyMetadata() + postmanCollection?: Uint8Array; + + /** + * HTTP response status code for this operation + */ + @SpeakeasyMetadata() + statusCode: number; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SpeakeasyMetadata() + rawResponse?: AxiosResponse; +} diff --git a/speakeasy/src/sdk/models/operations/generatepostmancollectionforapiendpoint.ts b/speakeasy/src/sdk/models/operations/generatepostmancollectionforapiendpoint.ts new file mode 100755 index 0000000..84281dd --- /dev/null +++ b/speakeasy/src/sdk/models/operations/generatepostmancollectionforapiendpoint.ts @@ -0,0 +1,59 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import * as shared from "../shared"; +import { AxiosResponse } from "axios"; + +export class GeneratePostmanCollectionForApiEndpointRequest extends SpeakeasyBase { + /** + * The ID of the ApiEndpoint to generate a Postman collection for. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiEndpointID" }) + apiEndpointID: string; + + /** + * The ID of the Api to generate a Postman collection for. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" }) + apiID: string; + + /** + * The version ID of the Api to generate a Postman collection for. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" }) + versionID: string; +} + +export class GeneratePostmanCollectionForApiEndpointResponse extends SpeakeasyBase { + /** + * HTTP response content type for this operation + */ + @SpeakeasyMetadata() + contentType: string; + + /** + * Default error response + */ + @SpeakeasyMetadata() + error?: shared.ErrorT; + + /** + * OK + */ + @SpeakeasyMetadata() + postmanCollection?: Uint8Array; + + /** + * HTTP response status code for this operation + */ + @SpeakeasyMetadata() + statusCode: number; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SpeakeasyMetadata() + rawResponse?: AxiosResponse; +} diff --git a/speakeasy/src/sdk/models/operations/generaterequestpostmancollection.ts b/speakeasy/src/sdk/models/operations/generaterequestpostmancollection.ts new file mode 100755 index 0000000..1e427f5 --- /dev/null +++ b/speakeasy/src/sdk/models/operations/generaterequestpostmancollection.ts @@ -0,0 +1,47 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import * as shared from "../shared"; +import { AxiosResponse } from "axios"; + +export class GenerateRequestPostmanCollectionRequest extends SpeakeasyBase { + /** + * The ID of the request to retrieve. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=requestID" }) + requestID: string; +} + +export class GenerateRequestPostmanCollectionResponse extends SpeakeasyBase { + /** + * HTTP response content type for this operation + */ + @SpeakeasyMetadata() + contentType: string; + + /** + * Default error response + */ + @SpeakeasyMetadata() + error?: shared.ErrorT; + + /** + * OK + */ + @SpeakeasyMetadata() + postmanCollection?: Uint8Array; + + /** + * HTTP response status code for this operation + */ + @SpeakeasyMetadata() + statusCode: number; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SpeakeasyMetadata() + rawResponse?: AxiosResponse; +} diff --git a/speakeasy/src/sdk/models/operations/getallapiendpoints.ts b/speakeasy/src/sdk/models/operations/getallapiendpoints.ts new file mode 100755 index 0000000..f77e61a --- /dev/null +++ b/speakeasy/src/sdk/models/operations/getallapiendpoints.ts @@ -0,0 +1,47 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import * as shared from "../shared"; +import { AxiosResponse } from "axios"; + +export class GetAllApiEndpointsRequest extends SpeakeasyBase { + /** + * The ID of the Api to retrieve ApiEndpoints for. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" }) + apiID: string; +} + +export class GetAllApiEndpointsResponse extends SpeakeasyBase { + /** + * OK + */ + @SpeakeasyMetadata({ elemType: shared.ApiEndpoint }) + apiEndpoints?: shared.ApiEndpoint[]; + + /** + * HTTP response content type for this operation + */ + @SpeakeasyMetadata() + contentType: string; + + /** + * Default error response + */ + @SpeakeasyMetadata() + error?: shared.ErrorT; + + /** + * HTTP response status code for this operation + */ + @SpeakeasyMetadata() + statusCode: number; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SpeakeasyMetadata() + rawResponse?: AxiosResponse; +} diff --git a/speakeasy/src/sdk/models/operations/getallapiversions.ts b/speakeasy/src/sdk/models/operations/getallapiversions.ts new file mode 100755 index 0000000..2f420a5 --- /dev/null +++ b/speakeasy/src/sdk/models/operations/getallapiversions.ts @@ -0,0 +1,70 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import * as shared from "../shared"; +import { AxiosResponse } from "axios"; + +/** + * Configuration for filter operations + */ +export class GetAllApiVersionsOp extends SpeakeasyBase { + /** + * Whether to AND or OR the filters + */ + @SpeakeasyMetadata({ data: "queryParam, name=and" }) + and: boolean; +} + +export class GetAllApiVersionsRequest extends SpeakeasyBase { + /** + * The ID of the Api to retrieve. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" }) + apiID: string; + + /** + * Metadata to filter Apis on + */ + @SpeakeasyMetadata({ data: "queryParam, style=deepObject;explode=true;name=metadata" }) + metadata?: Record; + + /** + * Configuration for filter operations + */ + @SpeakeasyMetadata({ data: "queryParam, style=deepObject;explode=true;name=op" }) + op?: GetAllApiVersionsOp; +} + +export class GetAllApiVersionsResponse extends SpeakeasyBase { + /** + * OK + */ + @SpeakeasyMetadata({ elemType: shared.Api }) + apis?: shared.Api[]; + + /** + * HTTP response content type for this operation + */ + @SpeakeasyMetadata() + contentType: string; + + /** + * Default error response + */ + @SpeakeasyMetadata() + error?: shared.ErrorT; + + /** + * HTTP response status code for this operation + */ + @SpeakeasyMetadata() + statusCode: number; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SpeakeasyMetadata() + rawResponse?: AxiosResponse; +} diff --git a/speakeasy/src/sdk/models/operations/getallforversionapiendpoints.ts b/speakeasy/src/sdk/models/operations/getallforversionapiendpoints.ts new file mode 100755 index 0000000..bfba34f --- /dev/null +++ b/speakeasy/src/sdk/models/operations/getallforversionapiendpoints.ts @@ -0,0 +1,53 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import * as shared from "../shared"; +import { AxiosResponse } from "axios"; + +export class GetAllForVersionApiEndpointsRequest extends SpeakeasyBase { + /** + * The ID of the Api to retrieve ApiEndpoints for. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" }) + apiID: string; + + /** + * The version ID of the Api to retrieve ApiEndpoints for. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" }) + versionID: string; +} + +export class GetAllForVersionApiEndpointsResponse extends SpeakeasyBase { + /** + * OK + */ + @SpeakeasyMetadata({ elemType: shared.ApiEndpoint }) + apiEndpoints?: shared.ApiEndpoint[]; + + /** + * HTTP response content type for this operation + */ + @SpeakeasyMetadata() + contentType: string; + + /** + * Default error response + */ + @SpeakeasyMetadata() + error?: shared.ErrorT; + + /** + * HTTP response status code for this operation + */ + @SpeakeasyMetadata() + statusCode: number; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SpeakeasyMetadata() + rawResponse?: AxiosResponse; +} diff --git a/speakeasy/src/sdk/models/operations/getapiendpoint.ts b/speakeasy/src/sdk/models/operations/getapiendpoint.ts new file mode 100755 index 0000000..e4b7573 --- /dev/null +++ b/speakeasy/src/sdk/models/operations/getapiendpoint.ts @@ -0,0 +1,59 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import * as shared from "../shared"; +import { AxiosResponse } from "axios"; + +export class GetApiEndpointRequest extends SpeakeasyBase { + /** + * The ID of the ApiEndpoint to retrieve. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiEndpointID" }) + apiEndpointID: string; + + /** + * The ID of the Api the ApiEndpoint belongs to. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" }) + apiID: string; + + /** + * The version ID of the Api the ApiEndpoint belongs to. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" }) + versionID: string; +} + +export class GetApiEndpointResponse extends SpeakeasyBase { + /** + * OK + */ + @SpeakeasyMetadata() + apiEndpoint?: shared.ApiEndpoint; + + /** + * HTTP response content type for this operation + */ + @SpeakeasyMetadata() + contentType: string; + + /** + * Default error response + */ + @SpeakeasyMetadata() + error?: shared.ErrorT; + + /** + * HTTP response status code for this operation + */ + @SpeakeasyMetadata() + statusCode: number; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SpeakeasyMetadata() + rawResponse?: AxiosResponse; +} diff --git a/speakeasy/src/sdk/models/operations/getapis.ts b/speakeasy/src/sdk/models/operations/getapis.ts new file mode 100755 index 0000000..f4dd018 --- /dev/null +++ b/speakeasy/src/sdk/models/operations/getapis.ts @@ -0,0 +1,64 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import * as shared from "../shared"; +import { AxiosResponse } from "axios"; + +/** + * Configuration for filter operations + */ +export class GetApisOp extends SpeakeasyBase { + /** + * Whether to AND or OR the filters + */ + @SpeakeasyMetadata({ data: "queryParam, name=and" }) + and: boolean; +} + +export class GetApisRequest extends SpeakeasyBase { + /** + * Metadata to filter Apis on + */ + @SpeakeasyMetadata({ data: "queryParam, style=deepObject;explode=true;name=metadata" }) + metadata?: Record; + + /** + * Configuration for filter operations + */ + @SpeakeasyMetadata({ data: "queryParam, style=deepObject;explode=true;name=op" }) + op?: GetApisOp; +} + +export class GetApisResponse extends SpeakeasyBase { + /** + * OK + */ + @SpeakeasyMetadata({ elemType: shared.Api }) + apis?: shared.Api[]; + + /** + * HTTP response content type for this operation + */ + @SpeakeasyMetadata() + contentType: string; + + /** + * Default error response + */ + @SpeakeasyMetadata() + error?: shared.ErrorT; + + /** + * HTTP response status code for this operation + */ + @SpeakeasyMetadata() + statusCode: number; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SpeakeasyMetadata() + rawResponse?: AxiosResponse; +} diff --git a/speakeasy/src/sdk/models/operations/getembedaccesstoken.ts b/speakeasy/src/sdk/models/operations/getembedaccesstoken.ts new file mode 100755 index 0000000..4e49e82 --- /dev/null +++ b/speakeasy/src/sdk/models/operations/getembedaccesstoken.ts @@ -0,0 +1,59 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import * as shared from "../shared"; +import { AxiosResponse } from "axios"; + +export class GetEmbedAccessTokenRequest extends SpeakeasyBase { + /** + * The description of the embed access token. + */ + @SpeakeasyMetadata({ data: "queryParam, style=form;explode=true;name=description" }) + description?: string; + + /** + * The duration (in minutes) of the embed access token. + */ + @SpeakeasyMetadata({ data: "queryParam, style=form;explode=true;name=duration" }) + duration?: number; + + /** + * The filter to apply to the query. + */ + @SpeakeasyMetadata({ data: "queryParam, serialization=json;name=filters" }) + filters?: shared.Filters; +} + +export class GetEmbedAccessTokenResponse extends SpeakeasyBase { + /** + * HTTP response content type for this operation + */ + @SpeakeasyMetadata() + contentType: string; + + /** + * OK + */ + @SpeakeasyMetadata() + embedAccessTokenResponse?: shared.EmbedAccessTokenResponse; + + /** + * Default error response + */ + @SpeakeasyMetadata() + error?: shared.ErrorT; + + /** + * HTTP response status code for this operation + */ + @SpeakeasyMetadata() + statusCode: number; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SpeakeasyMetadata() + rawResponse?: AxiosResponse; +} diff --git a/speakeasy/src/sdk/models/operations/getplugins.ts b/speakeasy/src/sdk/models/operations/getplugins.ts new file mode 100755 index 0000000..244589e --- /dev/null +++ b/speakeasy/src/sdk/models/operations/getplugins.ts @@ -0,0 +1,39 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import * as shared from "../shared"; +import { AxiosResponse } from "axios"; + +export class GetPluginsResponse extends SpeakeasyBase { + /** + * HTTP response content type for this operation + */ + @SpeakeasyMetadata() + contentType: string; + + /** + * Default error response + */ + @SpeakeasyMetadata() + error?: shared.ErrorT; + + /** + * OK + */ + @SpeakeasyMetadata({ elemType: shared.Plugin }) + plugins?: shared.Plugin[]; + + /** + * HTTP response status code for this operation + */ + @SpeakeasyMetadata() + statusCode: number; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SpeakeasyMetadata() + rawResponse?: AxiosResponse; +} diff --git a/speakeasy/src/sdk/models/operations/getrequestfromeventlog.ts b/speakeasy/src/sdk/models/operations/getrequestfromeventlog.ts new file mode 100755 index 0000000..432ca07 --- /dev/null +++ b/speakeasy/src/sdk/models/operations/getrequestfromeventlog.ts @@ -0,0 +1,47 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import * as shared from "../shared"; +import { AxiosResponse } from "axios"; + +export class GetRequestFromEventLogRequest extends SpeakeasyBase { + /** + * The ID of the request to retrieve. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=requestID" }) + requestID: string; +} + +export class GetRequestFromEventLogResponse extends SpeakeasyBase { + /** + * HTTP response content type for this operation + */ + @SpeakeasyMetadata() + contentType: string; + + /** + * Default error response + */ + @SpeakeasyMetadata() + error?: shared.ErrorT; + + /** + * HTTP response status code for this operation + */ + @SpeakeasyMetadata() + statusCode: number; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SpeakeasyMetadata() + rawResponse?: AxiosResponse; + + /** + * OK + */ + @SpeakeasyMetadata() + unboundedRequest?: shared.UnboundedRequest; +} diff --git a/speakeasy/src/sdk/models/operations/getschema.ts b/speakeasy/src/sdk/models/operations/getschema.ts new file mode 100755 index 0000000..94b0cd9 --- /dev/null +++ b/speakeasy/src/sdk/models/operations/getschema.ts @@ -0,0 +1,53 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import * as shared from "../shared"; +import { AxiosResponse } from "axios"; + +export class GetSchemaRequest extends SpeakeasyBase { + /** + * The ID of the Api to get the schema for. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" }) + apiID: string; + + /** + * The version ID of the Api to delete metadata for. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" }) + versionID: string; +} + +export class GetSchemaResponse extends SpeakeasyBase { + /** + * HTTP response content type for this operation + */ + @SpeakeasyMetadata() + contentType: string; + + /** + * Default error response + */ + @SpeakeasyMetadata() + error?: shared.ErrorT; + + /** + * OK + */ + @SpeakeasyMetadata() + schema?: shared.Schema; + + /** + * HTTP response status code for this operation + */ + @SpeakeasyMetadata() + statusCode: number; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SpeakeasyMetadata() + rawResponse?: AxiosResponse; +} diff --git a/speakeasy/src/sdk/models/operations/getschemadiff.ts b/speakeasy/src/sdk/models/operations/getschemadiff.ts new file mode 100755 index 0000000..f470a59 --- /dev/null +++ b/speakeasy/src/sdk/models/operations/getschemadiff.ts @@ -0,0 +1,65 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import * as shared from "../shared"; +import { AxiosResponse } from "axios"; + +export class GetSchemaDiffRequest extends SpeakeasyBase { + /** + * The ID of the Api to retrieve schemas for. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" }) + apiID: string; + + /** + * The base revision ID of the schema to retrieve. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=baseRevisionID" }) + baseRevisionID: string; + + /** + * The target revision ID of the schema to retrieve. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=targetRevisionID" }) + targetRevisionID: string; + + /** + * The version ID of the Api to delete metadata for. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" }) + versionID: string; +} + +export class GetSchemaDiffResponse extends SpeakeasyBase { + /** + * HTTP response content type for this operation + */ + @SpeakeasyMetadata() + contentType: string; + + /** + * Default error response + */ + @SpeakeasyMetadata() + error?: shared.ErrorT; + + /** + * OK + */ + @SpeakeasyMetadata() + schemaDiff?: shared.SchemaDiff; + + /** + * HTTP response status code for this operation + */ + @SpeakeasyMetadata() + statusCode: number; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SpeakeasyMetadata() + rawResponse?: AxiosResponse; +} diff --git a/speakeasy/src/sdk/models/operations/getschemarevision.ts b/speakeasy/src/sdk/models/operations/getschemarevision.ts new file mode 100755 index 0000000..f5ee5e8 --- /dev/null +++ b/speakeasy/src/sdk/models/operations/getschemarevision.ts @@ -0,0 +1,59 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import * as shared from "../shared"; +import { AxiosResponse } from "axios"; + +export class GetSchemaRevisionRequest extends SpeakeasyBase { + /** + * The ID of the Api to retrieve schemas for. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" }) + apiID: string; + + /** + * The revision ID of the schema to retrieve. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=revisionID" }) + revisionID: string; + + /** + * The version ID of the Api to delete metadata for. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" }) + versionID: string; +} + +export class GetSchemaRevisionResponse extends SpeakeasyBase { + /** + * HTTP response content type for this operation + */ + @SpeakeasyMetadata() + contentType: string; + + /** + * Default error response + */ + @SpeakeasyMetadata() + error?: shared.ErrorT; + + /** + * OK + */ + @SpeakeasyMetadata() + schema?: shared.Schema; + + /** + * HTTP response status code for this operation + */ + @SpeakeasyMetadata() + statusCode: number; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SpeakeasyMetadata() + rawResponse?: AxiosResponse; +} diff --git a/speakeasy/src/sdk/models/operations/getschemas.ts b/speakeasy/src/sdk/models/operations/getschemas.ts new file mode 100755 index 0000000..79026d8 --- /dev/null +++ b/speakeasy/src/sdk/models/operations/getschemas.ts @@ -0,0 +1,53 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import * as shared from "../shared"; +import { AxiosResponse } from "axios"; + +export class GetSchemasRequest extends SpeakeasyBase { + /** + * The ID of the Api to retrieve schemas for. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" }) + apiID: string; + + /** + * The version ID of the Api to delete metadata for. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" }) + versionID: string; +} + +export class GetSchemasResponse extends SpeakeasyBase { + /** + * HTTP response content type for this operation + */ + @SpeakeasyMetadata() + contentType: string; + + /** + * Default error response + */ + @SpeakeasyMetadata() + error?: shared.ErrorT; + + /** + * OK + */ + @SpeakeasyMetadata({ elemType: shared.Schema }) + schemata?: shared.Schema[]; + + /** + * HTTP response status code for this operation + */ + @SpeakeasyMetadata() + statusCode: number; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SpeakeasyMetadata() + rawResponse?: AxiosResponse; +} diff --git a/speakeasy/src/sdk/models/operations/getvalidembedaccesstokens.ts b/speakeasy/src/sdk/models/operations/getvalidembedaccesstokens.ts new file mode 100755 index 0000000..e34c3da --- /dev/null +++ b/speakeasy/src/sdk/models/operations/getvalidembedaccesstokens.ts @@ -0,0 +1,39 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import * as shared from "../shared"; +import { AxiosResponse } from "axios"; + +export class GetValidEmbedAccessTokensResponse extends SpeakeasyBase { + /** + * HTTP response content type for this operation + */ + @SpeakeasyMetadata() + contentType: string; + + /** + * OK + */ + @SpeakeasyMetadata({ elemType: shared.EmbedToken }) + embedTokens?: shared.EmbedToken[]; + + /** + * Default error response + */ + @SpeakeasyMetadata() + error?: shared.ErrorT; + + /** + * HTTP response status code for this operation + */ + @SpeakeasyMetadata() + statusCode: number; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SpeakeasyMetadata() + rawResponse?: AxiosResponse; +} diff --git a/speakeasy/src/sdk/models/operations/getversionmetadata.ts b/speakeasy/src/sdk/models/operations/getversionmetadata.ts new file mode 100755 index 0000000..f7c179f --- /dev/null +++ b/speakeasy/src/sdk/models/operations/getversionmetadata.ts @@ -0,0 +1,53 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import * as shared from "../shared"; +import { AxiosResponse } from "axios"; + +export class GetVersionMetadataRequest extends SpeakeasyBase { + /** + * The ID of the Api to retrieve metadata for. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" }) + apiID: string; + + /** + * The version ID of the Api to retrieve metadata for. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" }) + versionID: string; +} + +export class GetVersionMetadataResponse extends SpeakeasyBase { + /** + * HTTP response content type for this operation + */ + @SpeakeasyMetadata() + contentType: string; + + /** + * Default error response + */ + @SpeakeasyMetadata() + error?: shared.ErrorT; + + /** + * HTTP response status code for this operation + */ + @SpeakeasyMetadata() + statusCode: number; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SpeakeasyMetadata() + rawResponse?: AxiosResponse; + + /** + * OK + */ + @SpeakeasyMetadata({ elemType: shared.VersionMetadata }) + versionMetadata?: shared.VersionMetadata[]; +} diff --git a/speakeasy/src/sdk/models/operations/index.ts b/speakeasy/src/sdk/models/operations/index.ts new file mode 100755 index 0000000..f407d23 --- /dev/null +++ b/speakeasy/src/sdk/models/operations/index.ts @@ -0,0 +1,39 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +export * from "./deleteapi"; +export * from "./deleteapiendpoint"; +export * from "./deleteschema"; +export * from "./deleteversionmetadata"; +export * from "./downloadschema"; +export * from "./downloadschemarevision"; +export * from "./findapiendpoint"; +export * from "./generateopenapispec"; +export * from "./generateopenapispecforapiendpoint"; +export * from "./generatepostmancollection"; +export * from "./generatepostmancollectionforapiendpoint"; +export * from "./generaterequestpostmancollection"; +export * from "./getallapiendpoints"; +export * from "./getallapiversions"; +export * from "./getallforversionapiendpoints"; +export * from "./getapiendpoint"; +export * from "./getapis"; +export * from "./getembedaccesstoken"; +export * from "./getplugins"; +export * from "./getrequestfromeventlog"; +export * from "./getschema"; +export * from "./getschemadiff"; +export * from "./getschemarevision"; +export * from "./getschemas"; +export * from "./getvalidembedaccesstokens"; +export * from "./getversionmetadata"; +export * from "./insertversionmetadata"; +export * from "./queryeventlog"; +export * from "./registerschema"; +export * from "./revokeembedaccesstoken"; +export * from "./runplugin"; +export * from "./upsertapi"; +export * from "./upsertapiendpoint"; +export * from "./upsertplugin"; +export * from "./validateapikey"; diff --git a/speakeasy/src/sdk/models/operations/insertversionmetadata.ts b/speakeasy/src/sdk/models/operations/insertversionmetadata.ts new file mode 100755 index 0000000..f77c0e9 --- /dev/null +++ b/speakeasy/src/sdk/models/operations/insertversionmetadata.ts @@ -0,0 +1,59 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import * as shared from "../shared"; +import { AxiosResponse } from "axios"; + +export class InsertVersionMetadataRequest extends SpeakeasyBase { + /** + * A JSON representation of the metadata to insert. + */ + @SpeakeasyMetadata({ data: "request, media_type=application/json" }) + versionMetadataInput: shared.VersionMetadataInput; + + /** + * The ID of the Api to insert metadata for. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" }) + apiID: string; + + /** + * The version ID of the Api to insert metadata for. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" }) + versionID: string; +} + +export class InsertVersionMetadataResponse extends SpeakeasyBase { + /** + * HTTP response content type for this operation + */ + @SpeakeasyMetadata() + contentType: string; + + /** + * Default error response + */ + @SpeakeasyMetadata() + error?: shared.ErrorT; + + /** + * HTTP response status code for this operation + */ + @SpeakeasyMetadata() + statusCode: number; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SpeakeasyMetadata() + rawResponse?: AxiosResponse; + + /** + * OK + */ + @SpeakeasyMetadata() + versionMetadata?: shared.VersionMetadata; +} diff --git a/speakeasy/src/sdk/models/operations/queryeventlog.ts b/speakeasy/src/sdk/models/operations/queryeventlog.ts new file mode 100755 index 0000000..a4fe180 --- /dev/null +++ b/speakeasy/src/sdk/models/operations/queryeventlog.ts @@ -0,0 +1,47 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import * as shared from "../shared"; +import { AxiosResponse } from "axios"; + +export class QueryEventLogRequest extends SpeakeasyBase { + /** + * The filter to apply to the query. + */ + @SpeakeasyMetadata({ data: "queryParam, serialization=json;name=filters" }) + filters?: shared.Filters; +} + +export class QueryEventLogResponse extends SpeakeasyBase { + /** + * OK + */ + @SpeakeasyMetadata({ elemType: shared.BoundedRequest }) + boundedRequests?: shared.BoundedRequest[]; + + /** + * HTTP response content type for this operation + */ + @SpeakeasyMetadata() + contentType: string; + + /** + * Default error response + */ + @SpeakeasyMetadata() + error?: shared.ErrorT; + + /** + * HTTP response status code for this operation + */ + @SpeakeasyMetadata() + statusCode: number; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SpeakeasyMetadata() + rawResponse?: AxiosResponse; +} diff --git a/speakeasy/src/sdk/models/operations/registerschema.ts b/speakeasy/src/sdk/models/operations/registerschema.ts new file mode 100755 index 0000000..8b250f1 --- /dev/null +++ b/speakeasy/src/sdk/models/operations/registerschema.ts @@ -0,0 +1,69 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import * as shared from "../shared"; +import { AxiosResponse } from "axios"; + +export class RegisterSchemaRequestBodyFile extends SpeakeasyBase { + @SpeakeasyMetadata({ data: "multipart_form, content=true" }) + content: Uint8Array; + + @SpeakeasyMetadata({ data: "multipart_form, name=file" }) + file: string; +} + +/** + * The schema file to upload provided as a multipart/form-data file segment. + */ +export class RegisterSchemaRequestBody extends SpeakeasyBase { + @SpeakeasyMetadata({ data: "multipart_form, file=true" }) + file: RegisterSchemaRequestBodyFile; +} + +export class RegisterSchemaRequest extends SpeakeasyBase { + /** + * The schema file to upload provided as a multipart/form-data file segment. + */ + @SpeakeasyMetadata({ data: "request, media_type=multipart/form-data" }) + requestBody: RegisterSchemaRequestBody; + + /** + * The ID of the Api to get the schema for. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" }) + apiID: string; + + /** + * The version ID of the Api to delete metadata for. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" }) + versionID: string; +} + +export class RegisterSchemaResponse extends SpeakeasyBase { + /** + * HTTP response content type for this operation + */ + @SpeakeasyMetadata() + contentType: string; + + /** + * Default error response + */ + @SpeakeasyMetadata() + error?: shared.ErrorT; + + /** + * HTTP response status code for this operation + */ + @SpeakeasyMetadata() + statusCode: number; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SpeakeasyMetadata() + rawResponse?: AxiosResponse; +} diff --git a/speakeasy/src/sdk/models/operations/revokeembedaccesstoken.ts b/speakeasy/src/sdk/models/operations/revokeembedaccesstoken.ts new file mode 100755 index 0000000..3642071 --- /dev/null +++ b/speakeasy/src/sdk/models/operations/revokeembedaccesstoken.ts @@ -0,0 +1,41 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import * as shared from "../shared"; +import { AxiosResponse } from "axios"; + +export class RevokeEmbedAccessTokenRequest extends SpeakeasyBase { + /** + * The ID of the EmbedToken to revoke. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=tokenID" }) + tokenID: string; +} + +export class RevokeEmbedAccessTokenResponse extends SpeakeasyBase { + /** + * HTTP response content type for this operation + */ + @SpeakeasyMetadata() + contentType: string; + + /** + * Default error response + */ + @SpeakeasyMetadata() + error?: shared.ErrorT; + + /** + * HTTP response status code for this operation + */ + @SpeakeasyMetadata() + statusCode: number; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SpeakeasyMetadata() + rawResponse?: AxiosResponse; +} diff --git a/speakeasy/src/sdk/models/operations/runplugin.ts b/speakeasy/src/sdk/models/operations/runplugin.ts new file mode 100755 index 0000000..163d64d --- /dev/null +++ b/speakeasy/src/sdk/models/operations/runplugin.ts @@ -0,0 +1,53 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import * as shared from "../shared"; +import { AxiosResponse } from "axios"; + +export class RunPluginRequest extends SpeakeasyBase { + /** + * The filter to apply to the query. + */ + @SpeakeasyMetadata({ data: "queryParam, serialization=json;name=filters" }) + filters?: shared.Filters; + + /** + * The ID of the plugin to run. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=pluginID" }) + pluginID: string; +} + +export class RunPluginResponse extends SpeakeasyBase { + /** + * OK + */ + @SpeakeasyMetadata({ elemType: shared.BoundedRequest }) + boundedRequests?: shared.BoundedRequest[]; + + /** + * HTTP response content type for this operation + */ + @SpeakeasyMetadata() + contentType: string; + + /** + * Default error response + */ + @SpeakeasyMetadata() + error?: shared.ErrorT; + + /** + * HTTP response status code for this operation + */ + @SpeakeasyMetadata() + statusCode: number; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SpeakeasyMetadata() + rawResponse?: AxiosResponse; +} diff --git a/speakeasy/src/sdk/models/operations/upsertapi.ts b/speakeasy/src/sdk/models/operations/upsertapi.ts new file mode 100755 index 0000000..f7f533e --- /dev/null +++ b/speakeasy/src/sdk/models/operations/upsertapi.ts @@ -0,0 +1,53 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import * as shared from "../shared"; +import { AxiosResponse } from "axios"; + +export class UpsertApiRequest extends SpeakeasyBase { + /** + * A JSON representation of the Api to upsert + */ + @SpeakeasyMetadata({ data: "request, media_type=application/json" }) + apiInput: shared.ApiInput; + + /** + * The ID of the Api to upsert. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" }) + apiID: string; +} + +export class UpsertApiResponse extends SpeakeasyBase { + /** + * OK + */ + @SpeakeasyMetadata() + api?: shared.Api; + + /** + * HTTP response content type for this operation + */ + @SpeakeasyMetadata() + contentType: string; + + /** + * Default error response + */ + @SpeakeasyMetadata() + error?: shared.ErrorT; + + /** + * HTTP response status code for this operation + */ + @SpeakeasyMetadata() + statusCode: number; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SpeakeasyMetadata() + rawResponse?: AxiosResponse; +} diff --git a/speakeasy/src/sdk/models/operations/upsertapiendpoint.ts b/speakeasy/src/sdk/models/operations/upsertapiendpoint.ts new file mode 100755 index 0000000..709d71b --- /dev/null +++ b/speakeasy/src/sdk/models/operations/upsertapiendpoint.ts @@ -0,0 +1,65 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import * as shared from "../shared"; +import { AxiosResponse } from "axios"; + +export class UpsertApiEndpointRequest extends SpeakeasyBase { + /** + * A JSON representation of the ApiEndpoint to upsert. + */ + @SpeakeasyMetadata({ data: "request, media_type=application/json" }) + apiEndpointInput: shared.ApiEndpointInput; + + /** + * The ID of the ApiEndpoint to upsert. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiEndpointID" }) + apiEndpointID: string; + + /** + * The ID of the Api the ApiEndpoint belongs to. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=apiID" }) + apiID: string; + + /** + * The version ID of the Api the ApiEndpoint belongs to. + */ + @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=versionID" }) + versionID: string; +} + +export class UpsertApiEndpointResponse extends SpeakeasyBase { + /** + * OK + */ + @SpeakeasyMetadata() + apiEndpoint?: shared.ApiEndpoint; + + /** + * HTTP response content type for this operation + */ + @SpeakeasyMetadata() + contentType: string; + + /** + * Default error response + */ + @SpeakeasyMetadata() + error?: shared.ErrorT; + + /** + * HTTP response status code for this operation + */ + @SpeakeasyMetadata() + statusCode: number; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SpeakeasyMetadata() + rawResponse?: AxiosResponse; +} diff --git a/speakeasy/src/sdk/models/operations/upsertplugin.ts b/speakeasy/src/sdk/models/operations/upsertplugin.ts new file mode 100755 index 0000000..d3f9a2e --- /dev/null +++ b/speakeasy/src/sdk/models/operations/upsertplugin.ts @@ -0,0 +1,39 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import * as shared from "../shared"; +import { AxiosResponse } from "axios"; + +export class UpsertPluginResponse extends SpeakeasyBase { + /** + * HTTP response content type for this operation + */ + @SpeakeasyMetadata() + contentType: string; + + /** + * Default error response + */ + @SpeakeasyMetadata() + error?: shared.ErrorT; + + /** + * OK + */ + @SpeakeasyMetadata() + plugin?: shared.Plugin; + + /** + * HTTP response status code for this operation + */ + @SpeakeasyMetadata() + statusCode: number; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SpeakeasyMetadata() + rawResponse?: AxiosResponse; +} diff --git a/speakeasy/src/sdk/models/operations/validateapikey.ts b/speakeasy/src/sdk/models/operations/validateapikey.ts new file mode 100755 index 0000000..ed3cb64 --- /dev/null +++ b/speakeasy/src/sdk/models/operations/validateapikey.ts @@ -0,0 +1,33 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import * as shared from "../shared"; +import { AxiosResponse } from "axios"; + +export class ValidateApiKeyResponse extends SpeakeasyBase { + /** + * HTTP response content type for this operation + */ + @SpeakeasyMetadata() + contentType: string; + + /** + * Default error response + */ + @SpeakeasyMetadata() + error?: shared.ErrorT; + + /** + * HTTP response status code for this operation + */ + @SpeakeasyMetadata() + statusCode: number; + + /** + * Raw HTTP response; suitable for custom response parsing + */ + @SpeakeasyMetadata() + rawResponse?: AxiosResponse; +} diff --git a/speakeasy/src/sdk/models/shared/api.ts b/speakeasy/src/sdk/models/shared/api.ts new file mode 100755 index 0000000..d212e3f --- /dev/null +++ b/speakeasy/src/sdk/models/shared/api.ts @@ -0,0 +1,102 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import { Expose, Transform } from "class-transformer"; + +/** + * An Api is representation of a API (a collection of API Endpoints) within the Speakeasy Platform. + */ +export class ApiInput extends SpeakeasyBase { + /** + * The ID of this Api. This is a human-readable name (subject to change). + */ + @SpeakeasyMetadata() + @Expose({ name: "api_id" }) + apiId: string; + + /** + * A detailed description of the Api. + */ + @SpeakeasyMetadata() + @Expose({ name: "description" }) + description: string; + + /** + * A set of values associated with a meta_data key. This field is only set on get requests. + */ + @SpeakeasyMetadata() + @Expose({ name: "meta_data" }) + metaData?: Record; + + /** + * The version ID of this Api. This is semantic version identifier. + */ + @SpeakeasyMetadata() + @Expose({ name: "version_id" }) + versionId: string; +} + +/** + * An Api is representation of a API (a collection of API Endpoints) within the Speakeasy Platform. + */ +export class Api extends SpeakeasyBase { + /** + * The ID of this Api. This is a human-readable name (subject to change). + */ + @SpeakeasyMetadata() + @Expose({ name: "api_id" }) + apiId: string; + + /** + * Creation timestamp. + */ + @SpeakeasyMetadata() + @Expose({ name: "created_at" }) + @Transform(({ value }) => new Date(value), { toClassOnly: true }) + createdAt: Date; + + /** + * A detailed description of the Api. + */ + @SpeakeasyMetadata() + @Expose({ name: "description" }) + description: string; + + /** + * Determines if all the endpoints within the Api are found in the OpenAPI spec associated with the Api. + */ + @SpeakeasyMetadata() + @Expose({ name: "matched" }) + matched?: boolean; + + /** + * A set of values associated with a meta_data key. This field is only set on get requests. + */ + @SpeakeasyMetadata() + @Expose({ name: "meta_data" }) + metaData?: Record; + + /** + * Last update timestamp. + */ + @SpeakeasyMetadata() + @Expose({ name: "updated_at" }) + @Transform(({ value }) => new Date(value), { toClassOnly: true }) + updatedAt: Date; + + /** + * The version ID of this Api. This is semantic version identifier. + */ + @SpeakeasyMetadata() + @Expose({ name: "version_id" }) + versionId: string; + + /** + * The workspace ID this Api belongs to. + */ + @SpeakeasyMetadata() + @Expose({ name: "workspace_id" }) + workspaceId: string; +} diff --git a/speakeasy/src/sdk/models/shared/apiendpoint.ts b/speakeasy/src/sdk/models/shared/apiendpoint.ts new file mode 100755 index 0000000..b12d088 --- /dev/null +++ b/speakeasy/src/sdk/models/shared/apiendpoint.ts @@ -0,0 +1,137 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import { Expose, Transform } from "class-transformer"; + +/** + * An ApiEndpoint is a description of an Endpoint for an API. + */ +export class ApiEndpointInput extends SpeakeasyBase { + /** + * The ID of this ApiEndpoint. This is a hash of the method and path. + */ + @SpeakeasyMetadata() + @Expose({ name: "api_endpoint_id" }) + apiEndpointId: string; + + /** + * A detailed description of the ApiEndpoint. + */ + @SpeakeasyMetadata() + @Expose({ name: "description" }) + description: string; + + /** + * A human-readable name for the ApiEndpoint. + */ + @SpeakeasyMetadata() + @Expose({ name: "display_name" }) + displayName: string; + + /** + * HTTP verb. + */ + @SpeakeasyMetadata() + @Expose({ name: "method" }) + method: string; + + /** + * Path that handles this Api. + */ + @SpeakeasyMetadata() + @Expose({ name: "path" }) + path: string; + + /** + * The version ID of the Api this ApiEndpoint belongs to. + */ + @SpeakeasyMetadata() + @Expose({ name: "version_id" }) + versionId: string; +} + +/** + * An ApiEndpoint is a description of an Endpoint for an API. + */ +export class ApiEndpoint extends SpeakeasyBase { + /** + * The ID of this ApiEndpoint. This is a hash of the method and path. + */ + @SpeakeasyMetadata() + @Expose({ name: "api_endpoint_id" }) + apiEndpointId: string; + + /** + * The ID of the Api this ApiEndpoint belongs to. + */ + @SpeakeasyMetadata() + @Expose({ name: "api_id" }) + apiId: string; + + /** + * Creation timestamp. + */ + @SpeakeasyMetadata() + @Expose({ name: "created_at" }) + @Transform(({ value }) => new Date(value), { toClassOnly: true }) + createdAt: Date; + + /** + * A detailed description of the ApiEndpoint. + */ + @SpeakeasyMetadata() + @Expose({ name: "description" }) + description: string; + + /** + * A human-readable name for the ApiEndpoint. + */ + @SpeakeasyMetadata() + @Expose({ name: "display_name" }) + displayName: string; + + /** + * Determines if the endpoint was found in the OpenAPI spec associated with the parent Api. + */ + @SpeakeasyMetadata() + @Expose({ name: "matched" }) + matched?: boolean; + + /** + * HTTP verb. + */ + @SpeakeasyMetadata() + @Expose({ name: "method" }) + method: string; + + /** + * Path that handles this Api. + */ + @SpeakeasyMetadata() + @Expose({ name: "path" }) + path: string; + + /** + * Last update timestamp. + */ + @SpeakeasyMetadata() + @Expose({ name: "updated_at" }) + @Transform(({ value }) => new Date(value), { toClassOnly: true }) + updatedAt: Date; + + /** + * The version ID of the Api this ApiEndpoint belongs to. + */ + @SpeakeasyMetadata() + @Expose({ name: "version_id" }) + versionId: string; + + /** + * The workspace ID this ApiEndpoint belongs to. + */ + @SpeakeasyMetadata() + @Expose({ name: "workspace_id" }) + workspaceId: string; +} diff --git a/speakeasy/src/sdk/models/shared/boundedrequest.ts b/speakeasy/src/sdk/models/shared/boundedrequest.ts new file mode 100755 index 0000000..f628f2c --- /dev/null +++ b/speakeasy/src/sdk/models/shared/boundedrequest.ts @@ -0,0 +1,114 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import { RequestMetadata } from "./requestmetadata"; +import { Expose, Transform, Type } from "class-transformer"; + +/** + * A BoundedRequest is a request that has been logged by the Speakeasy without the contents of the request. + */ +export class BoundedRequest extends SpeakeasyBase { + /** + * The ID of the ApiEndpoint this request was made to. + */ + @SpeakeasyMetadata() + @Expose({ name: "api_endpoint_id" }) + apiEndpointId: string; + + /** + * The ID of the Api this request was made to. + */ + @SpeakeasyMetadata() + @Expose({ name: "api_id" }) + apiId: string; + + /** + * Creation timestamp. + */ + @SpeakeasyMetadata() + @Expose({ name: "created_at" }) + @Transform(({ value }) => new Date(value), { toClassOnly: true }) + createdAt: Date; + + /** + * The ID of the customer that made this request. + */ + @SpeakeasyMetadata() + @Expose({ name: "customer_id" }) + customerId: string; + + /** + * The latency of the request. + */ + @SpeakeasyMetadata() + @Expose({ name: "latency" }) + latency: number; + + /** + * Metadata associated with this request + */ + @SpeakeasyMetadata({ elemType: RequestMetadata }) + @Expose({ name: "metadata" }) + @Type(() => RequestMetadata) + metadata?: RequestMetadata[]; + + /** + * HTTP verb. + */ + @SpeakeasyMetadata() + @Expose({ name: "method" }) + method: string; + + /** + * The path of the request. + */ + @SpeakeasyMetadata() + @Expose({ name: "path" }) + path: string; + + /** + * The time the request finished. + */ + @SpeakeasyMetadata() + @Expose({ name: "request_finish_time" }) + @Transform(({ value }) => new Date(value), { toClassOnly: true }) + requestFinishTime: Date; + + /** + * The ID of this request. + */ + @SpeakeasyMetadata() + @Expose({ name: "request_id" }) + requestId: string; + + /** + * The time the request was made. + */ + @SpeakeasyMetadata() + @Expose({ name: "request_start_time" }) + @Transform(({ value }) => new Date(value), { toClassOnly: true }) + requestStartTime: Date; + + /** + * The status code of the request. + */ + @SpeakeasyMetadata() + @Expose({ name: "status" }) + status: number; + + /** + * The version ID of the Api this request was made to. + */ + @SpeakeasyMetadata() + @Expose({ name: "version_id" }) + versionId: string; + + /** + * The workspace ID this request was made to. + */ + @SpeakeasyMetadata() + @Expose({ name: "workspace_id" }) + workspaceId: string; +} diff --git a/speakeasy/src/sdk/models/shared/embedaccesstokenresponse.ts b/speakeasy/src/sdk/models/shared/embedaccesstokenresponse.ts new file mode 100755 index 0000000..b396d3a --- /dev/null +++ b/speakeasy/src/sdk/models/shared/embedaccesstokenresponse.ts @@ -0,0 +1,15 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import { Expose } from "class-transformer"; + +/** + * An EmbedAccessTokenResponse contains a token that can be used to embed a Speakeasy dashboard. + */ +export class EmbedAccessTokenResponse extends SpeakeasyBase { + @SpeakeasyMetadata() + @Expose({ name: "access_token" }) + accessToken: string; +} diff --git a/speakeasy/src/sdk/models/shared/embedtoken.ts b/speakeasy/src/sdk/models/shared/embedtoken.ts new file mode 100755 index 0000000..db8d046 --- /dev/null +++ b/speakeasy/src/sdk/models/shared/embedtoken.ts @@ -0,0 +1,85 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import { Expose, Transform } from "class-transformer"; + +/** + * A representation of an embed token granted for working with Speakeasy components. + */ +export class EmbedToken extends SpeakeasyBase { + /** + * Creation timestamp. + */ + @SpeakeasyMetadata() + @Expose({ name: "created_at" }) + @Transform(({ value }) => new Date(value), { toClassOnly: true }) + createdAt: Date; + + /** + * The ID of the user that created this token. + */ + @SpeakeasyMetadata() + @Expose({ name: "created_by" }) + createdBy: string; + + /** + * A detailed description of the EmbedToken. + */ + @SpeakeasyMetadata() + @Expose({ name: "description" }) + description: string; + + /** + * The time this token expires. + */ + @SpeakeasyMetadata() + @Expose({ name: "expires_at" }) + @Transform(({ value }) => new Date(value), { toClassOnly: true }) + expiresAt: Date; + + /** + * The filters applied to this token. + */ + @SpeakeasyMetadata() + @Expose({ name: "filters" }) + filters: string; + + /** + * The ID of this EmbedToken. + */ + @SpeakeasyMetadata() + @Expose({ name: "id" }) + id: string; + + /** + * The last time this token was used. + */ + @SpeakeasyMetadata() + @Expose({ name: "last_used" }) + @Transform(({ value }) => new Date(value), { toClassOnly: true }) + lastUsed?: Date; + + /** + * The time this token was revoked. + */ + @SpeakeasyMetadata() + @Expose({ name: "revoked_at" }) + @Transform(({ value }) => new Date(value), { toClassOnly: true }) + revokedAt?: Date; + + /** + * The ID of the user that revoked this token. + */ + @SpeakeasyMetadata() + @Expose({ name: "revoked_by" }) + revokedBy?: string; + + /** + * The workspace ID this token belongs to. + */ + @SpeakeasyMetadata() + @Expose({ name: "workspace_id" }) + workspaceId: string; +} diff --git a/speakeasy/src/sdk/models/shared/error.ts b/speakeasy/src/sdk/models/shared/error.ts new file mode 100755 index 0000000..f7ab071 --- /dev/null +++ b/speakeasy/src/sdk/models/shared/error.ts @@ -0,0 +1,25 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import { Expose } from "class-transformer"; + +/** + * The `Status` type defines a logical error model + */ +export class ErrorT extends SpeakeasyBase { + /** + * A developer-facing error message. + */ + @SpeakeasyMetadata() + @Expose({ name: "message" }) + message: string; + + /** + * The HTTP status code + */ + @SpeakeasyMetadata() + @Expose({ name: "status_code" }) + statusCode: number; +} diff --git a/speakeasy/src/sdk/models/shared/filter.ts b/speakeasy/src/sdk/models/shared/filter.ts new file mode 100755 index 0000000..0e8e68f --- /dev/null +++ b/speakeasy/src/sdk/models/shared/filter.ts @@ -0,0 +1,32 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import { Expose } from "class-transformer"; + +/** + * A filter is a key-value pair that can be used to filter a list of requests. + */ +export class Filter extends SpeakeasyBase { + /** + * The key of the filter. + */ + @SpeakeasyMetadata() + @Expose({ name: "key" }) + key: string; + + /** + * The operator of the filter. + */ + @SpeakeasyMetadata() + @Expose({ name: "operator" }) + operator: string; + + /** + * The value of the filter. + */ + @SpeakeasyMetadata() + @Expose({ name: "value" }) + value: string; +} diff --git a/speakeasy/src/sdk/models/shared/filters.ts b/speakeasy/src/sdk/models/shared/filters.ts new file mode 100755 index 0000000..dd1d358 --- /dev/null +++ b/speakeasy/src/sdk/models/shared/filters.ts @@ -0,0 +1,41 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import { Filter } from "./filter"; +import { Expose, Type } from "class-transformer"; + +/** + * Filters are used to query requests. + */ +export class Filters extends SpeakeasyBase { + /** + * A list of filters to apply to the query. + */ + @SpeakeasyMetadata({ elemType: Filter }) + @Expose({ name: "filters" }) + @Type(() => Filter) + filters: Filter[]; + + /** + * The maximum number of results to return. + */ + @SpeakeasyMetadata() + @Expose({ name: "limit" }) + limit: number; + + /** + * The offset to start the query from. + */ + @SpeakeasyMetadata() + @Expose({ name: "offset" }) + offset: number; + + /** + * The operator to use when combining filters. + */ + @SpeakeasyMetadata() + @Expose({ name: "operator" }) + operator: string; +} diff --git a/speakeasy/src/sdk/models/shared/generateopenapispecdiff.ts b/speakeasy/src/sdk/models/shared/generateopenapispecdiff.ts new file mode 100755 index 0000000..fc8763b --- /dev/null +++ b/speakeasy/src/sdk/models/shared/generateopenapispecdiff.ts @@ -0,0 +1,16 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import { Expose } from "class-transformer"; + +export class GenerateOpenApiSpecDiff extends SpeakeasyBase { + @SpeakeasyMetadata() + @Expose({ name: "current_schema" }) + currentSchema: string; + + @SpeakeasyMetadata() + @Expose({ name: "new_schema" }) + newSchema: string; +} diff --git a/speakeasy/src/sdk/models/shared/index.ts b/speakeasy/src/sdk/models/shared/index.ts new file mode 100755 index 0000000..d02e127 --- /dev/null +++ b/speakeasy/src/sdk/models/shared/index.ts @@ -0,0 +1,20 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +export * from "./api"; +export * from "./apiendpoint"; +export * from "./boundedrequest"; +export * from "./embedaccesstokenresponse"; +export * from "./embedtoken"; +export * from "./error"; +export * from "./filter"; +export * from "./filters"; +export * from "./generateopenapispecdiff"; +export * from "./plugin"; +export * from "./requestmetadata"; +export * from "./schema"; +export * from "./schemadiff"; +export * from "./security"; +export * from "./unboundedrequest"; +export * from "./versionmetadata"; diff --git a/speakeasy/src/sdk/models/shared/plugin.ts b/speakeasy/src/sdk/models/shared/plugin.ts new file mode 100755 index 0000000..5ee34d6 --- /dev/null +++ b/speakeasy/src/sdk/models/shared/plugin.ts @@ -0,0 +1,41 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import { Expose, Transform } from "class-transformer"; + +/** + * A plugin is a short script that is run against ingested requests + */ +export class Plugin extends SpeakeasyBase { + @SpeakeasyMetadata() + @Expose({ name: "code" }) + code: string; + + @SpeakeasyMetadata() + @Expose({ name: "created_at" }) + @Transform(({ value }) => new Date(value), { toClassOnly: true }) + createdAt?: Date; + + @SpeakeasyMetadata() + @Expose({ name: "eval_hash" }) + evalHash?: string; + + @SpeakeasyMetadata() + @Expose({ name: "plugin_id" }) + pluginId: string; + + @SpeakeasyMetadata() + @Expose({ name: "title" }) + title: string; + + @SpeakeasyMetadata() + @Expose({ name: "updated_at" }) + @Transform(({ value }) => new Date(value), { toClassOnly: true }) + updatedAt?: Date; + + @SpeakeasyMetadata() + @Expose({ name: "workspace_id" }) + workspaceId: string; +} diff --git a/speakeasy/src/sdk/models/shared/requestmetadata.ts b/speakeasy/src/sdk/models/shared/requestmetadata.ts new file mode 100755 index 0000000..3ad114b --- /dev/null +++ b/speakeasy/src/sdk/models/shared/requestmetadata.ts @@ -0,0 +1,19 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import { Expose } from "class-transformer"; + +/** + * Key-Value pairs associated with a request + */ +export class RequestMetadata extends SpeakeasyBase { + @SpeakeasyMetadata() + @Expose({ name: "key" }) + key?: string; + + @SpeakeasyMetadata() + @Expose({ name: "value" }) + value?: string; +} diff --git a/speakeasy/src/sdk/models/shared/schema.ts b/speakeasy/src/sdk/models/shared/schema.ts new file mode 100755 index 0000000..1a7c33e --- /dev/null +++ b/speakeasy/src/sdk/models/shared/schema.ts @@ -0,0 +1,54 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import { Expose, Transform } from "class-transformer"; + +/** + * A Schema represents an API schema for a particular Api and Version. + */ +export class Schema extends SpeakeasyBase { + /** + * The ID of the Api this Schema belongs to. + */ + @SpeakeasyMetadata() + @Expose({ name: "api_id" }) + apiId: string; + + /** + * Creation timestamp. + */ + @SpeakeasyMetadata() + @Expose({ name: "created_at" }) + @Transform(({ value }) => new Date(value), { toClassOnly: true }) + createdAt: Date; + + /** + * A detailed description of the Schema. + */ + @SpeakeasyMetadata() + @Expose({ name: "description" }) + description: string; + + /** + * An ID referencing this particular revision of the Schema. + */ + @SpeakeasyMetadata() + @Expose({ name: "revision_id" }) + revisionId: string; + + /** + * The version ID of the Api this Schema belongs to. + */ + @SpeakeasyMetadata() + @Expose({ name: "version_id" }) + versionId: string; + + /** + * The workspace ID this Schema belongs to. + */ + @SpeakeasyMetadata() + @Expose({ name: "workspace_id" }) + workspaceId: string; +} diff --git a/speakeasy/src/sdk/models/shared/schemadiff.ts b/speakeasy/src/sdk/models/shared/schemadiff.ts new file mode 100755 index 0000000..9d165da --- /dev/null +++ b/speakeasy/src/sdk/models/shared/schemadiff.ts @@ -0,0 +1,58 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { objectToClass, SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import { Expose, Transform } from "class-transformer"; + +export class SchemaDiffValueChange extends SpeakeasyBase { + /** + * Represents the previous value of the element. + */ + @SpeakeasyMetadata() + @Expose({ name: "From" }) + from: string; + + /** + * Represents the current value of the element. + */ + @SpeakeasyMetadata() + @Expose({ name: "To" }) + to: string; +} + +/** + * A SchemaDiff represents a diff of two Schemas. + */ +export class SchemaDiff extends SpeakeasyBase { + /** + * Holds every addition change in the diff. + */ + @SpeakeasyMetadata() + @Expose({ name: "additions" }) + additions: string[]; + + /** + * Holds every deletion change in the diff. + */ + @SpeakeasyMetadata() + @Expose({ name: "deletions" }) + deletions: string[]; + + /** + * Holds every modification change in the diff. + */ + @SpeakeasyMetadata({ elemType: SchemaDiffValueChange }) + @Expose({ name: "modifications" }) + @Transform( + ({ value }) => { + const obj: Record = {}; + for (const key in value) { + obj[key] = objectToClass(value[key], SchemaDiffValueChange); + } + return obj; + }, + { toClassOnly: true } + ) + modifications: Record; +} diff --git a/speakeasy/src/sdk/models/shared/security.ts b/speakeasy/src/sdk/models/shared/security.ts new file mode 100755 index 0000000..3a25e98 --- /dev/null +++ b/speakeasy/src/sdk/models/shared/security.ts @@ -0,0 +1,10 @@ +/* + * 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=apiKey;subtype=header;name=x-api-key" }) + apiKey: string; +} diff --git a/speakeasy/src/sdk/models/shared/unboundedrequest.ts b/speakeasy/src/sdk/models/shared/unboundedrequest.ts new file mode 100755 index 0000000..3e1dff4 --- /dev/null +++ b/speakeasy/src/sdk/models/shared/unboundedrequest.ts @@ -0,0 +1,47 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import { Expose, Transform } from "class-transformer"; + +/** + * An UnboundedRequest represents the HAR content capture by Speakeasy when logging a request. + */ +export class UnboundedRequest extends SpeakeasyBase { + /** + * Creation timestamp. + */ + @SpeakeasyMetadata() + @Expose({ name: "created_at" }) + @Transform(({ value }) => new Date(value), { toClassOnly: true }) + createdAt: Date; + + /** + * The HAR content of the request. + */ + @SpeakeasyMetadata() + @Expose({ name: "har" }) + har: string; + + /** + * The size of the HAR content in bytes. + */ + @SpeakeasyMetadata() + @Expose({ name: "har_size_bytes" }) + harSizeBytes: number; + + /** + * The ID of this request. + */ + @SpeakeasyMetadata() + @Expose({ name: "request_id" }) + requestId: string; + + /** + * The workspace ID this request was made to. + */ + @SpeakeasyMetadata() + @Expose({ name: "workspace_id" }) + workspaceId: string; +} diff --git a/speakeasy/src/sdk/models/shared/versionmetadata.ts b/speakeasy/src/sdk/models/shared/versionmetadata.ts new file mode 100755 index 0000000..4a9991f --- /dev/null +++ b/speakeasy/src/sdk/models/shared/versionmetadata.ts @@ -0,0 +1,73 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +import { Expose, Transform } from "class-transformer"; + +/** + * A set of keys and associated values, attached to a particular version of an Api. + */ +export class VersionMetadataInput extends SpeakeasyBase { + /** + * The key for this metadata. + */ + @SpeakeasyMetadata() + @Expose({ name: "meta_key" }) + metaKey: string; + + /** + * One of the values for this metadata. + */ + @SpeakeasyMetadata() + @Expose({ name: "meta_value" }) + metaValue: string; +} + +/** + * A set of keys and associated values, attached to a particular version of an Api. + */ +export class VersionMetadata extends SpeakeasyBase { + /** + * The ID of the Api this Metadata belongs to. + */ + @SpeakeasyMetadata() + @Expose({ name: "api_id" }) + apiId: string; + + /** + * Creation timestamp. + */ + @SpeakeasyMetadata() + @Expose({ name: "created_at" }) + @Transform(({ value }) => new Date(value), { toClassOnly: true }) + createdAt: Date; + + /** + * The key for this metadata. + */ + @SpeakeasyMetadata() + @Expose({ name: "meta_key" }) + metaKey: string; + + /** + * One of the values for this metadata. + */ + @SpeakeasyMetadata() + @Expose({ name: "meta_value" }) + metaValue: string; + + /** + * The version ID of the Api this Metadata belongs to. + */ + @SpeakeasyMetadata() + @Expose({ name: "version_id" }) + versionId: string; + + /** + * The workspace ID this Metadata belongs to. + */ + @SpeakeasyMetadata() + @Expose({ name: "workspace_id" }) + workspaceId: string; +} diff --git a/speakeasy/src/sdk/plugins.ts b/speakeasy/src/sdk/plugins.ts new file mode 100755 index 0000000..d3a029c --- /dev/null +++ b/speakeasy/src/sdk/plugins.ts @@ -0,0 +1,287 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import * as utils from "../internal/utils"; +import * as errors from "./models/errors"; +import * as operations from "./models/operations"; +import * as shared from "./models/shared"; +import { SDKConfiguration } from "./sdk"; +import { AxiosInstance, AxiosRequestConfig, AxiosResponse, RawAxiosRequestHeaders } from "axios"; + +/** + * REST APIs for managing and running plugins + */ + +export class Plugins { + private sdkConfiguration: SDKConfiguration; + + constructor(sdkConfig: SDKConfiguration) { + this.sdkConfiguration = sdkConfig; + } + + /** + * Get all plugins for the current workspace. + */ + async getPlugins(config?: AxiosRequestConfig): Promise { + const baseURL: string = utils.templateUrl( + this.sdkConfiguration.serverURL, + this.sdkConfiguration.serverDefaults + ); + const url: string = baseURL.replace(/\/$/, "") + "/v1/plugins"; + 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 shared.Security(globalSecurity); + } + const properties = utils.parseSecurityProperties(globalSecurity); + 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: url, + method: "get", + headers: headers, + responseType: "arraybuffer", + ...config, + }); + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.GetPluginsResponse = new operations.GetPluginsResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + const decodedRes = new TextDecoder().decode(httpRes?.data); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/json`)) { + res.plugins = []; + const resFieldDepth: number = utils.getResFieldDepth(res); + res.plugins = utils.objectToClass( + JSON.parse(decodedRes), + shared.Plugin, + resFieldDepth + ); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + default: + if (utils.matchContentType(contentType, `application/json`)) { + res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + } + + return res; + } + + /** + * Run a plugin + */ + async runPlugin( + req: operations.RunPluginRequest, + config?: AxiosRequestConfig + ): Promise { + if (!(req instanceof utils.SpeakeasyBase)) { + req = new operations.RunPluginRequest(req); + } + + const baseURL: string = utils.templateUrl( + this.sdkConfiguration.serverURL, + this.sdkConfiguration.serverDefaults + ); + const url: string = utils.generateURL(baseURL, "/v1/plugins/{pluginID}", 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 shared.Security(globalSecurity); + } + const properties = utils.parseSecurityProperties(globalSecurity); + const headers: RawAxiosRequestHeaders = { ...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: url + queryParams, + method: "post", + headers: headers, + responseType: "arraybuffer", + ...config, + }); + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.RunPluginResponse = new operations.RunPluginResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + const decodedRes = new TextDecoder().decode(httpRes?.data); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/json`)) { + res.boundedRequests = []; + const resFieldDepth: number = utils.getResFieldDepth(res); + res.boundedRequests = utils.objectToClass( + JSON.parse(decodedRes), + shared.BoundedRequest, + resFieldDepth + ); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + default: + if (utils.matchContentType(contentType, `application/json`)) { + res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + } + + return res; + } + + /** + * Upsert a plugin + */ + async upsertPlugin( + req: shared.Plugin, + config?: AxiosRequestConfig + ): Promise { + if (!(req instanceof utils.SpeakeasyBase)) { + req = new shared.Plugin(req); + } + + const baseURL: string = utils.templateUrl( + this.sdkConfiguration.serverURL, + this.sdkConfiguration.serverDefaults + ); + const url: string = baseURL.replace(/\/$/, "") + "/v1/plugins"; + + let [reqBodyHeaders, reqBody]: [object, any] = [{}, null]; + + try { + [reqBodyHeaders, reqBody] = utils.serializeRequestBody(req, "request", "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 shared.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"; + + headers["user-agent"] = this.sdkConfiguration.userAgent; + + const httpRes: AxiosResponse = await client.request({ + validateStatus: () => true, + url: url, + method: "put", + headers: headers, + responseType: "arraybuffer", + data: reqBody, + ...config, + }); + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.UpsertPluginResponse = new operations.UpsertPluginResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + const decodedRes = new TextDecoder().decode(httpRes?.data); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/json`)) { + res.plugin = utils.objectToClass(JSON.parse(decodedRes), shared.Plugin); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + default: + if (utils.matchContentType(contentType, `application/json`)) { + res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + } + + return res; + } +} diff --git a/speakeasy/src/sdk/requests.ts b/speakeasy/src/sdk/requests.ts new file mode 100755 index 0000000..c70433e --- /dev/null +++ b/speakeasy/src/sdk/requests.ts @@ -0,0 +1,298 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import * as utils from "../internal/utils"; +import * as errors from "./models/errors"; +import * as operations from "./models/operations"; +import * as shared from "./models/shared"; +import { SDKConfiguration } from "./sdk"; +import { AxiosInstance, AxiosRequestConfig, AxiosResponse, RawAxiosRequestHeaders } from "axios"; + +/** + * REST APIs for retrieving request information + */ +export enum GenerateRequestPostmanCollectionAcceptEnum { + applicationJson = "application/json", + applicationOctetStream = "application/octet-stream", +} + +export class Requests { + private sdkConfiguration: SDKConfiguration; + + constructor(sdkConfig: SDKConfiguration) { + this.sdkConfiguration = sdkConfig; + } + + /** + * Generate a Postman collection for a particular request. + * + * @remarks + * Generates a Postman collection for a particular request. + * Allowing it to be replayed with the same inputs that were captured by the SDK. + */ + async generateRequestPostmanCollection( + req: operations.GenerateRequestPostmanCollectionRequest, + config?: AxiosRequestConfig, + acceptHeaderOverride?: GenerateRequestPostmanCollectionAcceptEnum + ): Promise { + if (!(req instanceof utils.SpeakeasyBase)) { + req = new operations.GenerateRequestPostmanCollectionRequest(req); + } + + const baseURL: string = utils.templateUrl( + this.sdkConfiguration.serverURL, + this.sdkConfiguration.serverDefaults + ); + const url: string = utils.generateURL( + baseURL, + "/v1/eventlog/{requestID}/generate/postman", + 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 shared.Security(globalSecurity); + } + const properties = utils.parseSecurityProperties(globalSecurity); + const headers: RawAxiosRequestHeaders = { ...config?.headers, ...properties.headers }; + if (acceptHeaderOverride !== undefined) { + headers["Accept"] = acceptHeaderOverride.toString(); + } else { + headers["Accept"] = "application/json;q=1, application/octet-stream;q=0"; + } + + headers["user-agent"] = this.sdkConfiguration.userAgent; + + const httpRes: AxiosResponse = await client.request({ + validateStatus: () => true, + url: url, + method: "get", + headers: headers, + responseType: "arraybuffer", + ...config, + }); + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.GenerateRequestPostmanCollectionResponse = + new operations.GenerateRequestPostmanCollectionResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + const decodedRes = new TextDecoder().decode(httpRes?.data); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/octet-stream`)) { + res.postmanCollection = httpRes?.data; + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + default: + if (utils.matchContentType(contentType, `application/json`)) { + res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + } + + return res; + } + + /** + * Get information about a particular request. + */ + async getRequestFromEventLog( + req: operations.GetRequestFromEventLogRequest, + config?: AxiosRequestConfig + ): Promise { + if (!(req instanceof utils.SpeakeasyBase)) { + req = new operations.GetRequestFromEventLogRequest(req); + } + + const baseURL: string = utils.templateUrl( + this.sdkConfiguration.serverURL, + this.sdkConfiguration.serverDefaults + ); + const url: string = utils.generateURL(baseURL, "/v1/eventlog/{requestID}", 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 shared.Security(globalSecurity); + } + const properties = utils.parseSecurityProperties(globalSecurity); + 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: url, + method: "get", + headers: headers, + responseType: "arraybuffer", + ...config, + }); + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.GetRequestFromEventLogResponse = + new operations.GetRequestFromEventLogResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + const decodedRes = new TextDecoder().decode(httpRes?.data); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/json`)) { + res.unboundedRequest = utils.objectToClass( + JSON.parse(decodedRes), + shared.UnboundedRequest + ); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + default: + if (utils.matchContentType(contentType, `application/json`)) { + res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + } + + return res; + } + + /** + * Query the event log to retrieve a list of requests. + * + * @remarks + * Supports retrieving a list of request captured by the SDK for this workspace. + * Allows the filtering of requests on a number of criteria such as ApiID, VersionID, Path, Method, etc. + */ + async queryEventLog( + req: operations.QueryEventLogRequest, + config?: AxiosRequestConfig + ): Promise { + if (!(req instanceof utils.SpeakeasyBase)) { + req = new operations.QueryEventLogRequest(req); + } + + const baseURL: string = utils.templateUrl( + this.sdkConfiguration.serverURL, + this.sdkConfiguration.serverDefaults + ); + const url: string = baseURL.replace(/\/$/, "") + "/v1/eventlog/query"; + 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 shared.Security(globalSecurity); + } + const properties = utils.parseSecurityProperties(globalSecurity); + const headers: RawAxiosRequestHeaders = { ...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: url + queryParams, + method: "get", + headers: headers, + responseType: "arraybuffer", + ...config, + }); + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.QueryEventLogResponse = new operations.QueryEventLogResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + const decodedRes = new TextDecoder().decode(httpRes?.data); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/json`)) { + res.boundedRequests = []; + const resFieldDepth: number = utils.getResFieldDepth(res); + res.boundedRequests = utils.objectToClass( + JSON.parse(decodedRes), + shared.BoundedRequest, + resFieldDepth + ); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + default: + if (utils.matchContentType(contentType, `application/json`)) { + res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + } + + return res; + } +} diff --git a/speakeasy/src/sdk/schemas.ts b/speakeasy/src/sdk/schemas.ts new file mode 100755 index 0000000..02c4f69 --- /dev/null +++ b/speakeasy/src/sdk/schemas.ts @@ -0,0 +1,744 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import * as utils from "../internal/utils"; +import * as errors from "./models/errors"; +import * as operations from "./models/operations"; +import * as shared from "./models/shared"; +import { SDKConfiguration } from "./sdk"; +import { AxiosInstance, AxiosRequestConfig, AxiosResponse, RawAxiosRequestHeaders } from "axios"; + +/** + * REST APIs for managing Schema entities + */ +export enum DownloadSchemaAcceptEnum { + applicationJson = "application/json", + applicationXYaml = "application/x-yaml", +} + +export enum DownloadSchemaRevisionAcceptEnum { + applicationJson = "application/json", + applicationXYaml = "application/x-yaml", +} + +export class Schemas { + private sdkConfiguration: SDKConfiguration; + + constructor(sdkConfig: SDKConfiguration) { + this.sdkConfiguration = sdkConfig; + } + + /** + * Delete a particular schema revision for an Api. + */ + async deleteSchema( + req: operations.DeleteSchemaRequest, + config?: AxiosRequestConfig + ): Promise { + if (!(req instanceof utils.SpeakeasyBase)) { + req = new operations.DeleteSchemaRequest(req); + } + + const baseURL: string = utils.templateUrl( + this.sdkConfiguration.serverURL, + this.sdkConfiguration.serverDefaults + ); + const url: string = utils.generateURL( + baseURL, + "/v1/apis/{apiID}/version/{versionID}/schema/{revisionID}", + 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 shared.Security(globalSecurity); + } + const properties = utils.parseSecurityProperties(globalSecurity); + 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: url, + method: "delete", + headers: headers, + responseType: "arraybuffer", + ...config, + }); + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.DeleteSchemaResponse = new operations.DeleteSchemaResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + const decodedRes = new TextDecoder().decode(httpRes?.data); + switch (true) { + case httpRes?.status == 200: + break; + default: + if (utils.matchContentType(contentType, `application/json`)) { + res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + } + + return res; + } + + /** + * Download the latest schema for a particular apiID. + */ + async downloadSchema( + req: operations.DownloadSchemaRequest, + config?: AxiosRequestConfig, + acceptHeaderOverride?: DownloadSchemaAcceptEnum + ): Promise { + if (!(req instanceof utils.SpeakeasyBase)) { + req = new operations.DownloadSchemaRequest(req); + } + + const baseURL: string = utils.templateUrl( + this.sdkConfiguration.serverURL, + this.sdkConfiguration.serverDefaults + ); + const url: string = utils.generateURL( + baseURL, + "/v1/apis/{apiID}/version/{versionID}/schema/download", + 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 shared.Security(globalSecurity); + } + const properties = utils.parseSecurityProperties(globalSecurity); + const headers: RawAxiosRequestHeaders = { ...config?.headers, ...properties.headers }; + if (acceptHeaderOverride !== undefined) { + headers["Accept"] = acceptHeaderOverride.toString(); + } else { + headers["Accept"] = "application/json;q=1, application/x-yaml;q=0"; + } + + headers["user-agent"] = this.sdkConfiguration.userAgent; + + const httpRes: AxiosResponse = await client.request({ + validateStatus: () => true, + url: url, + method: "get", + headers: headers, + responseType: "arraybuffer", + ...config, + }); + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.DownloadSchemaResponse = new operations.DownloadSchemaResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + const decodedRes = new TextDecoder().decode(httpRes?.data); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/json`)) { + res.schema = httpRes?.data; + } else if (utils.matchContentType(contentType, `application/x-yaml`)) { + res.schema = httpRes?.data; + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + default: + if (utils.matchContentType(contentType, `application/json`)) { + res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + } + + return res; + } + + /** + * Download a particular schema revision for an Api. + */ + async downloadSchemaRevision( + req: operations.DownloadSchemaRevisionRequest, + config?: AxiosRequestConfig, + acceptHeaderOverride?: DownloadSchemaRevisionAcceptEnum + ): Promise { + if (!(req instanceof utils.SpeakeasyBase)) { + req = new operations.DownloadSchemaRevisionRequest(req); + } + + const baseURL: string = utils.templateUrl( + this.sdkConfiguration.serverURL, + this.sdkConfiguration.serverDefaults + ); + const url: string = utils.generateURL( + baseURL, + "/v1/apis/{apiID}/version/{versionID}/schema/{revisionID}/download", + 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 shared.Security(globalSecurity); + } + const properties = utils.parseSecurityProperties(globalSecurity); + const headers: RawAxiosRequestHeaders = { ...config?.headers, ...properties.headers }; + if (acceptHeaderOverride !== undefined) { + headers["Accept"] = acceptHeaderOverride.toString(); + } else { + headers["Accept"] = "application/json;q=1, application/x-yaml;q=0"; + } + + headers["user-agent"] = this.sdkConfiguration.userAgent; + + const httpRes: AxiosResponse = await client.request({ + validateStatus: () => true, + url: url, + method: "get", + headers: headers, + responseType: "arraybuffer", + ...config, + }); + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.DownloadSchemaRevisionResponse = + new operations.DownloadSchemaRevisionResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + const decodedRes = new TextDecoder().decode(httpRes?.data); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/json`)) { + res.schema = httpRes?.data; + } else if (utils.matchContentType(contentType, `application/x-yaml`)) { + res.schema = httpRes?.data; + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + default: + if (utils.matchContentType(contentType, `application/json`)) { + res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + } + + return res; + } + + /** + * Get information about the latest schema. + * + * @remarks + * Returns information about the last uploaded schema for a particular API version. + * This won't include the schema itself, that can be retrieved via the downloadSchema operation. + */ + async getSchema( + req: operations.GetSchemaRequest, + config?: AxiosRequestConfig + ): Promise { + if (!(req instanceof utils.SpeakeasyBase)) { + req = new operations.GetSchemaRequest(req); + } + + const baseURL: string = utils.templateUrl( + this.sdkConfiguration.serverURL, + this.sdkConfiguration.serverDefaults + ); + const url: string = utils.generateURL( + baseURL, + "/v1/apis/{apiID}/version/{versionID}/schema", + 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 shared.Security(globalSecurity); + } + const properties = utils.parseSecurityProperties(globalSecurity); + 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: url, + method: "get", + headers: headers, + responseType: "arraybuffer", + ...config, + }); + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.GetSchemaResponse = new operations.GetSchemaResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + const decodedRes = new TextDecoder().decode(httpRes?.data); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/json`)) { + res.schema = utils.objectToClass(JSON.parse(decodedRes), shared.Schema); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + default: + if (utils.matchContentType(contentType, `application/json`)) { + res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + } + + return res; + } + + /** + * Get a diff of two schema revisions for an Api. + */ + async getSchemaDiff( + req: operations.GetSchemaDiffRequest, + config?: AxiosRequestConfig + ): Promise { + if (!(req instanceof utils.SpeakeasyBase)) { + req = new operations.GetSchemaDiffRequest(req); + } + + const baseURL: string = utils.templateUrl( + this.sdkConfiguration.serverURL, + this.sdkConfiguration.serverDefaults + ); + const url: string = utils.generateURL( + baseURL, + "/v1/apis/{apiID}/version/{versionID}/schema/{baseRevisionID}/diff/{targetRevisionID}", + 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 shared.Security(globalSecurity); + } + const properties = utils.parseSecurityProperties(globalSecurity); + 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: url, + method: "get", + headers: headers, + responseType: "arraybuffer", + ...config, + }); + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.GetSchemaDiffResponse = new operations.GetSchemaDiffResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + const decodedRes = new TextDecoder().decode(httpRes?.data); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/json`)) { + res.schemaDiff = utils.objectToClass(JSON.parse(decodedRes), shared.SchemaDiff); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + default: + if (utils.matchContentType(contentType, `application/json`)) { + res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + } + + return res; + } + + /** + * Get information about a particular schema revision for an Api. + * + * @remarks + * Returns information about the last uploaded schema for a particular schema revision. + * This won't include the schema itself, that can be retrieved via the downloadSchema operation. + */ + async getSchemaRevision( + req: operations.GetSchemaRevisionRequest, + config?: AxiosRequestConfig + ): Promise { + if (!(req instanceof utils.SpeakeasyBase)) { + req = new operations.GetSchemaRevisionRequest(req); + } + + const baseURL: string = utils.templateUrl( + this.sdkConfiguration.serverURL, + this.sdkConfiguration.serverDefaults + ); + const url: string = utils.generateURL( + baseURL, + "/v1/apis/{apiID}/version/{versionID}/schema/{revisionID}", + 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 shared.Security(globalSecurity); + } + const properties = utils.parseSecurityProperties(globalSecurity); + 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: url, + method: "get", + headers: headers, + responseType: "arraybuffer", + ...config, + }); + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.GetSchemaRevisionResponse = new operations.GetSchemaRevisionResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + const decodedRes = new TextDecoder().decode(httpRes?.data); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/json`)) { + res.schema = utils.objectToClass(JSON.parse(decodedRes), shared.Schema); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + default: + if (utils.matchContentType(contentType, `application/json`)) { + res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + } + + return res; + } + + /** + * Get information about all schemas associated with a particular apiID. + * + * @remarks + * Returns information the schemas associated with a particular apiID. + * This won't include the schemas themselves, they can be retrieved via the downloadSchema operation. + */ + async getSchemas( + req: operations.GetSchemasRequest, + config?: AxiosRequestConfig + ): Promise { + if (!(req instanceof utils.SpeakeasyBase)) { + req = new operations.GetSchemasRequest(req); + } + + const baseURL: string = utils.templateUrl( + this.sdkConfiguration.serverURL, + this.sdkConfiguration.serverDefaults + ); + const url: string = utils.generateURL( + baseURL, + "/v1/apis/{apiID}/version/{versionID}/schemas", + 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 shared.Security(globalSecurity); + } + const properties = utils.parseSecurityProperties(globalSecurity); + 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: url, + method: "get", + headers: headers, + responseType: "arraybuffer", + ...config, + }); + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.GetSchemasResponse = new operations.GetSchemasResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + const decodedRes = new TextDecoder().decode(httpRes?.data); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/json`)) { + res.schemata = []; + const resFieldDepth: number = utils.getResFieldDepth(res); + res.schemata = utils.objectToClass( + JSON.parse(decodedRes), + shared.Schema, + resFieldDepth + ); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + default: + if (utils.matchContentType(contentType, `application/json`)) { + res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + } + + return res; + } + + /** + * Register a schema. + * + * @remarks + * Allows uploading a schema for a particular API version. + * This will be used to populate ApiEndpoints and used as a base for any schema generation if present. + */ + async registerSchema( + req: operations.RegisterSchemaRequest, + config?: AxiosRequestConfig + ): Promise { + if (!(req instanceof utils.SpeakeasyBase)) { + req = new operations.RegisterSchemaRequest(req); + } + + const baseURL: string = utils.templateUrl( + this.sdkConfiguration.serverURL, + this.sdkConfiguration.serverDefaults + ); + const url: string = utils.generateURL( + baseURL, + "/v1/apis/{apiID}/version/{versionID}/schema", + req + ); + + let [reqBodyHeaders, reqBody]: [object, any] = [{}, null]; + + try { + [reqBodyHeaders, reqBody] = utils.serializeRequestBody(req, "requestBody", "multipart"); + } 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 shared.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"; + + headers["user-agent"] = this.sdkConfiguration.userAgent; + + const httpRes: AxiosResponse = await client.request({ + validateStatus: () => true, + url: url, + method: "post", + headers: headers, + responseType: "arraybuffer", + data: reqBody, + ...config, + }); + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.RegisterSchemaResponse = new operations.RegisterSchemaResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + const decodedRes = new TextDecoder().decode(httpRes?.data); + switch (true) { + case httpRes?.status == 200: + break; + default: + if (utils.matchContentType(contentType, `application/json`)) { + res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + } + + return res; + } +} diff --git a/speakeasy/src/sdk/sdk.ts b/speakeasy/src/sdk/sdk.ts new file mode 100755 index 0000000..3e72e1d --- /dev/null +++ b/speakeasy/src/sdk/sdk.ts @@ -0,0 +1,195 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import * as utils from "../internal/utils"; +import { ApiEndpoints } from "./apiendpoints"; +import { Apis } from "./apis"; +import { Embeds } from "./embeds"; +import { Metadata } from "./metadata"; +import * as errors from "./models/errors"; +import * as operations from "./models/operations"; +import * as shared from "./models/shared"; +import { Plugins } from "./plugins"; +import { Requests } from "./requests"; +import { Schemas } from "./schemas"; +import axios from "axios"; +import { AxiosInstance, AxiosRequestConfig, AxiosResponse, RawAxiosRequestHeaders } from "axios"; + +export const ServerProd = "prod"; +/** + * Contains the list of servers available to the SDK + */ +export const ServerList: Record = { + [ServerProd]: "https://api.prod.speakeasyapi.dev", +} as const; + +/** + * The available configuration options for the SDK + */ +export type SDKProps = { + apiKey?: string; + + /** + * Allows overriding the default axios client used by the SDK + */ + defaultClient?: AxiosInstance; + + /** + * Allows overriding the default server used by the SDK + */ + server?: string; + + /** + * 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; +}; + +export class SDKConfiguration { + defaultClient: AxiosInstance; + security?: shared.Security | (() => Promise); + serverURL: string; + serverDefaults: any; + language = "typescript"; + openapiDocVersion = "0.3.0"; + sdkVersion = "0.1.0"; + genVersion = "2.161.0"; + userAgent = "speakeasy-sdk/typescript 0.1.0 2.161.0 0.3.0 openapi"; + retryConfig?: utils.RetryConfig; + public constructor(init?: Partial) { + Object.assign(this, init); + } +} + +/** + * Speakeasy API: The Speakeasy API allows teams to manage common operations with their APIs + * + * @see {@link /docs} - The Speakeasy Platform Documentation + */ +export class SDK { + /** + * REST APIs for managing ApiEndpoint entities + */ + public apiEndpoints: ApiEndpoints; + /** + * REST APIs for managing Api entities + */ + public apis: Apis; + /** + * REST APIs for managing embeds + */ + public embeds: Embeds; + /** + * REST APIs for managing Version Metadata entities + */ + public metadata: Metadata; + /** + * REST APIs for managing and running plugins + */ + public plugins: Plugins; + /** + * REST APIs for retrieving request information + */ + public requests: Requests; + /** + * REST APIs for managing Schema entities + */ + public schemas: Schemas; + + private sdkConfiguration: SDKConfiguration; + + constructor(props?: SDKProps) { + let serverURL = props?.serverURL; + const server = props?.server ?? ServerProd; + + if (!serverURL) { + serverURL = ServerList[server]; + } + + const defaultClient = props?.defaultClient ?? axios.create({ baseURL: serverURL }); + this.sdkConfiguration = new SDKConfiguration({ + defaultClient: defaultClient, + security: new shared.Security({ apiKey: props?.apiKey }), + + serverURL: serverURL, + retryConfig: props?.retryConfig, + }); + + this.apiEndpoints = new ApiEndpoints(this.sdkConfiguration); + this.apis = new Apis(this.sdkConfiguration); + this.embeds = new Embeds(this.sdkConfiguration); + this.metadata = new Metadata(this.sdkConfiguration); + this.plugins = new Plugins(this.sdkConfiguration); + this.requests = new Requests(this.sdkConfiguration); + this.schemas = new Schemas(this.sdkConfiguration); + } + + /** + * Validate the current api key. + */ + async validateApiKey(config?: AxiosRequestConfig): Promise { + const baseURL: string = utils.templateUrl( + this.sdkConfiguration.serverURL, + this.sdkConfiguration.serverDefaults + ); + const url: string = baseURL.replace(/\/$/, "") + "/v1/auth/validate"; + 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 shared.Security(globalSecurity); + } + const properties = utils.parseSecurityProperties(globalSecurity); + 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: url, + method: "get", + headers: headers, + responseType: "arraybuffer", + ...config, + }); + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.ValidateApiKeyResponse = new operations.ValidateApiKeyResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + const decodedRes = new TextDecoder().decode(httpRes?.data); + switch (true) { + case httpRes?.status == 200: + break; + default: + if (utils.matchContentType(contentType, `application/json`)) { + res.error = utils.objectToClass(JSON.parse(decodedRes), shared.ErrorT); + } else { + throw new errors.SDKError( + "unknown content-type received: " + contentType, + httpRes.status, + decodedRes, + httpRes + ); + } + break; + } + + return res; + } +} diff --git a/speakeasy/src/sdk/types/index.ts b/speakeasy/src/sdk/types/index.ts new file mode 100755 index 0000000..de759a3 --- /dev/null +++ b/speakeasy/src/sdk/types/index.ts @@ -0,0 +1,5 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +export * from "./rfcdate"; diff --git a/speakeasy/src/sdk/types/rfcdate.ts b/speakeasy/src/sdk/types/rfcdate.ts new file mode 100755 index 0000000..903ac7d --- /dev/null +++ b/speakeasy/src/sdk/types/rfcdate.ts @@ -0,0 +1,48 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +export class RFCDate { + private date: Date; + + constructor(date: Date | {date:string} | string | undefined) { + if (!date) { + this.date = new Date(); + return; + } + + if (typeof date === "string") { + this.date = new Date(date); + return; + } + if (date instanceof Date) { + this.date = date as Date + return; + } + + const anyDate = (date as any); + if (date && !!anyDate.date) { + this.date = new Date(anyDate.date); + } + } + + public getDate(): Date { + return this.date; + } + + public 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}`; + } +} diff --git a/speakeasy/tsconfig.json b/speakeasy/tsconfig.json new file mode 100755 index 0000000..0e90e5e --- /dev/null +++ b/speakeasy/tsconfig.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": ["es2021"], + "baseUrl": "src", + "rootDir": "src", + "outDir": "dist", + "allowJs": true, + "downlevelIteration": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true, + "module": "commonjs", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "strictPropertyInitialization": false, + "declaration": true, + "types": ["reflect-metadata"] + }, + "include": ["src"] +}