diff --git a/.eslintrc.yml b/.eslintrc.yml new file mode 100755 index 0000000..565e624 --- /dev/null +++ b/.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/README.md b/README.md index 7d2b181..425f69e 100755 --- a/README.md +++ b/README.md @@ -12,80 +12,71 @@ ### NPM ```bash -npm add @fabra/sdk +npm add ``` ### Yarn ```bash -yarn add @fabra/sdk +yarn add ``` ## SDK Example Usage ```typescript -import { - GetNamespacesRequest, - GetNamespacesResponse -} from "@fabra/sdk/dist/sdk/models/operations"; - -import { AxiosError } from "axios"; import { Fabra } from "@fabra/sdk"; +import { GetNamespacesResponse } from "@fabra/sdk/dist/sdk/models/operations"; const sdk = new Fabra({ security: { - apiKeyAuth: { - apiKey: "YOUR_API_KEY_HERE", - }, - } -}); - -const req: GetNamespacesRequest = { - queryParams: { - connectionID: 548814, + apiKeyAuth: "YOUR_API_KEY_HERE", }, -}; +}); -sdk.connection.getNamespaces(req).then((res: GetNamespacesResponse | AxiosError) => { - // handle response +sdk.connection.getNamespaces({ + connectionID: 548814, +}).then((res: GetNamespacesResponse) => { + if (res.statusCode == 200) { + // handle response + } }); ``` -## SDK Available Operations +## Available Resources and Operations -### connection +### [connection](docs/connection/README.md) -* `getNamespaces` - Get all namespaces -* `getSchema` - Get schema for table -* `getTables` - Get all tables +* [getNamespaces](docs/connection/README.md#getnamespaces) - Get all namespaces +* [getSchema](docs/connection/README.md#getschema) - Get schema for table +* [getTables](docs/connection/README.md#gettables) - Get all tables -### destination +### [destination](docs/destination/README.md) -* `createDestination` - Create a new destination -* `getDestinations` - Get all destinations +* [createDestination](docs/destination/README.md#createdestination) - Create a new destination +* [getDestinations](docs/destination/README.md#getdestinations) - Get all destinations -### linkToken +### [linkToken](docs/linktoken/README.md) -* `createLinkToken` - Create a new link token +* [createLinkToken](docs/linktoken/README.md#createlinktoken) - Create a new link token -### object +### [object](docs/object/README.md) -* `createObject` - Create a new object -* `getObjects` - Get all objects +* [createObject](docs/object/README.md#createobject) - Create a new object +* [getObjects](docs/object/README.md#getobjects) - Get all objects -### source +### [source](docs/source/README.md) -* `createSource` - Create a new source -* `getSources` - Get all sources +* [createSource](docs/source/README.md#createsource) - Create a new source +* [getSources](docs/source/README.md#getsources) - Get all sources -### sync +### [sync](docs/sync/README.md) -* `createSync` - Create a new sync -* `getSyncs` - Get all syncs +* [createSync](docs/sync/README.md#createsync) - Create a new sync +* [getSyncs](docs/sync/README.md#getsyncs) - Get all syncs ### SDK Generated by [Speakeasy](https://docs.speakeasyapi.dev/docs/using-speakeasy/client-sdks) diff --git a/RELEASES.md b/RELEASES.md index 025485c..1aa376e 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -82,4 +82,284 @@ Based on: - OpenAPI Doc 0.1.0 https://fabra-io.github.io/docs/openapi.yaml - Speakeasy CLI 1.8.5 https://github.com/speakeasy-api/speakeasy ### Releases -- [NPM v0.5.2] https://www.npmjs.com/package/@fabra/sdk/v/0.5.2 - . \ No newline at end of file +- [NPM v0.5.2] https://www.npmjs.com/package/@fabra/sdk/v/0.5.2 - . + +## 2023-03-08 01:46:39 +### Changes +Based on: +- OpenAPI Doc 0.1.0 https://fabra-io.github.io/docs/openapi.yaml +- Speakeasy CLI 1.8.6 https://github.com/speakeasy-api/speakeasy +### Releases +- [NPM v0.5.3] https://www.npmjs.com/package/@fabra/sdk/v/0.5.3 - . + +## 2023-03-09 01:47:07 +### Changes +Based on: +- OpenAPI Doc 0.1.0 https://fabra-io.github.io/docs/openapi.yaml +- Speakeasy CLI 1.8.7 https://github.com/speakeasy-api/speakeasy +### Releases +- [NPM v0.5.4] https://www.npmjs.com/package/@fabra/sdk/v/0.5.4 - . + +## 2023-03-10 01:46:46 +### Changes +Based on: +- OpenAPI Doc 0.1.0 https://fabra-io.github.io/docs/openapi.yaml +- Speakeasy CLI 1.9.1 https://github.com/speakeasy-api/speakeasy +### Releases +- [NPM v0.6.0] https://www.npmjs.com/package/@fabra/sdk/v/0.6.0 - . + +## 2023-03-11 01:24:55 +### Changes +Based on: +- OpenAPI Doc 0.1.0 https://fabra-io.github.io/docs/openapi.yaml +- Speakeasy CLI 1.9.2 https://github.com/speakeasy-api/speakeasy +### Releases +- [NPM v0.6.1] https://www.npmjs.com/package/@fabra/sdk/v/0.6.1 - . + +## 2023-03-14 01:19:22 +### Changes +Based on: +- OpenAPI Doc 0.1.0 https://fabra-io.github.io/docs/openapi.yaml +- Speakeasy CLI 1.9.2 https://github.com/speakeasy-api/speakeasy +### Releases +- [NPM v0.6.2] https://www.npmjs.com/package/@fabra/sdk/v/0.6.2 - . + +## 2023-03-15 01:36:03 +### Changes +Based on: +- OpenAPI Doc 0.1.0 https://fabra-io.github.io/docs/openapi.yaml +- Speakeasy CLI 1.11.0 https://github.com/speakeasy-api/speakeasy +### Releases +- [NPM v0.7.0] https://www.npmjs.com/package/@fabra/sdk/v/0.7.0 - . + +## 2023-03-16 01:36:36 +### Changes +Based on: +- OpenAPI Doc 0.1.0 https://fabra-io.github.io/docs/openapi.yaml +- Speakeasy CLI 1.12.0 https://github.com/speakeasy-api/speakeasy +### Releases +- [NPM v0.8.0] https://www.npmjs.com/package/@fabra/sdk/v/0.8.0 - . + +## 2023-03-17 01:34:51 +### Changes +Based on: +- OpenAPI Doc 0.1.0 https://fabra-io.github.io/docs/openapi.yaml +- Speakeasy CLI 1.12.1 https://github.com/speakeasy-api/speakeasy +### Releases +- [NPM v0.8.1] https://www.npmjs.com/package/@fabra/sdk/v/0.8.1 - . + +## 2023-03-18 01:33:43 +### Changes +Based on: +- OpenAPI Doc 0.1.0 https://fabra-io.github.io/docs/openapi.yaml +- Speakeasy CLI 1.12.3 https://github.com/speakeasy-api/speakeasy +### Releases +- [NPM v0.8.2] https://www.npmjs.com/package/@fabra/sdk/v/0.8.2 - . + +## 2023-03-21 01:23:42 +### Changes +Based on: +- OpenAPI Doc 0.1.0 https://fabra-io.github.io/docs/openapi.yaml +- Speakeasy CLI 1.12.4 https://github.com/speakeasy-api/speakeasy +### Releases +- [NPM v0.8.3] https://www.npmjs.com/package/@fabra/sdk/v/0.8.3 - . + +## 2023-03-22 01:24:45 +### Changes +Based on: +- OpenAPI Doc 0.1.0 https://fabra-io.github.io/docs/openapi.yaml +- Speakeasy CLI 1.13.0 https://github.com/speakeasy-api/speakeasy +### Releases +- [NPM v0.9.0] https://www.npmjs.com/package/@fabra/sdk/v/0.9.0 - . + +## 2023-03-23 01:24:30 +### Changes +Based on: +- OpenAPI Doc 0.1.0 https://fabra-io.github.io/docs/openapi.yaml +- Speakeasy CLI 1.15.0 https://github.com/speakeasy-api/speakeasy +### Releases +- [NPM v0.10.0] https://www.npmjs.com/package/@fabra/sdk/v/0.10.0 - . + +## 2023-03-24 01:24:12 +### Changes +Based on: +- OpenAPI Doc 0.1.0 https://fabra-io.github.io/docs/openapi.yaml +- Speakeasy CLI 1.17.0 https://github.com/speakeasy-api/speakeasy +### Releases +- [NPM v0.11.0] https://www.npmjs.com/package/@fabra/sdk/v/0.11.0 - . + +## 2023-03-25 01:22:24 +### Changes +Based on: +- OpenAPI Doc 0.1.0 https://fabra-io.github.io/docs/openapi.yaml +- Speakeasy CLI 1.18.7 https://github.com/speakeasy-api/speakeasy +### Releases +- [NPM v0.12.0] https://www.npmjs.com/package/@fabra/sdk/v/0.12.0 - . + +## 2023-03-28 01:33:36 +### Changes +Based on: +- OpenAPI Doc 0.1.0 https://fabra-io.github.io/docs/openapi.yaml +- Speakeasy CLI 1.18.9 https://github.com/speakeasy-api/speakeasy +### Releases +- [NPM v0.12.1] https://www.npmjs.com/package/@fabra/sdk/v/0.12.1 - . + +## 2023-03-29 01:40:19 +### Changes +Based on: +- OpenAPI Doc 0.1.0 https://fabra-io.github.io/docs/openapi.yaml +- Speakeasy CLI 1.19.2 https://github.com/speakeasy-api/speakeasy +### Releases +- [NPM v0.13.0] https://www.npmjs.com/package/@fabra/sdk/v/0.13.0 - . + +## 2023-04-01 01:25:31 +### Changes +Based on: +- OpenAPI Doc 0.1.0 https://fabra-io.github.io/docs/openapi.yaml +- Speakeasy CLI 1.19.3 https://github.com/speakeasy-api/speakeasy +### Releases +- [NPM v0.13.1] https://www.npmjs.com/package/@fabra/sdk/v/0.13.1 - . + +## 2023-04-06 01:20:50 +### Changes +Based on: +- OpenAPI Doc 0.1.0 https://fabra-io.github.io/docs/openapi.yaml +- Speakeasy CLI 1.19.6 https://github.com/speakeasy-api/speakeasy +### Releases +- [NPM v0.13.2] https://www.npmjs.com/package/@fabra/sdk/v/0.13.2 - . + +## 2023-04-12 01:22:20 +### Changes +Based on: +- OpenAPI Doc 0.1.0 https://fabra-io.github.io/docs/openapi.yaml +- Speakeasy CLI 1.19.7 https://github.com/speakeasy-api/speakeasy +### Releases +- [NPM v0.13.3] https://www.npmjs.com/package/@fabra/sdk/v/0.13.3 - . + +## 2023-04-14 01:22:00 +### Changes +Based on: +- OpenAPI Doc 0.1.0 https://fabra-io.github.io/docs/openapi.yaml +- Speakeasy CLI 1.20.0 https://github.com/speakeasy-api/speakeasy +### Releases +- [NPM v0.14.0] https://www.npmjs.com/package/@fabra/sdk/v/0.14.0 - . + +## 2023-04-18 01:21:45 +### Changes +Based on: +- OpenAPI Doc 0.1.0 https://fabra-io.github.io/docs/openapi.yaml +- Speakeasy CLI 1.20.1 https://github.com/speakeasy-api/speakeasy +### Releases +- [NPM v0.14.1] https://www.npmjs.com/package/@fabra/sdk/v/0.14.1 - . + +## 2023-04-19 01:23:57 +### Changes +Based on: +- OpenAPI Doc 0.1.0 https://fabra-io.github.io/docs/openapi.yaml +- Speakeasy CLI 1.20.2 https://github.com/speakeasy-api/speakeasy +### Releases +- [NPM v0.14.2] https://www.npmjs.com/package/@fabra/sdk/v/0.14.2 - . + +## 2023-04-20 01:20:46 +### Changes +Based on: +- OpenAPI Doc 0.1.0 https://fabra-io.github.io/docs/openapi.yaml +- Speakeasy CLI 1.21.3 https://github.com/speakeasy-api/speakeasy +### Releases +- [NPM v0.15.0] https://www.npmjs.com/package/@fabra/sdk/v/0.15.0 - . + +## 2023-04-21 01:21:58 +### Changes +Based on: +- OpenAPI Doc 0.1.0 https://fabra-io.github.io/docs/openapi.yaml +- Speakeasy CLI 1.21.4 https://github.com/speakeasy-api/speakeasy +### Releases +- [NPM v0.15.1] https://www.npmjs.com/package/@fabra/sdk/v/0.15.1 - . + +## 2023-04-22 01:23:06 +### Changes +Based on: +- OpenAPI Doc 0.1.0 https://fabra-io.github.io/docs/openapi.yaml +- Speakeasy CLI 1.22.1 https://github.com/speakeasy-api/speakeasy +### Releases +- [NPM v0.16.0] https://www.npmjs.com/package/@fabra/sdk/v/0.16.0 - . + +## 2023-04-25 01:24:13 +### Changes +Based on: +- OpenAPI Doc 0.1.0 https://fabra-io.github.io/docs/openapi.yaml +- Speakeasy CLI 1.22.2 https://github.com/speakeasy-api/speakeasy +### Releases +- [NPM v0.16.1] https://www.npmjs.com/package/@fabra/sdk/v/0.16.1 - . + +## 2023-04-26 01:22:40 +### Changes +Based on: +- OpenAPI Doc 0.1.0 https://fabra-io.github.io/docs/openapi.yaml +- Speakeasy CLI 1.23.1 https://github.com/speakeasy-api/speakeasy +### Releases +- [NPM v0.17.0] https://www.npmjs.com/package/@fabra/sdk/v/0.17.0 - . + +## 2023-04-27 01:23:48 +### Changes +Based on: +- OpenAPI Doc 0.1.0 https://fabra-io.github.io/docs/openapi.yaml +- Speakeasy CLI 1.25.1 https://github.com/speakeasy-api/speakeasy +### Releases +- [NPM v0.18.0] https://www.npmjs.com/package/@fabra/sdk/v/0.18.0 - . + +## 2023-04-28 01:24:36 +### Changes +Based on: +- OpenAPI Doc 0.1.0 https://fabra-io.github.io/docs/openapi.yaml +- Speakeasy CLI 1.26.2 https://github.com/speakeasy-api/speakeasy +### Releases +- [NPM v0.19.0] https://www.npmjs.com/package/@fabra/sdk/v/0.19.0 - . + +## 2023-04-29 01:22:28 +### Changes +Based on: +- OpenAPI Doc 0.1.0 https://fabra-io.github.io/docs/openapi.yaml +- Speakeasy CLI 1.26.4 https://github.com/speakeasy-api/speakeasy +### Releases +- [NPM v0.19.1] https://www.npmjs.com/package/@fabra/sdk/v/0.19.1 - . + +## 2023-05-02 01:23:33 +### Changes +Based on: +- OpenAPI Doc 0.1.0 https://fabra-io.github.io/docs/openapi.yaml +- Speakeasy CLI 1.26.5 https://github.com/speakeasy-api/speakeasy +### Releases +- [NPM v0.19.2] https://www.npmjs.com/package/@fabra/sdk/v/0.19.2 - . + +## 2023-05-03 01:23:45 +### Changes +Based on: +- OpenAPI Doc 0.1.0 https://fabra-io.github.io/docs/openapi.yaml +- Speakeasy CLI 1.27.0 https://github.com/speakeasy-api/speakeasy +### Releases +- [NPM v0.20.0] https://www.npmjs.com/package/@fabra/sdk/v/0.20.0 - . + +## 2023-05-05 01:17:00 +### Changes +Based on: +- OpenAPI Doc 0.1.0 https://fabra-io.github.io/docs/openapi.yaml +- Speakeasy CLI 1.29.0 https://github.com/speakeasy-api/speakeasy +### Releases +- [NPM v0.21.0] https://www.npmjs.com/package/@fabra/sdk/v/0.21.0 - . + +## 2023-05-06 01:18:30 +### Changes +Based on: +- OpenAPI Doc 0.1.0 https://fabra-io.github.io/docs/openapi.yaml +- Speakeasy CLI 1.29.1 https://github.com/speakeasy-api/speakeasy +### Releases +- [NPM v0.21.1] https://www.npmjs.com/package/@fabra/sdk/v/0.21.1 - . + +## 2023-05-10 01:21:40 +### Changes +Based on: +- OpenAPI Doc 0.1.0 https://fabra-io.github.io/docs/openapi.yaml +- Speakeasy CLI 1.29.2 https://github.com/speakeasy-api/speakeasy +### Releases +- [NPM v0.21.2] https://www.npmjs.com/package/@fabra/sdk/v/0.21.2 - . \ No newline at end of file diff --git a/USAGE.md b/USAGE.md index c69eb03..ca1369f 100755 --- a/USAGE.md +++ b/USAGE.md @@ -1,29 +1,20 @@ ```typescript -import { - GetNamespacesRequest, - GetNamespacesResponse -} from "@fabra/sdk/dist/sdk/models/operations"; - -import { AxiosError } from "axios"; import { Fabra } from "@fabra/sdk"; +import { GetNamespacesResponse } from "@fabra/sdk/dist/sdk/models/operations"; const sdk = new Fabra({ security: { - apiKeyAuth: { - apiKey: "YOUR_API_KEY_HERE", - }, - } -}); - -const req: GetNamespacesRequest = { - queryParams: { - connectionID: 548814, + apiKeyAuth: "YOUR_API_KEY_HERE", }, -}; +}); -sdk.connection.getNamespaces(req).then((res: GetNamespacesResponse | AxiosError) => { - // handle response +sdk.connection.getNamespaces({ + connectionID: 548814, +}).then((res: GetNamespacesResponse) => { + if (res.statusCode == 200) { + // handle response + } }); ``` \ No newline at end of file diff --git a/docs/connection/README.md b/docs/connection/README.md new file mode 100755 index 0000000..35f3610 --- /dev/null +++ b/docs/connection/README.md @@ -0,0 +1,90 @@ +# connection + +## Overview + +Operations on connections + +### Available Operations + +* [getNamespaces](#getnamespaces) - Get all namespaces +* [getSchema](#getschema) - Get schema for table +* [getTables](#gettables) - Get all tables + +## getNamespaces + +Get all namespaces + +### Example Usage + +```typescript +import { Fabra } from "@fabra/sdk"; +import { GetNamespacesResponse } from "@fabra/sdk/dist/sdk/models/operations"; + +const sdk = new Fabra({ + security: { + apiKeyAuth: "YOUR_API_KEY_HERE", + }, +}); + +sdk.connection.getNamespaces({ + connectionID: 592845, +}).then((res: GetNamespacesResponse) => { + if (res.statusCode == 200) { + // handle response + } +}); +``` + +## getSchema + +Get schema for table + +### Example Usage + +```typescript +import { Fabra } from "@fabra/sdk"; +import { GetSchemaResponse } from "@fabra/sdk/dist/sdk/models/operations"; +import { FieldTypeEnum } from "@fabra/sdk/dist/sdk/models/shared"; + +const sdk = new Fabra({ + security: { + apiKeyAuth: "YOUR_API_KEY_HERE", + }, +}); + +sdk.connection.getSchema({ + connectionID: 715190, + namespace: "quibusdam", + tableName: "unde", +}).then((res: GetSchemaResponse) => { + if (res.statusCode == 200) { + // handle response + } +}); +``` + +## getTables + +Get all tables + +### Example Usage + +```typescript +import { Fabra } from "@fabra/sdk"; +import { GetTablesResponse } from "@fabra/sdk/dist/sdk/models/operations"; + +const sdk = new Fabra({ + security: { + apiKeyAuth: "YOUR_API_KEY_HERE", + }, +}); + +sdk.connection.getTables({ + connectionID: 857946, + namespace: "corrupti", +}).then((res: GetTablesResponse) => { + if (res.statusCode == 200) { + // handle response + } +}); +``` diff --git a/docs/destination/README.md b/docs/destination/README.md new file mode 100755 index 0000000..29096e8 --- /dev/null +++ b/docs/destination/README.md @@ -0,0 +1,86 @@ +# destination + +## Overview + +Operations on destinations + +### Available Operations + +* [createDestination](#createdestination) - Create a new destination +* [getDestinations](#getdestinations) - Get all destinations + +## createDestination + +Create a new destination + +### Example Usage + +```typescript +import { Fabra } from "@fabra/sdk"; +import { CreateDestinationResponse } from "@fabra/sdk/dist/sdk/models/operations"; +import { ConnectionTypeEnum } from "@fabra/sdk/dist/sdk/models/shared"; + +const sdk = new Fabra({ + security: { + apiKeyAuth: "YOUR_API_KEY_HERE", + }, +}); + +sdk.destination.createDestination({ + bigqueryConfig: { + credentials: "Paste JSON from GCP", + location: "us-west1", + }, + connectionType: ConnectionTypeEnum.Webhook, + displayName: "BigQuery", + mongodbConfig: { + connectionOptions: "retryWrites=true&w=majority", + host: "examplecluster.abc123.mongodb.net", + password: "securePassword123", + username: "jane_doe", + }, + redshiftConfig: { + databaseName: "your_database", + host: "examplecluster.12345.us-west-1.redshift.amazonaws.com", + password: "securePassword123", + port: "5432", + username: "jane_doe", + }, + snowflakeConfig: { + databaseName: "your_database", + host: "abc123.us-east4.gcp.snowflakecomputing.com", + password: "securePassword123", + role: "your_role", + username: "jane_doe", + warehouseName: "your_warehouse", + }, +}).then((res: CreateDestinationResponse) => { + if (res.statusCode == 200) { + // handle response + } +}); +``` + +## getDestinations + +Get all destinations + +### Example Usage + +```typescript +import { Fabra } from "@fabra/sdk"; +import { GetDestinationsResponse } from "@fabra/sdk/dist/sdk/models/operations"; +import { ConnectionTypeEnum } from "@fabra/sdk/dist/sdk/models/shared"; + +const sdk = new Fabra({ + security: { + apiKeyAuth: "YOUR_API_KEY_HERE", + }, +}); + +sdk.destination.getDestinations().then((res: GetDestinationsResponse) => { + if (res.statusCode == 200) { + // handle response + } +}); +``` diff --git a/docs/fabra/README.md b/docs/fabra/README.md new file mode 100755 index 0000000..bbdc71b --- /dev/null +++ b/docs/fabra/README.md @@ -0,0 +1,4 @@ +# Fabra SDK + +### Available Operations + diff --git a/docs/linktoken/README.md b/docs/linktoken/README.md new file mode 100755 index 0000000..94cd18e --- /dev/null +++ b/docs/linktoken/README.md @@ -0,0 +1,34 @@ +# linkToken + +## Overview + +Operations on link tokens + +### Available Operations + +* [createLinkToken](#createlinktoken) - Create a new link token + +## createLinkToken + +Create a new link token + +### Example Usage + +```typescript +import { Fabra } from "@fabra/sdk"; +import { CreateLinkTokenResponse } from "@fabra/sdk/dist/sdk/models/operations"; + +const sdk = new Fabra({ + security: { + apiKeyAuth: "YOUR_API_KEY_HERE", + }, +}); + +sdk.linkToken.createLinkToken({ + endCustomerId: "abcd-1234-efgh-5678", +}).then((res: CreateLinkTokenResponse) => { + if (res.statusCode == 200) { + // handle response + } +}); +``` diff --git a/docs/object/README.md b/docs/object/README.md new file mode 100755 index 0000000..4bbac04 --- /dev/null +++ b/docs/object/README.md @@ -0,0 +1,74 @@ +# object + +## Overview + +Operations on objects + +### Available Operations + +* [createObject](#createobject) - Create a new object +* [getObjects](#getobjects) - Get all objects + +## createObject + +Create a new object + +### Example Usage + +```typescript +import { Fabra } from "@fabra/sdk"; +import { CreateObjectResponse } from "@fabra/sdk/dist/sdk/models/operations"; +import { FieldTypeEnum } from "@fabra/sdk/dist/sdk/models/shared"; + +const sdk = new Fabra({ + security: { + apiKeyAuth: "YOUR_API_KEY_HERE", + }, +}); + +sdk.object.createObject({ + destinationId: 2, + displayName: "BigQuery", + endCustomerIdField: "end_customer_id", + namespace: "bigquery_dataset", + objectFields: [ + { + name: "event_name", + type: FieldTypeEnum.Json, + }, + { + name: "event_name", + type: FieldTypeEnum.Json, + }, + ], + tableName: "events", +}).then((res: CreateObjectResponse) => { + if (res.statusCode == 200) { + // handle response + } +}); +``` + +## getObjects + +Get all objects + +### Example Usage + +```typescript +import { Fabra } from "@fabra/sdk"; +import { GetObjectsResponse } from "@fabra/sdk/dist/sdk/models/operations"; +import { FieldTypeEnum } from "@fabra/sdk/dist/sdk/models/shared"; + +const sdk = new Fabra({ + security: { + apiKeyAuth: "YOUR_API_KEY_HERE", + }, +}); + +sdk.object.getObjects().then((res: GetObjectsResponse) => { + if (res.statusCode == 200) { + // handle response + } +}); +``` diff --git a/docs/source/README.md b/docs/source/README.md new file mode 100755 index 0000000..19667c2 --- /dev/null +++ b/docs/source/README.md @@ -0,0 +1,87 @@ +# source + +## Overview + +Operations on sources + +### Available Operations + +* [createSource](#createsource) - Create a new source +* [getSources](#getsources) - Get all sources + +## createSource + +Create a new source + +### Example Usage + +```typescript +import { Fabra } from "@fabra/sdk"; +import { CreateSourceResponse } from "@fabra/sdk/dist/sdk/models/operations"; +import { ConnectionTypeEnum } from "@fabra/sdk/dist/sdk/models/shared"; + +const sdk = new Fabra({ + security: { + apiKeyAuth: "YOUR_API_KEY_HERE", + }, +}); + +sdk.source.createSource({ + bigqueryConfig: { + credentials: "Paste JSON from GCP", + location: "us-west1", + }, + connectionType: ConnectionTypeEnum.Bigquery, + displayName: "Frontend Events", + endCustomerId: "abcd-1234-efgh-5678", + mongodbConfig: { + connectionOptions: "retryWrites=true&w=majority", + host: "examplecluster.abc123.mongodb.net", + password: "securePassword123", + username: "jane_doe", + }, + redshiftConfig: { + databaseName: "your_database", + host: "examplecluster.12345.us-west-1.redshift.amazonaws.com", + password: "securePassword123", + port: "5432", + username: "jane_doe", + }, + snowflakeConfig: { + databaseName: "your_database", + host: "abc123.us-east4.gcp.snowflakecomputing.com", + password: "securePassword123", + role: "your_role", + username: "jane_doe", + warehouseName: "your_warehouse", + }, +}).then((res: CreateSourceResponse) => { + if (res.statusCode == 200) { + // handle response + } +}); +``` + +## getSources + +Get all sources + +### Example Usage + +```typescript +import { Fabra } from "@fabra/sdk"; +import { GetSourcesResponse } from "@fabra/sdk/dist/sdk/models/operations"; +import { ConnectionTypeEnum } from "@fabra/sdk/dist/sdk/models/shared"; + +const sdk = new Fabra({ + security: { + apiKeyAuth: "YOUR_API_KEY_HERE", + }, +}); + +sdk.source.getSources().then((res: GetSourcesResponse) => { + if (res.statusCode == 200) { + // handle response + } +}); +``` diff --git a/docs/sync/README.md b/docs/sync/README.md new file mode 100755 index 0000000..382d9f8 --- /dev/null +++ b/docs/sync/README.md @@ -0,0 +1,80 @@ +# sync + +## Overview + +Operations on syncs + +### Available Operations + +* [createSync](#createsync) - Create a new sync +* [getSyncs](#getsyncs) - Get all syncs + +## createSync + +Create a new sync + +### Example Usage + +```typescript +import { Fabra } from "@fabra/sdk"; +import { CreateSyncResponse } from "@fabra/sdk/dist/sdk/models/operations"; +import { FrequencyUnitsEnum } from "@fabra/sdk/dist/sdk/models/shared"; + +const sdk = new Fabra({ + security: { + apiKeyAuth: "YOUR_API_KEY_HERE", + }, +}); + +sdk.sync.createSync({ + cursorField: "updated_at", + customJoin: "select * from events join additional_properties on events.id = additional_properties.event_id;", + destinationId: 2, + displayName: "Event Sync", + fieldMappings: [ + { + destinationFieldName: "event", + sourceFieldName: "event_name", + }, + { + destinationFieldName: "event", + sourceFieldName: "event_name", + }, + ], + frequency: 30, + frequencyUnits: FrequencyUnitsEnum.Hours, + namespace: "end_customer_bigquery_dataset", + objectId: 3, + primaryKey: "event_id", + sourceId: 1, + tableName: "end_customer_events", +}).then((res: CreateSyncResponse) => { + if (res.statusCode == 200) { + // handle response + } +}); +``` + +## getSyncs + +Get all syncs + +### Example Usage + +```typescript +import { Fabra } from "@fabra/sdk"; +import { GetSyncsResponse } from "@fabra/sdk/dist/sdk/models/operations"; +import { FrequencyUnitsEnum } from "@fabra/sdk/dist/sdk/models/shared"; + +const sdk = new Fabra({ + security: { + apiKeyAuth: "YOUR_API_KEY_HERE", + }, +}); + +sdk.sync.getSyncs().then((res: GetSyncsResponse) => { + if (res.statusCode == 200) { + // handle response + } +}); +``` diff --git a/files.gen b/files.gen index 8b7da18..08faf63 100755 --- a/files.gen +++ b/files.gen @@ -5,6 +5,7 @@ src/sdk/object.ts src/sdk/source.ts src/sdk/sync.ts src/sdk/sdk.ts +.eslintrc.yml jest.config.js package-lock.json package.json @@ -19,6 +20,8 @@ src/internal/utils/retries.ts src/internal/utils/security.ts src/internal/utils/utils.ts src/sdk/index.ts +src/sdk/types/index.ts +src/sdk/types/rfcdate.ts tsconfig.json src/sdk/models/operations/getnamespaces.ts src/sdk/models/operations/getschema.ts @@ -33,7 +36,8 @@ src/sdk/models/operations/getsources.ts src/sdk/models/operations/createsync.ts src/sdk/models/operations/getsyncs.ts src/sdk/models/operations/index.ts -src/sdk/models/shared/columnschema.ts +src/sdk/models/shared/namespaces.ts +src/sdk/models/shared/field.ts src/sdk/models/shared/fieldtypeenum.ts src/sdk/models/shared/destination.ts src/sdk/models/shared/connection.ts @@ -56,4 +60,11 @@ src/sdk/models/shared/fieldmapping.ts src/sdk/models/shared/syncinput.ts src/sdk/models/shared/security.ts src/sdk/models/shared/index.ts +docs/fabra/README.md +docs/connection/README.md +docs/destination/README.md +docs/linktoken/README.md +docs/object/README.md +docs/source/README.md +docs/sync/README.md USAGE.md \ No newline at end of file diff --git a/gen.yaml b/gen.yaml index d289a31..90aa1b0 100644 --- a/gen.yaml +++ b/gen.yaml @@ -1,13 +1,14 @@ configVersion: 1.0.0 management: - docChecksum: 8b6e699ac2ed042ca62a8341762bfe53 + docChecksum: d52103ca533cedd698e27003b18f84c4 docVersion: 0.1.0 - speakeasyVersion: 1.8.5 + speakeasyVersion: 1.29.2 generation: telemetryEnabled: false sdkClassName: fabra sdkFlattening: false typescript: - version: 0.5.2 + version: 0.21.2 author: fabra + maxMethodParams: 0 packageName: '@fabra/sdk' diff --git a/jest.config.js b/jest.config.js index 1d5f0de..a80354c 100755 --- a/jest.config.js +++ b/jest.config.js @@ -1,8 +1,5 @@ module.exports = { - preset: 'ts-jest', - testEnvironment: 'node', - verbose: false, - testPathIgnorePatterns: [ - "/__tests__/helpers.ts" - ] + preset: "ts-jest", + testEnvironment: "node", + testPathIgnorePatterns: ["/__tests__/helpers.ts"], }; diff --git a/package-lock.json b/package-lock.json index 2db70de..3c024f7 100755 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@fabra/sdk", - "version": "0.5.2", + "version": "0.21.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@fabra/sdk", - "version": "0.5.2", + "version": "0.21.2", "dependencies": { "axios": "^1.1.3", "class-transformer": "^0.5.1", @@ -15,307 +15,2568 @@ }, "devDependencies": { "@types/node": "^18.11.5", + "@typescript-eslint/eslint-plugin": "^5.56.0", + "@typescript-eslint/parser": "^5.56.0", + "eslint": "^8.36.0", "typescript": "^4.8.4" } }, - "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/@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/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "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/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==", + "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": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" + "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/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "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": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "@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": { - "url": "https://github.com/sponsors/ljharb" + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "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/@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/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "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": { - "delayed-stream": "~1.0.0" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": ">= 0.8" + "node": ">= 8" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "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": ">=0.4.0" + "node": ">= 8" } }, - "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" - } - ], + "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": ">=4.0" + "node": ">= 8" + } + }, + "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/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/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/@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": { - "debug": { + "typescript": { "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==", + "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": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "@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": ">= 6" + "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/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "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": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "@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": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "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": { - "function-bind": "^1.1.1" + "@typescript-eslint/typescript-estree": "5.56.0", + "@typescript-eslint/utils": "5.56.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" }, "engines": { - "node": ">= 0.4.0" + "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/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "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": ">= 0.4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "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==", + "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": ">= 0.6" + "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/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==", + "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": { - "mime-db": "1.52.0" + "@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": ">= 0.6" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "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/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "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": { - "side-channel": "^1.0.4" + "@typescript-eslint/types": "5.56.0", + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": ">=0.6" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "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/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/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "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/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": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/typescript": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", - "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", + "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, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "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": ">=4.2.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } - } - }, - "dependencies": { - "@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==", + }, + "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 }, - "asynckit": { + "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==" }, - "axios": { + "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==", - "requires": { + "dependencies": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, - "call-bind": { + "node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "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" + "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" } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" - }, - "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" + "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" } }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "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" } }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" + "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" } }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + "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==" }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + "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/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/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/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/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/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/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/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==", + "dev": true, + "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==", + "dev": true, + "engines": { + "node": ">=0.10.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==", + "dev": true + }, + "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/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/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/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-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/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/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-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-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/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "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-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/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/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/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.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/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/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/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/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/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/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-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/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/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/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/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/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/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/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/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/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-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/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/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/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-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/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/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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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/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/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": { + "@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 + }, + "@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" + } + }, + "@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/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/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 + }, + "@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": {} + }, + "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-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" + } + }, + "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" + } + }, + "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" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "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" + } + }, + "class-transformer": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", + "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==" + }, + "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 + }, + "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" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "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" + } + }, + "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 + }, + "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" + } + }, + "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==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "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==", + "dev": true + }, + "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" + } + }, + "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 + }, + "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" + } + }, + "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-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 + }, + "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" + } + }, + "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-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "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 + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "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-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" + } + }, + "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 + }, + "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" + } + }, + "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.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" + } + }, + "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", @@ -325,44 +2586,317 @@ "mime-db": "1.52.0" } }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + "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 + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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-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 + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "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 }, "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==" }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "requires": { - "side-channel": "^1.0.4" - } + "punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "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 }, "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==" }, - "side-channel": { + "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 + }, + "reusify": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "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 + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "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-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" + } + }, + "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 + }, + "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" + } + }, + "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": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "prelude-ls": "^1.2.1" } }, + "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 + }, + "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" + } + }, + "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==", + "dev": true + }, + "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 + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "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/package.json b/package.json index c8b8443..aaf749b 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@fabra/sdk", - "version": "0.5.2", + "version": "0.21.2", "author": "fabra", "scripts": { "prepare": "tsc --build" @@ -13,7 +13,10 @@ }, "devDependencies": { "@types/node": "^18.11.5", - "typescript": "^4.8.4" + "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": [ diff --git a/src/index.ts b/src/index.ts index d28eeda..3130314 100755 --- a/src/index.ts +++ b/src/index.ts @@ -1 +1,5 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + export * from "./sdk"; diff --git a/src/internal/utils/contenttype.ts b/src/internal/utils/contenttype.ts index 50c1d0a..9aaafa9 100755 --- a/src/internal/utils/contenttype.ts +++ b/src/internal/utils/contenttype.ts @@ -1,3 +1,7 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + export function matchContentType( contentType: string, pattern: string diff --git a/src/internal/utils/headers.ts b/src/internal/utils/headers.ts index 5391102..d570fda 100755 --- a/src/internal/utils/headers.ts +++ b/src/internal/utils/headers.ts @@ -1,23 +1,37 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + import { AxiosResponseHeaders, RawAxiosResponseHeaders } from "axios"; import { + ParamDecorator, isBooleanRecord, isEmpty, isNumberRecord, isStringRecord, parseParamDecorator, - ParamDecorator, - convertIfDateObjectToISOString, + valToString, } from "./utils"; +import { requestMetadataKey } from "./requestbody"; + export const headerMetadataKey = "header"; export function getHeadersFromRequest(headerParams: any): any { if (headerParams == null) return; - let headers: any = {}; + 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, @@ -37,8 +51,7 @@ export function getHeadersFromRequest(headerParams: any): any { const value: string = serializeHeader( headerParams[fname], - headerDecorator.Explode, - headerDecorator.DateTimeFormat + headerDecorator.Explode ); if (value != "") headers[headerDecorator.ParamName] = value; @@ -75,16 +88,12 @@ export function getHeadersFromResponse( return reponseHeaders; } -function serializeHeader( - header: any, - explode: boolean, - dateTimeFormat?: string -): string { +function serializeHeader(header: any, explode: boolean): string { const headerVals: string[] = []; if (Array.isArray(header)) { header.forEach((val: any) => { - headerVals.push(convertIfDateObjectToISOString(val, dateTimeFormat)); + headerVals.push(valToString(val)); }); } else if ( isStringRecord(header) || @@ -92,8 +101,9 @@ function serializeHeader( isBooleanRecord(header) ) { Object.getOwnPropertyNames(header).forEach((headerKey: string) => { - if (explode) headerVals.push(`${headerKey}=${header[headerKey]}`); - else headerVals.push(`${headerKey},${header[headerKey]}`); + 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) => { @@ -114,10 +124,7 @@ function serializeHeader( if (headerDecorator == null) return; - const headerFieldValue = convertIfDateObjectToISOString( - header[headerKey], - headerDecorator.DateTimeFormat - ); + const headerFieldValue = valToString(header[headerKey]); if (isEmpty(headerFieldValue)) return; else if (explode) diff --git a/src/internal/utils/index.ts b/src/internal/utils/index.ts index d885793..db8bb23 100755 --- a/src/internal/utils/index.ts +++ b/src/internal/utils/index.ts @@ -1,3 +1,7 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + export * from "./contenttype"; export * from "./headers"; export * from "./pathparams"; diff --git a/src/internal/utils/pathparams.ts b/src/internal/utils/pathparams.ts index 70d029e..cdc9d8c 100755 --- a/src/internal/utils/pathparams.ts +++ b/src/internal/utils/pathparams.ts @@ -1,13 +1,15 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + import { - encodeAndConvertPrimitiveVal, ParamDecorator, - parseParamDecorator, -} from "./utils"; -import { - isStringRecord, - isNumberRecord, isBooleanRecord, isEmpty, + isNumberRecord, + isStringRecord, + parseParamDecorator, + valToString, } from "./utils"; export const ppMetadataKey = "pathParam"; @@ -15,15 +17,14 @@ export const ppMetadataKey = "pathParam"; export function getSimplePathParams( paramName: string, paramValue: any, - explode: boolean, - dateTimeFormat?: string + explode: boolean ): Map { const pathParams: Map = new Map(); const ppVals: string[] = []; if (Array.isArray(paramValue)) { paramValue.forEach((param) => { - ppVals.push(encodeAndConvertPrimitiveVal(param, dateTimeFormat)); + ppVals.push(encodeURIComponent(valToString(param))); }); pathParams.set(paramName, ppVals.join(",")); } else if ( @@ -32,9 +33,8 @@ export function getSimplePathParams( isBooleanRecord(paramValue) ) { Object.getOwnPropertyNames(paramValue).forEach((paramKey: string) => { - const paramFieldValue = encodeAndConvertPrimitiveVal( - paramValue[paramKey], - dateTimeFormat + const paramFieldValue = encodeURIComponent( + valToString(paramValue[paramKey]) ); if (explode) ppVals.push(`${paramKey}=${paramFieldValue}`); @@ -61,9 +61,8 @@ export function getSimplePathParams( if (ppDecorator == null) return; - const paramFieldValue = encodeAndConvertPrimitiveVal( - paramValue[paramKey], - ppDecorator.DateTimeFormat + const paramFieldValue = encodeURIComponent( + valToString(paramValue[paramKey]) ); if (isEmpty(paramFieldValue)) return; @@ -74,10 +73,7 @@ export function getSimplePathParams( pathParams.set(paramName, ppVals.join(",")); } else { - pathParams.set( - paramName, - encodeAndConvertPrimitiveVal(paramValue, dateTimeFormat) - ); + pathParams.set(paramName, encodeURIComponent(valToString(paramValue))); } return pathParams; } diff --git a/src/internal/utils/queryparams.ts b/src/internal/utils/queryparams.ts index b28babe..2776316 100755 --- a/src/internal/utils/queryparams.ts +++ b/src/internal/utils/queryparams.ts @@ -1,26 +1,39 @@ -import { ParamDecorator } from "./utils"; -import { - convertIfDateObjectToISOString, - encodeAndConvertPrimitiveVal, - parseParamDecorator, -} from "./utils"; +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import {ParamDecorator, parseParamDecorator, populateFromGlobals, valToString} from "./utils"; + +import {requestMetadataKey} from "./requestbody"; export const qpMetadataKey = "queryParam"; const queryStringPrefix = "?"; -export function serializeQueryParams(queryParams: any): string { - let queryStringParts: string[] = []; +export function serializeQueryParams(queryParams: any, globals?: any): string { + const queryStringParts: string[] = []; if (!queryParams) return queryStringParts.join("&"); - const fieldNames: string[] = Object.getOwnPropertyNames(queryParams); + 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: (params: any) => "" }; + if (!qpAnn) return {serialize: () => ""}; const qpDecorator: ParamDecorator = parseParamDecorator( qpAnn, @@ -31,40 +44,42 @@ export function serializeQueryParams(queryParams: any): string { if (!qpDecorator) return; + let value = queryParams[fname]; + value = populateFromGlobals(value, fname, "queryParam", globals); + if (qpDecorator.Serialization === "json") - queryStringParts.push(jsonSerializer({ [fname]: queryParams[fname] })); + queryStringParts.push(jsonSerializer({[qpDecorator.ParamName]: value})); else { switch (qpDecorator.Style) { case "deepObject": queryStringParts.push( - deepObjectSerializer( - { [fname]: queryParams[fname] }, - qpDecorator.DateTimeFormat - ) + deepObjectSerializer({[qpDecorator.ParamName]: value}) ); return; case "form": if (!qpDecorator.Explode) queryStringParts.push( - formSerializer( - { [fname]: queryParams[fname] }, - qpDecorator.DateTimeFormat - ) + noExplodeSerializer({[qpDecorator.ParamName]: value}) ); else queryStringParts.push( - formSerializerExplode( - { [fname]: queryParams[fname] }, - qpDecorator.DateTimeFormat - ) + 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( - { [fname]: queryParams[fname] }, - qpDecorator.DateTimeFormat - ) + formSerializerExplode({[qpDecorator.ParamName]: value}) ); } } @@ -77,53 +92,21 @@ function jsonSerializer(params: Record): string { const query: string[] = []; Object.entries(Object.assign({}, params)).forEach(([key, value]) => { - 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}":${JSON.stringify( - convertIfDateObjectToISOString( - value[paramKey], - qpDecorator.DateTimeFormat - ) - )}`; - }) - .join(","); - query.push(`${key}={${encodeURIComponent(values)}}`); + query.push(`${key}=${encodeURIComponent(JSON.stringify(value))}`); }); return query.join("&"); } // TODO: Add support for disabling percent encoding for reserved characters -function formSerializer( - params: Record, - dateTimeFormat?: string -): string { +function noExplodeSerializer(params: Record, delimiter = ","): string { const query: string[] = []; Object.entries(Object.assign({}, params)).forEach(([key, value]) => { if (!value) return; if (value !== Object(value)) - query.push( - `${key}=${encodeAndConvertPrimitiveVal(value, dateTimeFormat)}` - ); + query.push(`${key}=${encodeURIComponent(valToString(value))}`); else if (Array.isArray(value)) { - const values: string = value - .map((aValue) => convertIfDateObjectToISOString(aValue, dateTimeFormat)) - .join(","); + const values: string = value.map((aValue) => aValue).join(delimiter); query.push(`${key}=${encodeURIComponent(values)}`); } else { @@ -144,10 +127,7 @@ function formSerializer( if (qpDecorator == null) return; - return `${paramKey},${convertIfDateObjectToISOString( - value[paramKey], - qpDecorator.DateTimeFormat - )}`; + return `${paramKey},${valToString(value[paramKey])}`; }) .join(","); query.push(`${key}=${encodeURIComponent(values)}`); @@ -157,32 +137,23 @@ function formSerializer( } // TODO: Add support for disabling percent encoding for reserved characters -function formSerializerExplode( - params: Record, - dateTimeFormat?: string -): string { +function formSerializerExplode(params: Record): string { const query: string[] = []; Object.entries(Object.assign({}, params)).forEach(([key, value]) => { if (!value) return; if (value !== Object(value)) - query.push( - `${key}=${encodeAndConvertPrimitiveVal(value, dateTimeFormat)}` - ); + query.push(`${key}=${encodeURIComponent(value)}`); else if (Array.isArray(value)) { query.push( value - .map( - (aValue) => - `${key}=${encodeAndConvertPrimitiveVal(aValue, dateTimeFormat)}` - ) + .map((aValue) => `${key}=${encodeURIComponent(valToString(aValue))}`) .join("&") ); } else query.push( Object.getOwnPropertyNames(value) .map((paramKey: string) => { - const qpAnn: string = Reflect.getMetadata( qpMetadataKey, value, @@ -198,9 +169,8 @@ function formSerializerExplode( if (qpDecorator == null) return; - return `${paramKey}=${encodeAndConvertPrimitiveVal( - value[paramKey], - qpDecorator.DateTimeFormat + return `${paramKey}=${encodeURIComponent( + valToString(value[paramKey]) )}`; }) .join("&") @@ -210,27 +180,19 @@ function formSerializerExplode( } // TODO: Add support for disabling percent encoding for reserved characters -function deepObjectSerializer( - params: Record, - dateTimeFormat?: string -): string { +function deepObjectSerializer(params: Record): string { const query: string[] = []; Object.entries(Object.assign({}, params)).forEach(([key, value]) => { if (!value) return; if (value !== Object(value)) - query.push( - `${key}=${encodeAndConvertPrimitiveVal(value, dateTimeFormat)}` - ); + query.push(`${key}=${encodeURIComponent(value)}`); else if (Array.isArray(value)) { query.push( value .map( ([objKey, objValue]) => - `${key}[${objKey}]=${encodeAndConvertPrimitiveVal( - objValue, - dateTimeFormat - )}` + `${key}[${objKey}]=${encodeURIComponent(valToString(objValue))}` ) .join("&") ); @@ -238,7 +200,6 @@ function deepObjectSerializer( query.push( Object.getOwnPropertyNames(value) .map((paramKey: string) => { - const qpAnn: string = Reflect.getMetadata( qpMetadataKey, value, @@ -259,15 +220,13 @@ function deepObjectSerializer( return value[paramKey] .map( (arrValue: any) => - `${key}[${paramKey}]=${encodeAndConvertPrimitiveVal( - arrValue, - qpDecorator.DateTimeFormat + `${key}[${paramKey}]=${encodeURIComponent( + valToString(arrValue) )}` ) .join("&"); - return `${key}[${paramKey}]=${encodeAndConvertPrimitiveVal( - value[paramKey], - qpDecorator.DateTimeFormat + return `${key}[${paramKey}]=${encodeURIComponent( + valToString(value[paramKey]) )}`; }) .join("&") diff --git a/src/internal/utils/requestbody.ts b/src/internal/utils/requestbody.ts index e7defb9..40f601b 100755 --- a/src/internal/utils/requestbody.ts +++ b/src/internal/utils/requestbody.ts @@ -1,88 +1,94 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import {isBooleanRecord, isNumberRecord, isStringRecord, SerializationMethodToContentType, valToString,} from "./utils"; + import FormData from "form-data"; -import { - convertIfDateObjectToISOString, - isBooleanRecord, - isNumberRecord, - isStringRecord, -} from "./utils"; - -const requestMetadataKey = "request"; +import {RFCDate} from "../../sdk/types"; + +export const requestMetadataKey = "request"; const mpFormMetadataKey = "multipart_form"; -export function serializeRequestBody(request: any): [object, any] { - if (!request.hasOwnProperty(requestMetadataKey)) { - throw new Error("request body not found"); +export function serializeRequestBody( + request: any, + requestFieldName: string, + serializationMethod: string +): [object, any] { + if ( + request !== Object(request) || + !request.hasOwnProperty(requestFieldName) + ) { + return serializeContentType( + SerializationMethodToContentType[serializationMethod], + request + ); } - let requestBodyObj = request; - - const firstLevelRequestAnn: string = Reflect.getMetadata( + const requestBodyAnn: string = Reflect.getMetadata( requestMetadataKey, request, - requestMetadataKey + requestFieldName ); - if (firstLevelRequestAnn == null) - requestBodyObj = request[requestMetadataKey]; - - let [requestHeaders, requestBody]: [object, any] = [{}, {}]; - - const fieldNames: string[] = Object.getOwnPropertyNames(requestBodyObj); - fieldNames.forEach((fname) => { - const requestAnn: string = Reflect.getMetadata( - requestMetadataKey, - requestBodyObj, - fname - ); - if (requestAnn == null) return; - - const requestDecorator: RequestDecorator = - parseRequestDecorator(requestAnn); - - switch (requestDecorator.MediaType) { - case "multipart/form-data": - case "multipart/mixed": - requestBody = encodeMultipartFormData(requestBodyObj[fname]); - requestHeaders = (requestBody as FormData).getHeaders(); - break; + if (!requestBodyAnn) { + throw new Error("invalid request type"); + } - case "application/x-www-form-urlencoded": - [requestHeaders, requestBody] = [ - { "Content-Type": `${requestDecorator.MediaType}` }, - encodeFormUrlEncodeData(requestBodyObj[fname]), - ]; - break; + const requestDecorator: RequestDecorator = + parseRequestDecorator(requestBodyAnn); + return serializeContentType( + requestDecorator.MediaType, + request[requestFieldName] + ); +} - case "application/json": - case "text/json": - [requestHeaders, requestBody] = [ - { "Content-Type": `${requestDecorator.MediaType}` }, - requestBodyObj[fname], - ]; - break; +const serializeContentType = ( + contentType: string, + reqBody: any +): [object, any] => { + let [requestHeaders, requestBody]: [object, any] = [{}, {}]; - default: - requestBody = requestBodyObj[fname]; - const requestBodyType: string = typeof requestBody; - if ( - requestBodyType === "string" || - requestBody instanceof String || - requestBody instanceof Uint8Array - ) - requestHeaders = { "Content-Type": `${requestDecorator.MediaType}` }; - else - throw new Error( - `invalid request body type ${requestBodyType} for mediaType ${requestDecorator.MediaType}` - ); + 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": + 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]; -} - -type FormAnnotation = { - name?: string; - style?: string; - explode?: boolean; - json?: boolean; }; const encodeFormUrlEncodeData = (data: any): FormData => { @@ -112,17 +118,9 @@ const encodeFormUrlEncodeData = (data: any): FormData => { if (formDecorator.Style === "form") { let parsed: Record; if (formDecorator.Explode === true) { - parsed = formExplode( - fname, - data[fname], - formDecorator.DateTimeFormat - ); + parsed = formExplode(fname, data[fname]); } else { - parsed = formNotExplode( - fname, - data[fname], - formDecorator.DateTimeFormat - ); + parsed = formNotExplode(fname, data[fname]); } Object.keys(parsed).forEach((key) => { @@ -135,11 +133,7 @@ const encodeFormUrlEncodeData = (data: any): FormData => { return formData; }; -const formExplode = ( - fname: string, - data: any, - dateTimeFormat?: string -): Record => { +const formExplode = (fname: string, data: any): Record => { const exploded: Record = {}; if (Array.isArray(data)) { @@ -149,38 +143,30 @@ const formExplode = ( } exploded[fname].push(value); }); - } else { - if (typeof data === "object") { - if (data instanceof Date) { - if (!exploded[fname]) { - exploded[fname] = []; - } - exploded[fname].push( - convertIfDateObjectToISOString(data, dateTimeFormat) - ); - return exploded; + } 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(data.toString()); } + } else { + if (!exploded[fname]) { + exploded[fname] = []; + } + exploded[fname].push(valToString(data)); } return exploded; }; -const formNotExplode = ( - fname: string, - data: any, - dateTimeFormat?: string -): Record => { +const formNotExplode = (fname: string, data: any): Record => { const notExploded: Record = {}; if (Array.isArray(data)) { @@ -188,29 +174,25 @@ const formNotExplode = ( notExploded[fname] = []; } notExploded[fname].push(data.map((item) => item.toString()).join(",")); - } else { - if (typeof data === "object") { - if (data instanceof Date) { - if (!notExploded[fname]) { - notExploded[fname] = []; - } - notExploded[fname].push( - convertIfDateObjectToISOString(data, dateTimeFormat) - ); - return notExploded; + } 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(data.toString()); } + } else { + if (!notExploded[fname]) { + notExploded[fname] = []; + } + notExploded[fname].push(valToString(data)); } return notExploded; }; @@ -237,8 +219,6 @@ function parseFormDecorator(formAnn: string): FormDecorator { case "json": formDecorator.JSON = formVal === "true"; break; - case "dateTimeFormat": - formDecorator.DateTimeFormat = formVal; } }); @@ -250,7 +230,6 @@ class FormDecorator { Style?: string; Explode?: boolean; JSON?: boolean; - DateTimeFormat?: string; constructor( Name?: string, @@ -270,7 +249,6 @@ function encodeMultipartFormData(form: any): FormData { const fieldNames: string[] = Object.getOwnPropertyNames(form); fieldNames.forEach((fname) => { - const mpFormAnn: string = Reflect.getMetadata( mpFormMetadataKey, form, @@ -285,38 +263,14 @@ function encodeMultipartFormData(form: any): FormData { if (mpFormDecorator.File) return encodeMultipartFormDataFile(formData, form[fname]); else if (mpFormDecorator.JSON) { - formData.append( - mpFormDecorator.Name, - JSON.stringify(form[fname], (key, value) => { - return convertIfDateObjectToISOString( - value, - mpFormDecorator.DateTimeFormat - ); - }) - ); + formData.append(mpFormDecorator.Name, JSON.stringify(form[fname])); } else { if (Array.isArray(form[fname])) { form[fname].forEach((val: any) => { - formData.append( - mpFormDecorator.Name + "[]", - String( - convertIfDateObjectToISOString( - val, - mpFormDecorator.DateTimeFormat - ) - ) - ); + formData.append(mpFormDecorator.Name + "[]", valToString(val)); }); } else { - formData.append( - mpFormDecorator.Name, - String( - convertIfDateObjectToISOString( - form[fname], - mpFormDecorator.DateTimeFormat - ) - ) - ); + formData.append(mpFormDecorator.Name, valToString(form[fname])); } } }); @@ -333,7 +287,6 @@ function encodeMultipartFormDataFile(formData: FormData, file: any): FormData { const fieldNames: string[] = Object.getOwnPropertyNames(file); fieldNames.forEach((fname) => { - const mpFormAnn: string = Reflect.getMetadata( mpFormMetadataKey, file, @@ -385,8 +338,6 @@ function parseMultipartFormDecorator( case "json": mpFormDecorator.JSON = mpFormVal == "true"; break; - case "dateTimeFormat": - mpFormDecorator.DateTimeFormat = mpFormVal; } }); @@ -398,7 +349,6 @@ class MultipartFormDecorator { Content: boolean; JSON: boolean; Name: string; - DateTimeFormat?: string; constructor(File: boolean, Content: boolean, JSON: boolean, Name: string) { this.File = File; diff --git a/src/internal/utils/retries.ts b/src/internal/utils/retries.ts index db616a6..6c77b95 100755 --- a/src/internal/utils/retries.ts +++ b/src/internal/utils/retries.ts @@ -1,3 +1,7 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + import { AxiosError, AxiosResponse } from "axios"; export class BackoffStrategy { @@ -24,7 +28,7 @@ export class RetryConfig { backoff?: BackoffStrategy; retryConnectionErrors: boolean; - constructor(strategy: string, retryConnectionErrors: boolean = true) { + constructor(strategy: string, retryConnectionErrors = true) { this.strategy = strategy; this.retryConnectionErrors = retryConnectionErrors; } @@ -135,7 +139,7 @@ async function retryBackoff( const start = Date.now(); let x = 0; - while (true) { + while (true) { /* eslint-disable-line no-constant-condition */ try { return await fn(); } catch (err) { diff --git a/src/internal/utils/security.ts b/src/internal/utils/security.ts index 0adbae6..b109f9d 100755 --- a/src/internal/utils/security.ts +++ b/src/internal/utils/security.ts @@ -1,3 +1,7 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + import { AxiosInstance } from "axios"; const securityMetadataKey = "security"; @@ -158,13 +162,14 @@ function parseSecuritySchemeValue( case "query": client.defaults.params[securityDecorator.Name] = value; break; - case "cookie": + case "cookie": { const securityDecoratorName: string = securityDecorator.Name; const val: string = value; client.defaults.headers.common[ "Cookie" ] = `${securityDecoratorName}=${val}`; break; + } default: throw new Error("not supported"); } diff --git a/src/internal/utils/utils.ts b/src/internal/utils/utils.ts index f29a8dd..ff883d5 100755 --- a/src/internal/utils/utils.ts +++ b/src/internal/utils/utils.ts @@ -1,8 +1,24 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + import "reflect-metadata"; import { getSimplePathParams, ppMetadataKey } from "./pathparams"; -interface propInfo { +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; @@ -60,7 +76,7 @@ function handleObject(value: any, elemType: any, elemDepth: number): any { export class SpeakeasyBase { constructor(payload?: Record) { - const props: propInfo[] = (this as any)["__props__"]; + const props: PropInfo[] = (this as any)["__props__"]; if (props) { for (const prop of props) { if (payload && payload.hasOwnProperty(prop.key)) { @@ -85,6 +101,12 @@ export class SpeakeasyBase { 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; } @@ -99,19 +121,16 @@ export class ParamDecorator { Explode: boolean; ParamName: string; Serialization?: string; - DateTimeFormat?: string; constructor( Style: string, Explode: boolean, ParamName: string, - Serialization?: string, - DateTimeFormat?: string + Serialization?: string ) { this.Style = Style; this.Explode = Explode; this.ParamName = ParamName; this.Serialization = Serialization; - this.DateTimeFormat = DateTimeFormat; } } @@ -131,7 +150,7 @@ export function SpeakeasyMetadata< } } - let props: propInfo[]; + let props: PropInfo[]; if (target.hasOwnProperty("__props__")) { props = (target as any)["__props__"]; } else { @@ -141,7 +160,7 @@ export function SpeakeasyMetadata< const prop = { key: propertyKey, type: Reflect.getMetadata("design:type", target, propertyKey), - } as propInfo; + } as PropInfo; if (params?.elemType) { prop.elemType = params.elemType; @@ -167,14 +186,29 @@ export function templateUrl( export function generateURL( serverURL: string, path: string, - pathParams: any + pathParams: any, + globals?: any ): string { const url: string = serverURL.replace(/\/$/, "") + path; const parsedParameters: Record = {}; - const fieldNames: string[] = Object.getOwnPropertyNames(pathParams); + + 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, @@ -182,17 +216,31 @@ export function generateURL( false ); if (ppDecorator == null) return; - switch (ppDecorator.Style) { - case "simple": - const simpleParams: Map = getSimplePathParams( - ppDecorator.ParamName, - pathParams[fname], - ppDecorator.Explode, - ppDecorator.DateTimeFormat - ); - simpleParams.forEach((value, key) => { - parsedParameters[key] = value; - }); + + 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); @@ -227,8 +275,6 @@ export function parseParamDecorator( case "serialization": decorator.Serialization = paramVal; break; - case "dateTimeFormat": - decorator.DateTimeFormat = paramVal; } }); return decorator; @@ -266,38 +312,87 @@ export function isBooleanRecord(obj: any): obj is Record { export function isEmpty(value: any): boolean { // check for undefined, null, and NaN - let res: boolean = false; + let res = false; if (typeof value === "number") res = Number.isNaN(value); else if (typeof value === "string") res = value === ""; return res || value == null; } -// If value is Date type, serialize as ISO string since Date constructor creates from system clock -export function convertIfDateObjectToISOString( - value: any, - dateTimeFormat?: string -): any { - const dtFormat = dateTimeFormat ?? "YYYY-MM-DDThh:mm:ss.sssZ"; - if (value instanceof Date) { - if (dtFormat === "YYYY-MM-DD") { - const dateRegex = /^(\d{4})-(\d{2})-(\d{2})/; - const [_, year, month, day]: RegExpMatchArray = value - .toISOString() - .match(dateRegex)!; - return `${year}-${month}-${day}`; +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); } - if (dtFormat === "YYYY-MM-DDThh:mm:ss.sssZ") { - return value.toISOString(); + 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 value; + + return resFieldDepth; } -export function encodeAndConvertPrimitiveVal( +export function populateFromGlobals( value: any, - dateTimeFormat?: string + fieldName: string, + paramType: string, + globals: any ): any { - return encodeURIComponent( - convertIfDateObjectToISOString(value, dateTimeFormat) - ); + 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(); } diff --git a/src/sdk/connection.ts b/src/sdk/connection.ts index 0c26a6c..a92f449 100755 --- a/src/sdk/connection.ts +++ b/src/sdk/connection.ts @@ -1,8 +1,15 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + import * as utils from "../internal/utils"; import * as operations from "./models/operations"; +import * as shared from "./models/shared"; import { AxiosInstance, AxiosRequestConfig, AxiosResponse } from "axios"; -import { plainToInstance } from "class-transformer"; +/** + * Operations on connections + */ export class Connection { _defaultClient: AxiosInstance; _securityClient: AxiosInstance; @@ -11,7 +18,14 @@ export class Connection { _sdkVersion: string; _genVersion: string; - constructor(defaultClient: AxiosInstance, securityClient: AxiosInstance, serverURL: string, language: string, sdkVersion: string, genVersion: string) { + constructor( + defaultClient: AxiosInstance, + securityClient: AxiosInstance, + serverURL: string, + language: string, + sdkVersion: string, + genVersion: string + ) { this._defaultClient = defaultClient; this._securityClient = securityClient; this._serverURL = serverURL; @@ -19,154 +33,161 @@ export class Connection { this._sdkVersion = sdkVersion; this._genVersion = genVersion; } - + /** - * getNamespaces - Get all namespaces - **/ - getNamespaces( + * Get all namespaces + */ + async getNamespaces( req: operations.GetNamespacesRequest, config?: AxiosRequestConfig ): Promise { if (!(req instanceof utils.SpeakeasyBase)) { req = new operations.GetNamespacesRequest(req); } - + const baseURL: string = this._serverURL; const url: string = baseURL.replace(/\/$/, "") + "/connection/namespaces"; - - const client: AxiosInstance = this._securityClient!; - - const queryParams: string = utils.serializeQueryParams(req.queryParams); - - const r = client.request({ + + const client: AxiosInstance = this._securityClient || this._defaultClient; + + const queryParams: string = utils.serializeQueryParams(req); + + const httpRes: AxiosResponse = await client.request({ + validateStatus: () => true, url: url + queryParams, method: "get", ...config, }); - - return r.then((httpRes: AxiosResponse) => { - const contentType: string = httpRes?.headers?.["content-type"] ?? ""; - - if (httpRes?.status == null) throw new Error(`status code not found in response: ${httpRes}`); - const res: operations.GetNamespacesResponse = {statusCode: httpRes.status, contentType: contentType, rawResponse: httpRes}; - switch (true) { - case httpRes?.status == 200: - if (utils.matchContentType(contentType, `application/json`)) { - res.getNamespaces200ApplicationJSONObject = plainToInstance( - operations.GetNamespaces200ApplicationJSON, - httpRes?.data as operations.GetNamespaces200ApplicationJSON, - { excludeExtraneousValues: true } - ); - } - break; - case httpRes?.status == 401: - break; - case httpRes?.status == 500: - break; + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.GetNamespacesResponse = + new operations.GetNamespacesResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/json`)) { + res.namespaces = utils.objectToClass( + httpRes?.data, + shared.Namespaces + ); } + break; + case [401, 500].includes(httpRes?.status): + break; + } - return res; - }) + return res; } - /** - * getSchema - Get schema for table - **/ - getSchema( + * Get schema for table + */ + async getSchema( req: operations.GetSchemaRequest, config?: AxiosRequestConfig ): Promise { if (!(req instanceof utils.SpeakeasyBase)) { req = new operations.GetSchemaRequest(req); } - + const baseURL: string = this._serverURL; const url: string = baseURL.replace(/\/$/, "") + "/connection/schema"; - - const client: AxiosInstance = this._securityClient!; - - const queryParams: string = utils.serializeQueryParams(req.queryParams); - - const r = client.request({ + + const client: AxiosInstance = this._securityClient || this._defaultClient; + + const queryParams: string = utils.serializeQueryParams(req); + + const httpRes: AxiosResponse = await client.request({ + validateStatus: () => true, url: url + queryParams, method: "get", ...config, }); - - return r.then((httpRes: AxiosResponse) => { - 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 = {statusCode: httpRes.status, contentType: contentType, rawResponse: httpRes}; - switch (true) { - case httpRes?.status == 200: - if (utils.matchContentType(contentType, `application/json`)) { - res.getSchema200ApplicationJSONObject = plainToInstance( - operations.GetSchema200ApplicationJSON, - httpRes?.data as operations.GetSchema200ApplicationJSON, - { excludeExtraneousValues: true } - ); - } - break; - case httpRes?.status == 401: - break; - case httpRes?.status == 500: - break; + + 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, + }); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/json`)) { + res.getSchema200ApplicationJSONObject = utils.objectToClass( + httpRes?.data, + operations.GetSchema200ApplicationJSON + ); } + break; + case [401, 500].includes(httpRes?.status): + break; + } - return res; - }) + return res; } - /** - * getTables - Get all tables - **/ - getTables( + * Get all tables + */ + async getTables( req: operations.GetTablesRequest, config?: AxiosRequestConfig ): Promise { if (!(req instanceof utils.SpeakeasyBase)) { req = new operations.GetTablesRequest(req); } - + const baseURL: string = this._serverURL; const url: string = baseURL.replace(/\/$/, "") + "/connection/tables"; - - const client: AxiosInstance = this._securityClient!; - - const queryParams: string = utils.serializeQueryParams(req.queryParams); - - const r = client.request({ + + const client: AxiosInstance = this._securityClient || this._defaultClient; + + const queryParams: string = utils.serializeQueryParams(req); + + const httpRes: AxiosResponse = await client.request({ + validateStatus: () => true, url: url + queryParams, method: "get", ...config, }); - - return r.then((httpRes: AxiosResponse) => { - const contentType: string = httpRes?.headers?.["content-type"] ?? ""; - - if (httpRes?.status == null) throw new Error(`status code not found in response: ${httpRes}`); - const res: operations.GetTablesResponse = {statusCode: httpRes.status, contentType: contentType, rawResponse: httpRes}; - switch (true) { - case httpRes?.status == 200: - if (utils.matchContentType(contentType, `application/json`)) { - res.getTables200ApplicationJSONObject = plainToInstance( - operations.GetTables200ApplicationJSON, - httpRes?.data as operations.GetTables200ApplicationJSON, - { excludeExtraneousValues: true } - ); - } - break; - case httpRes?.status == 401: - break; - case httpRes?.status == 500: - break; + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.GetTablesResponse = new operations.GetTablesResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/json`)) { + res.getTables200ApplicationJSONObject = utils.objectToClass( + httpRes?.data, + operations.GetTables200ApplicationJSON + ); } + break; + case [401, 500].includes(httpRes?.status): + break; + } - return res; - }) + return res; } - } diff --git a/src/sdk/destination.ts b/src/sdk/destination.ts index 096c074..c3a1a94 100755 --- a/src/sdk/destination.ts +++ b/src/sdk/destination.ts @@ -1,8 +1,15 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + import * as utils from "../internal/utils"; import * as operations from "./models/operations"; +import * as shared from "./models/shared"; import { AxiosInstance, AxiosRequestConfig, AxiosResponse } from "axios"; -import { plainToInstance } from "class-transformer"; +/** + * Operations on destinations + */ export class Destination { _defaultClient: AxiosInstance; _securityClient: AxiosInstance; @@ -11,7 +18,14 @@ export class Destination { _sdkVersion: string; _genVersion: string; - constructor(defaultClient: AxiosInstance, securityClient: AxiosInstance, serverURL: string, language: string, sdkVersion: string, genVersion: string) { + constructor( + defaultClient: AxiosInstance, + securityClient: AxiosInstance, + serverURL: string, + language: string, + sdkVersion: string, + genVersion: string + ) { this._defaultClient = defaultClient; this._securityClient = securityClient; this._serverURL = serverURL; @@ -19,111 +33,121 @@ export class Destination { this._sdkVersion = sdkVersion; this._genVersion = genVersion; } - + /** - * createDestination - Create a new destination - **/ - createDestination( - req: operations.CreateDestinationRequest, + * Create a new destination + */ + async createDestination( + req: shared.DestinationInput, config?: AxiosRequestConfig ): Promise { if (!(req instanceof utils.SpeakeasyBase)) { - req = new operations.CreateDestinationRequest(req); + req = new shared.DestinationInput(req); } - + const baseURL: string = this._serverURL; const url: string = baseURL.replace(/\/$/, "") + "/destination"; let [reqBodyHeaders, reqBody]: [object, any] = [{}, {}]; try { - [reqBodyHeaders, reqBody] = utils.serializeRequestBody(req); + [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._securityClient!; - - const headers = {...reqBodyHeaders, ...config?.headers}; - if (reqBody == null || Object.keys(reqBody).length === 0) throw new Error("request body is required"); - - const r = client.request({ + + const client: AxiosInstance = this._securityClient || this._defaultClient; + + const headers = { ...reqBodyHeaders, ...config?.headers }; + if (reqBody == null || Object.keys(reqBody).length === 0) + throw new Error("request body is required"); + + const httpRes: AxiosResponse = await client.request({ + validateStatus: () => true, url: url, method: "post", headers: headers, - data: reqBody, + data: reqBody, ...config, }); - - return r.then((httpRes: AxiosResponse) => { - const contentType: string = httpRes?.headers?.["content-type"] ?? ""; - - if (httpRes?.status == null) throw new Error(`status code not found in response: ${httpRes}`); - const res: operations.CreateDestinationResponse = {statusCode: httpRes.status, contentType: contentType, rawResponse: httpRes}; - switch (true) { - case httpRes?.status == 200: - if (utils.matchContentType(contentType, `application/json`)) { - res.createDestination200ApplicationJSONObject = plainToInstance( - operations.CreateDestination200ApplicationJSON, - httpRes?.data as operations.CreateDestination200ApplicationJSON, - { excludeExtraneousValues: true } - ); - } - break; - case httpRes?.status == 401: - break; - case httpRes?.status == 500: - break; + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.CreateDestinationResponse = + new operations.CreateDestinationResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/json`)) { + res.createDestination200ApplicationJSONObject = utils.objectToClass( + httpRes?.data, + operations.CreateDestination200ApplicationJSON + ); } + break; + case [401, 500].includes(httpRes?.status): + break; + } - return res; - }) + return res; } - /** - * getDestinations - Get all destinations - **/ - getDestinations( + * Get all destinations + */ + async getDestinations( config?: AxiosRequestConfig ): Promise { const baseURL: string = this._serverURL; const url: string = baseURL.replace(/\/$/, "") + "/destinations"; - - const client: AxiosInstance = this._securityClient!; - - - const r = client.request({ + + const client: AxiosInstance = this._securityClient || this._defaultClient; + + const httpRes: AxiosResponse = await client.request({ + validateStatus: () => true, url: url, method: "get", ...config, }); - - return r.then((httpRes: AxiosResponse) => { - const contentType: string = httpRes?.headers?.["content-type"] ?? ""; - - if (httpRes?.status == null) throw new Error(`status code not found in response: ${httpRes}`); - const res: operations.GetDestinationsResponse = {statusCode: httpRes.status, contentType: contentType, rawResponse: httpRes}; - switch (true) { - case httpRes?.status == 200: - if (utils.matchContentType(contentType, `application/json`)) { - res.getDestinations200ApplicationJSONObject = plainToInstance( - operations.GetDestinations200ApplicationJSON, - httpRes?.data as operations.GetDestinations200ApplicationJSON, - { excludeExtraneousValues: true } - ); - } - break; - case httpRes?.status == 401: - break; - case httpRes?.status == 500: - break; + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.GetDestinationsResponse = + new operations.GetDestinationsResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/json`)) { + res.getDestinations200ApplicationJSONObject = utils.objectToClass( + httpRes?.data, + operations.GetDestinations200ApplicationJSON + ); } + break; + case [401, 500].includes(httpRes?.status): + break; + } - return res; - }) + return res; } - } diff --git a/src/sdk/index.ts b/src/sdk/index.ts index d28eeda..3130314 100755 --- a/src/sdk/index.ts +++ b/src/sdk/index.ts @@ -1 +1,5 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + export * from "./sdk"; diff --git a/src/sdk/linktoken.ts b/src/sdk/linktoken.ts index 4ca3711..2e76aba 100755 --- a/src/sdk/linktoken.ts +++ b/src/sdk/linktoken.ts @@ -1,9 +1,15 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + import * as utils from "../internal/utils"; import * as operations from "./models/operations"; import * as shared from "./models/shared"; import { AxiosInstance, AxiosRequestConfig, AxiosResponse } from "axios"; -import { plainToInstance } from "class-transformer"; +/** + * Operations on link tokens + */ export class LinkToken { _defaultClient: AxiosInstance; _securityClient: AxiosInstance; @@ -12,7 +18,14 @@ export class LinkToken { _sdkVersion: string; _genVersion: string; - constructor(defaultClient: AxiosInstance, securityClient: AxiosInstance, serverURL: string, language: string, sdkVersion: string, genVersion: string) { + constructor( + defaultClient: AxiosInstance, + securityClient: AxiosInstance, + serverURL: string, + language: string, + sdkVersion: string, + genVersion: string + ) { this._defaultClient = defaultClient; this._securityClient = securityClient; this._serverURL = serverURL; @@ -20,67 +33,75 @@ export class LinkToken { this._sdkVersion = sdkVersion; this._genVersion = genVersion; } - + /** - * createLinkToken - Create a new link token - **/ - createLinkToken( - req: operations.CreateLinkTokenRequest, + * Create a new link token + */ + async createLinkToken( + req: shared.CreateLinkTokenRequest, config?: AxiosRequestConfig ): Promise { if (!(req instanceof utils.SpeakeasyBase)) { - req = new operations.CreateLinkTokenRequest(req); + req = new shared.CreateLinkTokenRequest(req); } - + const baseURL: string = this._serverURL; const url: string = baseURL.replace(/\/$/, "") + "/link_token"; let [reqBodyHeaders, reqBody]: [object, any] = [{}, {}]; try { - [reqBodyHeaders, reqBody] = utils.serializeRequestBody(req); + [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._securityClient!; - - const headers = {...reqBodyHeaders, ...config?.headers}; - if (reqBody == null || Object.keys(reqBody).length === 0) throw new Error("request body is required"); - - const r = client.request({ + + const client: AxiosInstance = this._securityClient || this._defaultClient; + + const headers = { ...reqBodyHeaders, ...config?.headers }; + if (reqBody == null || Object.keys(reqBody).length === 0) + throw new Error("request body is required"); + + const httpRes: AxiosResponse = await client.request({ + validateStatus: () => true, url: url, method: "post", headers: headers, - data: reqBody, + data: reqBody, ...config, }); - - return r.then((httpRes: AxiosResponse) => { - const contentType: string = httpRes?.headers?.["content-type"] ?? ""; - if (httpRes?.status == null) throw new Error(`status code not found in response: ${httpRes}`); - const res: operations.CreateLinkTokenResponse = {statusCode: httpRes.status, contentType: contentType, rawResponse: httpRes}; - switch (true) { - case httpRes?.status == 200: - if (utils.matchContentType(contentType, `application/json`)) { - res.createLinkTokenResponse = plainToInstance( - shared.CreateLinkTokenResponse, - httpRes?.data as shared.CreateLinkTokenResponse, - { excludeExtraneousValues: true } - ); - } - break; - case httpRes?.status == 401: - break; - case httpRes?.status == 500: - break; + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.CreateLinkTokenResponse = + new operations.CreateLinkTokenResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/json`)) { + res.createLinkTokenResponse = utils.objectToClass( + httpRes?.data, + shared.CreateLinkTokenResponse + ); } + break; + case [401, 500].includes(httpRes?.status): + break; + } - return res; - }) + return res; } - } diff --git a/src/sdk/models/operations/createdestination.ts b/src/sdk/models/operations/createdestination.ts index 9e62f32..d1009e3 100755 --- a/src/sdk/models/operations/createdestination.ts +++ b/src/sdk/models/operations/createdestination.ts @@ -1,14 +1,15 @@ +/* + * 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"; import { Expose, Type } from "class-transformer"; - -export class CreateDestinationRequest extends SpeakeasyBase { - @SpeakeasyMetadata({ data: "request, media_type=application/json" }) - request: shared.DestinationInput; -} - +/** + * Successfully created destination + */ export class CreateDestination200ApplicationJSON extends SpeakeasyBase { @SpeakeasyMetadata() @Expose({ name: "destination" }) @@ -26,6 +27,9 @@ export class CreateDestinationResponse extends SpeakeasyBase { @SpeakeasyMetadata() rawResponse?: AxiosResponse; + /** + * Successfully created destination + */ @SpeakeasyMetadata() createDestination200ApplicationJSONObject?: CreateDestination200ApplicationJSON; -} \ No newline at end of file +} diff --git a/src/sdk/models/operations/createlinktoken.ts b/src/sdk/models/operations/createlinktoken.ts index c11caf1..c980aba 100755 --- a/src/sdk/models/operations/createlinktoken.ts +++ b/src/sdk/models/operations/createlinktoken.ts @@ -1,18 +1,18 @@ +/* + * 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"; -import { Type } from "class-transformer"; - - -export class CreateLinkTokenRequest extends SpeakeasyBase { - @SpeakeasyMetadata({ data: "request, media_type=application/json" }) - request: shared.CreateLinkTokenRequest; -} export class CreateLinkTokenResponse extends SpeakeasyBase { @SpeakeasyMetadata() contentType: string; + /** + * Successfully created link token + */ @SpeakeasyMetadata() createLinkTokenResponse?: shared.CreateLinkTokenResponse; @@ -21,4 +21,4 @@ export class CreateLinkTokenResponse extends SpeakeasyBase { @SpeakeasyMetadata() rawResponse?: AxiosResponse; -} \ No newline at end of file +} diff --git a/src/sdk/models/operations/createobject.ts b/src/sdk/models/operations/createobject.ts index e42c2a6..2d6cccf 100755 --- a/src/sdk/models/operations/createobject.ts +++ b/src/sdk/models/operations/createobject.ts @@ -1,14 +1,15 @@ +/* + * 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"; import { Expose, Type } from "class-transformer"; - -export class CreateObjectRequest extends SpeakeasyBase { - @SpeakeasyMetadata({ data: "request, media_type=application/json" }) - request: shared.ObjectInput; -} - +/** + * Successfully created object + */ export class CreateObject200ApplicationJSON extends SpeakeasyBase { @SpeakeasyMetadata() @Expose({ name: "object" }) @@ -26,6 +27,9 @@ export class CreateObjectResponse extends SpeakeasyBase { @SpeakeasyMetadata() rawResponse?: AxiosResponse; + /** + * Successfully created object + */ @SpeakeasyMetadata() createObject200ApplicationJSONObject?: CreateObject200ApplicationJSON; -} \ No newline at end of file +} diff --git a/src/sdk/models/operations/createsource.ts b/src/sdk/models/operations/createsource.ts index f17c111..c28c72f 100755 --- a/src/sdk/models/operations/createsource.ts +++ b/src/sdk/models/operations/createsource.ts @@ -1,14 +1,15 @@ +/* + * 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"; import { Expose, Type } from "class-transformer"; - -export class CreateSourceRequest extends SpeakeasyBase { - @SpeakeasyMetadata({ data: "request, media_type=application/json" }) - request: shared.SourceInput; -} - +/** + * Successfully created source + */ export class CreateSource200ApplicationJSON extends SpeakeasyBase { @SpeakeasyMetadata() @Expose({ name: "source" }) @@ -26,6 +27,9 @@ export class CreateSourceResponse extends SpeakeasyBase { @SpeakeasyMetadata() rawResponse?: AxiosResponse; + /** + * Successfully created source + */ @SpeakeasyMetadata() createSource200ApplicationJSONObject?: CreateSource200ApplicationJSON; -} \ No newline at end of file +} diff --git a/src/sdk/models/operations/createsync.ts b/src/sdk/models/operations/createsync.ts index 2bcab98..e1838e5 100755 --- a/src/sdk/models/operations/createsync.ts +++ b/src/sdk/models/operations/createsync.ts @@ -1,14 +1,15 @@ +/* + * 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"; import { Expose, Type } from "class-transformer"; - -export class CreateSyncRequest extends SpeakeasyBase { - @SpeakeasyMetadata({ data: "request, media_type=application/json" }) - request: shared.SyncInput; -} - +/** + * Successfully created sync + */ export class CreateSync200ApplicationJSON extends SpeakeasyBase { @SpeakeasyMetadata() @Expose({ name: "sync" }) @@ -26,6 +27,9 @@ export class CreateSyncResponse extends SpeakeasyBase { @SpeakeasyMetadata() rawResponse?: AxiosResponse; + /** + * Successfully created sync + */ @SpeakeasyMetadata() createSync200ApplicationJSONObject?: CreateSync200ApplicationJSON; -} \ No newline at end of file +} diff --git a/src/sdk/models/operations/getdestinations.ts b/src/sdk/models/operations/getdestinations.ts index 30c3a56..7cc6358 100755 --- a/src/sdk/models/operations/getdestinations.ts +++ b/src/sdk/models/operations/getdestinations.ts @@ -1,9 +1,15 @@ +/* + * 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"; import { Expose, Type } from "class-transformer"; - +/** + * Successfully fetched destinations + */ export class GetDestinations200ApplicationJSON extends SpeakeasyBase { @SpeakeasyMetadata({ elemType: shared.Destination }) @Expose({ name: "destinations" }) @@ -21,6 +27,9 @@ export class GetDestinationsResponse extends SpeakeasyBase { @SpeakeasyMetadata() rawResponse?: AxiosResponse; + /** + * Successfully fetched destinations + */ @SpeakeasyMetadata() getDestinations200ApplicationJSONObject?: GetDestinations200ApplicationJSON; -} \ No newline at end of file +} diff --git a/src/sdk/models/operations/getnamespaces.ts b/src/sdk/models/operations/getnamespaces.ts index bb15bbf..1aea363 100755 --- a/src/sdk/models/operations/getnamespaces.ts +++ b/src/sdk/models/operations/getnamespaces.ts @@ -1,34 +1,31 @@ +/* + * 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"; -import { Expose, Type } from "class-transformer"; - - -export class GetNamespacesQueryParams extends SpeakeasyBase { - @SpeakeasyMetadata({ data: "queryParam, style=form;explode=true;name=connectionID" }) - connectionID: number; -} export class GetNamespacesRequest extends SpeakeasyBase { - @SpeakeasyMetadata() - queryParams: GetNamespacesQueryParams; -} - -export class GetNamespaces200ApplicationJSON extends SpeakeasyBase { - @SpeakeasyMetadata() - @Expose({ name: "namespaces" }) - namespaces?: string[]; + @SpeakeasyMetadata({ + data: "queryParam, style=form;explode=true;name=connectionID", + }) + connectionID: number; } export class GetNamespacesResponse extends SpeakeasyBase { @SpeakeasyMetadata() contentType: string; + /** + * Successfully fetched namespaces + */ @SpeakeasyMetadata() - statusCode: number; + namespaces?: shared.Namespaces; @SpeakeasyMetadata() - rawResponse?: AxiosResponse; + statusCode: number; @SpeakeasyMetadata() - getNamespaces200ApplicationJSONObject?: GetNamespaces200ApplicationJSON; -} \ No newline at end of file + rawResponse?: AxiosResponse; +} diff --git a/src/sdk/models/operations/getobjects.ts b/src/sdk/models/operations/getobjects.ts index 2e1186e..d0c1c37 100755 --- a/src/sdk/models/operations/getobjects.ts +++ b/src/sdk/models/operations/getobjects.ts @@ -1,9 +1,15 @@ +/* + * 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"; import { Expose, Type } from "class-transformer"; - +/** + * Successfully fetched objects + */ export class GetObjects200ApplicationJSON extends SpeakeasyBase { @SpeakeasyMetadata({ elemType: shared.ObjectT }) @Expose({ name: "objects" }) @@ -21,6 +27,9 @@ export class GetObjectsResponse extends SpeakeasyBase { @SpeakeasyMetadata() rawResponse?: AxiosResponse; + /** + * Successfully fetched objects + */ @SpeakeasyMetadata() getObjects200ApplicationJSONObject?: GetObjects200ApplicationJSON; -} \ No newline at end of file +} diff --git a/src/sdk/models/operations/getschema.ts b/src/sdk/models/operations/getschema.ts index 01b0f5d..34fa70d 100755 --- a/src/sdk/models/operations/getschema.ts +++ b/src/sdk/models/operations/getschema.ts @@ -1,30 +1,37 @@ +/* + * 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"; import { Expose, Type } from "class-transformer"; - -export class GetSchemaQueryParams extends SpeakeasyBase { - @SpeakeasyMetadata({ data: "queryParam, style=form;explode=true;name=connectionID" }) +export class GetSchemaRequest extends SpeakeasyBase { + @SpeakeasyMetadata({ + data: "queryParam, style=form;explode=true;name=connectionID", + }) connectionID: number; - @SpeakeasyMetadata({ data: "queryParam, style=form;explode=true;name=namespace" }) + @SpeakeasyMetadata({ + data: "queryParam, style=form;explode=true;name=namespace", + }) namespace: string; - @SpeakeasyMetadata({ data: "queryParam, style=form;explode=true;name=tableName" }) + @SpeakeasyMetadata({ + data: "queryParam, style=form;explode=true;name=tableName", + }) tableName: string; } -export class GetSchemaRequest extends SpeakeasyBase { - @SpeakeasyMetadata() - queryParams: GetSchemaQueryParams; -} - +/** + * Successfully fetched schema + */ export class GetSchema200ApplicationJSON extends SpeakeasyBase { - @SpeakeasyMetadata({ elemType: shared.ColumnSchema }) + @SpeakeasyMetadata({ elemType: shared.Field }) @Expose({ name: "schema" }) - @Type(() => shared.ColumnSchema) - schema?: shared.ColumnSchema[]; + @Type(() => shared.Field) + schema?: shared.Field[]; } export class GetSchemaResponse extends SpeakeasyBase { @@ -37,6 +44,9 @@ export class GetSchemaResponse extends SpeakeasyBase { @SpeakeasyMetadata() rawResponse?: AxiosResponse; + /** + * Successfully fetched schema + */ @SpeakeasyMetadata() getSchema200ApplicationJSONObject?: GetSchema200ApplicationJSON; -} \ No newline at end of file +} diff --git a/src/sdk/models/operations/getsources.ts b/src/sdk/models/operations/getsources.ts index 4570e39..c780151 100755 --- a/src/sdk/models/operations/getsources.ts +++ b/src/sdk/models/operations/getsources.ts @@ -1,9 +1,15 @@ +/* + * 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"; import { Expose, Type } from "class-transformer"; - +/** + * Successfully fetched sources + */ export class GetSources200ApplicationJSON extends SpeakeasyBase { @SpeakeasyMetadata({ elemType: shared.Source }) @Expose({ name: "sources" }) @@ -21,6 +27,9 @@ export class GetSourcesResponse extends SpeakeasyBase { @SpeakeasyMetadata() rawResponse?: AxiosResponse; + /** + * Successfully fetched sources + */ @SpeakeasyMetadata() getSources200ApplicationJSONObject?: GetSources200ApplicationJSON; -} \ No newline at end of file +} diff --git a/src/sdk/models/operations/getsyncs.ts b/src/sdk/models/operations/getsyncs.ts index 1ea45b2..85a927f 100755 --- a/src/sdk/models/operations/getsyncs.ts +++ b/src/sdk/models/operations/getsyncs.ts @@ -1,9 +1,15 @@ +/* + * 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"; import { Expose, Type } from "class-transformer"; - +/** + * Successfully fetched syncs + */ export class GetSyncs200ApplicationJSON extends SpeakeasyBase { @SpeakeasyMetadata({ elemType: shared.Sync }) @Expose({ name: "syncs" }) @@ -21,6 +27,9 @@ export class GetSyncsResponse extends SpeakeasyBase { @SpeakeasyMetadata() rawResponse?: AxiosResponse; + /** + * Successfully fetched syncs + */ @SpeakeasyMetadata() getSyncs200ApplicationJSONObject?: GetSyncs200ApplicationJSON; -} \ No newline at end of file +} diff --git a/src/sdk/models/operations/gettables.ts b/src/sdk/models/operations/gettables.ts index 8d45933..0e117e4 100755 --- a/src/sdk/models/operations/gettables.ts +++ b/src/sdk/models/operations/gettables.ts @@ -1,21 +1,26 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; import { AxiosResponse } from "axios"; -import { Expose, Type } from "class-transformer"; - +import { Expose } from "class-transformer"; -export class GetTablesQueryParams extends SpeakeasyBase { - @SpeakeasyMetadata({ data: "queryParam, style=form;explode=true;name=connectionID" }) +export class GetTablesRequest extends SpeakeasyBase { + @SpeakeasyMetadata({ + data: "queryParam, style=form;explode=true;name=connectionID", + }) connectionID: number; - @SpeakeasyMetadata({ data: "queryParam, style=form;explode=true;name=namespace" }) + @SpeakeasyMetadata({ + data: "queryParam, style=form;explode=true;name=namespace", + }) namespace: string; } -export class GetTablesRequest extends SpeakeasyBase { - @SpeakeasyMetadata() - queryParams: GetTablesQueryParams; -} - +/** + * Successfully fetched tables + */ export class GetTables200ApplicationJSON extends SpeakeasyBase { @SpeakeasyMetadata() @Expose({ name: "tables" }) @@ -32,6 +37,9 @@ export class GetTablesResponse extends SpeakeasyBase { @SpeakeasyMetadata() rawResponse?: AxiosResponse; + /** + * Successfully fetched tables + */ @SpeakeasyMetadata() getTables200ApplicationJSONObject?: GetTables200ApplicationJSON; -} \ No newline at end of file +} diff --git a/src/sdk/models/operations/index.ts b/src/sdk/models/operations/index.ts index faa604a..2b04916 100755 --- a/src/sdk/models/operations/index.ts +++ b/src/sdk/models/operations/index.ts @@ -1,3 +1,7 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + export * from "./createdestination"; export * from "./createlinktoken"; export * from "./createobject"; diff --git a/src/sdk/models/shared/bigqueryconfig.ts b/src/sdk/models/shared/bigqueryconfig.ts index 55e00b1..a2209ca 100755 --- a/src/sdk/models/shared/bigqueryconfig.ts +++ b/src/sdk/models/shared/bigqueryconfig.ts @@ -1,7 +1,10 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; import { Expose } from "class-transformer"; - export class BigQueryConfig extends SpeakeasyBase { @SpeakeasyMetadata() @Expose({ name: "credentials" }) @@ -10,4 +13,4 @@ export class BigQueryConfig extends SpeakeasyBase { @SpeakeasyMetadata() @Expose({ name: "location" }) location: string; -} \ No newline at end of file +} diff --git a/src/sdk/models/shared/connection.ts b/src/sdk/models/shared/connection.ts index 5836626..cf6cc23 100755 --- a/src/sdk/models/shared/connection.ts +++ b/src/sdk/models/shared/connection.ts @@ -1,8 +1,11 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; import { ConnectionTypeEnum } from "./connectiontypeenum"; import { Expose } from "class-transformer"; - export class Connection extends SpeakeasyBase { @SpeakeasyMetadata() @Expose({ name: "connection_type" }) @@ -11,4 +14,4 @@ export class Connection extends SpeakeasyBase { @SpeakeasyMetadata() @Expose({ name: "id" }) id?: number; -} \ No newline at end of file +} diff --git a/src/sdk/models/shared/connectiontypeenum.ts b/src/sdk/models/shared/connectiontypeenum.ts index 681eeda..e951444 100755 --- a/src/sdk/models/shared/connectiontypeenum.ts +++ b/src/sdk/models/shared/connectiontypeenum.ts @@ -1,9 +1,11 @@ -import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ export enum ConnectionTypeEnum { - Snowflake = "snowflake", - Bigquery = "bigquery", - Redshift = "redshift", - Mongodb = "mongodb", - Webhook = "webhook" -} \ No newline at end of file + Snowflake = "snowflake", + Bigquery = "bigquery", + Redshift = "redshift", + Mongodb = "mongodb", + Webhook = "webhook", +} diff --git a/src/sdk/models/shared/createlinktokenrequest.ts b/src/sdk/models/shared/createlinktokenrequest.ts index 1255225..0fa9df6 100755 --- a/src/sdk/models/shared/createlinktokenrequest.ts +++ b/src/sdk/models/shared/createlinktokenrequest.ts @@ -1,9 +1,12 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; import { Expose } from "class-transformer"; - export class CreateLinkTokenRequest extends SpeakeasyBase { @SpeakeasyMetadata() @Expose({ name: "end_customer_id" }) endCustomerId: string; -} \ No newline at end of file +} diff --git a/src/sdk/models/shared/createlinktokenresponse.ts b/src/sdk/models/shared/createlinktokenresponse.ts index 91aa1df..95f083b 100755 --- a/src/sdk/models/shared/createlinktokenresponse.ts +++ b/src/sdk/models/shared/createlinktokenresponse.ts @@ -1,9 +1,15 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; import { Expose } from "class-transformer"; - +/** + * Successfully created link token + */ export class CreateLinkTokenResponse extends SpeakeasyBase { @SpeakeasyMetadata() @Expose({ name: "link_token" }) linkToken?: string; -} \ No newline at end of file +} diff --git a/src/sdk/models/shared/destination.ts b/src/sdk/models/shared/destination.ts index 45da00e..ff30fe1 100755 --- a/src/sdk/models/shared/destination.ts +++ b/src/sdk/models/shared/destination.ts @@ -1,8 +1,11 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; import { Connection } from "./connection"; import { Expose, Type } from "class-transformer"; - export class Destination extends SpeakeasyBase { @SpeakeasyMetadata() @Expose({ name: "connection" }) @@ -16,4 +19,4 @@ export class Destination extends SpeakeasyBase { @SpeakeasyMetadata() @Expose({ name: "id" }) id?: number; -} \ No newline at end of file +} diff --git a/src/sdk/models/shared/destinationinput.ts b/src/sdk/models/shared/destinationinput.ts index e738df8..6f8d6f5 100755 --- a/src/sdk/models/shared/destinationinput.ts +++ b/src/sdk/models/shared/destinationinput.ts @@ -1,3 +1,7 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; import { BigQueryConfig } from "./bigqueryconfig"; import { ConnectionTypeEnum } from "./connectiontypeenum"; @@ -6,7 +10,6 @@ import { RedshiftConfig } from "./redshiftconfig"; import { SnowflakeConfig } from "./snowflakeconfig"; import { Expose, Type } from "class-transformer"; - export class DestinationInput extends SpeakeasyBase { @SpeakeasyMetadata() @Expose({ name: "bigquery_config" }) @@ -35,4 +38,4 @@ export class DestinationInput extends SpeakeasyBase { @Expose({ name: "snowflake_config" }) @Type(() => SnowflakeConfig) snowflakeConfig?: SnowflakeConfig; -} \ No newline at end of file +} diff --git a/src/sdk/models/shared/columnschema.ts b/src/sdk/models/shared/field.ts similarity index 71% rename from src/sdk/models/shared/columnschema.ts rename to src/sdk/models/shared/field.ts index 466895b..761f346 100755 --- a/src/sdk/models/shared/columnschema.ts +++ b/src/sdk/models/shared/field.ts @@ -1,9 +1,12 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; import { FieldTypeEnum } from "./fieldtypeenum"; import { Expose } from "class-transformer"; - -export class ColumnSchema extends SpeakeasyBase { +export class Field extends SpeakeasyBase { @SpeakeasyMetadata() @Expose({ name: "name" }) name?: string; @@ -11,4 +14,4 @@ export class ColumnSchema extends SpeakeasyBase { @SpeakeasyMetadata() @Expose({ name: "type" }) type?: FieldTypeEnum; -} \ No newline at end of file +} diff --git a/src/sdk/models/shared/fieldmapping.ts b/src/sdk/models/shared/fieldmapping.ts index 15393be..2d44c67 100755 --- a/src/sdk/models/shared/fieldmapping.ts +++ b/src/sdk/models/shared/fieldmapping.ts @@ -1,7 +1,10 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; import { Expose } from "class-transformer"; - export class FieldMapping extends SpeakeasyBase { @SpeakeasyMetadata() @Expose({ name: "destination_field_name" }) @@ -10,4 +13,4 @@ export class FieldMapping extends SpeakeasyBase { @SpeakeasyMetadata() @Expose({ name: "source_field_name" }) sourceFieldName?: string; -} \ No newline at end of file +} diff --git a/src/sdk/models/shared/fieldtypeenum.ts b/src/sdk/models/shared/fieldtypeenum.ts index 75aba7e..2a80f42 100755 --- a/src/sdk/models/shared/fieldtypeenum.ts +++ b/src/sdk/models/shared/fieldtypeenum.ts @@ -1,9 +1,11 @@ -import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ export enum FieldTypeEnum { - String = "string", - Integer = "integer", - Timestamp = "timestamp", - Json = "json", - Boolean = "boolean" -} \ No newline at end of file + String = "string", + Integer = "integer", + Timestamp = "timestamp", + Json = "json", + Boolean = "boolean", +} diff --git a/src/sdk/models/shared/frequencyunitsenum.ts b/src/sdk/models/shared/frequencyunitsenum.ts index b345162..0651fca 100755 --- a/src/sdk/models/shared/frequencyunitsenum.ts +++ b/src/sdk/models/shared/frequencyunitsenum.ts @@ -1,8 +1,10 @@ -import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ export enum FrequencyUnitsEnum { - Minutes = "minutes", - Hours = "hours", - Days = "days", - Weeks = "weeks" -} \ No newline at end of file + Minutes = "minutes", + Hours = "hours", + Days = "days", + Weeks = "weeks", +} diff --git a/src/sdk/models/shared/index.ts b/src/sdk/models/shared/index.ts index 590ce17..d87aa2f 100755 --- a/src/sdk/models/shared/index.ts +++ b/src/sdk/models/shared/index.ts @@ -1,15 +1,20 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + export * from "./bigqueryconfig"; -export * from "./columnschema"; export * from "./connection"; export * from "./connectiontypeenum"; export * from "./createlinktokenrequest"; export * from "./createlinktokenresponse"; export * from "./destination"; export * from "./destinationinput"; +export * from "./field"; export * from "./fieldmapping"; export * from "./fieldtypeenum"; export * from "./frequencyunitsenum"; export * from "./mongodbconfig"; +export * from "./namespaces"; export * from "./object"; export * from "./objectfield"; export * from "./objectinput"; diff --git a/src/sdk/models/shared/mongodbconfig.ts b/src/sdk/models/shared/mongodbconfig.ts index 52c3471..18920a4 100755 --- a/src/sdk/models/shared/mongodbconfig.ts +++ b/src/sdk/models/shared/mongodbconfig.ts @@ -1,7 +1,10 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; import { Expose } from "class-transformer"; - export class MongoDbConfig extends SpeakeasyBase { @SpeakeasyMetadata() @Expose({ name: "connection_options" }) @@ -18,4 +21,4 @@ export class MongoDbConfig extends SpeakeasyBase { @SpeakeasyMetadata() @Expose({ name: "username" }) username: string; -} \ No newline at end of file +} diff --git a/src/sdk/models/shared/namespaces.ts b/src/sdk/models/shared/namespaces.ts new file mode 100755 index 0000000..86cedab --- /dev/null +++ b/src/sdk/models/shared/namespaces.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"; + +/** + * Successfully fetched namespaces + */ +export class Namespaces extends SpeakeasyBase { + @SpeakeasyMetadata() + @Expose({ name: "namespaces" }) + namespaces?: string[]; +} diff --git a/src/sdk/models/shared/object.ts b/src/sdk/models/shared/object.ts index 6836db1..0c849d3 100755 --- a/src/sdk/models/shared/object.ts +++ b/src/sdk/models/shared/object.ts @@ -1,13 +1,12 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; import { ObjectField } from "./objectfield"; import { Expose, Type } from "class-transformer"; - export class ObjectT extends SpeakeasyBase { - @SpeakeasyMetadata() - @Expose({ name: "customer_id_column" }) - customerIdColumn?: string; - @SpeakeasyMetadata() @Expose({ name: "destination_id" }) destinationId?: number; @@ -16,6 +15,13 @@ export class ObjectT extends SpeakeasyBase { @Expose({ name: "display_name" }) displayName?: string; + /** + * This is where Fabra will insert the End Customer ID specified in the sync configuration + */ + @SpeakeasyMetadata() + @Expose({ name: "end_customer_id_field" }) + endCustomerIdField?: string; + @SpeakeasyMetadata() @Expose({ name: "id" }) id?: number; @@ -32,4 +38,4 @@ export class ObjectT extends SpeakeasyBase { @SpeakeasyMetadata() @Expose({ name: "table_name" }) tableName?: string; -} \ No newline at end of file +} diff --git a/src/sdk/models/shared/objectfield.ts b/src/sdk/models/shared/objectfield.ts index ee36274..20bbb0c 100755 --- a/src/sdk/models/shared/objectfield.ts +++ b/src/sdk/models/shared/objectfield.ts @@ -1,8 +1,11 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; import { FieldTypeEnum } from "./fieldtypeenum"; import { Expose } from "class-transformer"; - export class ObjectField extends SpeakeasyBase { @SpeakeasyMetadata() @Expose({ name: "name" }) @@ -11,4 +14,4 @@ export class ObjectField extends SpeakeasyBase { @SpeakeasyMetadata() @Expose({ name: "type" }) type?: FieldTypeEnum; -} \ No newline at end of file +} diff --git a/src/sdk/models/shared/objectinput.ts b/src/sdk/models/shared/objectinput.ts index 8798783..8bfbf94 100755 --- a/src/sdk/models/shared/objectinput.ts +++ b/src/sdk/models/shared/objectinput.ts @@ -1,13 +1,12 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; import { ObjectField } from "./objectfield"; import { Expose, Type } from "class-transformer"; - export class ObjectInput extends SpeakeasyBase { - @SpeakeasyMetadata() - @Expose({ name: "customer_id_column" }) - customerIdColumn: string; - @SpeakeasyMetadata() @Expose({ name: "destination_id" }) destinationId: number; @@ -16,6 +15,13 @@ export class ObjectInput extends SpeakeasyBase { @Expose({ name: "display_name" }) displayName: string; + /** + * This is where Fabra will insert the End Customer ID specified when creating a source. + */ + @SpeakeasyMetadata() + @Expose({ name: "end_customer_id_field" }) + endCustomerIdField: string; + @SpeakeasyMetadata() @Expose({ name: "namespace" }) namespace: string; @@ -28,4 +34,4 @@ export class ObjectInput extends SpeakeasyBase { @SpeakeasyMetadata() @Expose({ name: "table_name" }) tableName: string; -} \ No newline at end of file +} diff --git a/src/sdk/models/shared/redshiftconfig.ts b/src/sdk/models/shared/redshiftconfig.ts index 5c3a9b7..7005ff1 100755 --- a/src/sdk/models/shared/redshiftconfig.ts +++ b/src/sdk/models/shared/redshiftconfig.ts @@ -1,7 +1,10 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; import { Expose } from "class-transformer"; - export class RedshiftConfig extends SpeakeasyBase { @SpeakeasyMetadata() @Expose({ name: "database_name" }) @@ -22,4 +25,4 @@ export class RedshiftConfig extends SpeakeasyBase { @SpeakeasyMetadata() @Expose({ name: "username" }) username: string; -} \ No newline at end of file +} diff --git a/src/sdk/models/shared/security.ts b/src/sdk/models/shared/security.ts index 3de2227..a6f4ee7 100755 --- a/src/sdk/models/shared/security.ts +++ b/src/sdk/models/shared/security.ts @@ -1,13 +1,12 @@ -import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; -import { Type } from "class-transformer"; - +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ -export class SchemeAPIKeyAuth extends SpeakeasyBase { - @SpeakeasyMetadata({ data: "security, name=X-API-Key" }) - apiKey: string; -} +import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; export class Security extends SpeakeasyBase { - @SpeakeasyMetadata({ data: "security, scheme=true;type=apiKey;subtype=header" }) - apiKeyAuth: SchemeAPIKeyAuth; -} \ No newline at end of file + @SpeakeasyMetadata({ + data: "security, scheme=true;type=apiKey;subtype=header;name=X-API-Key", + }) + apiKeyAuth: string; +} diff --git a/src/sdk/models/shared/snowflakeconfig.ts b/src/sdk/models/shared/snowflakeconfig.ts index d7642d8..bde6d35 100755 --- a/src/sdk/models/shared/snowflakeconfig.ts +++ b/src/sdk/models/shared/snowflakeconfig.ts @@ -1,7 +1,10 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; import { Expose } from "class-transformer"; - export class SnowflakeConfig extends SpeakeasyBase { @SpeakeasyMetadata() @Expose({ name: "database_name" }) @@ -26,4 +29,4 @@ export class SnowflakeConfig extends SpeakeasyBase { @SpeakeasyMetadata() @Expose({ name: "warehouse_name" }) warehouseName: string; -} \ No newline at end of file +} diff --git a/src/sdk/models/shared/source.ts b/src/sdk/models/shared/source.ts index 8437923..cf5cc14 100755 --- a/src/sdk/models/shared/source.ts +++ b/src/sdk/models/shared/source.ts @@ -1,8 +1,11 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; import { Connection } from "./connection"; import { Expose, Type } from "class-transformer"; - export class Source extends SpeakeasyBase { @SpeakeasyMetadata() @Expose({ name: "connection" }) @@ -15,9 +18,9 @@ export class Source extends SpeakeasyBase { @SpeakeasyMetadata() @Expose({ name: "end_customer_id" }) - endCustomerId?: number; + endCustomerId?: string; @SpeakeasyMetadata() @Expose({ name: "id" }) id?: number; -} \ No newline at end of file +} diff --git a/src/sdk/models/shared/sourceinput.ts b/src/sdk/models/shared/sourceinput.ts index 41fb130..bfc2f55 100755 --- a/src/sdk/models/shared/sourceinput.ts +++ b/src/sdk/models/shared/sourceinput.ts @@ -1,3 +1,7 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; import { BigQueryConfig } from "./bigqueryconfig"; import { ConnectionTypeEnum } from "./connectiontypeenum"; @@ -6,7 +10,6 @@ import { RedshiftConfig } from "./redshiftconfig"; import { SnowflakeConfig } from "./snowflakeconfig"; import { Expose, Type } from "class-transformer"; - export class SourceInput extends SpeakeasyBase { @SpeakeasyMetadata() @Expose({ name: "bigquery_config" }) @@ -23,7 +26,7 @@ export class SourceInput extends SpeakeasyBase { @SpeakeasyMetadata() @Expose({ name: "end_customer_id" }) - endCustomerId: number; + endCustomerId: string; @SpeakeasyMetadata() @Expose({ name: "mongodb_config" }) @@ -39,4 +42,4 @@ export class SourceInput extends SpeakeasyBase { @Expose({ name: "snowflake_config" }) @Type(() => SnowflakeConfig) snowflakeConfig?: SnowflakeConfig; -} \ No newline at end of file +} diff --git a/src/sdk/models/shared/sync.ts b/src/sdk/models/shared/sync.ts index 190a564..6d9e851 100755 --- a/src/sdk/models/shared/sync.ts +++ b/src/sdk/models/shared/sync.ts @@ -1,9 +1,12 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; import { FieldMapping } from "./fieldmapping"; import { FrequencyUnitsEnum } from "./frequencyunitsenum"; import { Expose, Type } from "class-transformer"; - export class Sync extends SpeakeasyBase { @SpeakeasyMetadata() @Expose({ name: "cursor_field" }) @@ -57,4 +60,4 @@ export class Sync extends SpeakeasyBase { @SpeakeasyMetadata() @Expose({ name: "table_name" }) tableName?: string; -} \ No newline at end of file +} diff --git a/src/sdk/models/shared/syncinput.ts b/src/sdk/models/shared/syncinput.ts index a0720d8..3cd536d 100755 --- a/src/sdk/models/shared/syncinput.ts +++ b/src/sdk/models/shared/syncinput.ts @@ -1,9 +1,12 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + import { SpeakeasyBase, SpeakeasyMetadata } from "../../../internal/utils"; import { FieldMapping } from "./fieldmapping"; import { FrequencyUnitsEnum } from "./frequencyunitsenum"; import { Expose, Type } from "class-transformer"; - export class SyncInput extends SpeakeasyBase { @SpeakeasyMetadata() @Expose({ name: "cursor_field" }) @@ -53,4 +56,4 @@ export class SyncInput extends SpeakeasyBase { @SpeakeasyMetadata() @Expose({ name: "table_name" }) tableName?: string; -} \ No newline at end of file +} diff --git a/src/sdk/object.ts b/src/sdk/object.ts index 2f2967c..0006937 100755 --- a/src/sdk/object.ts +++ b/src/sdk/object.ts @@ -1,8 +1,15 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + import * as utils from "../internal/utils"; import * as operations from "./models/operations"; +import * as shared from "./models/shared"; import { AxiosInstance, AxiosRequestConfig, AxiosResponse } from "axios"; -import { plainToInstance } from "class-transformer"; +/** + * Operations on objects + */ export class ObjectT { _defaultClient: AxiosInstance; _securityClient: AxiosInstance; @@ -11,7 +18,14 @@ export class ObjectT { _sdkVersion: string; _genVersion: string; - constructor(defaultClient: AxiosInstance, securityClient: AxiosInstance, serverURL: string, language: string, sdkVersion: string, genVersion: string) { + constructor( + defaultClient: AxiosInstance, + securityClient: AxiosInstance, + serverURL: string, + language: string, + sdkVersion: string, + genVersion: string + ) { this._defaultClient = defaultClient; this._securityClient = securityClient; this._serverURL = serverURL; @@ -19,111 +33,121 @@ export class ObjectT { this._sdkVersion = sdkVersion; this._genVersion = genVersion; } - + /** - * createObject - Create a new object - **/ - createObject( - req: operations.CreateObjectRequest, + * Create a new object + */ + async createObject( + req: shared.ObjectInput, config?: AxiosRequestConfig ): Promise { if (!(req instanceof utils.SpeakeasyBase)) { - req = new operations.CreateObjectRequest(req); + req = new shared.ObjectInput(req); } - + const baseURL: string = this._serverURL; const url: string = baseURL.replace(/\/$/, "") + "/object"; let [reqBodyHeaders, reqBody]: [object, any] = [{}, {}]; try { - [reqBodyHeaders, reqBody] = utils.serializeRequestBody(req); + [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._securityClient!; - - const headers = {...reqBodyHeaders, ...config?.headers}; - if (reqBody == null || Object.keys(reqBody).length === 0) throw new Error("request body is required"); - - const r = client.request({ + + const client: AxiosInstance = this._securityClient || this._defaultClient; + + const headers = { ...reqBodyHeaders, ...config?.headers }; + if (reqBody == null || Object.keys(reqBody).length === 0) + throw new Error("request body is required"); + + const httpRes: AxiosResponse = await client.request({ + validateStatus: () => true, url: url, method: "post", headers: headers, - data: reqBody, + data: reqBody, ...config, }); - - return r.then((httpRes: AxiosResponse) => { - const contentType: string = httpRes?.headers?.["content-type"] ?? ""; - - if (httpRes?.status == null) throw new Error(`status code not found in response: ${httpRes}`); - const res: operations.CreateObjectResponse = {statusCode: httpRes.status, contentType: contentType, rawResponse: httpRes}; - switch (true) { - case httpRes?.status == 200: - if (utils.matchContentType(contentType, `application/json`)) { - res.createObject200ApplicationJSONObject = plainToInstance( - operations.CreateObject200ApplicationJSON, - httpRes?.data as operations.CreateObject200ApplicationJSON, - { excludeExtraneousValues: true } - ); - } - break; - case httpRes?.status == 401: - break; - case httpRes?.status == 500: - break; + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.CreateObjectResponse = + new operations.CreateObjectResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/json`)) { + res.createObject200ApplicationJSONObject = utils.objectToClass( + httpRes?.data, + operations.CreateObject200ApplicationJSON + ); } + break; + case [401, 500].includes(httpRes?.status): + break; + } - return res; - }) + return res; } - /** - * getObjects - Get all objects - **/ - getObjects( + * Get all objects + */ + async getObjects( config?: AxiosRequestConfig ): Promise { const baseURL: string = this._serverURL; const url: string = baseURL.replace(/\/$/, "") + "/objects"; - - const client: AxiosInstance = this._securityClient!; - - - const r = client.request({ + + const client: AxiosInstance = this._securityClient || this._defaultClient; + + const httpRes: AxiosResponse = await client.request({ + validateStatus: () => true, url: url, method: "get", ...config, }); - - return r.then((httpRes: AxiosResponse) => { - const contentType: string = httpRes?.headers?.["content-type"] ?? ""; - - if (httpRes?.status == null) throw new Error(`status code not found in response: ${httpRes}`); - const res: operations.GetObjectsResponse = {statusCode: httpRes.status, contentType: contentType, rawResponse: httpRes}; - switch (true) { - case httpRes?.status == 200: - if (utils.matchContentType(contentType, `application/json`)) { - res.getObjects200ApplicationJSONObject = plainToInstance( - operations.GetObjects200ApplicationJSON, - httpRes?.data as operations.GetObjects200ApplicationJSON, - { excludeExtraneousValues: true } - ); - } - break; - case httpRes?.status == 401: - break; - case httpRes?.status == 500: - break; + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.GetObjectsResponse = + new operations.GetObjectsResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/json`)) { + res.getObjects200ApplicationJSONObject = utils.objectToClass( + httpRes?.data, + operations.GetObjects200ApplicationJSON + ); } + break; + case [401, 500].includes(httpRes?.status): + break; + } - return res; - }) + return res; } - } diff --git a/src/sdk/sdk.ts b/src/sdk/sdk.ts index dbdd3ef..43a867c 100755 --- a/src/sdk/sdk.ts +++ b/src/sdk/sdk.ts @@ -1,3 +1,7 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + import * as utils from "../internal/utils"; import { Connection } from "./connection"; import { Destination } from "./destination"; @@ -6,43 +10,72 @@ import * as shared from "./models/shared"; import { ObjectT } from "./object"; import { Source } from "./source"; import { Sync } from "./sync"; -import axios, { AxiosInstance } from "axios"; - -export const ServerList = [ - "https://api.fabra.io", -] as const; - +import axios from "axios"; +import { AxiosInstance } from "axios"; +/** + * Contains the list of servers available to the SDK + */ +export const ServerList = ["https://api.fabra.io"] as const; +/** + * The available configuration options for the SDK + */ export type SDKProps = { - defaultClient?: AxiosInstance; - + /** + * The security details required to authenticate the SDK + */ security?: shared.Security; - - serverUrl?: string; -} - + /** + * Allows overriding the default axios client used by the SDK + */ + defaultClient?: AxiosInstance; + /** + * Allows overriding the default server URL used by the SDK + */ + serverURL?: string; +}; export class Fabra { + /** + * Operations on connections + */ public connection: Connection; + /** + * Operations on destinations + */ public destination: Destination; + /** + * Operations on link tokens + */ public linkToken: LinkToken; + /** + * Operations on objects + */ public object: ObjectT; + /** + * Operations on sources + */ public source: Source; + /** + * Operations on syncs + */ public sync: Sync; public _defaultClient: AxiosInstance; public _securityClient: AxiosInstance; public _serverURL: string; private _language = "typescript"; - private _sdkVersion = "0.5.2"; - private _genVersion = "1.8.5"; + private _sdkVersion = "0.21.2"; + private _genVersion = "2.26.2"; + private _globals: any; - constructor(props: SDKProps) { - this._serverURL = props.serverUrl ?? ServerList[0]; + constructor(props?: SDKProps) { + this._serverURL = props?.serverURL ?? ServerList[0]; - this._defaultClient = props.defaultClient ?? axios.create({ baseURL: this._serverURL }); - if (props.security) { + this._defaultClient = + props?.defaultClient ?? axios.create({ baseURL: this._serverURL }); + if (props?.security) { let security: shared.Security = props.security; if (!(props.security instanceof utils.SpeakeasyBase)) security = new shared.Security(props.security); @@ -53,7 +86,7 @@ export class Fabra { } else { this._securityClient = this._defaultClient; } - + this.connection = new Connection( this._defaultClient, this._securityClient, @@ -62,7 +95,7 @@ export class Fabra { this._sdkVersion, this._genVersion ); - + this.destination = new Destination( this._defaultClient, this._securityClient, @@ -71,7 +104,7 @@ export class Fabra { this._sdkVersion, this._genVersion ); - + this.linkToken = new LinkToken( this._defaultClient, this._securityClient, @@ -80,7 +113,7 @@ export class Fabra { this._sdkVersion, this._genVersion ); - + this.object = new ObjectT( this._defaultClient, this._securityClient, @@ -89,7 +122,7 @@ export class Fabra { this._sdkVersion, this._genVersion ); - + this.source = new Source( this._defaultClient, this._securityClient, @@ -98,7 +131,7 @@ export class Fabra { this._sdkVersion, this._genVersion ); - + this.sync = new Sync( this._defaultClient, this._securityClient, @@ -108,5 +141,4 @@ export class Fabra { this._genVersion ); } - -} \ No newline at end of file +} diff --git a/src/sdk/source.ts b/src/sdk/source.ts index 26cedc3..cda65ef 100755 --- a/src/sdk/source.ts +++ b/src/sdk/source.ts @@ -1,8 +1,15 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + import * as utils from "../internal/utils"; import * as operations from "./models/operations"; +import * as shared from "./models/shared"; import { AxiosInstance, AxiosRequestConfig, AxiosResponse } from "axios"; -import { plainToInstance } from "class-transformer"; +/** + * Operations on sources + */ export class Source { _defaultClient: AxiosInstance; _securityClient: AxiosInstance; @@ -11,7 +18,14 @@ export class Source { _sdkVersion: string; _genVersion: string; - constructor(defaultClient: AxiosInstance, securityClient: AxiosInstance, serverURL: string, language: string, sdkVersion: string, genVersion: string) { + constructor( + defaultClient: AxiosInstance, + securityClient: AxiosInstance, + serverURL: string, + language: string, + sdkVersion: string, + genVersion: string + ) { this._defaultClient = defaultClient; this._securityClient = securityClient; this._serverURL = serverURL; @@ -19,111 +33,121 @@ export class Source { this._sdkVersion = sdkVersion; this._genVersion = genVersion; } - + /** - * createSource - Create a new source - **/ - createSource( - req: operations.CreateSourceRequest, + * Create a new source + */ + async createSource( + req: shared.SourceInput, config?: AxiosRequestConfig ): Promise { if (!(req instanceof utils.SpeakeasyBase)) { - req = new operations.CreateSourceRequest(req); + req = new shared.SourceInput(req); } - + const baseURL: string = this._serverURL; const url: string = baseURL.replace(/\/$/, "") + "/source"; let [reqBodyHeaders, reqBody]: [object, any] = [{}, {}]; try { - [reqBodyHeaders, reqBody] = utils.serializeRequestBody(req); + [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._securityClient!; - - const headers = {...reqBodyHeaders, ...config?.headers}; - if (reqBody == null || Object.keys(reqBody).length === 0) throw new Error("request body is required"); - - const r = client.request({ + + const client: AxiosInstance = this._securityClient || this._defaultClient; + + const headers = { ...reqBodyHeaders, ...config?.headers }; + if (reqBody == null || Object.keys(reqBody).length === 0) + throw new Error("request body is required"); + + const httpRes: AxiosResponse = await client.request({ + validateStatus: () => true, url: url, method: "post", headers: headers, - data: reqBody, + data: reqBody, ...config, }); - - return r.then((httpRes: AxiosResponse) => { - const contentType: string = httpRes?.headers?.["content-type"] ?? ""; - - if (httpRes?.status == null) throw new Error(`status code not found in response: ${httpRes}`); - const res: operations.CreateSourceResponse = {statusCode: httpRes.status, contentType: contentType, rawResponse: httpRes}; - switch (true) { - case httpRes?.status == 200: - if (utils.matchContentType(contentType, `application/json`)) { - res.createSource200ApplicationJSONObject = plainToInstance( - operations.CreateSource200ApplicationJSON, - httpRes?.data as operations.CreateSource200ApplicationJSON, - { excludeExtraneousValues: true } - ); - } - break; - case httpRes?.status == 401: - break; - case httpRes?.status == 500: - break; + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.CreateSourceResponse = + new operations.CreateSourceResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/json`)) { + res.createSource200ApplicationJSONObject = utils.objectToClass( + httpRes?.data, + operations.CreateSource200ApplicationJSON + ); } + break; + case [401, 500].includes(httpRes?.status): + break; + } - return res; - }) + return res; } - /** - * getSources - Get all sources - **/ - getSources( + * Get all sources + */ + async getSources( config?: AxiosRequestConfig ): Promise { const baseURL: string = this._serverURL; const url: string = baseURL.replace(/\/$/, "") + "/sources"; - - const client: AxiosInstance = this._securityClient!; - - - const r = client.request({ + + const client: AxiosInstance = this._securityClient || this._defaultClient; + + const httpRes: AxiosResponse = await client.request({ + validateStatus: () => true, url: url, method: "get", ...config, }); - - return r.then((httpRes: AxiosResponse) => { - const contentType: string = httpRes?.headers?.["content-type"] ?? ""; - - if (httpRes?.status == null) throw new Error(`status code not found in response: ${httpRes}`); - const res: operations.GetSourcesResponse = {statusCode: httpRes.status, contentType: contentType, rawResponse: httpRes}; - switch (true) { - case httpRes?.status == 200: - if (utils.matchContentType(contentType, `application/json`)) { - res.getSources200ApplicationJSONObject = plainToInstance( - operations.GetSources200ApplicationJSON, - httpRes?.data as operations.GetSources200ApplicationJSON, - { excludeExtraneousValues: true } - ); - } - break; - case httpRes?.status == 401: - break; - case httpRes?.status == 500: - break; + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.GetSourcesResponse = + new operations.GetSourcesResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/json`)) { + res.getSources200ApplicationJSONObject = utils.objectToClass( + httpRes?.data, + operations.GetSources200ApplicationJSON + ); } + break; + case [401, 500].includes(httpRes?.status): + break; + } - return res; - }) + return res; } - } diff --git a/src/sdk/sync.ts b/src/sdk/sync.ts index 9bf3bab..398aafb 100755 --- a/src/sdk/sync.ts +++ b/src/sdk/sync.ts @@ -1,8 +1,15 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + import * as utils from "../internal/utils"; import * as operations from "./models/operations"; +import * as shared from "./models/shared"; import { AxiosInstance, AxiosRequestConfig, AxiosResponse } from "axios"; -import { plainToInstance } from "class-transformer"; +/** + * Operations on syncs + */ export class Sync { _defaultClient: AxiosInstance; _securityClient: AxiosInstance; @@ -11,7 +18,14 @@ export class Sync { _sdkVersion: string; _genVersion: string; - constructor(defaultClient: AxiosInstance, securityClient: AxiosInstance, serverURL: string, language: string, sdkVersion: string, genVersion: string) { + constructor( + defaultClient: AxiosInstance, + securityClient: AxiosInstance, + serverURL: string, + language: string, + sdkVersion: string, + genVersion: string + ) { this._defaultClient = defaultClient; this._securityClient = securityClient; this._serverURL = serverURL; @@ -19,111 +33,120 @@ export class Sync { this._sdkVersion = sdkVersion; this._genVersion = genVersion; } - + /** - * createSync - Create a new sync - **/ - createSync( - req: operations.CreateSyncRequest, + * Create a new sync + */ + async createSync( + req: shared.SyncInput, config?: AxiosRequestConfig ): Promise { if (!(req instanceof utils.SpeakeasyBase)) { - req = new operations.CreateSyncRequest(req); + req = new shared.SyncInput(req); } - + const baseURL: string = this._serverURL; const url: string = baseURL.replace(/\/$/, "") + "/sync"; let [reqBodyHeaders, reqBody]: [object, any] = [{}, {}]; try { - [reqBodyHeaders, reqBody] = utils.serializeRequestBody(req); + [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._securityClient!; - - const headers = {...reqBodyHeaders, ...config?.headers}; - if (reqBody == null || Object.keys(reqBody).length === 0) throw new Error("request body is required"); - - const r = client.request({ + + const client: AxiosInstance = this._securityClient || this._defaultClient; + + const headers = { ...reqBodyHeaders, ...config?.headers }; + if (reqBody == null || Object.keys(reqBody).length === 0) + throw new Error("request body is required"); + + const httpRes: AxiosResponse = await client.request({ + validateStatus: () => true, url: url, method: "post", headers: headers, - data: reqBody, + data: reqBody, ...config, }); - - return r.then((httpRes: AxiosResponse) => { - const contentType: string = httpRes?.headers?.["content-type"] ?? ""; - - if (httpRes?.status == null) throw new Error(`status code not found in response: ${httpRes}`); - const res: operations.CreateSyncResponse = {statusCode: httpRes.status, contentType: contentType, rawResponse: httpRes}; - switch (true) { - case httpRes?.status == 200: - if (utils.matchContentType(contentType, `application/json`)) { - res.createSync200ApplicationJSONObject = plainToInstance( - operations.CreateSync200ApplicationJSON, - httpRes?.data as operations.CreateSync200ApplicationJSON, - { excludeExtraneousValues: true } - ); - } - break; - case httpRes?.status == 401: - break; - case httpRes?.status == 500: - break; + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.CreateSyncResponse = + new operations.CreateSyncResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/json`)) { + res.createSync200ApplicationJSONObject = utils.objectToClass( + httpRes?.data, + operations.CreateSync200ApplicationJSON + ); } + break; + case [401, 500].includes(httpRes?.status): + break; + } - return res; - }) + return res; } - /** - * getSyncs - Get all syncs - **/ - getSyncs( + * Get all syncs + */ + async getSyncs( config?: AxiosRequestConfig ): Promise { const baseURL: string = this._serverURL; const url: string = baseURL.replace(/\/$/, "") + "/syncs"; - - const client: AxiosInstance = this._securityClient!; - - - const r = client.request({ + + const client: AxiosInstance = this._securityClient || this._defaultClient; + + const httpRes: AxiosResponse = await client.request({ + validateStatus: () => true, url: url, method: "get", ...config, }); - - return r.then((httpRes: AxiosResponse) => { - const contentType: string = httpRes?.headers?.["content-type"] ?? ""; - - if (httpRes?.status == null) throw new Error(`status code not found in response: ${httpRes}`); - const res: operations.GetSyncsResponse = {statusCode: httpRes.status, contentType: contentType, rawResponse: httpRes}; - switch (true) { - case httpRes?.status == 200: - if (utils.matchContentType(contentType, `application/json`)) { - res.getSyncs200ApplicationJSONObject = plainToInstance( - operations.GetSyncs200ApplicationJSON, - httpRes?.data as operations.GetSyncs200ApplicationJSON, - { excludeExtraneousValues: true } - ); - } - break; - case httpRes?.status == 401: - break; - case httpRes?.status == 500: - break; + + const contentType: string = httpRes?.headers?.["content-type"] ?? ""; + + if (httpRes?.status == null) { + throw new Error(`status code not found in response: ${httpRes}`); + } + + const res: operations.GetSyncsResponse = new operations.GetSyncsResponse({ + statusCode: httpRes.status, + contentType: contentType, + rawResponse: httpRes, + }); + switch (true) { + case httpRes?.status == 200: + if (utils.matchContentType(contentType, `application/json`)) { + res.getSyncs200ApplicationJSONObject = utils.objectToClass( + httpRes?.data, + operations.GetSyncs200ApplicationJSON + ); } + break; + case [401, 500].includes(httpRes?.status): + break; + } - return res; - }) + return res; } - } diff --git a/src/sdk/types/index.ts b/src/sdk/types/index.ts new file mode 100755 index 0000000..de759a3 --- /dev/null +++ b/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/src/sdk/types/rfcdate.ts b/src/sdk/types/rfcdate.ts new file mode 100755 index 0000000..1a3d24b --- /dev/null +++ b/src/sdk/types/rfcdate.ts @@ -0,0 +1,35 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +export class RFCDate { + private date: Date; + + constructor(date?: Date | string) { + if (typeof date === "string") { + this.date = new Date(date); + } else { + this.date = date ?? new 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/tsconfig.json b/tsconfig.json index df095a3..0f5face 100755 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,9 +1,7 @@ { "compilerOptions": { "target": "es5", - "lib": [ - "es2021", - ], + "lib": ["es2021"], "baseUrl": "src", "rootDir": "src", "outDir": "dist", @@ -22,11 +20,7 @@ "experimentalDecorators": true, "strictPropertyInitialization": false, "declaration": true, - "types": [ - "reflect-metadata" - ] + "types": ["reflect-metadata"] }, - "include": [ - "src" - ] + "include": ["src"] }