diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile deleted file mode 100644 index d59927b1..00000000 --- a/.devcontainer/Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -# [Choice] Node.js version (use -bullseye variants on local arm64/Apple Silicon): 18, 16, 14, 18-bullseye, 16-bullseye, 14-bullseye, 18-buster, 16-buster, 14-buster -ARG VARIANT=16-bullseye -FROM mcr.microsoft.com/vscode/devcontainers/typescript-node:0-${VARIANT} - -# [Optional] Uncomment this section to install additional OS packages. -# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ -# && apt-get -y install --no-install-recommends - -# [Optional] Uncomment if you want to install an additional version of node using nvm -# ARG EXTRA_NODE_VERSION=10 -# RUN su node -c "source /usr/local/share/nvm/nvm.sh && nvm install ${EXTRA_NODE_VERSION}" - -# [Optional] Uncomment if you want to install more global node packages -# RUN su node -c "npm install -g " diff --git a/.devcontainer/base.Dockerfile b/.devcontainer/base.Dockerfile deleted file mode 100644 index 35b6654f..00000000 --- a/.devcontainer/base.Dockerfile +++ /dev/null @@ -1,17 +0,0 @@ -# [Choice] Node.js version (use -bullseye variants on local arm64/Apple Silicon): 18, 16, 14, 18-bullseye, 16-bullseye, 14-bullseye, 18-buster, 16-buster, 14-buster -ARG VARIANT=16-bullseye -FROM mcr.microsoft.com/vscode/devcontainers/javascript-node:0-${VARIANT} - -# Install tslint, typescript. eslint is installed by javascript image -ARG NODE_MODULES="tslint-to-eslint-config typescript" -COPY library-scripts/meta.env /usr/local/etc/vscode-dev-containers -RUN su node -c "umask 0002 && npm install -g ${NODE_MODULES}" \ - && npm cache clean --force > /dev/null 2>&1 - -# [Optional] Uncomment this section to install additional OS packages. -# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ -# && apt-get -y install --no-install-recommends - -# [Optional] Uncomment if you want to install an additional version of node using nvm -# ARG EXTRA_NODE_VERSION=10 -# RUN su node -c "source /usr/local/share/nvm/nvm.sh && nvm install ${EXTRA_NODE_VERSION}" diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json deleted file mode 100644 index 4978099d..00000000 --- a/.devcontainer/devcontainer.json +++ /dev/null @@ -1,34 +0,0 @@ -// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: -// https://github.com/microsoft/vscode-dev-containers/tree/v0.245.2/containers/typescript-node -{ - "name": "Node.js & TypeScript", - "build": { - "dockerfile": "Dockerfile", - // Update 'VARIANT' to pick a Node version: 18, 16, 14. - // Append -bullseye or -buster to pin to an OS version. - // Use -bullseye variants on local on arm64/Apple Silicon. - "args": { - "VARIANT": "16-bullseye" - } - }, - - // Configure tool-specific properties. - "customizations": { - // Configure properties specific to VS Code. - "vscode": { - // Add the IDs of extensions you want installed when the container is created. - "extensions": [ - "dbaeumer.vscode-eslint" - ] - } - }, - - // Use 'forwardPorts' to make a list of ports inside the container available locally. - // "forwardPorts": [], - - // Use 'postCreateCommand' to run commands after the container is created. - // "postCreateCommand": "yarn install", - - // Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. - "remoteUser": "node" -} diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..df229f59 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,110 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.DS_Store + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# Next.js build output +.next + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and *not* Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +docs/v2 + +# testing +testServer/ \ No newline at end of file diff --git a/.github/workflows/CD.yml b/.github/workflows/CD.yml deleted file mode 100644 index 44cec5c3..00000000 --- a/.github/workflows/CD.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: CD - -on: - release: - types: [released] -jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - - uses: actions/setup-node@v1 - with: - node-version: 12 - registry-url: https://registry.npmjs.org/ - - - name: Update Version in User-Agent - run: sed -i 's/DG_SDK_VERSION/${{ github.event.release.tag_name }}/g' ./src/userAgent.ts - - - name: Update Version in package.json - run: sed -i 's/X.X.X/${{ github.event.release.tag_name }}/g' ./package.json - - - name: Install Dependencies - run: npm install - - - name: Build TypeScript - run: npm run build - - - run: npm publish --ignore-scripts - env: - NODE_AUTH_TOKEN: ${{ secrets.npm_token }} diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index fdef5189..a28aba1f 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -1,30 +1,55 @@ name: CI on: - push: - branches: [ main ] pull_request: - branches: [ main ] + branches: + - main + - next + - rc + - beta + - alpha + paths-ignore: + - "docs/**" + - "**/*.md" + - ".prettierrc" + - "**/*ignore" + push: + branches: + - main + - next + - rc + - beta + - alpha + paths-ignore: + - "docs/**" + - "**/*.md" + - ".prettierrc" + - "**/*ignore" + jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v1 - with: - node-version: 12 - - - name: Update Version in package.json - run: sed -i 's/X.X.X/0.0.1/g' ./package.json + test: + name: Test / OS ${{ matrix.os }} / Node ${{ matrix.node }} + strategy: + matrix: + os: [ubuntu-latest] + node: ["18"] + + runs-on: ${{ matrix.os }} - - name: Install Dependencies - run: npm install + steps: + - uses: actions/checkout@v3 - - name: Run Tests - run: npm run test + - name: Set up Node + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node }} - - name: Lint Source - run: npm run lint + - name: Run tests + run: | + npm clean-install + npm run test:coverage - - name: Build TypeScript - run: npm run build \ No newline at end of file + - name: Upload coverage reports to Codecov + uses: codecov/codecov-action@v3 + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 00000000..34846147 --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,38 @@ +name: Docs + +on: + push: + branches: + - main + workflow_dispatch: + +jobs: + docs: + name: Publish docs / OS ${{ matrix.os }} / Node ${{ matrix.node }} + strategy: + matrix: + os: [ubuntu-latest] + node: ["18"] + + runs-on: ${{ matrix.os }} + + steps: + - uses: actions/checkout@v2 + + - name: Set up Node + uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node }} + + - run: | + npm ci + npm run docs + npm run docs:json + + - name: Publish + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: docs + force_orphan: true + commit_message: "docs: update" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..6bdf3a79 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,38 @@ +name: Release + +on: + push: + branches: + - main + - next + - rc + - beta + - alpha + workflow_dispatch: + +jobs: + release: + name: Release / Node ${{ matrix.node }} + strategy: + matrix: + node: ["18"] + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + + - name: Set up Node + uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node }} + + - run: | + npm ci + npm run build + + - name: Create a release + run: npx semantic-release@^18.0.0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.gitignore b/.gitignore index fa2dfd9a..df229f59 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,110 @@ -node_modules -dist -out +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.DS_Store + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage .nyc_output -api.http + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' *.tgz -bundle -coverage \ No newline at end of file + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# Next.js build output +.next + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and *not* Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +docs/v2 + +# testing +testServer/ \ No newline at end of file diff --git a/.npmignore b/.npmignore index f0c6b51f..e876efb8 100644 --- a/.npmignore +++ b/.npmignore @@ -1,10 +1,27 @@ -src -tests -sample -.github +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage .nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +src +test +examples +example-next-js +umd_temp +CHANGELOG.md +.travis.yml +.editorconfig .eslintignore -.eslintrc.js -.prettierrc -tsconfig.json -bundle \ No newline at end of file +.eslintrc +.babelrc +.gitignore \ No newline at end of file diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..2c0e30b9 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,5 @@ +.expo +.next +node_modules +package-lock.json +docker* \ No newline at end of file diff --git a/.prettierrc b/.prettierrc index 7a28161d..466e1ad4 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,4 +1,5 @@ { + "trailingComma": "es5", "tabWidth": 2, - "useTabs": false -} \ No newline at end of file + "printWidth": 100 +} diff --git a/.releaserc.json b/.releaserc.json new file mode 100644 index 00000000..94988b09 --- /dev/null +++ b/.releaserc.json @@ -0,0 +1,37 @@ +{ + "branches": [ + { "name": "main" }, + { "name": "next", "channel": "next", "prerelease": true }, + { "name": "rc", "channel": "rc", "prerelease": true }, + { "name": "beta", "channel": "beta", "prerelease": true }, + { "name": "alpha", "channel": "alpha", "prerelease": true } + ], + "plugins": [ + [ + "semantic-release-plugin-update-version-in-files", + { + "files": [ + "src/lib/version.ts", + "dist/main/lib/version.js", + "dist/main/lib/version.d.ts", + "dist/module/lib/version.js", + "dist/module/lib/version.d.ts", + "dist/umd/supabase.js" + ], + "placeholder": "0.0.0-automated" + } + ], + "@semantic-release/commit-analyzer", + "@semantic-release/release-notes-generator", + [ + "@semantic-release/github", + { + "successComment": false, + "releasedLabels": false, + "failTitle": false, + "addReleases": false + } + ], + "@semantic-release/npm" + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..bcadbc14 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "markdown.extension.toc.omittedFromToc": { + "README.md": ["# Deepgram JavaScript SDK"] + } +} diff --git a/LICENSE b/LICENSE index 4001149d..458cd0d3 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2021 deepgram +Copyright (c) 2023 Deepgram Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index b013919f..7fe094be 100644 --- a/README.md +++ b/README.md @@ -1,63 +1,71 @@ -# Deepgram Node.js SDK - - [![Discord](https://dcbadge.vercel.app/api/server/xWRaCDBtW4?style=flat)](https://discord.gg/xWRaCDBtW4) [![CI](https://github.com/deepgram/node-sdk/actions/workflows/CI.yml/badge.svg)](https://github.com/deepgram/node-sdk/actions/workflows/CI.yml) [![npm (scoped)](https://img.shields.io/npm/v/@deepgram/sdk)](https://www.npmjs.com/package/@deepgram/sdk) [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-v2.0%20adopted-ff69b4.svg?style=flat-rounded)](CODE_OF_CONDUCT.md) - -Official Node.js SDK for [Deepgram](https://www.deepgram.com/). Power your apps with world-class speech and Language AI models. -> This SDK only supports hosted usage of api.deepgram.com. - -> ### Deprecated JS Browser SDK -> -> As of version 2.x, the JS Browser SDK was removed from the Node SDK and will become an independent Client SDK. -> To use the older SDK, please `npm i @deepgram/sdk@1.2.1` and use `@deepgram/sdk/browser`. - -* [Deepgram Node.js SDK](#deepgram-nodejs-sdk) -* [Getting an API Key](#getting-an-api-key) -* [Installation](#installation) -* [Configuration](#configuration) - * [Custom API Endpoint](#custom-api-endpoint) -* [Transcription](#transcription) - * [Remote Files](#remote-files) - * [Local Files](#local-files) - * [Live Audio](#live-audio) -* [Projects](#projects) - * [Get Projects](#get-projects) - * [Get Project](#get-project) - * [Update Project](#update-project) - * [Delete Project](#delete-project) -* [Keys](#keys) - * [List Keys](#list-keys) - * [Get Key](#get-key) - * [Create Key](#create-key) - * [Delete Key](#delete-key) -* [Members](#members) - * [Get Members](#get-members) - * [Remove Member](#remove-member) -* [Scopes](#scopes) - * [Get Member Scopes](#get-member-scopes) - * [Update Scope](#update-scope) -* [Invitations](#invitations) - * [List Invites](#list-invites) - * [Send Invite](#send-invite) - * [Delete Invite](#delete-invite) - * [Leave Project](#leave-project) -* [Usage](#usage) - * [Get All Requests](#get-all-requests) - * [Get Request](#get-request) - * [Summarize Usage](#summarize-usage) - * [Get Fields](#get-fields) -* [Billing](#billing) - * [Get All Balances](#get-all-balances) - * [Get Balance](#get-balance) -* [Development and Contributing](#development-and-contributing) -* [Getting Help](#getting-help) - -# Getting an API Key - -🔑 To access the Deepgram API you will need a [free Deepgram API Key](https://console.deepgram.com/signup?jump=keys). +# Deepgram JavaScript SDK + +[![Discord](https://dcbadge.vercel.app/api/server/xWRaCDBtW4?style=flat)](https://discord.gg/xWRaCDBtW4) [![CI](https://github.com/deepgram/node-sdk/actions/workflows/CI.yml/badge.svg)](https://github.com/deepgram/node-sdk/actions/workflows/CI.yml) [![npm (scoped)](https://img.shields.io/npm/v/@deepgram/sdk)](https://www.npmjs.com/package/@deepgram/sdk) [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-v2.0%20adopted-ff69b4.svg?style=flat-rounded)](CODE_OF_CONDUCT.md) + +Official JavaScript SDK for [Deepgram](https://www.deepgram.com/). Power your apps with world-class speech and Language AI models. + +- [Migrating from v2](#migrating-from-v2) +- [Installation](#installation) + - [UMD](#umd) + - [ESM](#esm) +- [Initialization](#initialization) + - [Getting an API Key](#getting-an-api-key) +- [Scoped Configuration](#scoped-configuration) + - [Rest requests in the browser](#rest-requests-in-the-browser) +- [Transcription (Synchronous)](#transcription-synchronous) + - [Remote Files](#remote-files) + - [Local Files](#local-files) +- [Transcription (Asynchronous / Callbacks)](#transcription-asynchronous--callbacks) + - [Remote Files](#remote-files-1) + - [Local Files](#local-files-1) +- [Transcription (Live / Streaming)](#transcription-live--streaming) + - [Live Audio](#live-audio) +- [Transcribing to captions](#transcribing-to-captions) +- [Projects](#projects) + - [Get Projects](#get-projects) + - [Get Project](#get-project) + - [Update Project](#update-project) + - [Delete Project](#delete-project) +- [Keys](#keys) + - [List Keys](#list-keys) + - [Get Key](#get-key) + - [Create Key](#create-key) + - [Delete Key](#delete-key) +- [Members](#members) + - [Get Members](#get-members) + - [Remove Member](#remove-member) +- [Scopes](#scopes) + - [Get Member Scopes](#get-member-scopes) + - [Update Scope](#update-scope) +- [Invitations](#invitations) + - [List Invites](#list-invites) + - [Send Invite](#send-invite) + - [Delete Invite](#delete-invite) + - [Leave Project](#leave-project) +- [Usage](#usage) + - [Get All Requests](#get-all-requests) + - [Get Request](#get-request) + - [Summarize Usage](#summarize-usage) + - [Get Fields](#get-fields) +- [Billing](#billing) + - [Get All Balances](#get-all-balances) + - [Get Balance](#get-balance) +- [On-Prem APIs](#on-prem-apis) + - [List On-Prem credentials](#list-on-prem-credentials) + - [Get On-Prem credentials](#get-on-prem-credentials) + - [Create On-Prem credentials](#create-on-prem-credentials) + - [Delete On-Prem credentials](#delete-on-prem-credentials) +- [Development and Contributing](#development-and-contributing) + - [Debugging and making changes locally](#debugging-and-making-changes-locally) +- [Getting Help](#getting-help) + +# Migrating from v2 + +We have published [a migration guide on our docs](https://developers.deepgram.com/docs/js-sdk-v2-to-v3-migration-guide), showing how to move from v2 to v3. # Installation -You can install the Deepgram Node.js SDK as a dependency in your application using NPM or yarn: +You can install this SDK directly from [npm](https://www.npmjs.com/package/@deepgram/sdk). ```bash npm install @deepgram/sdk @@ -65,37 +73,105 @@ npm install @deepgram/sdk # yarn add @deepgram/sdk ``` -# Configuration +## UMD + +You can now use plain ` +``` + +or even: + +```html + +``` + +Then you can use it from a global deepgram variable: + +```html + +``` + +## ESM + +You can now use type="module" ` +``` + +# Initialization + +```js +import { createClient } from "@deepgram/sdk"; +// - or - +// const { createClient } = require("@deepgram/sdk"); + +const deepgram = createClient(DEEPGRAM_API_KEY); +``` + +## Getting an API Key -Once the SDK is installed, import the Deepgram object. Then create a new instance specifying your API key so that your application will be authorized to connect to Deepgram. +🔑 To access the Deepgram API you will need a [free Deepgram API Key](https://console.deepgram.com/signup?jump=keys). + +# Scoped Configuration + +A new feature is scoped configuration. You'll be able to configure various aspects of the SDK from the initialization. ```js -const { Deepgram } = require("@deepgram/sdk"); +import { createClient } from "@deepgram/sdk"; // - or - -// import { Deepgram } from "@deepgram/sdk"; +// const { createClient } = require("@deepgram/sdk"); -const deepgram = new Deepgram(DEEPGRAM_API_KEY); +const deepgram = createClient(DEEPGRAM_API_KEY, { + global: { url: "https://api.beta.deepgram.com" }, + // restProxy: { url: "http://localhost:8080" } +}); ``` -With the Deepgram client initialized, you can now send requests to the Deepgram API to transcribe audio, manage projects & keys, and retrieve usage information. -## Custom API Endpoint +## Rest requests in the browser -In order to point the SDK at a different API endpoint (e.g., for on-prem deployments), you can pass in an object setting the `API_URL` when initializing the Deepgram client. +This SDK now works in the browser. If you'd like to make REST-based requests (pre-recorded transcription, on-premise, and management requests), then you'll need to use a proxy as we do not support custom CORS origins on our API. To set up your proxy, you configure the SDK like so: ```js -const REQUIRE_SSL = false; // defaults to true - set depending on server configuration -const API_URL = "localhost:8080"; // defaults to api.deepgram.com -const deepgram = new Deepgram(DEEPGRAM_API_KEY, API_URL, REQUIRE_SSL); -``` +import { createClient } from "@deepgram/sdk"; -# Transcription +const deepgram = createClient("proxy", { + restProxy: { url: "http://localhost:8080" }, +}); +``` + +> Important: You must pass `"proxy"` as your API key, and use the proxy to set the `Authorization` header to your Deepgram API key. + +Your proxy service should replace the Authorization header with `Authorization: token ` and return results verbatim to the SDK. + +Check out our example Node-based proxy here: [Deepgram Node Proxy](https://github.com/deepgram-devs/deepgram-node-proxy). + +# Transcription (Synchronous) ## Remote Files ```js -const response = await deepgram.transcription.preRecorded( - { url: URL_OF_FILE }, - options +const { result, error } = await deepgram.listen.prerecorded.transcribeUrl( + { + url: "https://dpgr.am/spacewalk.wav", + }, + { + model: "nova", + } ); ``` @@ -104,41 +180,127 @@ const response = await deepgram.transcription.preRecorded( ## Local Files ```js -const response = await deepgram.transcription.preRecorded( +const { result, error } = await deepgram.listen.prerecorded.transcribeFile( + fs.createReadStream("./examples/spacewalk.wav"), + { + model: "nova", + } +); +``` + +or + +```js +const { result, error } = await deepgram.listen.prerecorded.transcribeFile( + fs.readFileSync("./examples/spacewalk.wav"), { - stream: fs.createReadStream("/path/to/file"), - mimetype: MIMETYPE_OF_FILE, + model: "nova", + } +); +``` + +[See our API reference for more info](https://developers.deepgram.com/reference/pre-recorded). + +# Transcription (Asynchronous / Callbacks) + +## Remote Files + +```js +import { CallbackUrl } from "@deepgram/sdk"; + +const { result, error } = await deepgram.listen.prerecorded.transcribeUrlCallback( + { + url: "https://dpgr.am/spacewalk.wav", }, - options + new CallbackUrl("http://callback/endpoint"), + { + model: "nova", + } ); ``` [See our API reference for more info](https://developers.deepgram.com/reference/pre-recorded). +## Local Files + +```js +import { CallbackUrl } from "@deepgram/sdk"; + +const { result, error } = await deepgram.listen.prerecorded.transcribeFileCallback( + fs.createReadStream("./examples/spacewalk.wav"), + new CallbackUrl("http://callback/endpoint"), + { + model: "nova", + } +); +``` + +or + +```js +import { CallbackUrl } from "@deepgram/sdk"; + +const { result, error } = await deepgram.listen.prerecorded.transcribeFileCallback( + fs.readFileSync("./examples/spacewalk.wav"), + new CallbackUrl("http://callback/endpoint"), + { + model: "nova", + } +); +``` + +[See our API reference for more info](https://developers.deepgram.com/reference/pre-recorded). + +# Transcription (Live / Streaming) + ## Live Audio ```js -const ws = dg.transcription.live(options); +const dgConnection = deepgram.listen.live({ model: "nova" }); -// source.addListener('got-some-audio', async (event) => { -ws.send(event); -// }) +dgConnection.on(LiveTranscriptionEvents.Open, () => { + dgConnection.on(LiveTranscriptionEvents.Transcript, (data) => { + console.log(data); + }); + + source.addListener("got-some-audio", async (event) => { + dgConnection.send(event.raw_audio_data); + }); +}); ``` -See an example, here: [https://github.com/deepgram-devs/node-live-example](https://github.com/deepgram-devs/node-live-example). +To see an example, [check out our Node.js example](https://github.com/deepgram-devs/node-live-example) or our [Browser example](https://github.com/deepgram-devs/js-live-example). [See our API reference for more info](https://developers.deepgram.com/reference/streaming). -# Projects +# Transcribing to captions + +```js +import { webvtt /* , srt */ } from "@deepgram/captions"; + +const { result, error } = await deepgram.listen.prerecorded.transcribeUrl( + { + url: "https://dpgr.am/spacewalk.wav", + }, + { + model: "nova", + } +); -The `Deepgram.projects` object provides access to manage projects associated with the API key you provided when instantiating the Deepgram client. +const vttOutput = webvtt(result); +// const srtOutput = srt(result); +``` + +[See our standalone captions library for more information](https://github.com/deepgram/deepgram-node-captions). + +# Projects ## Get Projects Returns all projects accessible by the API key. ```js -const result = await deepgram.projects.list(); +const { result, error } = await deepgram.manage.getProjects(); ``` [See our API reference for more info](https://developers.deepgram.com/reference/get-projects). @@ -148,7 +310,7 @@ const result = await deepgram.projects.list(); Retrieves a specific project based on the provided project_id. ```js -const result = await deepgram.projects.get(project_id); +const { result, error } = await deepgram.manage.getProject(projectId); ``` [See our API reference for more info](https://developers.deepgram.com/reference/get-project). @@ -158,7 +320,7 @@ const result = await deepgram.projects.get(project_id); Update a project. ```js -const result = await deepgram.projects.update(project_id, options); +const { result, error } = await deepgram.manage.updateProject(projectId, options); ``` [See our API reference for more info](https://developers.deepgram.com/reference/update-project). @@ -168,7 +330,7 @@ const result = await deepgram.projects.update(project_id, options); Delete a project. ```js -await deepgram.projects.delete(project_id); +const { error } = await deepgram.manage.deleteProject(projectId); ``` [See our API reference for more info](https://developers.deepgram.com/reference/delete-project). @@ -180,7 +342,7 @@ await deepgram.projects.delete(project_id); Retrieves all keys associated with the provided project_id. ```js -const result = await deepgram.keys.list(project_id); +const { result, error } = await deepgram.manage.getProjectKeys(projectId); ``` [See our API reference for more info](https://developers.deepgram.com/reference/list-keys). @@ -190,7 +352,7 @@ const result = await deepgram.keys.list(project_id); Retrieves a specific key associated with the provided project_id. ```js -const result = await deepgram.keys.get(project_id, key_id); +const { result, error } = await deepgram.manage.getProjectKey(projectId, projectKeyId); ``` [See our API reference for more info](https://developers.deepgram.com/reference/get-key). @@ -200,8 +362,7 @@ const result = await deepgram.keys.get(project_id, key_id); Creates an API key with the provided scopes. ```js -let scopes = ["member", "etc"]; -const result = await deepgram.keys.create(project_id, comment, scopes, options); +const { result, error } = await deepgram.manage.createProjectKey(projectId, options); ``` [See our API reference for more info](https://developers.deepgram.com/reference/create-key). @@ -211,7 +372,7 @@ const result = await deepgram.keys.create(project_id, comment, scopes, options); Deletes a specific key associated with the provided project_id. ```js -await deepgram.keys.delete(project_id, key_id); +const { error } = await deepgram.manage.deleteProjectKey(projectId, projectKeyId); ``` [See our API reference for more info](https://developers.deepgram.com/reference/delete-key). @@ -223,7 +384,7 @@ await deepgram.keys.delete(project_id, key_id); Retrieves account objects for all of the accounts in the specified project_id. ```js -const result = await deepgram.members.listMembers(project_id); +const { result, error } = await deepgram.manage.getProjectMembers(projectId); ``` [See our API reference for more info](https://developers.deepgram.com/reference/get-members). @@ -233,7 +394,7 @@ const result = await deepgram.members.listMembers(project_id); Removes member account for specified member_id. ```js -const result = await deepgram.members.removeMember(project_id, member_id); +const { error } = await deepgram.manage.removeProjectMember(projectId, projectMemberId); ``` [See our API reference for more info](https://developers.deepgram.com/reference/remove-member). @@ -245,7 +406,7 @@ const result = await deepgram.members.removeMember(project_id, member_id); Retrieves scopes of the specified member in the specified project. ```js -const result = await deepgram.scopes.get(project_id, member_id); +const { result, error } = await deepgram.manage.getProjectMemberScopes(projectId, projectMemberId); ``` [See our API reference for more info](https://developers.deepgram.com/reference/get-member-scopes). @@ -255,8 +416,11 @@ const result = await deepgram.scopes.get(project_id, member_id); Updates the scope for the specified member in the specified project. ```js -let scope = "member:read"; -const result = await deepgram.scopes.update(project_id, member_id, scope); +const { result, error } = await deepgram.manage.updateProjectMemberScope( + projectId, + projectMemberId, + options +); ``` [See our API reference for more info](https://developers.deepgram.com/reference/update-scope). @@ -268,7 +432,7 @@ const result = await deepgram.scopes.update(project_id, member_id, scope); Retrieves all invitations associated with the provided project_id. ```js -const result = await deepgram.invitations.list(project_id); +const { result, error } = await deepgram.manage.getProjectInvites(projectId); ``` [See our API reference for more info](https://developers.deepgram.com/reference/list-invites). @@ -278,7 +442,7 @@ const result = await deepgram.invitations.list(project_id); Sends an invitation to the provided email address. ```js -const result = await deepgram.invitation.send(project_id, options); +const { result, error } = await deepgram.manage.sendProjectInvite(projectId, options); ``` [See our API reference for more info](https://developers.deepgram.com/reference/send-invites). @@ -288,8 +452,7 @@ const result = await deepgram.invitation.send(project_id, options); Removes the specified invitation from the project. ```js -let email = "devrel@deepgram.com"; -const result = await deepgram.invitation.delete(project_id, email); +const { error } = await deepgram.manage.deleteProjectInvite(projectId, email); ``` [See our API reference for more info](https://developers.deepgram.com/reference/delete-invite). @@ -299,7 +462,7 @@ const result = await deepgram.invitation.delete(project_id, email); Removes the authenticated user from the project. ```js -const result = await deepgram.invitation.leave(project_id); +const { result, error } = await deepgram.manage.leaveProject(projectId); ``` [See our API reference for more info](https://developers.deepgram.com/reference/leave-project). @@ -311,7 +474,7 @@ const result = await deepgram.invitation.leave(project_id); Retrieves all requests associated with the provided project_id based on the provided options. ```js -const result = await deepgram.usage.listRequests(project_id, options); +const { result, error } = await deepgram.manage.getProjectUsageRequest(projectId, requestId); ``` [See our API reference for more info](https://developers.deepgram.com/reference/get-all-requests). @@ -321,7 +484,7 @@ const result = await deepgram.usage.listRequests(project_id, options); Retrieves a specific request associated with the provided project_id. ```js -const result = await deepgram.usage.getRequest(project_id, request_id); +const { result, error } = await deepgram.manage.getProjectUsageRequest(projectId, requestId); ``` [See our API reference for more info](https://developers.deepgram.com/reference/get-request). @@ -331,7 +494,7 @@ const result = await deepgram.usage.getRequest(project_id, request_id); Retrieves usage associated with the provided project_id based on the provided options. ```js -const result = await deepgram.usage.getUsage(project_id, options); +const { result, error } = await deepgram.manage.getProjectUsageSummary(projectId, options); ``` [See our API reference for more info](https://developers.deepgram.com/reference/summarize-usage). @@ -341,7 +504,7 @@ const result = await deepgram.usage.getUsage(project_id, options); Lists the features, models, tags, languages, and processing method used for requests in the specified project. ```js -const result = await deepgram.usage.getFields(project_id, options); +const { result, error } = await deepgram.manage.getProjectUsageFields(projectId, options); ``` [See our API reference for more info](https://developers.deepgram.com/reference/get-fields). @@ -353,7 +516,7 @@ const result = await deepgram.usage.getFields(project_id, options); Retrieves the list of balance info for the specified project. ```js -const result = await deepgram.billing.listBalances(project_id); +const { result, error } = await deepgram.manage.getProjectBalances(projectId); ``` [See our API reference for more info](https://developers.deepgram.com/reference/get-all-balances). @@ -363,11 +526,37 @@ const result = await deepgram.billing.listBalances(project_id); Retrieves the balance info for the specified project and balance_id. ```js -const result = await deepgram.billing.getBalance(project_id, balance_id); +const { result, error } = await deepgram.manage.getProjectBalance(projectId, balanceId); ``` [See our API reference for more info](https://developers.deepgram.com/reference/get-balance). +# On-Prem APIs + +## List On-Prem credentials + +```js +const { result, error } = await deepgram.onprem.listCredentials(projectId); +``` + +## Get On-Prem credentials + +```js +const { result, error } = await deepgram.onprem.getCredentials(projectId, credentialId); +``` + +## Create On-Prem credentials + +```js +const { result, error } = await deepgram.onprem.createCredentials(projectId, options); +``` + +## Delete On-Prem credentials + +```js +const { result, error } = await deepgram.onprem.deleteCredentials(projectId, credentialId); +``` + # Development and Contributing Interested in contributing? We ❤️ pull requests! @@ -376,11 +565,15 @@ To make sure our community is safe for all, be sure to review and agree to our [Code of Conduct](./CODE_OF_CONDUCT.md). Then see the [Contribution](./CONTRIBUTING.md) guidelines for more information. +## Debugging and making changes locally + +If you want to make local changes to the SDK and run the [`examples/`](./examples/), you'll need to `npm run build` first, to ensure that your changes are included in the examples that are running. + # Getting Help We love to hear from you so if you have questions, comments or find a bug in the project, let us know! You can either: -- [Open an issue in this repository](https://github.com/deepgram/node-sdk/issues/new) -- [Join the Deepgram Github Discussions Community](https://github.com/orgs/deepgram/discussions) +- [Open an issue in this repository](https://github.com/deepgram/deepgram-node-sdk/issues/new) - [Join the Deepgram Discord Community](https://discord.gg/xWRaCDBtW4) +- [Join the Deepgram Github Discussions Community](https://github.com/orgs/deepgram/discussions) diff --git a/commitlint.config.js b/commitlint.config.js new file mode 100644 index 00000000..5073c20d --- /dev/null +++ b/commitlint.config.js @@ -0,0 +1 @@ +module.exports = { extends: ["@commitlint/config-conventional"] }; diff --git a/examples/nasa.mp4 b/examples/nasa.mp4 new file mode 100644 index 00000000..021dd52a Binary files /dev/null and b/examples/nasa.mp4 differ diff --git a/examples/node-live/index.js b/examples/node-live/index.js new file mode 100644 index 00000000..be79a3aa --- /dev/null +++ b/examples/node-live/index.js @@ -0,0 +1,34 @@ +const { createClient, LiveTranscriptionEvents } = require("../../dist/main/index"); +const fetch = require("cross-fetch"); + +const live = async () => { + const url = "http://stream.live.vc.bbcmedia.co.uk/bbc_world_service"; + + const deepgram = createClient(process.env.DEEPGRAM_API_KEY); + + const connection = deepgram.listen.live({ model: "general", tier: "enhanced" }); + + connection.on(LiveTranscriptionEvents.Open, () => { + connection.on(LiveTranscriptionEvents.Close, () => { + console.log("Connection closed."); + }); + + connection.on(LiveTranscriptionEvents.Metadata, (data) => { + console.log(data); + }); + + connection.on(LiveTranscriptionEvents.Transcript, (data) => { + console.log(data); + }); + + fetch(url) + .then((r) => r.body) + .then((res) => { + res.on("readable", () => { + connection.send(res.read()); + }); + }); + }); +}; + +live(); diff --git a/examples/node-prerecorded/index.js b/examples/node-prerecorded/index.js new file mode 100644 index 00000000..a5086941 --- /dev/null +++ b/examples/node-prerecorded/index.js @@ -0,0 +1,35 @@ +const { createClient } = require("../../dist/main/index"); +const fs = require("fs"); + +const transcribeUrl = async () => { + const deepgram = createClient(process.env.DEEPGRAM_API_KEY); + + const { result, error } = await deepgram.listen.prerecorded.transcribeUrl( + { + url: "https://dpgr.am/spacewalk.wav", + }, + { + model: "nova", + } + ); + + if (error) throw error; + if (!error) console.dir(result, { depth: null }); +}; + +const transcribeFile = async () => { + const deepgram = createClient(process.env.DEEPGRAM_API_KEY); + + const { result, error } = await deepgram.listen.prerecorded.transcribeFile( + fs.readFileSync("./examples/nasa.mp4"), + { + model: "nova", + } + ); + + if (error) throw error; + if (!error) console.dir(result, { depth: null }); +}; + +transcribeUrl(); +transcribeFile(); diff --git a/examples/prerecorded/index.js b/examples/prerecorded/index.js deleted file mode 100644 index e7142b6c..00000000 --- a/examples/prerecorded/index.js +++ /dev/null @@ -1,56 +0,0 @@ -// Example filename: index.js - -const fs = require("fs"); -const { Deepgram } = require("@deepgram/sdk"); - -// Your Deepgram API Key -const deepgramApiKey = "YOUR_DEEPGRAM_API_KEY"; - -// Location of the file you want to transcribe. Should include filename and extension. -// Example of a local file: ../../Audio/life-moves-pretty-fast.wav -// Example of a remote file: https://static.deepgram.com/examples/interview_speech-analytics.wav -const file = "YOUR_FILE_LOCATION"; - -// Mimetype for the file you want to transcribe -// Only necessary if transcribing a local file -// Example: audio/wav -const mimetype = "YOUR_FILE_MIME_TYPE"; - -// Initialize the Deepgram SDK -const deepgram = new Deepgram(deepgramApiKey); - -// Check whether requested file is local or remote, and prepare accordingly -if (file.startsWith("http")) { - // File is remote - // Set the source - source = { - url: file, - }; -} else { - // File is local - // Open the audio file - const audio = fs.readFileSync(file); - - // Set the source - source = { - buffer: audio, - mimetype: mimetype, - }; -} - -// Send the audio to Deepgram and get the response -deepgram.transcription - .preRecorded(source, { - smart_format: true, - model: "nova", - }) - .then((response) => { - // Write the response to the console - console.dir(response, { depth: null }); - - // Write only the transcript to the console - //console.dir(response.results.channels[0].alternatives[0].transcript, { depth: null }); - }) - .catch((err) => { - console.log(err); - }); \ No newline at end of file diff --git a/examples/prerecorded/package.json b/examples/prerecorded/package.json deleted file mode 100644 index 612337e3..00000000 --- a/examples/prerecorded/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "examples-prerecorded", - "version": "1.0.0", - "description": "A sample project for running local tests in the Deepgram node SDK", - "main": "index.js", - "scripts": { - "test": "node index.js" - }, - "dependencies": { - "@deepgram/sdk": "file:../../" - }, - "author": "", - "license": "ISC" -} diff --git a/examples/streaming/index.js b/examples/streaming/index.js deleted file mode 100644 index ea0342b2..00000000 --- a/examples/streaming/index.js +++ /dev/null @@ -1,53 +0,0 @@ -// Example filename: index.js - -const { Deepgram } = require("@deepgram/sdk"); -const fetch = require("cross-fetch"); - -// Your Deepgram API Key -const deepgramApiKey = "YOUR_DEEPGRAM_API_KEY"; - -// URL for the audio you would like to stream -// URL for the example resource will change depending on whether user is outside or inside the UK -// Outside the UK -const url = "http://stream.live.vc.bbcmedia.co.uk/bbc_world_service"; -// Inside the UK -// const url = 'http://stream.live.vc.bbcmedia.co.uk/bbc_radio_fourfm'; - -// Initialize the Deepgram SDK -const deepgram = new Deepgram(deepgramApiKey); - -// Create a websocket connection to Deepgram -// In this example, punctuation is turned on, interim results are turned off, and language is set to UK English. -const deepgramLive = deepgram.transcription.live({ - smart_format: true, - interim_results: false, - language: "en-US", - model: "nova", -}); - -// Listen for the connection to open and send streaming audio from the URL to Deepgram -fetch(url) - .then((r) => r.body) - .then((res) => { - res.on("readable", () => { - if (deepgramLive.getReadyState() == 1) { - deepgramLive.send(res.read()); - } - }); - }); - -// Listen for the connection to close -deepgramLive.addListener("close", () => { - console.log("Connection closed."); -}); - -// Listen for any transcripts received from Deepgram and write them to the console -deepgramLive.addListener("transcriptReceived", (message) => { - const data = JSON.parse(message); - - // Write the entire response to the console - console.dir(data.channel, { depth: null }); - - // Write only the transcript to the console - //console.dir(data.channel.alternatives[0].transcript, { depth: null }); -}); \ No newline at end of file diff --git a/examples/streaming/package.json b/examples/streaming/package.json deleted file mode 100644 index 2cfcf77d..00000000 --- a/examples/streaming/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "examples-streaming", - "version": "1.0.0", - "description": "A sample project for running local tests in the Deepgram node SDK", - "main": "index.js", - "scripts": { - "test": "node index.js" - }, - "dependencies": { - "@deepgram/sdk": "file:../../", - "cross-fetch": "^4.0.0" - }, - "author": "", - "license": "ISC" -} diff --git a/package-lock.json b/package-lock.json index dfc29754..dd5f11f9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,52 +1,75 @@ { "name": "@deepgram/sdk", - "version": "X.X.X", + "version": "0.0.0-automated", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@deepgram/sdk", - "version": "X.X.X", + "version": "0.0.0-automated", "license": "MIT", "dependencies": { - "bufferutil": "^4.0.6", - "dayjs": "^1.11.8", - "utf-8-validate": "^5.0.9", - "ws": "^7.5.5" + "@deepgram/captions": "^1.1.1", + "@types/websocket": "^1.0.9", + "cross-fetch": "^3.1.5", + "deepmerge": "^4.3.1", + "events": "^3.3.0", + "websocket": "^1.0.34" }, "devDependencies": { - "@types/chai": "^4.2.22", - "@types/mocha": "^9.0.0", - "@types/node": "^14.17.32", - "@types/sinon": "^10.0.6", - "@types/ws": "^7.4.7", - "@typescript-eslint/eslint-plugin": "^4.33.0", - "@typescript-eslint/parser": "^4.33.0", - "chai": "^4.3.4", - "copyfiles": "^2.4.1", - "eslint": "^7.32.0", - "eslint-config-airbnb-base": "^14.2.1", - "eslint-plugin-import": "^2.25.2", - "mocha": "^9.1.3", - "mock-websocket": "^0.0.7", - "nock": "^13.3.1", - "nodemon": "^2.0.14", + "@commitlint/cli": "^17.6.7", + "@commitlint/config-conventional": "^17.6.7", + "@faker-js/faker": "^8.0.2", + "@flydotio/dockerfile": "^0.4.10", + "@types/chai": "^4.3.5", + "@types/mocha": "^9.1.1", + "chai": "^4.3.7", + "cross-env": "^7.0.3", + "husky": "^4.3.0", + "mocha": "^9.2.2", + "nodemon": "^3.0.1", + "npm-run-all": "^4.1.5", "nyc": "^15.1.0", - "prettier": "^2.4.1", - "sinon": "^10.0.0", + "prettier": "^2.5.1", + "pretty-quick": "^3.1.3", + "rimraf": "^3.0.2", + "semantic-release-plugin-update-version-in-files": "^1.1.0", + "ts-loader": "^8.0.11", "ts-node": "^10.9.1", - "typescript": "^4.6.3", - "webpack": "^5.72.0", + "typedoc": "^0.22.16", + "typescript": "^4.5.5", + "webpack": "^5.69.1", "webpack-cli": "^4.9.2" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "dependencies": { - "@babel/highlight": "^7.12.13" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" } }, "node_modules/@babel/compat-data": { @@ -85,25 +108,10 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -119,23 +127,28 @@ } }, "node_modules/@babel/generator": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.1.tgz", - "integrity": "sha512-TMGhsXMXCP/O1WtQmZjpEYDhCYC9vFhayWZPJSZCGkPJgUqX0rF0wwtrYvnzVxIjcF80tkUertXVk5cwqi5cAQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "dev": true, "dependencies": { - "@babel/types": "^7.14.1", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "@babel/types": "^7.23.0", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@babel/generator/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "node_modules/@babel/generator/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@babel/helper-compilation-targets": { @@ -154,32 +167,46 @@ } }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" } }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", - "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "dependencies": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.12.13" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, "dependencies": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { @@ -247,19 +274,34 @@ } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, "dependencies": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", - "dev": true + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/helper-validator-option": { "version": "7.12.17", @@ -279,14 +321,17 @@ } }, "node_modules/@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/highlight/node_modules/chalk": { @@ -304,9 +349,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.1.tgz", - "integrity": "sha512-muUGEKu8E/ftMTPlNp+mc6zL3E9zKWmF5sDHZ5MSsoTP9Wyz64AhEf9kD08xYJ7w6Hdcu8H550ircnPyWSIF0Q==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -316,30 +361,38 @@ } }, "node_modules/@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz", - "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.0", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.0", - "@babel/types": "^7.14.0", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/traverse/node_modules/globals": { @@ -352,172 +405,269 @@ } }, "node_modules/@babel/types": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", - "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "node_modules/@commitlint/cli": { + "version": "17.6.7", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.6.7.tgz", + "integrity": "sha512-nzZmfO5KIOupYppn1MsnYX/80I+KDlxiwkks3CJT0XT+t34UgqGi3eSyEuzgcIjPlORk5/GMaAEiys78iLfGMg==", "dev": true, "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" + "@commitlint/format": "^17.4.4", + "@commitlint/lint": "^17.6.7", + "@commitlint/load": "^17.6.7", + "@commitlint/read": "^17.5.1", + "@commitlint/types": "^17.4.4", + "execa": "^5.0.0", + "lodash.isfunction": "^3.0.9", + "resolve-from": "5.0.0", + "resolve-global": "1.0.0", + "yargs": "^17.0.0" + }, + "bin": { + "commitlint": "cli.js" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/cli/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { "node": ">=12" } }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "node_modules/@commitlint/cli/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "engines": { - "node": ">=10.0.0" + "node": ">=8" } }, - "node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "node_modules/@commitlint/cli/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=12" } }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "node_modules/@commitlint/cli/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, "engines": { - "node": ">= 4" + "node": ">=12" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "node_modules/@commitlint/config-conventional": { + "version": "17.6.7", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.6.7.tgz", + "integrity": "sha512-4oTpEUC0HRM54QRHBPMOJW1pETp7usxXn9RuNYNWHcmu8wi1mpws95hvS20u2n6HtIkTn0jfn7vHioCm4AGUTw==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" + "conventional-changelog-conventionalcommits": "^5.0.0" }, "engines": { - "node": ">=10.10.0" + "node": ">=v14" } }, - "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==", + "node_modules/@commitlint/config-validator": { + "version": "17.6.7", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.6.7.tgz", + "integrity": "sha512-vJSncmnzwMvpr3lIcm0I8YVVDJTzyjy7NZAeXbTXy+MPUdAr9pKyyg7Tx/ebOQ9kqzE6O9WT6jg2164br5UdsQ==", + "dev": true, + "dependencies": { + "@commitlint/types": "^17.4.4", + "ajv": "^8.11.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/config-validator/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@commitlint/config-validator/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "node_modules/@commitlint/ensure": { + "version": "17.6.7", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.6.7.tgz", + "integrity": "sha512-mfDJOd1/O/eIb/h4qwXzUxkmskXDL9vNPnZ4AKYKiZALz4vHzwMxBSYtyL2mUIDeU9DRSpEUins8SeKtFkYHSw==", "dev": true, "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" + "@commitlint/types": "^17.4.4", + "lodash.camelcase": "^4.3.0", + "lodash.kebabcase": "^4.1.1", + "lodash.snakecase": "^4.1.1", + "lodash.startcase": "^4.4.0", + "lodash.upperfirst": "^4.3.1" }, "engines": { - "node": ">=8" + "node": ">=v14" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "node_modules/@commitlint/execute-rule": { + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-17.4.0.tgz", + "integrity": "sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==", "dev": true, "engines": { - "node": ">=6" + "node": ">=v14" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/@commitlint/format": { + "version": "17.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-17.4.4.tgz", + "integrity": "sha512-+IS7vpC4Gd/x+uyQPTAt3hXs5NxnkqAZ3aqrHd5Bx/R9skyCAWusNlNbw3InDbAK6j166D9asQM8fnmYIa+CXQ==", "dev": true, "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "@commitlint/types": "^17.4.4", + "chalk": "^4.1.0" }, "engines": { - "node": ">=8" + "node": ">=v14" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/@commitlint/is-ignored": { + "version": "17.6.7", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.6.7.tgz", + "integrity": "sha512-vqyNRqtbq72P2JadaoWiuoLtXIs9SaAWDqdtef6G2zsoXqKFc7vqj1f+thzVgosXG3X/5K9jNp+iYijmvOfc/g==", "dev": true, "dependencies": { - "p-locate": "^4.1.0" + "@commitlint/types": "^17.4.4", + "semver": "7.5.2" }, "engines": { - "node": ">=8" + "node": ">=v14" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/@commitlint/lint": { + "version": "17.6.7", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.6.7.tgz", + "integrity": "sha512-TW+AozfuOFMrHn+jdwtz0IWu8REKFp0eryOvoBp2r8IXNc4KihKB1spAiUB6SFyHD6hVVeolz12aHnJ3Mb+xVQ==", "dev": true, "dependencies": { - "p-try": "^2.0.0" + "@commitlint/is-ignored": "^17.6.7", + "@commitlint/parse": "^17.6.7", + "@commitlint/rules": "^17.6.7", + "@commitlint/types": "^17.4.4" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=v14" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/@commitlint/load": { + "version": "17.6.7", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.6.7.tgz", + "integrity": "sha512-QZ2rJTbX55BQdYrCm/p6+hh/pFBgC9nTJxfsrK6xRPe2thiQzHN0AQDBqBwAirn6gIkHrjIbCbtAE6kiDYLjrw==", "dev": true, "dependencies": { - "p-limit": "^2.2.0" + "@commitlint/config-validator": "^17.6.7", + "@commitlint/execute-rule": "^17.4.0", + "@commitlint/resolve-extends": "^17.6.7", + "@commitlint/types": "^17.4.4", + "@types/node": "*", + "chalk": "^4.1.0", + "cosmiconfig": "^8.0.0", + "cosmiconfig-typescript-loader": "^4.0.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2", + "lodash.uniq": "^4.5.0", + "resolve-from": "^5.0.0", + "ts-node": "^10.8.1", + "typescript": "^4.6.4 || ^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=v14" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "node_modules/@commitlint/load/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@commitlint/load/node_modules/cosmiconfig": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", + "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", "dev": true, + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, "engines": { - "node": ">=6" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "node_modules/@commitlint/load/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/@commitlint/load/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", @@ -526,129 +676,400 @@ "node": ">=8" } }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "node_modules/@commitlint/message": { + "version": "17.4.2", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-17.4.2.tgz", + "integrity": "sha512-3XMNbzB+3bhKA1hSAWPCQA3lNxR4zaeQAQcHj0Hx5sVdO6ryXtgUBGGv+1ZCLMgAPRixuc6en+iNAzZ4NzAa8Q==", "dev": true, "engines": { - "node": ">=8" + "node": ">=v14" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "node_modules/@commitlint/parse": { + "version": "17.6.7", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-17.6.7.tgz", + "integrity": "sha512-ibO03BgEns+JJpohpBZYD49mCdSNMg6fTv7vA5yqzEFWkBQk5NWhEBw2yG+Z1UClStIRkMkAYyI2HzoQG9tCQQ==", "dev": true, + "dependencies": { + "@commitlint/types": "^17.4.4", + "conventional-changelog-angular": "^5.0.11", + "conventional-commits-parser": "^3.2.2" + }, "engines": { - "node": ">=6.0.0" + "node": ">=v14" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "node_modules/@commitlint/read": { + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-17.5.1.tgz", + "integrity": "sha512-7IhfvEvB//p9aYW09YVclHbdf1u7g7QhxeYW9ZHSO8Huzp8Rz7m05aCO1mFG7G8M+7yfFnXB5xOmG18brqQIBg==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@commitlint/top-level": "^17.4.0", + "@commitlint/types": "^17.4.4", + "fs-extra": "^11.0.0", + "git-raw-commits": "^2.0.11", + "minimist": "^1.2.6" + }, + "engines": { + "node": ">=v14" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@commitlint/resolve-extends": { + "version": "17.6.7", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.6.7.tgz", + "integrity": "sha512-PfeoAwLHtbOaC9bGn/FADN156CqkFz6ZKiVDMjuC2N5N0740Ke56rKU7Wxdwya8R8xzLK9vZzHgNbuGhaOVKIg==", "dev": true, "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@commitlint/config-validator": "^17.6.7", + "@commitlint/types": "^17.4.4", + "import-fresh": "^3.0.0", + "lodash.mergewith": "^4.6.2", + "resolve-from": "^5.0.0", + "resolve-global": "^1.0.0" }, "engines": { - "node": ">= 8" + "node": ">=v14" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@commitlint/resolve-extends/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@commitlint/rules": { + "version": "17.6.7", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-17.6.7.tgz", + "integrity": "sha512-x/SDwDTN3w3Gr5xkhrIORu96rlKCc8ZLYEMXRqi9+MB33st2mKcGvKa5uJuigHlbl3xm75bAAubATrodVrjguQ==", "dev": true, "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "@commitlint/ensure": "^17.6.7", + "@commitlint/message": "^17.4.2", + "@commitlint/to-lines": "^17.4.0", + "@commitlint/types": "^17.4.4", + "execa": "^5.0.0" }, "engines": { - "node": ">= 8" + "node": ">=v14" } }, - "node_modules/@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "node_modules/@commitlint/to-lines": { + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-17.4.0.tgz", + "integrity": "sha512-LcIy/6ZZolsfwDUWfN1mJ+co09soSuNASfKEU5sCmgFCvX5iHwRYLiIuoqXzOVDYOy7E7IcHilr/KS0e5T+0Hg==", "dev": true, "engines": { - "node": ">=6" + "node": ">=v14" + } + }, + "node_modules/@commitlint/top-level": { + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-17.4.0.tgz", + "integrity": "sha512-/1loE/g+dTTQgHnjoCy0AexKAEFyHsR2zRB4NWrZ6lZSMIxAhBJnmCqwao7b4H8888PsfoTBCLBYIw8vGnej8g==", + "dev": true, + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=v14" } }, - "node_modules/@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "node_modules/@commitlint/types": { + "version": "17.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.4.4.tgz", + "integrity": "sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ==", "dev": true, "dependencies": { - "type-detect": "4.0.8" + "chalk": "^4.1.0" + }, + "engines": { + "node": ">=v14" } }, - "node_modules/@sinonjs/fake-timers": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz", - "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@deepgram/captions": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@deepgram/captions/-/captions-1.2.0.tgz", + "integrity": "sha512-8B1C/oTxTxyHlSFubAhNRgCbQ2SQ5wwvtlByn8sDYZvdDtdn/VE2yEPZ4BvUnrKWmsbTQY6/ooLV+9Ka2qmDSQ==", + "dependencies": { + "dayjs": "^1.11.10" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@faker-js/faker": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-8.0.2.tgz", + "integrity": "sha512-Uo3pGspElQW91PCvKSIAXoEgAUlRnH29sX2/p89kg7sP1m2PzCufHINd0FhTXQf6DYGiUlVncdSPa2F9wxed2A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/fakerjs" + } + ], + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0", + "npm": ">=6.14.13" + } + }, + "node_modules/@flydotio/dockerfile": { + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/@flydotio/dockerfile/-/dockerfile-0.4.10.tgz", + "integrity": "sha512-cyxxVTzPX7qRD3/yq24eiIsSKlUFPcBjbIQmWeuXn3qS2rSdYMioUmDISchfGE7S75cEdL/baK0AJP2q7+aw6w==", + "dev": true, + "dependencies": { + "chalk": "^5.3.0", + "diff": "^5.1.0", + "ejs": "^3.1.9", + "shell-quote": "^1.8.1", + "yargs": "^17.7.2" + }, + "bin": { + "dockerfile": "index.js" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@flydotio/dockerfile/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@flydotio/dockerfile/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@flydotio/dockerfile/node_modules/diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/@flydotio/dockerfile/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@flydotio/dockerfile/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, "dependencies": { - "@sinonjs/commons": "^1.7.0" + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@sinonjs/samsam": { + "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-5.3.1.tgz", - "integrity": "sha512-1Hc0b1TtyfBu8ixF/tpfSHTVWKwCBLY4QJbkgnE7HcwyvT2xArDxb4K7dMgqRm3szI+LJbzmW/s4xxEhv6hwDg==", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "dependencies": { - "@sinonjs/commons": "^1.6.0", - "lodash.get": "^4.4.2", - "type-detect": "^4.0.8" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@sinonjs/text-encoding": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", - "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", - "dev": true + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { - "defer-to-connect": "^1.0.1" + "p-try": "^2.0.0" }, "engines": { "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, "node_modules/@tsconfig/node10": { @@ -676,9 +1097,9 @@ "dev": true }, "node_modules/@types/chai": { - "version": "4.2.22", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.22.tgz", - "integrity": "sha512-tFfcE+DSTzWAgifkjik9AySNqIyNoYwmR+uecPwwD/XRNfvOjmC/FjCxpiUGDkDVDphPfCUecSQVFw+lN3M3kQ==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz", + "integrity": "sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==", "dev": true }, "node_modules/@types/eslint": { @@ -702,210 +1123,60 @@ } }, "node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", "dev": true }, "node_modules/@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.14.tgz", + "integrity": "sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==", "dev": true }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", "dev": true }, "node_modules/@types/mocha": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.0.0.tgz", - "integrity": "sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==", + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", + "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", "dev": true }, "node_modules/@types/node": { - "version": "14.17.32", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.32.tgz", - "integrity": "sha512-JcII3D5/OapPGx+eJ+Ik1SQGyt6WvuqdRfh9jUwL6/iHGjmyOriBDciBUu7lEIBTL2ijxwrR70WUnw5AEDmFvQ==", + "version": "14.18.53", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.53.tgz", + "integrity": "sha512-soGmOpVBUq+gaBMwom1M+krC/NNbWlosh4AtGA03SyWNDiqSKtwp7OulO1M6+mg8YkHMvJ/y0AkCeO8d1hNb7A==" + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", "dev": true }, - "node_modules/@types/sinon": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.6.tgz", - "integrity": "sha512-6EF+wzMWvBNeGrfP3Nx60hhx+FfwSg1JJBLAAP/IdIUq0EYkqCYf70VT3PhuhPX9eLD+Dp+lNdpb/ZeHG8Yezg==", - "dev": true, - "dependencies": { - "@sinonjs/fake-timers": "^7.1.0" - } + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true }, - "node_modules/@types/ws": { - "version": "7.4.7", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", - "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", - "dev": true, + "node_modules/@types/websocket": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.9.tgz", + "integrity": "sha512-xrMBdqdKdlE+7L9Wg2PQblIkZGSgiMlEoP6UAaYKMHbbxqCJ6PV/pTZ2RcMcSSERurU2TtGbmO4lqpFOJd01ww==", "dependencies": { "@types/node": "*" } }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", - "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", - "dev": true, - "dependencies": { - "@typescript-eslint/experimental-utils": "4.33.0", - "@typescript-eslint/scope-manager": "4.33.0", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^4.0.0", - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", - "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", - "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "debug": "^4.3.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", - "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", - "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", - "dev": true, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", - "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", - "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, "node_modules/@ungap/promise-all-settled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", @@ -913,155 +1184,155 @@ "dev": true }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", "dev": true, "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", "dev": true }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", "dev": true }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", "dev": true }, "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "dev": true, "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", "dev": true }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "dev": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "dev": true, "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", "dev": true }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/ast": "1.11.6", "@xtuc/long": "4.2.2" } }, "node_modules/@webpack-cli/configtest": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.1.tgz", - "integrity": "sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", + "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", "dev": true, "peerDependencies": { "webpack": "4.x.x || 5.x.x", @@ -1069,9 +1340,9 @@ } }, "node_modules/@webpack-cli/info": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.1.tgz", - "integrity": "sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", + "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", "dev": true, "dependencies": { "envinfo": "^7.7.3" @@ -1081,9 +1352,9 @@ } }, "node_modules/@webpack-cli/serve": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.1.tgz", - "integrity": "sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", + "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", "dev": true, "peerDependencies": { "webpack-cli": "4.x.x" @@ -1113,9 +1384,9 @@ "dev": true }, "node_modules/acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -1125,23 +1396,14 @@ } }, "node_modules/acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", "dev": true, "peerDependencies": { "acorn": "^8" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, "node_modules/acorn-walk": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", @@ -1189,15 +1451,6 @@ "ajv": "^6.9.1" } }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dev": true, - "dependencies": { - "string-width": "^4.1.0" - } - }, "node_modules/ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", @@ -1231,249 +1484,98 @@ "node_modules/anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/append-transform": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", - "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", - "dev": true, - "dependencies": { - "default-require-extensions": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/array-includes": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", - "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes/node_modules/es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", - "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes/node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes/node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes/node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes/node_modules/object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 8" } }, - "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==", + "node_modules/append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", "dev": true, + "dependencies": { + "default-require-extensions": "^3.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/array.prototype.flat": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", - "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "dev": true + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "sprintf-js": "~1.0.2" } }, - "node_modules/array.prototype.flat/node_modules/es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", - "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" + "is-array-buffer": "^3.0.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.flat/node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "node_modules/array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", "dev": true, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/array.prototype.flat/node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "dev": true + }, + "node_modules/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, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/array.prototype.flat/node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", + "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -1482,13 +1584,13 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.flat/node_modules/object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8" } }, "node_modules/assertion-error": { @@ -1500,13 +1602,22 @@ "node": "*" } }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "dev": true, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/balanced-match": { @@ -1515,6 +1626,15 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -1524,40 +1644,6 @@ "node": ">=8" } }, - "node_modules/boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "dev": true, - "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/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/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1610,15 +1696,15 @@ } }, "node_modules/buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, "node_modules/bufferutil": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", - "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz", + "integrity": "sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==", "hasInstallScript": true, "dependencies": { "node-gyp-build": "^4.3.0" @@ -1627,48 +1713,6 @@ "node": ">=6.14.2" } }, - "node_modules/cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dev": true, - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/caching-transform": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", @@ -1718,6 +1762,32 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-keys/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/caniuse-lite": { "version": "1.0.30001220", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001220.tgz", @@ -1725,15 +1795,16 @@ "dev": true }, "node_modules/chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", + "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", "dev": true, "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", - "deep-eql": "^3.0.1", + "deep-eql": "^4.1.2", "get-func-name": "^2.0.0", + "loupe": "^2.3.1", "pathval": "^1.1.1", "type-detect": "^4.0.5" }, @@ -1871,18 +1942,6 @@ "node": ">=6" } }, - "node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -1908,15 +1967,6 @@ "node": ">=6" } }, - "node_modules/clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - } - }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -1947,7 +1997,23 @@ "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "node_modules/compare-versions": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", + "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", "dev": true }, "node_modules/concat-map": { @@ -1956,28 +2022,52 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "node_modules/configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "node_modules/conventional-changelog-angular": { + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", + "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", "dev": true, "dependencies": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" + "compare-func": "^2.0.0", + "q": "^1.5.1" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/confusing-browser-globals": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz", - "integrity": "sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==", - "dev": true + "node_modules/conventional-changelog-conventionalcommits": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-5.0.0.tgz", + "integrity": "sha512-lCDbA+ZqVFQGUj7h9QBKoIpLhl8iihkO0nCTyRNzuXtcd7ubODpYB04IFy31JloiJgG0Uovu8ot8oxRzn7Nwtw==", + "dev": true, + "dependencies": { + "compare-func": "^2.0.0", + "lodash": "^4.17.15", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-commits-parser": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", + "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", + "dev": true, + "dependencies": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "conventional-commits-parser": "cli.js" + }, + "engines": { + "node": ">=10" + } }, "node_modules/convert-source-map": { "version": "1.7.0", @@ -1994,42 +2084,43 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, - "node_modules/copyfiles": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/copyfiles/-/copyfiles-2.4.1.tgz", - "integrity": "sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==", - "dev": true, - "dependencies": { - "glob": "^7.0.5", - "minimatch": "^3.0.3", - "mkdirp": "^1.0.4", - "noms": "0.0.0", - "through2": "^2.0.1", - "untildify": "^4.0.0", - "yargs": "^16.1.0" - }, - "bin": { - "copyfiles": "copyfiles", - "copyup": "copyfiles" - } + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true }, - "node_modules/copyfiles/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" }, "engines": { "node": ">=10" } }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true + "node_modules/cosmiconfig-typescript-loader": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.3.0.tgz", + "integrity": "sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==", + "dev": true, + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@types/node": "*", + "cosmiconfig": ">=7", + "ts-node": ">=10", + "typescript": ">=3" + } }, "node_modules/create-require": { "version": "1.1.1", @@ -2037,6 +2128,32 @@ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "dependencies": { + "node-fetch": "^2.6.12" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -2051,19 +2168,28 @@ "node": ">= 8" } }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/dayjs": { - "version": "1.11.8", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.8.tgz", - "integrity": "sha512-LcgxzFoWMEPO7ggRv1Y2N31hUf2R0Vj7fuy/m+Bg1K8rr+KAs1AEy4y9jd5DXe8pbHgX+srkHNS7TH6Q6ZhYeQ==" + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" }, "node_modules/debug": { "version": "4.3.3", @@ -2094,55 +2220,73 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "node_modules/decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, "dependencies": { - "mimic-response": "^1.0.0" + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" }, "engines": { - "node": ">=4" + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decamelize-keys/node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, "node_modules/deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", "dev": true, "dependencies": { "type-detect": "^4.0.0" }, "engines": { - "node": ">=0.12" + "node": ">=6" } }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "engines": { - "node": ">=4.0.0" + "node": ">=0.10.0" } }, - "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/default-require-extensions": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", - "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", + "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", "dev": true, "dependencies": { "strip-bom": "^4.0.0" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/default-require-extensions/node_modules/strip-bom": { @@ -2154,22 +2298,20 @@ "node": ">=8" } }, - "node_modules/defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "dev": true - }, "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "dev": true, "dependencies": { - "object-keys": "^1.0.12" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/diff": { @@ -2181,48 +2323,33 @@ "node": ">=0.3.1" } }, - "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==", + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, "dependencies": { - "path-type": "^4.0.0" + "is-obj": "^2.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==", + "node_modules/ejs": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", "dev": true, "dependencies": { - "esutils": "^2.0.2" + "jake": "^10.8.5" }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "dependencies": { - "is-obj": "^2.0.0" + "bin": { + "ejs": "bin/cli.js" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, "node_modules/electron-to-chromium": { "version": "1.3.725", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.725.tgz", @@ -2235,6 +2362,38 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "optional": true, + "peer": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "optional": true, + "peer": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -2257,414 +2416,197 @@ "node": ">=10.13.0" } }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, "node_modules/envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", + "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", "dev": true, "bin": { "envinfo": "dist/cli.js" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-airbnb-base": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz", - "integrity": "sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==", - "dev": true, - "dependencies": { - "confusing-browser-globals": "^1.0.10", - "object.assign": "^4.1.2", - "object.entries": "^1.1.2" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0", - "eslint-plugin-import": "^2.22.1" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.1.tgz", - "integrity": "sha512-fjoetBXQZq2tSTWZ9yWVl2KuFrTZZH3V+9iD1V1RfpDgxzJR+mPd/KZmMiA8gbPqdBzpNiEHOuT7IYEWxrH0zQ==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "find-up": "^2.1.0", - "pkg-dir": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.25.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.2.tgz", - "integrity": "sha512-qCwQr9TYfoBHOFcVGKY9C9unq05uOxxdklmBXLVvcwo68y5Hta6/GzCZEMx2zQiu0woKNEER0LE7ZgaOfBU14g==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.0", - "has": "^1.0.3", - "is-core-module": "^2.7.0", - "is-glob": "^4.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.5", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.11.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" + "engines": { + "node": ">=4" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "dev": true, "dependencies": { - "esutils": "^2.0.2" + "prr": "~1.0.1" }, - "engines": { - "node": ">=0.10.0" + "bin": { + "errno": "cli.js" } }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "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==", + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" + "is-arrayish": "^0.2.1" } }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "node_modules/es-abstract": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^2.0.0" + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.1", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.1", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.10" }, "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } + "node_modules/es-module-lexer": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", + "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", + "dev": true }, - "node_modules/eslint/node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", "dev": true, "dependencies": { - "@babel/highlight": "^7.10.4" + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/eslint/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==", + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint/node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, + "node_modules/es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "hasInstallScript": true, "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "node": ">=0.10" } }, - "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" } }, - "node_modules/eslint/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" } }, - "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true, - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=6" } }, - "node_modules/espree/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true, - "bin": { - "acorn": "bin/acorn" - }, "engines": { - "node": ">=0.4.0" + "node": ">=0.8.0" } }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "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": ">=4" + "node": ">=8.0.0" } }, "node_modules/esprima": { @@ -2680,27 +2622,6 @@ "node": ">=4" } }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "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", @@ -2731,20 +2652,10 @@ "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/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, "engines": { "node": ">=0.8.x" } @@ -2784,65 +2695,65 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" + }, "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.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "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" - } - }, "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": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, "node_modules/fastest-levenshtein": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", "dev": true }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, "dependencies": { - "reusify": "^1.0.4" + "minimatch": "^5.0.1" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "dependencies": { - "flat-cache": "^3.0.4" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=10" } }, "node_modules/fill-range": { @@ -2858,9 +2769,9 @@ } }, "node_modules/find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dev": true, "dependencies": { "commondir": "^1.0.1", @@ -2874,89 +2785,35 @@ "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, - "node_modules/find-cache-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-cache-dir/node_modules/locate-path": { + "node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-cache-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { - "p-try": "^2.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/find-cache-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-cache-dir/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "node_modules/find-versions": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-4.0.0.tgz", + "integrity": "sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ==", "dev": true, "dependencies": { - "find-up": "^4.0.0" + "semver-regex": "^3.1.2" }, "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" + "node": ">=10" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/flat": { @@ -2968,25 +2825,15 @@ "flat": "cli.js" } }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" + "is-callable": "^1.1.3" } }, - "node_modules/flatted": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", - "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", - "dev": true - }, "node_modules/foreground-child": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", @@ -3020,6 +2867,20 @@ } ] }, + "node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -3046,11 +2907,32 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/gensync": { "version": "1.0.0-beta.2", @@ -3071,23 +2953,24 @@ } }, "node_modules/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, "engines": { "node": "*" } }, "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dev": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1" + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3102,18 +2985,6 @@ "node": ">=8.0.0" } }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/get-symbol-description": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", @@ -3130,6 +3001,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/git-raw-commits": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", + "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", + "dev": true, + "dependencies": { + "dargs": "^7.0.0", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "git-raw-commits": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -3169,87 +3059,42 @@ "dev": true }, "node_modules/global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==", "dev": true, "dependencies": { - "ini": "2.0.0" + "ini": "^1.3.4" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dev": true, "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" + "define-properties": "^1.1.3" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globals/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" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" + "get-intrinsic": "^1.1.3" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, - "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "engines": { - "node": ">=8.6" + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/graceful-fs": { @@ -3267,6 +3112,15 @@ "node": ">=4.x" } }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -3280,9 +3134,9 @@ } }, "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3297,10 +3151,34 @@ "node": ">=4" } }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, "engines": { "node": ">= 0.4" @@ -3324,15 +3202,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/hasha": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", @@ -3349,6 +3218,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/hasha/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -3358,18 +3236,24 @@ "he": "bin/he" } }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -3379,10 +3263,52 @@ "node": ">=10.17.0" } }, + "node_modules/husky": { + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/husky/-/husky-4.3.8.tgz", + "integrity": "sha512-LCqqsB0PzJQ/AlCgfrfzRe3e3+NvmefAdKQhRYpxS4u6clblBoDdzzvHi8fmxKRzvMxPY/1WZWzomPZww0Anow==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "chalk": "^4.0.0", + "ci-info": "^2.0.0", + "compare-versions": "^3.6.0", + "cosmiconfig": "^7.0.0", + "find-versions": "^4.0.0", + "opencollective-postinstall": "^2.0.2", + "pkg-dir": "^5.0.0", + "please-upgrade-node": "^3.2.0", + "slash": "^3.0.0", + "which-pm-runs": "^1.0.0" + }, + "bin": { + "husky-run": "bin/run.js", + "husky-upgrade": "lib/upgrader/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/husky" + } + }, + "node_modules/husky/node_modules/pkg-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", + "dev": true, + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/ignore": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", - "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true, "engines": { "node": ">= 4" @@ -3391,7 +3317,7 @@ "node_modules/ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", "dev": true }, "node_modules/import-fresh": { @@ -3410,15 +3336,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/import-local": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", @@ -3438,79 +3355,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-local/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/import-local/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/import-local/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/import-local/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/import-local/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -3546,21 +3390,18 @@ "dev": true }, "node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true, - "engines": { - "node": ">=10" - } + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true }, "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.0", + "get-intrinsic": "^1.2.0", "has": "^1.0.3", "side-channel": "^1.0.4" }, @@ -3577,11 +3418,34 @@ "node": ">= 0.10" } }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, "node_modules/is-bigint": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz", - "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3599,12 +3463,13 @@ } }, "node_modules/is-boolean-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", - "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, "dependencies": { - "call-bind": "^1.0.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -3614,33 +3479,21 @@ } }, "node_modules/is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, - "dependencies": { - "ci-info": "^2.0.0" + "engines": { + "node": ">= 0.4" }, - "bin": { - "is-ci": "bin.js" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -3691,26 +3544,10 @@ "node": ">=0.10.0" } }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true, "engines": { "node": ">= 0.4" @@ -3719,18 +3556,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -3741,10 +3566,13 @@ } }, "node_modules/is-number-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", - "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -3761,15 +3589,6 @@ "node": ">=8" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", @@ -3792,13 +3611,13 @@ } }, "node_modules/is-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "has-symbols": "^1.0.1" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -3808,10 +3627,13 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3826,10 +3648,13 @@ } }, "node_modules/is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -3852,11 +3677,37 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", + "dev": true, + "dependencies": { + "text-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, "node_modules/is-unicode-supported": { "version": "0.1.0", @@ -3871,12 +3722,12 @@ } }, "node_modules/is-weakref": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", - "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.0" + "call-bind": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3891,18 +3742,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", - "dev": true - }, - "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -3919,9 +3758,9 @@ } }, "node_modules/istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true, "engines": { "node": ">=8" @@ -3955,47 +3794,31 @@ } }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/istanbul-lib-processinfo": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", - "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", + "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", "dev": true, "dependencies": { "archy": "^1.0.0", - "cross-spawn": "^7.0.0", - "istanbul-lib-coverage": "^3.0.0-alpha.1", - "make-dir": "^3.0.0", + "cross-spawn": "^7.0.3", + "istanbul-lib-coverage": "^3.2.0", "p-map": "^3.0.0", "rimraf": "^3.0.0", - "uuid": "^3.3.3" + "uuid": "^8.3.2" }, "engines": { "node": ">=8" } }, - "node_modules/istanbul-lib-processinfo/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/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", @@ -4046,9 +3869,9 @@ } }, "node_modules/istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", "dev": true, "dependencies": { "html-escaper": "^2.0.0", @@ -4058,6 +3881,24 @@ "node": ">=8" } }, + "node_modules/jake": { + "version": "10.8.7", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", @@ -4127,10 +3968,10 @@ "node": ">=4" } }, - "node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, "node_modules/json-parse-even-better-errors": { @@ -4145,43 +3986,59 @@ "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": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", "dev": true }, - "node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "dependencies": { - "minimist": "^1.2.0" + "universalify": "^2.0.0" }, - "bin": { - "json5": "lib/cli.js" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/just-extend": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", - "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", - "dev": true + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] }, - "node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, "dependencies": { - "json-buffer": "3.0.0" + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" } }, "node_modules/kind-of": { @@ -4193,29 +4050,47 @@ "node": ">=0.10.0" } }, - "node_modules/latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, "dependencies": { - "package-json": "^6.3.0" + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "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==", + "node_modules/load-json-file/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" }, "engines": { - "node": ">= 0.8.0" + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" } }, "node_modules/loader-runner": { @@ -4227,26 +4102,33 @@ "node": ">=6.11.5" } }, - "node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dev": true, "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" }, "engines": { - "node": ">=4" + "node": ">=8.9.0" } }, - "node_modules/locate-path/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "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": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lodash": { @@ -4255,16 +4137,34 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true + }, "node_modules/lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", + "dev": true + }, + "node_modules/lodash.isfunction": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", + "dev": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", "dev": true }, - "node_modules/lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", "dev": true }, "node_modules/lodash.merge": { @@ -4273,16 +4173,34 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "node_modules/lodash.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", + "dev": true + }, + "node_modules/lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", "dev": true }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "node_modules/lodash.startcase": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", + "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", + "dev": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true + }, + "node_modules/lodash.upperfirst": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", + "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", "dev": true }, "node_modules/log-symbols": { @@ -4301,72 +4219,155 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "node_modules/loupe": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", + "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.0" + } + }, + "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/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", "dev": true, + "bin": { + "marked": "bin/marked.js" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 12" } }, - "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==", + "node_modules/memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "errno": "^0.1.3", + "readable-stream": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=4.3.0 <5.0.0 || >=5.10" } }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, "dependencies": { - "semver": "^6.0.0" + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/meow/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" } }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, "node_modules/micromatch": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", @@ -4410,19 +4411,19 @@ "node": ">=6" } }, - "node_modules/mimic-response": { + "node_modules/min-indent": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "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" @@ -4437,6 +4438,38 @@ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/minimist-options/node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/minimist-options/node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/mocha": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", @@ -4498,22 +4531,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mocha/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/mocha/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -4535,21 +4552,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/mocha/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/mocha/node_modules/minimatch": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", @@ -4568,36 +4570,6 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, - "node_modules/mocha/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/mocha/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/mocha/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -4613,16 +4585,13 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/mock-websocket": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mock-websocket/-/mock-websocket-0.0.7.tgz", - "integrity": "sha512-msBc5kX1yIL8E/oMSFY2oTAWb2l3Wo6wYtXdvIY5fxP6925gIaiYOCKqGUK+ybQE59Z0m4Tv0uEpBU6BvH5q5Q==", + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", "dev": true, - "dependencies": { - "url-parse": "^1.4.4" - }, "engines": { - "node": ">= 4" + "node": ">=4" } }, "node_modules/ms": { @@ -4643,59 +4612,46 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, - "node_modules/nise": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/nise/-/nise-4.1.0.tgz", - "integrity": "sha512-eQMEmGN/8arp0xsvGoQ+B1qvSkR73B1nWSCh7nOt5neMCtwcQVYQGdzQMhcNscktTsWB54xnlSQFzOAPJD8nXA==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.7.0", - "@sinonjs/fake-timers": "^6.0.0", - "@sinonjs/text-encoding": "^0.7.1", - "just-extend": "^4.0.2", - "path-to-regexp": "^1.7.0" - } + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" }, - "node_modules/nise/node_modules/@sinonjs/fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", - "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true }, - "node_modules/nock": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/nock/-/nock-13.3.1.tgz", - "integrity": "sha512-vHnopocZuI93p2ccivFyGuUfzjq2fxNyNurp7816mlT5V5HF4SzXu8lvLrVzBbNqzs+ODooZ6OksuSUNM7Njkw==", - "dev": true, + "node_modules/node-fetch": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", + "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", "dependencies": { - "debug": "^4.1.0", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.21", - "propagate": "^2.0.0" + "whatwg-url": "^5.0.0" }, "engines": { - "node": ">= 10.13" + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, "node_modules/node-gyp-build": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", - "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.7.0.tgz", + "integrity": "sha512-PbZERfeFdrHQOOXiAKOY0VPbykZy90ndPKk0d+CFDegTKmWp1VgOTz2xACVbr1BjCWxrQp68CXtvNsveFhqDJg==", "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -4721,28 +4677,27 @@ "dev": true }, "node_modules/nodemon": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.14.tgz", - "integrity": "sha512-frcpDx+PviKEQRSYzwhckuO2zoHcBYLHI754RE9z5h1RGtrngerc04mLpQQCPWBkH/2ObrX7We9YiwVSYZpFJQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.1.tgz", + "integrity": "sha512-g9AZ7HmkhQkqXkRc20w+ZfQ73cHLbE8hnPbtaFbFtCumZsjyMhKk9LajQ07U5Ux28lvFjZ5X7HvWR1xzU8jHVw==", "dev": true, - "hasInstallScript": true, "dependencies": { - "chokidar": "^3.2.2", - "debug": "^3.2.6", + "chokidar": "^3.5.2", + "debug": "^3.2.7", "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", - "pstree.remy": "^1.1.7", - "semver": "^5.7.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", "supports-color": "^5.5.0", "touch": "^3.1.0", - "undefsafe": "^2.0.3", - "update-notifier": "^5.1.0" + "undefsafe": "^2.0.5" }, "bin": { "nodemon": "bin/nodemon.js" }, "engines": { - "node": ">=8.10.0" + "node": ">=10" }, "funding": { "type": "opencollective", @@ -4759,73 +4714,210 @@ } }, "node_modules/nodemon/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { - "semver": "bin/semver" + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/noms": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/noms/-/noms-0.0.0.tgz", - "integrity": "sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow==", + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", "dev": true, "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "~1.0.31" + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" } }, - "node_modules/noms/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "node_modules/noms/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "node_modules/normalize-package-data/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, - "node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", "dev": true, "dependencies": { - "abbrev": "1" + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" }, "bin": { - "nopt": "bin/nopt.js" + "npm-run-all": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" }, "engines": { - "node": "*" + "node": ">= 4" } }, - "node_modules/normalize-path": { + "node_modules/npm-run-all/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/npm-run-all/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/path-type": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "dev": true, + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/npm-run-all/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "node_modules/npm-run-all/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, "node_modules/npm-run-path": { @@ -4937,7 +5029,7 @@ "node_modules/nyc/node_modules/decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, "engines": { "node": ">=0.10.0" @@ -4995,15 +5087,6 @@ "node": ">=8" } }, - "node_modules/nyc/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/nyc/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -5013,21 +5096,6 @@ "node": ">=8" } }, - "node_modules/nyc/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/nyc/node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -5084,9 +5152,9 @@ } }, "node_modules/object-inspect": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", - "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==", + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5102,14 +5170,14 @@ } }, "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, "engines": { @@ -5119,140 +5187,254 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.entries": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz", - "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==", + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "has": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" + "wrappy": "1" } }, - "node_modules/object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "mimic-fn": "^2.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/opencollective-postinstall": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", + "dev": true, + "bin": { + "opencollective-postinstall": "index.js" } }, - "node_modules/object.values/node_modules/es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "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": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", - "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/object.values/node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "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": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/object.values/node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "aggregate-error": "^3.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-hash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8" } }, - "node_modules/object.values/node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "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": { - "has-tostringtag": "^1.0.0" + "callsites": "^3.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" } }, - "node_modules/object.values/node_modules/object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "node_modules/picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", "dev": true, + "engines": { + "node": ">=8.6" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "node_modules/pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "dependencies": { - "wrappy": "1" + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { - "mimic-fn": "^2.1.0" + "p-try": "^2.0.0" }, "engines": { "node": ">=6" @@ -5261,378 +5443,424 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "dependencies": { - "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": "^2.2.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, - "node_modules/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "node_modules/please-upgrade-node": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", "dev": true, + "dependencies": { + "semver-compare": "^1.0.0" + } + }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, "engines": { - "node": ">=6" + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "node_modules/pretty-quick": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-3.1.3.tgz", + "integrity": "sha512-kOCi2FJabvuh1as9enxYmrnBC6tVMoVOenMaBqRfsvBHB0cbpYHjdQEpSglpASDFEXVwplpcGR4CLEaisYAFcA==", "dev": true, "dependencies": { - "p-try": "^1.0.0" + "chalk": "^3.0.0", + "execa": "^4.0.0", + "find-up": "^4.1.0", + "ignore": "^5.1.4", + "mri": "^1.1.5", + "multimatch": "^4.0.0" + }, + "bin": { + "pretty-quick": "bin/pretty-quick.js" }, "engines": { - "node": ">=4" + "node": ">=10.13" + }, + "peerDependencies": { + "prettier": ">=2.0.0" } }, - "node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "node_modules/pretty-quick/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": { - "p-limit": "^1.1.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/p-map": { + "node_modules/pretty-quick/node_modules/chalk": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, "dependencies": { - "aggregate-error": "^3.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { "node": ">=8" } }, - "node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "node_modules/pretty-quick/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": ">=4" + "node": ">=7.0.0" } }, - "node_modules/package-hash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", - "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "node_modules/pretty-quick/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/pretty-quick/node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.15", - "hasha": "^5.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "node_modules/pretty-quick/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "dependencies": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/package-json/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/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==", + "node_modules/pretty-quick/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, "dependencies": { - "callsites": "^3.0.0" + "pump": "^3.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/path-exists": { + "node_modules/pretty-quick/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "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/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "node_modules/pretty-quick/node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8.12.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==", + "node_modules/pretty-quick/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, "engines": { "node": ">=8" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "node_modules/pretty-quick/node_modules/multimatch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz", + "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==", "dev": true, "dependencies": { - "isarray": "0.0.1" + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + }, + "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==", + "node_modules/pretty-quick/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, "engines": { - "node": ">=8" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "node_modules/pretty-quick/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "node_modules/pretty-quick/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, - "engines": { - "node": ">=8.6" + "dependencies": { + "has-flag": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "engines": { + "node": ">=8" } }, - "node_modules/pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/process-on-spawn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", + "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", "dev": true, "dependencies": { - "find-up": "^2.1.0" + "fromentries": "^1.2.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true, "engines": { - "node": ">= 0.8.0" + "node": ">=6" } }, - "node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", "dev": true, "engines": { - "node": ">=4" + "node": ">=0.6.0", + "teleport": ">=0.2.0" } }, - "node_modules/prettier": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz", - "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==", + "node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, "engines": { - "node": ">=10.13.0" + "node": ">=8" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } }, - "node_modules/process-on-spawn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", - "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "dependencies": { - "fromentries": "^1.2.0" + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" }, "engines": { "node": ">=8" } }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, "engines": { - "node": ">=0.4.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/propagate": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", - "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "dev": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, "engines": { "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "dependencies": { - "escape-goat": "^2.0.0" + "p-limit": "^2.2.0" }, "engines": { "node": ">=8" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, - "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/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" + "engines": { + "node": ">=8" } }, - "node_modules/rc/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/readable-stream": { @@ -5695,46 +5923,40 @@ "node": ">= 0.10" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, "dependencies": { - "rc": "^1.2.8" + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=8" } }, - "node_modules/registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "node_modules/regexp.prototype.flags": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", "dev": true, "dependencies": { - "rc": "^1.2.8" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/release-zalgo": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", + "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", "dev": true, "dependencies": { "es6-error": "^4.0.1" @@ -5767,12 +5989,6 @@ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, "node_modules/resolve": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", @@ -5816,23 +6032,16 @@ "node": ">=4" } }, - "node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "node_modules/resolve-global": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", + "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", "dev": true, "dependencies": { - "lowercase-keys": "^1.0.0" - } - }, - "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, + "global-dirs": "^0.1.1" + }, "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/rimraf": { @@ -5850,29 +6059,30 @@ "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==", + "node_modules/safe-array-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", + "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", "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" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -5893,10 +6103,31 @@ } ] }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "optional": true, + "peer": true + }, "node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.8", @@ -5911,10 +6142,20 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/semantic-release-plugin-update-version-in-files": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/semantic-release-plugin-update-version-in-files/-/semantic-release-plugin-update-version-in-files-1.1.0.tgz", + "integrity": "sha512-OWBrved3Rr0w3YP4iID81MhG9qhGrG+XtxdO9VMhKJ9qte3yBdMz5cSxDiPE/uhnGJQF00fqQetY3yhHFGabWw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "glob": "^7.1.3" + } + }, "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", + "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -5926,25 +6167,22 @@ "node": ">=10" } }, - "node_modules/semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "dev": true + }, + "node_modules/semver-regex": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-3.1.4.tgz", + "integrity": "sha512-6IiqeZNgq01qGf0TId0t3NvKzSvUsjcpdEO3AQNeIjR6A2+ckTnQlDpl4qu1bjRv0RzN3FP9hzFmws3lKqRWkA==", "dev": true, - "dependencies": { - "semver": "^6.3.0" - }, "engines": { "node": ">=8" - } - }, - "node_modules/semver-diff/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/serialize-javascript": { @@ -5959,7 +6197,7 @@ "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, "node_modules/shallow-clone": { @@ -5995,141 +6233,81 @@ "node": ">=8" } }, - "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/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, "funding": { "url": "https://github.com/sponsors/ljharb" } - }, - "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "node_modules/sinon": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-10.0.0.tgz", - "integrity": "sha512-XAn5DxtGVJBlBWYrcYKEhWCz7FLwZGdyvANRyK06419hyEpdT0dMc5A8Vcxg5SCGHc40CsqoKsc1bt1CbJPfNw==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.8.1", - "@sinonjs/fake-timers": "^6.0.1", - "@sinonjs/samsam": "^5.3.1", - "diff": "^4.0.2", - "nise": "^4.1.0", - "supports-color": "^7.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/sinon" - } - }, - "node_modules/sinon/node_modules/@sinonjs/fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", - "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/sinon/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/sinon/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/sinon/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/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + }, + "node_modules/shiki": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.10.1.tgz", + "integrity": "sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "jsonc-parser": "^3.0.0", + "vscode-oniguruma": "^1.6.1", + "vscode-textmate": "5.2.0" } }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" }, "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "semver": "^7.5.3" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=10" } }, - "node_modules/slice-ansi/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==", + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { - "color-name": "~1.1.4" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=7.0.0" + "node": ">=10" } }, - "node_modules/slice-ansi/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/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } }, "node_modules/source-map": { "version": "0.6.1", @@ -6167,19 +6345,59 @@ "node": ">=8" } }, - "node_modules/spawn-wrap/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "dev": true + }, + "node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "dependencies": { + "readable-stream": "^3.0.0" + } + }, + "node_modules/split2/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">= 6" } }, "node_modules/sprintf-js": { @@ -6188,53 +6406,98 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, "node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" } }, + "node_modules/string.prototype.padend": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz", + "integrity": "sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "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.0" + "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" @@ -6258,6 +6521,18 @@ "node": ">=6" } }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -6282,79 +6557,6 @@ "node": ">=4" } }, - "node_modules/table": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.3.tgz", - "integrity": "sha512-5DkIxeA7XERBqMwJq0aHZOdMadBx4e6eDoFRuyT5VR82J0Ycg2DwM6GfA/EQAhJ+toRTaS1lIdSQCqgrmhPnlw==", - "dev": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.6.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", - "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/table/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/table/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/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -6365,14 +6567,14 @@ } }, "node_modules/terser": { - "version": "5.13.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.13.1.tgz", - "integrity": "sha512-hn4WKOfwnwbYfe48NgrQjqNOH9jzLqRcIfbYytOXCOv46LBfWr9bDS17MQqOi+BWGD0sJK3Sj5NC/gJjiojaoA==", + "version": "5.19.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.1.tgz", + "integrity": "sha512-27hxBUVdV6GoNg1pKQ7Z5cbR6V9txPVyBA+FQw3BaZ1Wuzvztce5p156DaP0NVZNrMZZ+6iG9Syf7WgMNKDg2Q==", "dev": true, "dependencies": { - "acorn": "^8.5.0", + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", "commander": "^2.20.0", - "source-map": "~0.8.0-beta.0", "source-map-support": "~0.5.20" }, "bin": { @@ -6383,16 +6585,16 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz", - "integrity": "sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==", + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", "dev": true, "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.2" + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" }, "engines": { "node": ">= 10.13.0" @@ -6416,16 +6618,38 @@ } } }, - "node_modules/terser/node_modules/source-map": { - "version": "0.8.0-beta.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "node_modules/terser-webpack-plugin/node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", "dev": true, - "dependencies": { - "whatwg-url": "^7.0.0" - }, "engines": { - "node": ">= 8" + "node": ">=6.0.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/terser-webpack-plugin/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" } }, "node_modules/test-exclude": { @@ -6442,20 +6666,42 @@ "node": ">=8" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "node_modules/text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, "node_modules/to-fast-properties": { @@ -6467,46 +6713,85 @@ "node": ">=4" } }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "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": ">=6" + "node": ">=8.0" + } + }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true, + "engines": { + "node": ">=8" } }, - "node_modules/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==", + "node_modules/ts-loader": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.4.0.tgz", + "integrity": "sha512-6nFY3IZ2//mrPc+ImY3hNWx1vCHyEhl6V+wLmL4CZcm6g1CqX7UKrkc6y0i4FwcfOhxyMPCfaEvh20f4r9GNpw==", "dev": true, "dependencies": { - "is-number": "^7.0.0" + "chalk": "^4.1.0", + "enhanced-resolve": "^4.0.0", + "loader-utils": "^2.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" }, "engines": { - "node": ">=8.0" + "node": ">=10.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "*" } }, - "node_modules/touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "node_modules/ts-loader/node_modules/enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", "dev": true, "dependencies": { - "nopt": "~1.0.10" + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" }, - "bin": { - "nodetouch": "bin/nodetouch.js" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "node_modules/ts-loader/node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "dev": true, - "dependencies": { - "punycode": "^2.1.0" + "engines": { + "node": ">=6" } }, "node_modules/ts-node": { @@ -6561,82 +6846,171 @@ "node": ">=0.3.1" } }, - "node_modules/tsconfig-paths": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz", - "integrity": "sha512-7ecdYDnIdmv639mmDwslG6KQg1Z9STTz1j7Gcz0xa+nshh/gKDAHcPxRbWOsA3SPp0tXP2leTcY9Kw+NAkfZzA==", + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" + "engines": { + "node": ">=4" } }, - "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/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", "dev": true, "dependencies": { - "tslib": "^1.8.1" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" }, "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": ">= 0.4" } }, - "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==", + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", "dev": true, "dependencies": { - "prelude-ls": "^1.2.1" + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, "dependencies": { "is-typedarray": "^1.0.0" } }, + "node_modules/typedoc": { + "version": "0.22.18", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.18.tgz", + "integrity": "sha512-NK9RlLhRUGMvc6Rw5USEYgT4DVAUFk7IF7Q6MYfpJ88KnTZP7EneEa4RcP+tX1auAcz7QT1Iy0bUSZBYYHdoyA==", + "dev": true, + "dependencies": { + "glob": "^8.0.3", + "lunr": "^2.3.9", + "marked": "^4.0.16", + "minimatch": "^5.1.0", + "shiki": "^0.10.1" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 12.10.0" + }, + "peerDependencies": { + "typescript": "4.0.x || 4.1.x || 4.2.x || 4.3.x || 4.4.x || 4.5.x || 4.6.x || 4.7.x" + } + }, + "node_modules/typedoc/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/typedoc/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/typedoc/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/typescript": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", - "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -6647,14 +7021,14 @@ } }, "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" }, "funding": { @@ -6667,53 +7041,13 @@ "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", "dev": true }, - "node_modules/unique-string": { + "node_modules/universalify": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, - "dependencies": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" + "node": ">= 10.0.0" } }, "node_modules/uri-js": { @@ -6725,32 +7059,10 @@ "punycode": "^2.1.0" } }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dev": true, - "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/utf-8-validate": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", - "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", + "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", "hasInstallScript": true, "dependencies": { "node-gyp-build": "^4.3.0" @@ -6766,27 +7078,42 @@ "dev": true }, "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, "bin": { - "uuid": "bin/uuid" + "uuid": "dist/bin/uuid" } }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "dev": true }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vscode-oniguruma": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", + "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", + "dev": true + }, + "node_modules/vscode-textmate": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", + "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", + "dev": true + }, "node_modules/watchpack": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", @@ -6801,28 +7128,27 @@ } }, "node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/webpack": { - "version": "5.76.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.0.tgz", - "integrity": "sha512-l5sOdYBDunyf72HW8dF23rFtWq/7Zgvt/9ftMof71E/yUb1YLOBmTgA2K4vQthB3kotMrSj609txVE0dnr2fjA==", + "version": "5.88.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz", + "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", "dev": true, "dependencies": { "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", + "acorn-import-assertions": "^1.9.0", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", @@ -6831,9 +7157,9 @@ "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", + "schema-utils": "^3.2.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", + "terser-webpack-plugin": "^5.3.7", "watchpack": "^2.4.0", "webpack-sources": "^3.2.3" }, @@ -6854,18 +7180,18 @@ } }, "node_modules/webpack-cli": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.2.tgz", - "integrity": "sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", + "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", "dev": true, "dependencies": { "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.1.1", - "@webpack-cli/info": "^1.4.1", - "@webpack-cli/serve": "^1.6.1", + "@webpack-cli/configtest": "^1.2.0", + "@webpack-cli/info": "^1.5.0", + "@webpack-cli/serve": "^1.7.0", "colorette": "^2.0.14", "commander": "^7.0.0", - "execa": "^5.0.0", + "cross-spawn": "^7.0.3", "fastest-levenshtein": "^1.0.12", "import-local": "^3.0.2", "interpret": "^2.2.0", @@ -6878,6 +7204,10 @@ "engines": { "node": ">=10.13.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, "peerDependencies": { "webpack": "4.x.x || 5.x.x" }, @@ -6933,15 +7263,42 @@ "node": ">=10.13.0" } }, + "node_modules/websocket": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", + "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", + "dependencies": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/websocket/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/websocket/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, "node_modules/whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, "node_modules/which": { @@ -6976,21 +7333,37 @@ } }, "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", "dev": true }, - "node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "node_modules/which-pm-runs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", + "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", "dev": true, "dependencies": { - "string-width": "^4.0.0" + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/wildcard": { @@ -6999,15 +7372,6 @@ "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", "dev": true }, - "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/workerpool": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", @@ -7082,44 +7446,6 @@ "typedarray-to-buffer": "^3.1.5" } }, - "node_modules/ws": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", - "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -7129,12 +7455,29 @@ "node": ">=10" } }, + "node_modules/yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", + "engines": { + "node": ">=0.10.32" + } + }, "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/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", diff --git a/package.json b/package.json index 1b4a278c..ebece6d8 100644 --- a/package.json +++ b/package.json @@ -1,28 +1,18 @@ { "name": "@deepgram/sdk", - "version": "X.X.X", - "description": "An SDK for the Deepgram automated speech recognition platform", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "scripts": { - "build": "npm run build:lib && webpack --config webpack.config.js && npm run types", - "build:lib": "tsc --project ./tsconfig.json", - "coverage": "nyc --reporter=lcovonly --reporter=text --reporter=text-summary npm run test", - "lint": "eslint ./src --ext .ts && prettier --config .prettierrc src/*.ts src/**/*.ts --write", - "test": "mocha -r ts-node/register tests/*test.ts tests/**/*test.ts --insect", - "watch": "nodemon -e ts --watch src --exec \"npm run build\"", - "types": "copyfiles -f \"bundle/*.d.ts\" dist && copyfiles -u 1 \"bundle/**/*.d.ts\" dist" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/deepgram/deepgram-node-sdk.git" - }, + "version": "0.0.0-automated", + "description": "Isomorphic Javascript client for Deepgram", "keywords": [ + "javascript", + "typescript", "deepgram", "asr", "speech", "sdk" ], + "homepage": "https://github.com/deepgram/deepgram-node-sdk", + "bugs": "https://github.com/deepgram/deepgram-node-sdk/issues", + "license": "MIT", "author": { "name": "Deepgram DevRel Team", "email": "devrel@deepgram.com" @@ -35,40 +25,70 @@ "Sandra Rodgers", "Shir Goldberg" ], - "license": "MIT", - "bugs": { - "url": "https://github.com/deepgram/deepgram-node-sdk/issues" + "files": [ + "dist", + "src" + ], + "engines": { + "node": ">=18.0.0" + }, + "main": "dist/main/index.js", + "module": "dist/module/index.js", + "types": "dist/module/index.d.ts", + "sideEffects": false, + "repository": "deepgram/deepgram-node-sdk", + "scripts": { + "clean": "rimraf dist docs/v2", + "format": "prettier --write \"{src,test}/**/*.ts\"", + "build": "run-s clean format build:*", + "build:main": "tsc -p tsconfig.json", + "build:module": "tsc -p tsconfig.module.json", + "build:umd": "webpack --mode=production", + "watch": "nodemon -e ts --watch src --exec \"npm run build\"", + "test": "mocha -r ts-node/register test/*test.ts test/**/*test.ts --insect --timeout 5000 || :", + "test:coverage": "nyc --reporter=lcovonly --reporter=text --reporter=text-summary npm run test", + "docs": "typedoc --entryPoints src/index.ts --out docs/v2 --includes src/**/*.ts", + "docs:json": "typedoc --entryPoints src/index.ts --includes src/**/*.ts --json docs/v2/spec.json --excludeExternals" + }, + "dependencies": { + "@deepgram/captions": "^1.1.1", + "@types/websocket": "^1.0.9", + "cross-fetch": "^3.1.5", + "deepmerge": "^4.3.1", + "events": "^3.3.0", + "websocket": "^1.0.34" }, - "homepage": "https://github.com/deepgram/deepgram-node-sdk#readme", "devDependencies": { - "@types/chai": "^4.2.22", - "@types/mocha": "^9.0.0", - "@types/node": "^14.17.32", - "@types/sinon": "^10.0.6", - "@types/ws": "^7.4.7", - "@typescript-eslint/eslint-plugin": "^4.33.0", - "@typescript-eslint/parser": "^4.33.0", - "chai": "^4.3.4", - "copyfiles": "^2.4.1", - "eslint": "^7.32.0", - "eslint-config-airbnb-base": "^14.2.1", - "eslint-plugin-import": "^2.25.2", - "mocha": "^9.1.3", - "mock-websocket": "^0.0.7", - "nock": "^13.3.1", - "nodemon": "^2.0.14", + "@commitlint/cli": "^17.6.7", + "@commitlint/config-conventional": "^17.6.7", + "@faker-js/faker": "^8.0.2", + "@flydotio/dockerfile": "^0.4.10", + "@types/chai": "^4.3.5", + "@types/mocha": "^9.1.1", + "chai": "^4.3.7", + "cross-env": "^7.0.3", + "husky": "^4.3.0", + "mocha": "^9.2.2", + "nodemon": "^3.0.1", + "npm-run-all": "^4.1.5", "nyc": "^15.1.0", - "prettier": "^2.4.1", - "sinon": "^10.0.0", + "prettier": "^2.5.1", + "pretty-quick": "^3.1.3", + "rimraf": "^3.0.2", + "semantic-release-plugin-update-version-in-files": "^1.1.0", + "ts-loader": "^8.0.11", "ts-node": "^10.9.1", - "typescript": "^4.6.3", - "webpack": "^5.72.0", + "typedoc": "^0.22.16", + "typescript": "^4.5.5", + "webpack": "^5.69.1", "webpack-cli": "^4.9.2" }, - "dependencies": { - "bufferutil": "^4.0.6", - "dayjs": "^1.11.8", - "utf-8-validate": "^5.0.9", - "ws": "^7.5.5" - } + "husky": { + "hooks": { + "pre-commit": "pretty-quick --staged", + "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" + } + }, + "jsdelivr": "dist/umd/deepgram.js", + "unpkg": "dist/umd/deepgram.js" } diff --git a/src/DeepgramClient.ts b/src/DeepgramClient.ts new file mode 100644 index 00000000..219c477e --- /dev/null +++ b/src/DeepgramClient.ts @@ -0,0 +1,24 @@ +import { AbstractClient } from "./packages/AbstractClient"; +import { ListenClient } from "./packages/ListenClient"; +import { ManageClient } from "./packages/ManageClient"; +import { OnPremClient } from "./packages/OnPremClient"; + +/** + * Deepgram Client. + * + * An isomorphic Javascript client for interacting with the Deepgram API. + * @see https://developers.deepgram.com + */ +export default class DeepgramClient extends AbstractClient { + get listen(): ListenClient { + return new ListenClient(this.key, this.options); + } + + get manage(): ManageClient { + return new ManageClient(this.key, this.options); + } + + get onprem(): OnPremClient { + return new OnPremClient(this.key, this.options); + } +} diff --git a/src/billing.ts b/src/billing.ts deleted file mode 100644 index accedab0..00000000 --- a/src/billing.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { BalanceList, Balance, RequestFunction } from "./types"; - -export class Billing { - constructor( - private _credentials: string, - private _apiUrl: string, - private _requireSSL: boolean, - private _request: RequestFunction - ) {} - - /** - * Retrieves list of balance info of the specified project. - * @param {string} projectId Unique identifier of the project - * @param {string} endpoint Custom API endpoint - * - * @returns {Promise} - */ - async listBalances( - projectId: string, - endpoint = "v1/projects" - ): Promise { - return this._request( - "GET", - this._credentials, - this._apiUrl, - this._requireSSL, - `/${endpoint}/${projectId}/balances` - ); - } - - /** - * Retrieves balance info of a specified balance_id in the specified project. - * @param {string} projectId Unique identifier of the project - * @param {string} balanceId Unique identifier of the balance - * @param {string} endpoint Custom API endpoint - * - * @returns {Promise} - */ - async getBalance( - projectId: string, - balanceId: string, - endpoint = "v1/projects" - ): Promise { - return this._request( - "GET", - this._credentials, - this._apiUrl, - this._requireSSL, - `/${endpoint}/${projectId}/balances/${balanceId}` - ); - } -} diff --git a/src/constants/defaultOptions.ts b/src/constants/defaultOptions.ts deleted file mode 100644 index 3635c434..00000000 --- a/src/constants/defaultOptions.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Default SDK options - */ -export const DefaultOptions = { - apiUrl: "api.deepgram.com", - requireSSL: true, -}; diff --git a/src/constants/index.ts b/src/constants/index.ts deleted file mode 100644 index 5e20d25e..00000000 --- a/src/constants/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./defaultOptions"; diff --git a/src/enums/alternatives.ts b/src/enums/alternatives.ts deleted file mode 100644 index d985d71f..00000000 --- a/src/enums/alternatives.ts +++ /dev/null @@ -1,4 +0,0 @@ -export const enum Alternatives { - One = "one-alternative", - Multiple = "multiple-alternatives", -} diff --git a/src/enums/diarization.ts b/src/enums/diarization.ts deleted file mode 100644 index e57c2634..00000000 --- a/src/enums/diarization.ts +++ /dev/null @@ -1,4 +0,0 @@ -export const enum Diarization { - Diarized = "diarized", - NonDiarized = "non-diarized", -} diff --git a/src/enums/index.ts b/src/enums/index.ts deleted file mode 100644 index c8713c89..00000000 --- a/src/enums/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -export * from "./alternatives"; -export * from "./connectionState"; -export * from "./diarization"; -export * from "./liveTranscriptionEvents"; -export * from "./models"; -export * from "./punctuation"; -export * from "./searchKind"; diff --git a/src/enums/liveTranscriptionEvents.ts b/src/enums/liveTranscriptionEvents.ts deleted file mode 100644 index 92e830bf..00000000 --- a/src/enums/liveTranscriptionEvents.ts +++ /dev/null @@ -1,6 +0,0 @@ -export const enum LiveTranscriptionEvents { - Open = "open", - Close = "close", - TranscriptReceived = "transcriptReceived", - Error = "error", -} diff --git a/src/enums/models.ts b/src/enums/models.ts deleted file mode 100644 index c11c39e5..00000000 --- a/src/enums/models.ts +++ /dev/null @@ -1,5 +0,0 @@ -export const enum Models { - General = "general", - Meeting = "meeting", - PhoneCall = "phonecall", -} diff --git a/src/enums/punctuation.ts b/src/enums/punctuation.ts deleted file mode 100644 index aa76ec51..00000000 --- a/src/enums/punctuation.ts +++ /dev/null @@ -1,4 +0,0 @@ -export const enum Punctuation { - NonPunctuated = "non-punctuated", - Punctuated = "punctuated", -} diff --git a/src/enums/searchKind.ts b/src/enums/searchKind.ts deleted file mode 100644 index 0e177fd4..00000000 --- a/src/enums/searchKind.ts +++ /dev/null @@ -1,4 +0,0 @@ -export const enum SearchKind { - NoSearch = "no-search", - WithSearch = "with-search", -} diff --git a/src/helpers/index.ts b/src/helpers/index.ts deleted file mode 100644 index 2d482c2e..00000000 --- a/src/helpers/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./secondsToTimestamp"; -export * from "./validateOptions"; diff --git a/src/helpers/secondsToTimestamp.ts b/src/helpers/secondsToTimestamp.ts deleted file mode 100644 index 9bd08e8c..00000000 --- a/src/helpers/secondsToTimestamp.ts +++ /dev/null @@ -1,12 +0,0 @@ -import dayjs from "dayjs"; -import utc from "dayjs/plugin/utc"; -dayjs.extend(utc); - -export function secondsToTimestamp( - seconds: number, - format = "HH:mm:ss.SSS" -): string { - return dayjs(seconds * 1000) - .utc() - .format(format); -} diff --git a/src/helpers/validateOptions.ts b/src/helpers/validateOptions.ts deleted file mode 100644 index e4e775fb..00000000 --- a/src/helpers/validateOptions.ts +++ /dev/null @@ -1,9 +0,0 @@ -export function validateOptions(apiKey: string, apiUrl: string): void { - if (!apiKey || apiKey.trim().length === 0) { - throw new Error("DG: API key is required"); - } - - if (!apiUrl || apiUrl.trim().length === 0) { - throw new Error("DG: API url should be a valid url or not provided"); - } -} diff --git a/src/httpRequest.ts b/src/httpRequest.ts deleted file mode 100644 index 2db1334c..00000000 --- a/src/httpRequest.ts +++ /dev/null @@ -1,120 +0,0 @@ -import { Readable } from "stream"; -import https, { RequestOptions } from "https"; -import http from "http"; -import { userAgent } from "./userAgent"; - -const _requestOptions = ( - apiKey: string, - apiUrl: string, - requireSSL: boolean, - path: string, - method: string, - payload?: string | Buffer | Readable, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - override_options?: any -): RequestOptions => { - const additionalHeaders: { [name: string]: string | number } = {}; - if (payload && !(payload instanceof Readable)) { - additionalHeaders["Content-Length"] = Buffer.byteLength(payload); - } - - const options = { - host: apiUrl, - protocol: requireSSL ? "https:" : "http:", - path, - method, - headers: { - "User-Agent": userAgent(), - "Content-Type": "application/json", - Authorization: `token ${apiKey}`, - ...additionalHeaders, - }, - }; - let headers = options.headers; - if (override_options && override_options.headers) { - headers = { ...headers, ...override_options.headers }; - } - - return { ...options, ...override_options, ...{ headers } }; -}; - -export function _request( - method: string, - apiKey: string, - apiURL: string, - requireSSL: boolean, - path: string, - payload?: string | Buffer | Readable, - // eslint-disable-next-line @typescript-eslint/ban-types - options?: Object -): Promise { - const requestOptions = _requestOptions( - apiKey, - apiURL, - requireSSL, - path, - method, - payload, - options - ); - return new Promise((resolve, reject) => { - try { - const httpClient = requireSSL ? https : http; - - const httpRequest = httpClient.request(requestOptions, (dgRes) => { - let dgResContent = ""; - - dgRes.on("data", (chunk) => { - dgResContent += chunk; - }); - - dgRes.on("end", () => { - let dgResponse; - try { - dgResponse = JSON.parse(dgResContent); - } catch (err) { - dgResponse = { error: dgResContent }; - } - - if (dgRes.statusCode && dgRes.statusCode >= 400) { - if (dgResponse.error) { - reject(`DG: ${JSON.stringify(dgResponse)}`); - } else { - reject(`DG: ${JSON.stringify(dgResponse)}`); - } - } - - if (dgResponse.error) { - reject(`DG: ${dgResContent}`); - } - resolve(dgResponse); - }); - - dgRes.on("error", (err) => { - reject(`DG: ${err}`); - }); - }); - - httpRequest.on("error", (err) => { - reject(`DG: ${err}`); - }); - - if (payload) { - if (payload instanceof Readable) { - payload.pipe(httpRequest); - payload.on("finish", function () { - httpRequest.end(); - }); - } else { - // It's a buffer - httpRequest.write(payload); - httpRequest.end(); - } - } else { - httpRequest.end(); - } - } catch (err) { - reject(`DG: ${err}`); - } - }); -} diff --git a/src/index.ts b/src/index.ts index c5681015..0c859252 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,86 +1,33 @@ -import { DefaultOptions } from "./constants"; -import { Keys } from "./keys"; -import { Projects } from "./projects"; -import { Transcriber } from "./transcription"; -import { Usage } from "./usage"; -import { Members } from "./members"; -import { Invitation } from "./invitation"; -import { Billing } from "./billing"; -import { Scopes } from "./scopes"; +import DeepgramClient from "./DeepgramClient"; +import type { DeepgramClientOptions } from "./lib/types"; -import { validateOptions } from "./helpers"; -import { _request } from "./httpRequest"; +/** + * Creates a new Deepgram Client. + */ +const createClient = (apiKey: string, options: DeepgramClientOptions = {}): DeepgramClient => { + return new DeepgramClient(apiKey, options); +}; -export class Deepgram { - private _apiUrl: string; - private _apiKey: string; - private _requireSSL: boolean; +export { createClient, DeepgramClient }; - keys: Keys; - projects: Projects; - transcription: Transcriber; - usage: Usage; - members: Members; - invitation: Invitation; - billing: Billing; - scopes: Scopes; +/** + * Helpful exports. + */ +export * from "./packages"; +export * from "./lib/types"; +export * from "./lib/enums"; +export * from "./lib/constants"; +export * from "./lib/errors"; +export * from "./lib/helpers"; - constructor(apiKey: string, apiUrl?: string, requireSSL?: boolean) { - this._apiKey = apiKey; - this._apiUrl = apiUrl ?? DefaultOptions.apiUrl; - this._requireSSL = requireSSL ?? DefaultOptions.requireSSL; - - /** - * Ensures that the provided options were provided - */ - validateOptions(this._apiKey, this._apiUrl); - - this.keys = new Keys( - this._apiKey, - this._apiUrl, - this._requireSSL, - _request - ); - this.projects = new Projects( - this._apiKey, - this._apiUrl, - this._requireSSL, - _request - ); - this.transcription = new Transcriber( - this._apiKey, - this._apiUrl, - this._requireSSL - ); - this.usage = new Usage( - this._apiKey, - this._apiUrl, - this._requireSSL, - _request - ); - this.members = new Members( - this._apiKey, - this._apiUrl, - this._requireSSL, - _request - ); - this.invitation = new Invitation( - this._apiKey, - this._apiUrl, - this._requireSSL, - _request - ); - this.billing = new Billing( - this._apiKey, - this._apiUrl, - this._requireSSL, - _request - ); - this.scopes = new Scopes( - this._apiKey, - this._apiUrl, - this._requireSSL, - _request - ); - } -} +/** + * Captions. These will be tree-shaken if unused. + * + * @see https://github.com/deepgram/deepgram-node-captions + * + * import/export declarations don't do anything but set up an alias to the + * exported variable, they do not count as a "use". Given their semantics, + * they are tracked specially by any bundler and will not adversely affect + * tree-shaking. + */ +export { webvtt, srt } from "@deepgram/captions"; diff --git a/src/invitation.ts b/src/invitation.ts deleted file mode 100644 index d3ed6626..00000000 --- a/src/invitation.ts +++ /dev/null @@ -1,101 +0,0 @@ -import { - Message, - InvitationOptions, - InvitationList, - RequestFunction, -} from "./types"; - -export class Invitation { - constructor( - private _credentials: string, - private _apiUrl: string, - private _requireSSL: boolean, - private _request: RequestFunction - ) {} - - /** - * Lists all the current invites of a specified project. - * @param {string} projectId Unique identifier of the project - * @param {string} endpoint Custom API endpoint - * - * @returns {Promise} - */ - async list( - projectId: string, - endpoint = "v1/projects" - ): Promise { - return this._request( - "GET", - this._credentials, - this._apiUrl, - this._requireSSL, - `/${endpoint}/${projectId}/invites` - ); - } - - /** - * Sends an invitation to join the specified project. - * @param {string} projectId Unique identifier of the project - * @param {InvitationOptions} options Used to define the email and scope of the invitee - * @param {string} endpoint Custom API endpoint - * - * @returns {Promise} - */ - async send( - projectId: string, - options: InvitationOptions, - endpoint = "v1/projects" - ): Promise { - return this._request( - "POST", - this._credentials, - this._apiUrl, - this._requireSSL, - `/${endpoint}/${projectId}/invites`, - JSON.stringify({ - email: options.email, - scope: options.scope, - }) - ); - } - - /** - * Removes the authenticated account from the specified project. - * @param {string} projectId Unique identifier of the project - * @param {string} endpoint Custom API endpoint - * - * @returns {Promise} - */ - async leave(projectId: string, endpoint = "v1/projects"): Promise { - return this._request( - "DELETE", - this._credentials, - this._apiUrl, - this._requireSSL, - `/${endpoint}/${projectId}/leave` - ); - } - - /** - * Removes the specified email from the invitations on the specified project. - * NOTE: This will return successful even if the email does not have an invite on the project. - * @param {string} projectId Unique identifier of the project - * @param {string} email Email of the invite to delete - * @param {string} endpoint Custom API endpoint - * - * @returns {Promise} - */ - async delete( - projectId: string, - email: string, - endpoint = "v1/projects" - ): Promise { - return this._request( - "DELETE", - this._credentials, - this._apiUrl, - this._requireSSL, - `/${endpoint}/${projectId}/invites/${email}` - ); - } -} diff --git a/src/keys.ts b/src/keys.ts deleted file mode 100644 index ebe54fc5..00000000 --- a/src/keys.ts +++ /dev/null @@ -1,137 +0,0 @@ -import { - CreateKeyOptions, - KeyResponse, - Key, - KeyResponseObj, - RequestFunction, - ErrorResponse, -} from "./types"; - -export class Keys { - constructor( - private _credentials: string, - private _apiUrl: string, - private _requireSSL: boolean, - private _request: RequestFunction - ) {} - - /** - * Retrieves all keys associated with the provided project_id. - * @param {string} projectId Unique identifier of the project - * @param {string} endpoint Custom API endpoint - * - * @returns {Promise} - */ - async list( - projectId: string, - endpoint = "v1/projects" - ): Promise { - const response = await this._request( - "GET", - this._credentials, - this._apiUrl, - this._requireSSL, - `/${endpoint}/${projectId}/keys` - ); - - const output = response.api_keys.map((apiKey: KeyResponseObj) => { - return { - ...apiKey, - ...apiKey.api_key, - }; - }); - - return { api_keys: output }; - } - - /** - * Retrieves a specific key associated with the provided project_id. - * @param {string} projectId Unique identifier of the project - * @param {string} keyId Unique identifier of the key - * @param {string} endpoint Custom API endpoint - * - * @returns {Promise} - */ - async get( - projectId: string, - keyId: string, - endpoint = "v1/projects" - ): Promise { - return this._request( - "GET", - this._credentials, - this._apiUrl, - this._requireSSL, - `/${endpoint}/${projectId}/keys/${keyId}` - ); - } - - /** - * Creates an API key with the provided scopes. - * @param {string} projectId Unique identifier of the project - * @param {string} comment Comment to describe the key - * @param {Array} scopes Permission scopes associated with the API key - * @param {CreateKeyOptions} options Options used when creating API keys - * @param {string} endpoint Custom API endpoint - * - * @returns {Promise} - */ - async create( - projectId: string, - comment: string, - scopes: Array, - options?: CreateKeyOptions, - endpoint = "v1/projects" - ): Promise { - /** Throw an error if the user provided both expirationDate and timeToLive */ - if ( - options && - options.expirationDate !== undefined && - options.timeToLive !== undefined - ) { - throw new Error( - "Please provide expirationDate or timeToLive or neither. Providing both is not allowed." - ); - } - - return this._request( - "POST", - this._credentials, - this._apiUrl, - this._requireSSL, - `/${endpoint}/${projectId}/keys`, - JSON.stringify({ - comment, - scopes, - expiration_date: - options && options.expirationDate - ? options.expirationDate - : undefined, - time_to_live_in_seconds: - options && options.timeToLive ? options.timeToLive : undefined, - }) - ); - } - - /** - * Deletes an API key. - * @param {string} projectId Unique identifier of the project - * @param {string} keyId Unique identifier of the key - * @param {string} endpoint Custom API endpoint - * - * @returns {Promise} - */ - async delete( - projectId: string, - keyId: string, - endpoint = "v1/projects" - ): Promise { - return this._request( - "DELETE", - this._credentials, - this._apiUrl, - this._requireSSL, - `/${endpoint}/${projectId}/keys/${keyId}` - ); - } -} diff --git a/src/lib/constants.ts b/src/lib/constants.ts new file mode 100644 index 00000000..ed3a846f --- /dev/null +++ b/src/lib/constants.ts @@ -0,0 +1,24 @@ +import { isBrowser } from "./helpers"; +import { FetchOptions } from "./types/Fetch"; +import { version } from "./version"; + +export const DEFAULT_HEADERS = { + "Content-Type": `application/json`, + "X-Client-Info": `@deepgram/sdk; ${isBrowser() ? "browser" : "server"}; v${version}`, + "User-Agent": `@deepgram/sdk/${version}`, +}; + +export const DEFAULT_URL = "api.deepgram.com"; + +export const DEFAULT_GLOBAL_OPTIONS = { + url: DEFAULT_URL, +}; + +export const DEFAULT_FETCH_OPTIONS: FetchOptions = { + headers: DEFAULT_HEADERS, +}; + +export const DEFAULT_OPTIONS = { + global: DEFAULT_GLOBAL_OPTIONS, + fetch: DEFAULT_FETCH_OPTIONS, +}; diff --git a/src/enums/connectionState.ts b/src/lib/enums/LiveConnectionState.ts similarity index 64% rename from src/enums/connectionState.ts rename to src/lib/enums/LiveConnectionState.ts index 75856450..11538068 100644 --- a/src/enums/connectionState.ts +++ b/src/lib/enums/LiveConnectionState.ts @@ -1,4 +1,4 @@ -export enum ConnectionState { +export enum LiveConnectionState { CONNECTING = 0, OPEN = 1, CLOSING = 2, diff --git a/src/lib/enums/LiveTranscriptionEvents.ts b/src/lib/enums/LiveTranscriptionEvents.ts new file mode 100644 index 00000000..cc8de9b4 --- /dev/null +++ b/src/lib/enums/LiveTranscriptionEvents.ts @@ -0,0 +1,8 @@ +export enum LiveTranscriptionEvents { + Open = "open", + Close = "close", + Transcript = "Results", // exact match to data type from API + Metadata = "Metadata", // exact match to data type from API + Error = "error", + Warning = "warning", +} diff --git a/src/lib/enums/index.ts b/src/lib/enums/index.ts new file mode 100644 index 00000000..9c6ba0f6 --- /dev/null +++ b/src/lib/enums/index.ts @@ -0,0 +1,2 @@ +export { LiveConnectionState } from "./LiveConnectionState"; +export { LiveTranscriptionEvents } from "./LiveTranscriptionEvents"; diff --git a/src/lib/errors.ts b/src/lib/errors.ts new file mode 100644 index 00000000..b67c2010 --- /dev/null +++ b/src/lib/errors.ts @@ -0,0 +1,40 @@ +export class DeepgramError extends Error { + protected __dgError = true; + + constructor(message: string) { + super(message); + this.name = "DeepgramError"; + } +} + +export function isDeepgramError(error: unknown): error is DeepgramError { + return typeof error === "object" && error !== null && "__dgError" in error; +} + +export class DeepgramApiError extends DeepgramError { + status: number; + + constructor(message: string, status: number) { + super(message); + this.name = "DeepgramApiError"; + this.status = status; + } + + toJSON() { + return { + name: this.name, + message: this.message, + status: this.status, + }; + } +} + +export class DeepgramUnknownError extends DeepgramError { + originalError: unknown; + + constructor(message: string, originalError: unknown) { + super(message); + this.name = "DeepgramUnknownError"; + this.originalError = originalError; + } +} diff --git a/src/lib/fetch.ts b/src/lib/fetch.ts new file mode 100644 index 00000000..0d65b632 --- /dev/null +++ b/src/lib/fetch.ts @@ -0,0 +1,36 @@ +import crossFetch from "cross-fetch"; +import { resolveHeadersConstructor } from "./helpers"; +import type { Fetch } from "./types/Fetch"; + +export const resolveFetch = (): Fetch => { + let _fetch: Fetch; + if (typeof fetch === "undefined") { + _fetch = crossFetch as unknown as Fetch; + } else { + _fetch = fetch; + } + return (...args) => _fetch(...args); +}; + +export const fetchWithAuth = (apiKey: string): Fetch => { + const fetch = resolveFetch(); + const HeadersConstructor = resolveHeadersConstructor(); + + return async (input, init) => { + let headers = new HeadersConstructor(init?.headers); + + if (!headers.has("Authorization")) { + headers.set("Authorization", `Token ${apiKey}`); + } + + return fetch(input, { ...init, headers }); + }; +}; + +export const resolveResponse = async () => { + if (typeof Response === "undefined") { + return (await import("cross-fetch")).Response; + } + + return Response; +}; diff --git a/src/lib/helpers.ts b/src/lib/helpers.ts new file mode 100644 index 00000000..de979566 --- /dev/null +++ b/src/lib/helpers.ts @@ -0,0 +1,70 @@ +import { Headers as CrossFetchHeaders } from "cross-fetch"; +import { DeepgramClientOptions, FileSource, PrerecordedSource, UrlSource } from "./types"; +import { Readable } from "stream"; +import merge from "deepmerge"; + +export function stripTrailingSlash(url: string): string { + return url.replace(/\/$/, ""); +} + +export const isBrowser = () => typeof window !== "undefined"; +export const isServer = () => typeof process !== "undefined"; + +export function applySettingDefaults( + options: DeepgramClientOptions, + defaults: DeepgramClientOptions +): DeepgramClientOptions { + return merge(defaults, options); +} + +export function appendSearchParams( + searchParams: URLSearchParams, + options: Record +): void { + Object.keys(options).forEach((i) => { + if (Array.isArray(options[i])) { + const arrayParams = options[i] as Array; + arrayParams.forEach((param) => { + searchParams.append(i, String(param)); + }); + } else { + searchParams.append(i, String(options[i])); + } + }); +} + +export const resolveHeadersConstructor = () => { + if (typeof Headers === "undefined") { + return CrossFetchHeaders; + } + + return Headers; +}; + +export const isUrlSource = (providedSource: PrerecordedSource): providedSource is UrlSource => { + if ((providedSource as UrlSource).url) return true; + + return false; +}; + +export const isFileSource = (providedSource: PrerecordedSource): providedSource is FileSource => { + if (isReadStreamSource(providedSource) || isBufferSource(providedSource)) return true; + + return false; +}; + +const isBufferSource = (providedSource: PrerecordedSource): providedSource is Buffer => { + if (providedSource as Buffer) return true; + + return false; +}; + +const isReadStreamSource = (providedSource: PrerecordedSource): providedSource is Readable => { + if (providedSource as Readable) return true; + + return false; +}; + +export class CallbackUrl extends URL { + private callbackUrl = true; +} diff --git a/src/lib/types/AsyncPrerecordedResponse.ts b/src/lib/types/AsyncPrerecordedResponse.ts new file mode 100644 index 00000000..e5a76bb6 --- /dev/null +++ b/src/lib/types/AsyncPrerecordedResponse.ts @@ -0,0 +1,3 @@ +export interface AsyncPrerecordedResponse { + request_id: string; +} diff --git a/src/lib/types/CreateOnPremCredentialsSchema.ts b/src/lib/types/CreateOnPremCredentialsSchema.ts new file mode 100644 index 00000000..655984bb --- /dev/null +++ b/src/lib/types/CreateOnPremCredentialsSchema.ts @@ -0,0 +1,5 @@ +export interface CreateOnPremCredentialsSchema extends Record { + comment?: string; + scopes?: string[]; + provider?: string; +} diff --git a/src/lib/types/CreateProjectKeyResponse.ts b/src/lib/types/CreateProjectKeyResponse.ts new file mode 100644 index 00000000..4a6bf0b4 --- /dev/null +++ b/src/lib/types/CreateProjectKeyResponse.ts @@ -0,0 +1,8 @@ +export interface CreateProjectKeyResponse { + api_key_id: string; + key: string; + comment?: string; + scopes: string[]; + tags?: string[]; + created: string; +} diff --git a/src/lib/types/CreateProjectKeySchema.ts b/src/lib/types/CreateProjectKeySchema.ts new file mode 100644 index 00000000..6ec1f65e --- /dev/null +++ b/src/lib/types/CreateProjectKeySchema.ts @@ -0,0 +1,16 @@ +export type CreateProjectKeySchema = ExpirationOptions | TtlOptions; + +interface ExpirationOptions extends CommonOptions { + expiration_date?: string; +} + +export interface TtlOptions extends CommonOptions { + time_to_live_in_seconds?: number; +} + +interface CommonOptions extends Record { + comment: string; + scopes: string[]; + tags?: string[]; + [key: string]: unknown; +} diff --git a/src/lib/types/DeepgramClientOptions.ts b/src/lib/types/DeepgramClientOptions.ts new file mode 100644 index 00000000..8ba12c5a --- /dev/null +++ b/src/lib/types/DeepgramClientOptions.ts @@ -0,0 +1,19 @@ +import { FetchOptions } from "./Fetch"; + +export interface DeepgramClientOptions { + global?: { + /** + * Optional headers for initializing the client. + */ + headers?: Record; + + /** + * The URL used to interact with production, On-prem and other Deepgram environments. Defaults to `api.deepgram.com`. + */ + url?: string; + }; + fetch?: FetchOptions; + restProxy?: { + url: null | string; + }; +} diff --git a/src/lib/types/DeepgramResponse.ts b/src/lib/types/DeepgramResponse.ts new file mode 100644 index 00000000..5a6c3893 --- /dev/null +++ b/src/lib/types/DeepgramResponse.ts @@ -0,0 +1,13 @@ +import { DeepgramError } from "../errors"; + +export type DeepgramResponse = SuccessResponse | ErrorResponse; + +interface SuccessResponse { + result: T; + error: null; +} + +interface ErrorResponse { + result: null; + error: DeepgramError; +} diff --git a/src/lib/types/Fetch.ts b/src/lib/types/Fetch.ts new file mode 100644 index 00000000..725f2e17 --- /dev/null +++ b/src/lib/types/Fetch.ts @@ -0,0 +1,27 @@ +export type Fetch = typeof fetch; + +export interface FetchOptions { + method?: RequestMethodType; + headers?: Record; + cache?: "default" | "no-cache" | "reload" | "force-cache" | "only-if-cached"; // default, no-cache, reload, force-cache, only-if-cached + credentials?: "include" | "same-origin" | "omit"; // include, same-origin, omit + redirect?: "manual" | "follow" | "error"; // manual, follow, error + referrerPolicy?: // no-referrer, no-referrer-when-downgrade, origin, origin-when-cross-origin, same-origin, strict-origin, strict-origin-when-cross-origin, unsafe-url + | "no-referrer" + | "no-referrer-when-downgrade" + | "origin" + | "origin-when-cross-origin" + | "same-origin" + | "strict-origin" + | "strict-origin-when-cross-origin" + | "unsafe-url"; +} + +export type RequestMethodType = "GET" | "POST" | "PUT" | "DELETE" | "PATCH"; // GET, POST, PUT, DELETE, etc. + +export interface FetchParameters { + /** + * Pass in an AbortController's signal to cancel the request. + */ + signal?: AbortSignal; +} diff --git a/src/lib/types/GetProjectBalancesResponse.ts b/src/lib/types/GetProjectBalancesResponse.ts new file mode 100644 index 00000000..f3527ea1 --- /dev/null +++ b/src/lib/types/GetProjectBalancesResponse.ts @@ -0,0 +1,10 @@ +export interface GetProjectBalancesResponse { + balances: GetProjectBalanceResponse[]; +} + +export interface GetProjectBalanceResponse { + balance_id: string; + amount: number; + units: string; + purchase: string; +} diff --git a/src/lib/types/GetProjectInvitesResponse.ts b/src/lib/types/GetProjectInvitesResponse.ts new file mode 100644 index 00000000..cb5fce0d --- /dev/null +++ b/src/lib/types/GetProjectInvitesResponse.ts @@ -0,0 +1,8 @@ +export interface GetProjectInvitesResponse { + invites: Invite[]; +} + +interface Invite { + email: string; + scope: string; +} diff --git a/src/lib/types/GetProjectKeysResponse.ts b/src/lib/types/GetProjectKeysResponse.ts new file mode 100644 index 00000000..ff85c688 --- /dev/null +++ b/src/lib/types/GetProjectKeysResponse.ts @@ -0,0 +1,23 @@ +export interface GetProjectKeysResponse { + api_keys: GetProjectKeyResponse[]; +} + +export interface GetProjectKeyResponse { + member: Member; + api_key: Key; +} + +interface Member { + member_id: string; + email: string; + first_name: string; + last_name: string; +} + +interface Key { + api_key_id: string; + comment?: string; + scopes: string[]; + tags?: string[]; + created: string; +} diff --git a/src/lib/types/GetProjectMemberScopesResponse.ts b/src/lib/types/GetProjectMemberScopesResponse.ts new file mode 100644 index 00000000..0103f6bf --- /dev/null +++ b/src/lib/types/GetProjectMemberScopesResponse.ts @@ -0,0 +1,3 @@ +export interface GetProjectMemberScopesResponse { + scopes: string[]; +} diff --git a/src/lib/types/GetProjectMembersResponse.ts b/src/lib/types/GetProjectMembersResponse.ts new file mode 100644 index 00000000..8f1e28a4 --- /dev/null +++ b/src/lib/types/GetProjectMembersResponse.ts @@ -0,0 +1,11 @@ +export interface GetProjectMembersResponse { + members: Member[]; +} + +interface Member { + member_id: string; + first_name: string; + last_name: string; + scopes: string[]; + email: string; +} diff --git a/src/lib/types/GetProjectResponse.ts b/src/lib/types/GetProjectResponse.ts new file mode 100644 index 00000000..ce338334 --- /dev/null +++ b/src/lib/types/GetProjectResponse.ts @@ -0,0 +1,5 @@ +export interface GetProjectResponse { + project_id: string; + name: string; + company: string; +} diff --git a/src/lib/types/GetProjectUsageFieldsResponse.ts b/src/lib/types/GetProjectUsageFieldsResponse.ts new file mode 100644 index 00000000..42ff55a4 --- /dev/null +++ b/src/lib/types/GetProjectUsageFieldsResponse.ts @@ -0,0 +1,14 @@ +export interface GetProjectUsageFieldsResponse { + tags: string[]; + models: UsageModel[]; + processing_methods: string[]; + languages: string[]; + features: string[]; +} + +interface UsageModel { + name: string; + language: string; + version: string; + model_id: string; +} diff --git a/src/lib/types/GetProjectUsageFieldsSchema.ts b/src/lib/types/GetProjectUsageFieldsSchema.ts new file mode 100644 index 00000000..4b7004bf --- /dev/null +++ b/src/lib/types/GetProjectUsageFieldsSchema.ts @@ -0,0 +1,4 @@ +export interface GetProjectUsageFieldsSchema extends Record { + start?: string; + end: string; +} diff --git a/src/lib/types/GetProjectUsageRequestsResponse.ts b/src/lib/types/GetProjectUsageRequestsResponse.ts new file mode 100644 index 00000000..6b67901f --- /dev/null +++ b/src/lib/types/GetProjectUsageRequestsResponse.ts @@ -0,0 +1,49 @@ +export interface GetProjectUsageRequestsResponse { + page: number; + limit: number; + requests: GetProjectUsageRequestResponse[]; +} + +export interface GetProjectUsageRequestResponse { + request_id: string; + created: string; + path: string; + api_key_id: string; + response: { + details: { + usd?: number; + duration?: number; + total_audio?: number; + channels?: number; + streams?: number; + models?: string[]; + method?: string; + tags?: string[]; + features?: string[]; + config?: { + alternatives?: number; + callback?: string; + diarize?: boolean; + keywords?: string[]; + language?: string; + model?: string; + multichannel?: boolean; + ner?: boolean; + numerals?: boolean; + profanity_filter?: boolean; + punctuate?: boolean; + redact?: string[]; + search?: string[]; + utterances?: boolean; + [key: string]: unknown; + }; + }; + code?: number; + completed?: string; + }; + callback?: { + attempts?: number; + code?: number; + completed?: string; + }; +} diff --git a/src/lib/types/GetProjectUsageRequestsSchema.ts b/src/lib/types/GetProjectUsageRequestsSchema.ts new file mode 100644 index 00000000..1b4b4e3e --- /dev/null +++ b/src/lib/types/GetProjectUsageRequestsSchema.ts @@ -0,0 +1,6 @@ +export interface GetProjectUsageRequestsSchema extends Record { + start?: string; + end?: string; + limit?: number; + status?: string; +} diff --git a/src/lib/types/GetProjectUsageSummaryResponse.ts b/src/lib/types/GetProjectUsageSummaryResponse.ts new file mode 100644 index 00000000..c19687a9 --- /dev/null +++ b/src/lib/types/GetProjectUsageSummaryResponse.ts @@ -0,0 +1,17 @@ +export interface GetProjectUsageSummaryResponse { + start: string; + end: string; + resolution: { + units: string; + amount: number; + }; + results: UsageSummary[]; +} + +interface UsageSummary { + start: string; + end: string; + hours: number; + total_hours: number; + requests: number; +} diff --git a/src/types/usageOptions.ts b/src/lib/types/GetProjectUsageSummarySchema.ts similarity index 51% rename from src/types/usageOptions.ts rename to src/lib/types/GetProjectUsageSummarySchema.ts index 3fab4ab9..e91421f3 100644 --- a/src/types/usageOptions.ts +++ b/src/lib/types/GetProjectUsageSummarySchema.ts @@ -1,9 +1,9 @@ -export type UsageOptions = { +export interface GetProjectUsageSummarySchema extends Record { start?: string; - end?: string; + end: string; accessor?: string; - tag?: Array; - method?: "sync" | "async" | "streaming"; + tag?: string; + method?: string; model?: string; multichannel?: boolean; interim_results?: boolean; @@ -13,21 +13,11 @@ export type UsageOptions = { replace?: boolean; profanity_filter?: boolean; keywords?: boolean; - sentiment?: boolean; + detect_topics?: boolean; diarize?: boolean; - detect_language?: boolean; search?: boolean; redact?: boolean; alternatives?: boolean; numerals?: boolean; - numbers?: boolean; - translate?: boolean; - detect_entities?: boolean; - detect_topics?: boolean; - summarize?: boolean | string; - paragraphs?: boolean; - utt_split?: boolean; - analyze_sentiment?: boolean; smart_format?: boolean; - sentiment_threshold?: boolean; -}; +} diff --git a/src/lib/types/GetProjectsResponse.ts b/src/lib/types/GetProjectsResponse.ts new file mode 100644 index 00000000..316ed39b --- /dev/null +++ b/src/lib/types/GetProjectsResponse.ts @@ -0,0 +1,8 @@ +export interface GetProjectsResponse { + projects: Project[]; +} + +interface Project { + project_id: string; + name: string; +} diff --git a/src/lib/types/ListOnPremCredentialsResponse.ts b/src/lib/types/ListOnPremCredentialsResponse.ts new file mode 100644 index 00000000..bc979dc1 --- /dev/null +++ b/src/lib/types/ListOnPremCredentialsResponse.ts @@ -0,0 +1,17 @@ +export interface ListOnPremCredentialsResponse { + distribution_credentials: OnPremCredentialResponse[]; +} + +export interface OnPremCredentialResponse { + member: { + member_id: string; + email: string; + }; + distribution_credentials: { + distribution_credentials_id: string; + provider: string; + comment: string; + scopes: string[]; + created: string; + }; +} diff --git a/src/lib/types/LiveConfigOptions.ts b/src/lib/types/LiveConfigOptions.ts new file mode 100644 index 00000000..6a12954b --- /dev/null +++ b/src/lib/types/LiveConfigOptions.ts @@ -0,0 +1,3 @@ +export interface LiveConfigOptions { + numerals?: boolean; +} diff --git a/src/lib/types/LiveMetadataEvent.ts b/src/lib/types/LiveMetadataEvent.ts new file mode 100644 index 00000000..b623615a --- /dev/null +++ b/src/lib/types/LiveMetadataEvent.ts @@ -0,0 +1,9 @@ +export interface LiveMetadataEvent { + type: "Metadata"; + transaction_key: string; + request_id: string; + sha256: string; + created: string; + duration: number; + channels: number; +} diff --git a/src/lib/types/LiveTranscriptionEvent.ts b/src/lib/types/LiveTranscriptionEvent.ts new file mode 100644 index 00000000..31d07ac7 --- /dev/null +++ b/src/lib/types/LiveTranscriptionEvent.ts @@ -0,0 +1,30 @@ +export interface LiveTranscriptionEvent { + type: "Results"; + channel_index: number[]; + duration: number; + start: number; + is_final?: boolean; + speech_final?: boolean; + channel: { + alternatives: { + transcript: string; + confidence: boolean; + words: { + word: string; + start: number; + end: number; + confidence: number; + punctuated_word: string; + }[]; + }[]; + }; + metadata: { + request_id: string; + model_info: { + name: string; + version: string; + arch: string; + }; + model_uuid: string; + }; +} diff --git a/src/lib/types/MessageResponse.ts b/src/lib/types/MessageResponse.ts new file mode 100644 index 00000000..a2c23cc1 --- /dev/null +++ b/src/lib/types/MessageResponse.ts @@ -0,0 +1,3 @@ +export interface MessageResponse { + message: string; +} diff --git a/src/lib/types/PrerecordedSource.ts b/src/lib/types/PrerecordedSource.ts new file mode 100644 index 00000000..e85d5c02 --- /dev/null +++ b/src/lib/types/PrerecordedSource.ts @@ -0,0 +1,9 @@ +import { Readable } from "stream"; + +export type PrerecordedSource = UrlSource | Buffer | Readable; + +export type FileSource = Buffer | Readable; + +export interface UrlSource { + url: string; +} diff --git a/src/lib/types/SendProjectInviteSchema.ts b/src/lib/types/SendProjectInviteSchema.ts new file mode 100644 index 00000000..45dc78b4 --- /dev/null +++ b/src/lib/types/SendProjectInviteSchema.ts @@ -0,0 +1,4 @@ +export interface SendProjectInviteSchema extends Record { + email: string; + scope: string; +} diff --git a/src/lib/types/SyncPrerecordedResponse.ts b/src/lib/types/SyncPrerecordedResponse.ts new file mode 100644 index 00000000..be53c667 --- /dev/null +++ b/src/lib/types/SyncPrerecordedResponse.ts @@ -0,0 +1,137 @@ +export interface SyncPrerecordedResponse { + metadata: Metadata; + results: Result; +} + +interface Alternative { + transcript: string; + confidence: number; + words: WordBase[]; + summaries?: Summary[]; + paragraphs?: ParagraphGroup; + entities?: Entity[]; + translations?: Translation[]; + topics?: TopicGroup[]; +} + +interface Channel { + search?: Search[]; + alternatives: Alternative[]; + detected_language?: string; +} + +interface Entity { + label: string; + value: string; + confidence: number; + start_word: number; + end_word: number; +} + +interface Hit { + confidence: number; + start: number; + end: number; + snippet: string; +} + +interface Metadata { + transaction_key: string; + request_id: string; + sha256: string; + created: string; + duration: number; + channels: number; + models: string[]; + model_info: Record; + warnings?: Warning[]; +} + +interface ModelInfo { + name: string; + version: string; + arch: string; +} + +interface Paragraph { + sentences: Sentence[]; + start: number; + end: number; + num_words: number; +} + +interface ParagraphGroup { + transcript: string; + paragraphs: Paragraph[]; +} + +interface Result { + channels: Channel[]; + utterances?: Utterance[]; + summary?: TranscriptionSummary; +} + +interface Search { + query: string; + hits: Hit[]; +} + +interface Sentence { + text: string; + start: number; + end: number; +} + +interface Summary { + summary?: string; + start_word?: number; + end_word?: number; +} +interface TranscriptionSummary { + result: string; + short: string; +} + +interface Topic { + topic: string; + confidence: number; +} + +interface TopicGroup { + topics: Topic[]; + text: string; + start_word: number; + end_word: number; +} + +interface Translation { + language: string; + translation: string; +} + +interface Utterance { + start: number; + end: number; + confidence: number; + channel: number; + transcript: string; + words: WordBase[]; + speaker?: number; + id: string; +} + +interface Warning { + parameter: string; + type: string; + message: string; +} + +interface WordBase { + word: string; + start: number; + end: number; + confidence: number; + punctuated_word?: string; + speaker?: number; + speaker_confidence?: number; +} diff --git a/src/lib/types/TranscriptionSchema.ts b/src/lib/types/TranscriptionSchema.ts new file mode 100644 index 00000000..68dd775b --- /dev/null +++ b/src/lib/types/TranscriptionSchema.ts @@ -0,0 +1,158 @@ +/** + * Options for transcription + */ +interface TranscriptionSchema extends Record { + /** + * @see https://developers.deepgram.com/docs/model + */ + model?: string; + + /** + * @see https://developers.deepgram.com/docs/tier + */ + tier?: string; + + /** + * @see https://developers.deepgram.com/docs/version + */ + version?: string; + + /** + * @see https://developers.deepgram.com/docs/language + */ + language?: string; + + /** + * @see https://developers.deepgram.com/docs/punctuation + */ + punctuate?: boolean; + + /** + * @see https://developers.deepgram.com/docs/profanity-filter + */ + profanity_filter?: boolean; + + /** + * @see https://developers.deepgram.com/docs/redaction + */ + redact?: string[] | string | boolean; + + /** + * @see https://developers.deepgram.com/docs/diarization + */ + diarize?: boolean; + + /** + * @see https://developers.deepgram.com/docs/smart-format + */ + smart_format?: boolean; + + /** + * @see https://developers.deepgram.com/docs/multichannel + */ + multichannel?: boolean; + + /** + * @see https://developers.deepgram.com/docs/numerals + * @deprecated + */ + numerals?: boolean; + + /** + * @see https://developers.deepgram.com/docs/search + */ + search?: string[] | string; + + /** + * @see https://developers.deepgram.com/docs/find-and-replace + */ + replace?: string[] | string; + + /** + * @see https://developers.deepgram.com/docs/callback + */ + callback?: string; + + /** + * @see https://developers.deepgram.com/docs/keywords + */ + keywords?: string[] | string; + + /** + * @see https://developers.deepgram.com/docs/tagging + */ + tag?: string[]; + + [key: string]: unknown; +} + +interface PrerecordedSchema extends TranscriptionSchema { + /** + * @see https://developers.deepgram.com/docs/detect-entities + */ + detect_entities?: boolean; + + /** + * @see https://developers.deepgram.com/docs/language-detection + */ + detect_language?: boolean; + + /** + * @see https://developers.deepgram.com/docs/topic-detection + */ + detect_topics?: boolean; + + /** + * Undocumented feature. + */ + alternatives?: number; + + /** + * @see https://developers.deepgram.com/docs/paragraphs + */ + paragraphs?: boolean; + + /** + * @see https://developers.deepgram.com/docs/summarization + */ + summarize?: boolean | string; + + /** + * @see https://developers.deepgram.com/docs/utterances + */ + utterances?: boolean; + + /** + * @see https://developers.deepgram.com/docs/utterance-split + */ + utt_split?: number; +} + +interface LiveSchema extends TranscriptionSchema { + /** + * @see https://developers.deepgram.com/docs/channels + */ + channels?: number; + + /** + * @see https://developers.deepgram.com/docs/encoding + */ + encoding?: string; + + /** + * @see https://developers.deepgram.com/docs/sample-rate + */ + sample_rate?: number; + + /** + * @see https://developers.deepgram.com/docs/endpointing + */ + endpointing?: number; + + /** + * @see https://developers.deepgram.com/docs/interim-results + */ + interim_results?: boolean; +} + +export type { TranscriptionSchema, PrerecordedSchema, LiveSchema }; diff --git a/src/lib/types/UpdateProjectMemberScopeSchema.ts b/src/lib/types/UpdateProjectMemberScopeSchema.ts new file mode 100644 index 00000000..54193a48 --- /dev/null +++ b/src/lib/types/UpdateProjectMemberScopeSchema.ts @@ -0,0 +1,3 @@ +export interface UpdateProjectMemberScopeSchema { + scope: string; +} diff --git a/src/lib/types/UpdateProjectSchema.ts b/src/lib/types/UpdateProjectSchema.ts new file mode 100644 index 00000000..329ea28f --- /dev/null +++ b/src/lib/types/UpdateProjectSchema.ts @@ -0,0 +1,5 @@ +export interface UpdateProjectSchema extends Record { + name?: string; + company?: string; + [key: string]: unknown; +} diff --git a/src/lib/types/VoidResponse.ts b/src/lib/types/VoidResponse.ts new file mode 100644 index 00000000..cfb8d74b --- /dev/null +++ b/src/lib/types/VoidResponse.ts @@ -0,0 +1,11 @@ +import { DeepgramError } from "../errors"; + +export type VoidResponse = SuccessResponse | ErrorResponse; + +interface SuccessResponse { + error: null; +} + +interface ErrorResponse { + error: DeepgramError; +} diff --git a/src/lib/types/index.ts b/src/lib/types/index.ts new file mode 100644 index 00000000..7fc52cb9 --- /dev/null +++ b/src/lib/types/index.ts @@ -0,0 +1,41 @@ +export type { AsyncPrerecordedResponse } from "./AsyncPrerecordedResponse"; +export type { CreateOnPremCredentialsSchema } from "./CreateOnPremCredentialsSchema"; +export type { CreateProjectKeySchema } from "./CreateProjectKeySchema"; +export type { CreateProjectKeyResponse } from "./CreateProjectKeyResponse"; +export type { DeepgramClientOptions } from "./DeepgramClientOptions"; +export type { DeepgramResponse } from "./DeepgramResponse"; +export type { Fetch } from "./Fetch"; +export type { + GetProjectBalanceResponse, + GetProjectBalancesResponse, +} from "./GetProjectBalancesResponse"; +export type { GetProjectInvitesResponse } from "./GetProjectInvitesResponse"; +export type { GetProjectKeyResponse, GetProjectKeysResponse } from "./GetProjectKeysResponse"; +export type { GetProjectMemberScopesResponse } from "./GetProjectMemberScopesResponse"; +export type { GetProjectMembersResponse } from "./GetProjectMembersResponse"; +export type { GetProjectResponse } from "./GetProjectResponse"; +export type { GetProjectsResponse } from "./GetProjectsResponse"; +export type { GetProjectUsageFieldsSchema } from "./GetProjectUsageFieldsSchema"; +export type { GetProjectUsageFieldsResponse } from "./GetProjectUsageFieldsResponse"; +export type { + GetProjectUsageRequestResponse, + GetProjectUsageRequestsResponse, +} from "./GetProjectUsageRequestsResponse"; +export type { GetProjectUsageRequestsSchema } from "./GetProjectUsageRequestsSchema"; +export type { GetProjectUsageSummarySchema } from "./GetProjectUsageSummarySchema"; +export type { GetProjectUsageSummaryResponse } from "./GetProjectUsageSummaryResponse"; +export type { + ListOnPremCredentialsResponse, + OnPremCredentialResponse, +} from "./ListOnPremCredentialsResponse"; +export type { LiveConfigOptions } from "./LiveConfigOptions"; +export type { LiveMetadataEvent } from "./LiveMetadataEvent"; +export type { LiveTranscriptionEvent } from "./LiveTranscriptionEvent"; +export type { MessageResponse } from "./MessageResponse"; +export type { FileSource, PrerecordedSource, UrlSource } from "./PrerecordedSource"; +export type { SendProjectInviteSchema } from "./SendProjectInviteSchema"; +export type { SyncPrerecordedResponse } from "./SyncPrerecordedResponse"; +export type { TranscriptionSchema, PrerecordedSchema, LiveSchema } from "./TranscriptionSchema"; +export type { UpdateProjectMemberScopeSchema } from "./UpdateProjectMemberScopeSchema"; +export type { UpdateProjectSchema } from "./UpdateProjectSchema"; +export type { VoidResponse } from "./VoidResponse"; diff --git a/src/lib/version.ts b/src/lib/version.ts new file mode 100644 index 00000000..c4963561 --- /dev/null +++ b/src/lib/version.ts @@ -0,0 +1 @@ +export const version = "0.0.0-automated"; diff --git a/src/members.ts b/src/members.ts deleted file mode 100644 index 45be43b0..00000000 --- a/src/members.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { MemberList, Message, RequestFunction } from "./types"; - -export class Members { - constructor( - private _credentials: string, - private _apiUrl: string, - private _requireSSL: boolean, - private _request: RequestFunction - ) {} - - /** - * Retrieves account objects for all of the accounts in the specified project. - * @param {string} projectId Unique identifier of the project - * @param {string} endpoint Custom API endpoint - * - * @returns {Promise} - */ - async listMembers( - projectId: string, - endpoint = "v1/projects" - ): Promise { - return this._request( - "GET", - this._credentials, - this._apiUrl, - this._requireSSL, - `/${endpoint}/${projectId}/members` - ); - } - - /** - * Removes member account for specified member_id. - * @param {string} projectId Unique identifier of the project - * @param {string} memberId Unique identifier of the member - * @param {string} endpoint Custom API endpoint - * - * @returns {Promise} - */ - async removeMember( - projectId: string, - memberId: string, - endpoint = "v1/projects" - ): Promise { - return this._request( - "DELETE", - this._credentials, - this._apiUrl, - this._requireSSL, - `/${endpoint}/${projectId}/members/${memberId}` - ); - } -} diff --git a/src/packages/AbstractClient.ts b/src/packages/AbstractClient.ts new file mode 100644 index 00000000..7f0e53ba --- /dev/null +++ b/src/packages/AbstractClient.ts @@ -0,0 +1,64 @@ +import { DEFAULT_OPTIONS, DEFAULT_URL } from "../lib/constants"; +import { DeepgramError } from "../lib/errors"; +import { applySettingDefaults, stripTrailingSlash } from "../lib/helpers"; +import { DeepgramClientOptions } from "../lib/types"; + +/** + * Deepgram Client. + * + * An isomorphic Javascript client for interacting with the Deepgram API. + * @see https://developers.deepgram.com + */ +export abstract class AbstractClient { + protected baseUrl: URL; + + constructor(protected key: string, protected options: DeepgramClientOptions) { + this.key = key; + + if (!key) { + this.key = process.env.DEEPGRAM_API_KEY as string; + } + + if (!this.key) { + throw new DeepgramError("A deepgram API key is required"); + } + + this.options = applySettingDefaults(options, DEFAULT_OPTIONS); + + if (!this.options.global?.url) { + throw new DeepgramError( + `An API URL is required. It should be set to ${DEFAULT_URL} by default. No idea what happened!` + ); + } + + if (this.willProxy()) { + if (this.key !== "proxy") { + throw new DeepgramError( + `Do not attempt to pass any other API key than the string "proxy" when making proxied REST requests. Please ensure your proxy application is responsible for writing our API key to the Authorization header.` + ); + } + + this.baseUrl = this.resolveBaseUrl(this.options.restProxy?.url as string); + + if (this.options.global.headers) { + this.options.global.headers["X-Deepgram-Proxy"] = this.options.global.url; + } + } else { + this.baseUrl = this.resolveBaseUrl(this.options.global.url); + } + } + + protected resolveBaseUrl(url: string) { + if (!/^https?:\/\//i.test(url)) { + url = "https://" + url; + } + + return new URL(stripTrailingSlash(url)); + } + + protected willProxy() { + const proxyUrl = this.options.restProxy?.url; + + return !!proxyUrl; + } +} diff --git a/src/packages/AbstractRestfulClient.ts b/src/packages/AbstractRestfulClient.ts new file mode 100644 index 00000000..90507f5a --- /dev/null +++ b/src/packages/AbstractRestfulClient.ts @@ -0,0 +1,133 @@ +import { DeepgramApiError, DeepgramError, DeepgramUnknownError } from "../lib/errors"; +import { Readable } from "stream"; +import { fetchWithAuth, resolveResponse } from "../lib/fetch"; +import type { Fetch, FetchParameters, RequestMethodType } from "../lib/types/Fetch"; +import { AbstractClient } from "./AbstractClient"; +import { DeepgramClientOptions } from "../lib/types"; +import { isBrowser } from "../lib/helpers"; + +export abstract class AbstractRestfulClient extends AbstractClient { + protected fetch: Fetch; + + constructor(protected key: string, protected options: DeepgramClientOptions) { + super(key, options); + + if (isBrowser() && !this.willProxy()) { + throw new DeepgramError( + "Due to CORS we are unable to support REST-based API calls to our API from the browser. Please consider using a proxy, and including a `restProxy: { url: ''}` in your Deepgram client options." + ); + } + + this.fetch = fetchWithAuth(this.key); + } + + protected _getErrorMessage(err: any): string { + return err.msg || err.message || err.error_description || err.error || JSON.stringify(err); + } + + protected async handleError(error: unknown, reject: (reason?: any) => void) { + const Res = await resolveResponse(); + + if (error instanceof Res) { + error + .json() + .then((err) => { + reject(new DeepgramApiError(this._getErrorMessage(err), error.status || 500)); + }) + .catch((err) => { + reject(new DeepgramUnknownError(this._getErrorMessage(err), err)); + }); + } else { + reject(new DeepgramUnknownError(this._getErrorMessage(error), error)); + } + } + + protected _getRequestParams( + method: RequestMethodType, + headers?: Record, + parameters?: FetchParameters, + body?: string | Buffer | Readable + ) { + const params: { [k: string]: any } = { + ...this.options?.fetch, + method, + headers: { ...this.options?.fetch?.headers, ...headers } || {}, + }; + + if (method === "GET") { + return params; + } + + params.body = body; + params.duplex = "half"; + + return { ...params, ...parameters }; + } + + protected async _handleRequest( + fetcher: Fetch, + method: RequestMethodType, + url: string | URL, + headers?: Record, + parameters?: FetchParameters, + body?: string | Buffer | Readable + ): Promise { + return new Promise((resolve, reject) => { + fetcher(url, this._getRequestParams(method, headers, parameters, body)) + .then((result) => { + if (!result.ok) throw result; + return result.json(); + }) + .then((data) => resolve(data)) + .catch((error) => this.handleError(error, reject)); + }); + } + + protected async get( + fetcher: Fetch, + url: string | URL, + headers?: Record, + parameters?: FetchParameters + ): Promise { + return this._handleRequest(fetcher, "GET", url, headers, parameters); + } + + protected async post( + fetcher: Fetch, + url: string | URL, + body: string | Buffer | Readable, + headers?: Record, + parameters?: FetchParameters + ): Promise { + return this._handleRequest(fetcher, "POST", url, headers, parameters, body); + } + + protected async put( + fetcher: Fetch, + url: string | URL, + body: string | Buffer | Readable, + headers?: Record, + parameters?: FetchParameters + ): Promise { + return this._handleRequest(fetcher, "PUT", url, headers, parameters, body); + } + + protected async patch( + fetcher: Fetch, + url: string | URL, + body: string | Buffer | Readable, + headers?: Record, + parameters?: FetchParameters + ): Promise { + return this._handleRequest(fetcher, "PATCH", url, headers, parameters, body); + } + + protected async delete( + fetcher: Fetch, + url: string | URL, + headers?: Record, + parameters?: FetchParameters + ): Promise { + return this._handleRequest(fetcher, "DELETE", url, headers, parameters); + } +} diff --git a/src/packages/AbstractWsClient.ts b/src/packages/AbstractWsClient.ts new file mode 100644 index 00000000..81a8b608 --- /dev/null +++ b/src/packages/AbstractWsClient.ts @@ -0,0 +1,42 @@ +import { EventEmitter } from "events"; +import { DEFAULT_OPTIONS, DEFAULT_URL } from "../lib/constants"; +import { applySettingDefaults, stripTrailingSlash } from "../lib/helpers"; +import { DeepgramClientOptions } from "../lib/types"; + +export abstract class AbstractWsClient extends EventEmitter { + protected baseUrl: URL; + + constructor( + protected key: string, + protected options: DeepgramClientOptions | undefined = DEFAULT_OPTIONS + ) { + super(); + + this.key = key; + + if (!key) { + this.key = process.env.DEEPGRAM_API_KEY as string; + } + + if (!this.key) { + throw new Error("A deepgram API key is required"); + } + + this.options = applySettingDefaults(options, DEFAULT_OPTIONS); + + if (!this.options.global?.url) { + throw new Error( + `An API URL is required. It should be set to ${DEFAULT_URL} by default. No idea what happened!` + ); + } + + let url = this.options.global.url; + + if (!/^https?:\/\//i.test(url)) { + url = "https://" + url; + } + + this.baseUrl = new URL(stripTrailingSlash(url)); + this.baseUrl.protocol = this.baseUrl.protocol.toLowerCase().replace(/(http)(s)?/gi, "ws$2"); + } +} diff --git a/src/packages/ListenClient.ts b/src/packages/ListenClient.ts new file mode 100644 index 00000000..5d6d823b --- /dev/null +++ b/src/packages/ListenClient.ts @@ -0,0 +1,14 @@ +import { AbstractClient } from "./AbstractClient"; +import { LiveClient } from "./LiveClient"; +import { LiveSchema } from "../lib/types"; +import { PrerecordedClient } from "./PrerecordedClient"; + +export class ListenClient extends AbstractClient { + get prerecorded() { + return new PrerecordedClient(this.key, this.options); + } + + public live(transcriptionOptions: LiveSchema, endpoint = "v1/listen") { + return new LiveClient(this.key, this.options, transcriptionOptions, endpoint); + } +} diff --git a/src/packages/LiveClient.ts b/src/packages/LiveClient.ts new file mode 100644 index 00000000..ebc1e861 --- /dev/null +++ b/src/packages/LiveClient.ts @@ -0,0 +1,141 @@ +import { AbstractWsClient } from "./AbstractWsClient"; +import { appendSearchParams } from "../lib/helpers"; +import { DeepgramError } from "../lib/errors"; +import { DEFAULT_OPTIONS } from "../lib/constants"; +import { LiveConnectionState, LiveTranscriptionEvents } from "../lib/enums"; +import { w3cwebsocket } from "websocket"; + +import type { + LiveSchema, + LiveConfigOptions, + LiveMetadataEvent, + LiveTranscriptionEvent, + DeepgramClientOptions, +} from "../lib/types"; + +export class LiveClient extends AbstractWsClient { + private _socket: w3cwebsocket; + + constructor( + protected key: string, + protected options: DeepgramClientOptions | undefined = DEFAULT_OPTIONS, + private transcriptionOptions: LiveSchema = {}, + endpoint = "v1/listen" + ) { + super(key, options); + + const url = new URL(endpoint, this.baseUrl); + url.protocol = url.protocol.toLowerCase().replace(/(http)(s)?/gi, "ws$2"); + appendSearchParams(url.searchParams, this.transcriptionOptions); + + this._socket = new w3cwebsocket(url.toString(), ["token", this.key]); + + this._socket.onopen = () => { + this.emit(LiveTranscriptionEvents.Open, this); + }; + + this._socket.onclose = (event: any) => { + /** + * changing the event.target to any to access the private _req + * property that isn't available on the WebSocket.CloseEvent type + **/ + const newTarget: any = event.target; + + if (newTarget["_req"]) { + const dgErrorIndex = newTarget["_req"].res.rawHeaders.indexOf("dg-error"); + event.reason = newTarget["_req"].res.rawHeaders[dgErrorIndex + 1]; + } + + this.emit(LiveTranscriptionEvents.Close, event); + }; + + this._socket.onerror = (event) => { + this.emit(LiveTranscriptionEvents.Error, event); + }; + + this._socket.onmessage = (event) => { + try { + const data: any = JSON.parse(event.data.toString()); + + if (data.type === LiveTranscriptionEvents.Metadata) { + this.emit(LiveTranscriptionEvents.Metadata, data as LiveMetadataEvent); + } + + if (data.type === LiveTranscriptionEvents.Transcript) { + this.emit(LiveTranscriptionEvents.Transcript, data as LiveTranscriptionEvent); + } + } catch (error) { + this.emit(LiveTranscriptionEvents.Error, { + event, + message: "Unable to parse `data` as JSON.", + error, + }); + } + }; + } + + public configure(config: LiveConfigOptions): void { + this._socket.send( + JSON.stringify({ + type: "Configure", + processors: config, + }) + ); + } + + public keepAlive(): void { + this._socket.send( + JSON.stringify({ + type: "KeepAlive", + }) + ); + } + + public getReadyState(): LiveConnectionState { + return this._socket.readyState; + } + + /** + * Sends data to the Deepgram API via websocket connection + * @param data Audio data to send to Deepgram + * + * Conforms to RFC #146 for Node.js - does not send an empty byte. + * In the browser, a Blob will contain length with no audio. + * @see https://github.com/deepgram/deepgram-python-sdk/issues/146 + */ + public send(data: string | ArrayBufferLike | Blob): void { + if (this._socket.readyState === LiveConnectionState.OPEN) { + if (typeof data === "string") { + this._socket.send(data); // send text data + } else if ((data as any) instanceof Blob) { + this._socket.send(data as unknown as ArrayBufferLike); // send blob data + } else { + const buffer = data as ArrayBufferLike; + + if (buffer.byteLength > 0) { + this._socket.send(buffer); // send buffer when not zero-byte (or browser) + } else { + this.emit( + LiveTranscriptionEvents.Warning, + "Zero-byte detected, skipping. Send `CloseStream` if trying to close the connection." + ); + } + } + } else { + throw new DeepgramError("Could not send. Connection not open."); + } + } + + /** + * Denote that you are finished sending audio and close + * the websocket connection when transcription is finished + */ + public finish(): void { + // tell the server to close the socket + this._socket.send( + JSON.stringify({ + type: "CloseStream", + }) + ); + } +} diff --git a/src/packages/ManageClient.ts b/src/packages/ManageClient.ts new file mode 100644 index 00000000..f0ab141f --- /dev/null +++ b/src/packages/ManageClient.ts @@ -0,0 +1,561 @@ +import { AbstractRestfulClient } from "./AbstractRestfulClient"; +import { isDeepgramError } from "../lib/errors"; +import { appendSearchParams } from "../lib/helpers"; +import type { + CreateProjectKeySchema, + CreateProjectKeyResponse, + DeepgramResponse, + Fetch, + GetProjectBalanceResponse, + GetProjectBalancesResponse, + GetProjectInvitesResponse, + GetProjectKeyResponse, + GetProjectKeysResponse, + GetProjectMemberScopesResponse, + GetProjectMembersResponse, + GetProjectResponse, + GetProjectsResponse, + GetProjectUsageFieldsSchema, + GetProjectUsageFieldsResponse, + GetProjectUsageRequestResponse, + GetProjectUsageRequestsSchema, + GetProjectUsageRequestsResponse, + GetProjectUsageSummarySchema, + GetProjectUsageSummaryResponse, + MessageResponse, + SendProjectInviteSchema, + UpdateProjectMemberScopeSchema, + UpdateProjectSchema, + VoidResponse, +} from "../lib/types"; + +export class ManageClient extends AbstractRestfulClient { + /** + * @see https://developers.deepgram.com/reference/get-projects + */ + async getProjects(endpoint = "v1/projects"): Promise> { + try { + const url = new URL(this.baseUrl); + url.pathname = endpoint; + + const result: GetProjectsResponse = await this.get(this.fetch as Fetch, url); + + return { result, error: null }; + } catch (error) { + if (isDeepgramError(error)) { + return { result: null, error }; + } + + throw error; + } + } + + /** + * @see https://developers.deepgram.com/reference/get-project + */ + async getProject( + projectId: string, + endpoint = "v1/projects/:projectId" + ): Promise> { + try { + const url = new URL(this.baseUrl); + url.pathname = endpoint.replace(/:projectId/, projectId); + + const result: GetProjectResponse = await this.get(this.fetch as Fetch, url); + + return { result, error: null }; + } catch (error) { + if (isDeepgramError(error)) { + return { result: null, error }; + } + + throw error; + } + } + + /** + * @see https://developers.deepgram.com/reference/update-project + */ + async updateProject( + projectId: string, + options: UpdateProjectSchema, + endpoint = "v1/projects/:projectId" + ): Promise> { + try { + const url = new URL(this.baseUrl); + url.pathname = endpoint.replace(/:projectId/, projectId); + + const body = JSON.stringify(options); + + const result: MessageResponse = await this.patch(this.fetch as Fetch, url, body); + + return { result, error: null }; + } catch (error) { + if (isDeepgramError(error)) { + return { result: null, error }; + } + + throw error; + } + } + + /** + * @see https://developers.deepgram.com/reference/delete-project + */ + async deleteProject( + projectId: string, + endpoint = "v1/projects/:projectId" + ): Promise { + try { + const url = new URL(this.baseUrl); + url.pathname = endpoint.replace(/:projectId/, projectId); + + await this.delete(this.fetch as Fetch, url); + + return { error: null }; + } catch (error) { + if (isDeepgramError(error)) { + return { error }; + } + + throw error; + } + } + + /** + * @see https://developers.deepgram.com/reference/list-keys + */ + async getProjectKeys( + projectId: string, + endpoint = "v1/projects/:projectId/keys" + ): Promise> { + try { + const url = new URL(this.baseUrl); + url.pathname = endpoint.replace(/:projectId/, projectId); + + const result: GetProjectKeysResponse = await this.get(this.fetch as Fetch, url); + + return { result, error: null }; + } catch (error) { + if (isDeepgramError(error)) { + return { result: null, error }; + } + + throw error; + } + } + + /** + * @see https://developers.deepgram.com/reference/get-key + */ + async getProjectKey( + projectId: string, + keyId: string, + endpoint = "v1/projects/:projectId/keys/:keyId" + ): Promise> { + try { + const url = new URL(this.baseUrl); + url.pathname = endpoint.replace(/:projectId/, projectId).replace(/:keyId/, keyId); + + const result: GetProjectKeyResponse = await this.get(this.fetch as Fetch, url); + + return { result, error: null }; + } catch (error) { + if (isDeepgramError(error)) { + return { result: null, error }; + } + + throw error; + } + } + + /** + * @see https://developers.deepgram.com/reference/create-key + */ + async createProjectKey( + projectId: string, + options: CreateProjectKeySchema, + endpoint = "v1/projects/:projectId/keys" + ): Promise> { + try { + const url = new URL(this.baseUrl); + url.pathname = endpoint.replace(/:projectId/, projectId); + + const body = JSON.stringify(options); + + const result: CreateProjectKeyResponse = await this.post(this.fetch as Fetch, url, body); + + return { result, error: null }; + } catch (error) { + if (isDeepgramError(error)) { + return { result: null, error }; + } + + throw error; + } + } + + /** + * @see https://developers.deepgram.com/reference/delete-key + */ + async deleteProjectKey( + projectId: string, + keyId: string, + endpoint = "v1/projects/:projectId/keys/:keyId" + ): Promise { + try { + const url = new URL(this.baseUrl); + url.pathname = endpoint.replace(/:projectId/, projectId).replace(/:keyId/, keyId); + + await this.delete(this.fetch as Fetch, url); + + return { error: null }; + } catch (error) { + if (isDeepgramError(error)) { + return { error }; + } + + throw error; + } + } + + /** + * @see https://developers.deepgram.com/reference/get-members + */ + async getProjectMembers( + projectId: string, + endpoint = "v1/projects/:projectId/members" + ): Promise> { + try { + const url = new URL(this.baseUrl); + url.pathname = endpoint.replace(/:projectId/, projectId); + + const result: GetProjectMembersResponse = await this.get(this.fetch as Fetch, url); + + return { result, error: null }; + } catch (error) { + if (isDeepgramError(error)) { + return { result: null, error }; + } + + throw error; + } + } + + /** + * @see https://developers.deepgram.com/reference/remove-member + */ + async removeProjectMember( + projectId: string, + memberId: string, + endpoint = "v1/projects/:projectId/members/:memberId" + ): Promise { + try { + const url = new URL(this.baseUrl); + url.pathname = endpoint.replace(/:projectId/, projectId).replace(/:memberId/, memberId); + + await this.delete(this.fetch as Fetch, url); + + return { error: null }; + } catch (error) { + if (isDeepgramError(error)) { + return { error }; + } + + throw error; + } + } + + /** + * @see https://developers.deepgram.com/reference/get-member-scopes + */ + async getProjectMemberScopes( + projectId: string, + memberId: string, + endpoint = "v1/projects/:projectId/members/:memberId/scopes" + ): Promise> { + try { + const url = new URL(this.baseUrl); + url.pathname = endpoint.replace(/:projectId/, projectId).replace(/:memberId/, memberId); + + const result: GetProjectMemberScopesResponse = await this.get(this.fetch as Fetch, url); + + return { result, error: null }; + } catch (error) { + if (isDeepgramError(error)) { + return { result: null, error }; + } + + throw error; + } + } + + /** + * @see https://developers.deepgram.com/reference/update-scope + */ + async updateProjectMemberScope( + projectId: string, + memberId: string, + options: UpdateProjectMemberScopeSchema, + endpoint = "v1/projects/:projectId/members/:memberId/scopes" + ): Promise> { + try { + const url = new URL(this.baseUrl); + url.pathname = endpoint.replace(/:projectId/, projectId).replace(/:memberId/, memberId); + + const body = JSON.stringify(options); + + const result: MessageResponse = await this.put(this.fetch as Fetch, url, body); + + return { result, error: null }; + } catch (error) { + if (isDeepgramError(error)) { + return { result: null, error }; + } + + throw error; + } + } + + /** + * @see https://developers.deepgram.com/reference/list-invites + */ + async getProjectInvites( + projectId: string, + endpoint = "v1/projects/:projectId/invites" + ): Promise> { + try { + const url = new URL(this.baseUrl); + url.pathname = endpoint.replace(/:projectId/, projectId); + + const result: GetProjectInvitesResponse = await this.get(this.fetch as Fetch, url); + + return { result, error: null }; + } catch (error) { + if (isDeepgramError(error)) { + return { result: null, error }; + } + + throw error; + } + } + + /** + * @see https://developers.deepgram.com/reference/send-invites + */ + async sendProjectInvite( + projectId: string, + options: SendProjectInviteSchema, + endpoint = "v1/projects/:projectId/invites" + ): Promise> { + try { + const url = new URL(this.baseUrl); + url.pathname = endpoint.replace(/:projectId/, projectId); + + const body = JSON.stringify(options); + + const result: MessageResponse = await this.post(this.fetch as Fetch, url, body); + + return { result, error: null }; + } catch (error) { + if (isDeepgramError(error)) { + return { result: null, error }; + } + + throw error; + } + } + + /** + * @see https://developers.deepgram.com/reference/delete-invite + */ + async deleteProjectInvite( + projectId: string, + email: string, + endpoint = "v1/projects/:projectId/invites/:email" + ): Promise { + try { + const url = new URL(this.baseUrl); + url.pathname = endpoint.replace(/:projectId/, projectId).replace(/:email/, email); + + await this.delete(this.fetch as Fetch, url); + + return { error: null }; + } catch (error) { + if (isDeepgramError(error)) { + return { error }; + } + + throw error; + } + } + + /** + * @see https://developers.deepgram.com/reference/leave-project + */ + async leaveProject( + projectId: string, + endpoint = "v1/projects/:projectId/leave" + ): Promise> { + try { + const url = new URL(this.baseUrl); + url.pathname = endpoint.replace(/:projectId/, projectId); + + const result: MessageResponse = await this.delete(this.fetch as Fetch, url); + + return { result, error: null }; + } catch (error) { + if (isDeepgramError(error)) { + return { result: null, error }; + } + + throw error; + } + } + + /** + * @see https://developers.deepgram.com/reference/get-all-requests + */ + async getProjectUsageRequests( + projectId: string, + options: GetProjectUsageRequestsSchema, + endpoint = "v1/projects/:projectId/requests" + ): Promise> { + try { + const url = new URL(this.baseUrl); + url.pathname = endpoint.replace(/:projectId/, projectId); + appendSearchParams(url.searchParams, options); + + const result: GetProjectUsageRequestsResponse = await this.get(this.fetch as Fetch, url); + + return { result, error: null }; + } catch (error) { + if (isDeepgramError(error)) { + return { result: null, error }; + } + + throw error; + } + } + + /** + * @see https://developers.deepgram.com/reference/get-request + */ + async getProjectUsageRequest( + projectId: string, + requestId: string, + endpoint = "v1/projects/:projectId/requests/:requestId" + ): Promise> { + try { + const url = new URL(this.baseUrl); + url.pathname = endpoint.replace(/:projectId/, projectId).replace(/:requestId/, requestId); + + const result: GetProjectUsageRequestResponse = await this.get(this.fetch as Fetch, url); + + return { result, error: null }; + } catch (error) { + if (isDeepgramError(error)) { + return { result: null, error }; + } + + throw error; + } + } + + /** + * @see https://developers.deepgram.com/reference/summarize-usage + */ + async getProjectUsageSummary( + projectId: string, + options: GetProjectUsageSummarySchema, + endpoint = "v1/projects/:projectId/usage" + ): Promise> { + try { + const url = new URL(this.baseUrl); + url.pathname = endpoint.replace(/:projectId/, projectId); + appendSearchParams(url.searchParams, options); + + const result: GetProjectUsageSummaryResponse = await this.get(this.fetch as Fetch, url); + + return { result, error: null }; + } catch (error) { + if (isDeepgramError(error)) { + return { result: null, error }; + } + + throw error; + } + } + + /** + * @see https://developers.deepgram.com/reference/get-fields + */ + async getProjectUsageFields( + projectId: string, + options: GetProjectUsageFieldsSchema, + endpoint = "v1/projects/:projectId/usage/fields" + ): Promise> { + try { + const url = new URL(this.baseUrl); + url.pathname = endpoint.replace(/:projectId/, projectId); + appendSearchParams(url.searchParams, options); + + const result: GetProjectUsageFieldsResponse = await this.get(this.fetch as Fetch, url); + + return { result, error: null }; + } catch (error) { + if (isDeepgramError(error)) { + return { result: null, error }; + } + + throw error; + } + } + + /** + * @see https://developers.deepgram.com/reference/get-all-balances + */ + async getProjectBalances( + projectId: string, + endpoint = "v1/projects/:projectId/balances" + ): Promise> { + try { + const url = new URL(this.baseUrl); + url.pathname = endpoint.replace(/:projectId/, projectId); + + const result: GetProjectBalancesResponse = await this.get(this.fetch as Fetch, url); + + return { result, error: null }; + } catch (error) { + if (isDeepgramError(error)) { + return { result: null, error }; + } + + throw error; + } + } + + /** + * @see https://developers.deepgram.com/reference/get-balance + */ + async getProjectBalance( + projectId: string, + balanceId: string, + endpoint = "v1/projects/:projectId/balances/:balanceId" + ): Promise> { + try { + const url = new URL(this.baseUrl); + url.pathname = endpoint.replace(/:projectId/, projectId).replace(/:balanceId/, balanceId); + + const result: GetProjectBalanceResponse = await this.get(this.fetch as Fetch, url); + + return { result, error: null }; + } catch (error) { + if (isDeepgramError(error)) { + return { result: null, error }; + } + + throw error; + } + } +} diff --git a/src/packages/OnPremClient.ts b/src/packages/OnPremClient.ts new file mode 100644 index 00000000..e8da1ac9 --- /dev/null +++ b/src/packages/OnPremClient.ts @@ -0,0 +1,113 @@ +import { AbstractRestfulClient } from "./AbstractRestfulClient"; +import { isDeepgramError } from "../lib/errors"; +import type { + CreateOnPremCredentialsSchema, + DeepgramResponse, + Fetch, + ListOnPremCredentialsResponse, + MessageResponse, + OnPremCredentialResponse, +} from "../lib/types"; + +export class OnPremClient extends AbstractRestfulClient { + /** + * @see https://developers.deepgram.com/reference/list-credentials + */ + async listCredentials( + projectId: string, + endpoint = "v1/projects/:projectId/onprem/distribution/credentials" + ): Promise> { + try { + const url = new URL(this.baseUrl); + url.pathname = endpoint.replace(/:projectId/, projectId); + + const result: ListOnPremCredentialsResponse = await this.get(this.fetch as Fetch, url); + + return { result, error: null }; + } catch (error) { + if (isDeepgramError(error)) { + return { result: null, error }; + } + + throw error; + } + } + + /** + * @see https://developers.deepgram.com/reference/get-credentials + */ + async getCredentials( + projectId: string, + credentialsId: string, + endpoint = "v1/projects/:projectId/onprem/distribution/credentials/:credentialsId" + ): Promise> { + try { + const url = new URL(this.baseUrl); + url.pathname = endpoint + .replace(/:projectId/, projectId) + .replace(/:credentialsId/, credentialsId); + + const result: OnPremCredentialResponse = await this.get(this.fetch as Fetch, url); + + return { result, error: null }; + } catch (error) { + if (isDeepgramError(error)) { + return { result: null, error }; + } + + throw error; + } + } + + /** + * @see https://developers.deepgram.com/reference/create-credentials + */ + async createCredentials( + projectId: string, + options: CreateOnPremCredentialsSchema, + endpoint = "v1/projects/:projectId/onprem/distribution/credentials" + ): Promise> { + try { + const url = new URL(this.baseUrl); + url.pathname = endpoint.replace(/:projectId/, projectId); + + const body = JSON.stringify(options); + + const result: OnPremCredentialResponse = await this.post(this.fetch as Fetch, url, body); + + return { result, error: null }; + } catch (error) { + if (isDeepgramError(error)) { + return { result: null, error }; + } + + throw error; + } + } + + /** + * @see https://developers.deepgram.com/reference/delete-credentials + */ + async deleteCredentials( + projectId: string, + credentialsId: string, + endpoint = "v1/projects/:projectId/onprem/distribution/credentials/:credentialsId" + ): Promise> { + try { + const url = new URL(this.baseUrl); + url.pathname = endpoint + .replace(/:projectId/, projectId) + .replace(/:credentialsId/, credentialsId); + + const result: MessageResponse = await this.delete(this.fetch as Fetch, url); + + return { result, error: null }; + } catch (error) { + if (isDeepgramError(error)) { + return { result: null, error }; + } + + throw error; + } + } +} diff --git a/src/packages/PrerecordedClient.ts b/src/packages/PrerecordedClient.ts new file mode 100644 index 00000000..9277f129 --- /dev/null +++ b/src/packages/PrerecordedClient.ts @@ -0,0 +1,162 @@ +import { AbstractRestfulClient } from "./AbstractRestfulClient"; +import { CallbackUrl, appendSearchParams, isFileSource, isUrlSource } from "../lib/helpers"; +import { DeepgramError, isDeepgramError } from "../lib/errors"; +import type { + AsyncPrerecordedResponse, + DeepgramResponse, + Fetch, + FileSource, + PrerecordedSchema, + SyncPrerecordedResponse, + UrlSource, +} from "../lib/types"; + +export class PrerecordedClient extends AbstractRestfulClient { + async transcribeUrl( + source: UrlSource, + options?: PrerecordedSchema, + endpoint = "v1/listen" + ): Promise> { + try { + let body; + + if (isUrlSource(source)) { + body = JSON.stringify(source); + } else { + throw new DeepgramError("Unknown transcription source type"); + } + + if (options !== undefined && "callback" in options) { + throw new DeepgramError( + "Callback cannot be provided as an option to a synchronous transcription. Use `asyncPrerecordedUrl` or `asyncPrerecordedFile` instead." + ); + } + + const transcriptionOptions: PrerecordedSchema = { ...{}, ...options }; + + const url = new URL(endpoint, this.baseUrl); + appendSearchParams(url.searchParams, transcriptionOptions); + + const result: SyncPrerecordedResponse = await this.post(this.fetch as Fetch, url, body); + + return { result, error: null }; + } catch (error) { + if (isDeepgramError(error)) { + return { result: null, error }; + } + + throw error; + } + } + + async transcribeFile( + source: FileSource, + options?: PrerecordedSchema, + endpoint = "v1/listen" + ): Promise> { + try { + let body; + + if (isFileSource(source)) { + body = source; + } else { + throw new DeepgramError("Unknown transcription source type"); + } + + if (options !== undefined && "callback" in options) { + throw new DeepgramError( + "Callback cannot be provided as an option to a synchronous transcription. Use `asyncPrerecordedUrl` or `asyncPrerecordedFile` instead." + ); + } + + const transcriptionOptions: PrerecordedSchema = { ...{}, ...options }; + + const url = new URL(endpoint, this.baseUrl); + appendSearchParams(url.searchParams, transcriptionOptions); + + const result: SyncPrerecordedResponse = await this.post(this.fetch as Fetch, url, body, { + "Content-Type": "deepgram/audio+video", + }); + + return { result, error: null }; + } catch (error) { + if (isDeepgramError(error)) { + return { result: null, error }; + } + + throw error; + } + } + + async transcribeUrlCallback( + source: UrlSource, + callback: CallbackUrl, + options?: PrerecordedSchema, + endpoint = "v1/listen" + ): Promise> { + try { + let body; + + if (isUrlSource(source)) { + body = JSON.stringify(source); + } else { + throw new DeepgramError("Unknown transcription source type"); + } + + const transcriptionOptions: PrerecordedSchema = { + ...options, + ...{ callback: callback.toString() }, + }; + + const url = new URL(endpoint, this.baseUrl); + appendSearchParams(url.searchParams, transcriptionOptions); + + const result: AsyncPrerecordedResponse = await this.post(this.fetch as Fetch, url, body); + + return { result, error: null }; + } catch (error) { + if (isDeepgramError(error)) { + return { result: null, error }; + } + + throw error; + } + } + + async transcribeFileCallback( + source: FileSource, + callback: CallbackUrl, + options?: PrerecordedSchema, + endpoint = "v1/listen" + ): Promise> { + try { + let body; + + if (isFileSource(source)) { + body = source; + } else { + throw new DeepgramError("Unknown transcription source type"); + } + + const transcriptionOptions: PrerecordedSchema = { + ...options, + ...{ callback: callback.toString() }, + }; + + const url = new URL(endpoint, this.baseUrl); + appendSearchParams(url.searchParams, transcriptionOptions); + + const result: AsyncPrerecordedResponse = await this.post(this.fetch as Fetch, url, body, { + "Content-Type": "deepgram/audio+video", + }); + + return { result, error: null }; + } catch (error) { + if (isDeepgramError(error)) { + return { result: null, error }; + } + + throw error; + } + } +} diff --git a/src/packages/index.ts b/src/packages/index.ts new file mode 100644 index 00000000..58ad0f9f --- /dev/null +++ b/src/packages/index.ts @@ -0,0 +1,8 @@ +export { AbstractClient } from "./AbstractClient"; +export { AbstractRestfulClient } from "./AbstractRestfulClient"; +export { AbstractWsClient } from "./AbstractWsClient"; +export { ListenClient } from "./ListenClient"; +export { LiveClient } from "./LiveClient"; +export { ManageClient } from "./ManageClient"; +export { OnPremClient } from "./OnPremClient"; +export { PrerecordedClient } from "./PrerecordedClient"; diff --git a/src/projects.ts b/src/projects.ts deleted file mode 100644 index abb8a56e..00000000 --- a/src/projects.ts +++ /dev/null @@ -1,101 +0,0 @@ -import { - Project, - ProjectPatchResponse, - ProjectResponse, - ProjectPatchRequest, - RequestFunction, - ErrorResponse, -} from "./types"; - -export class Projects { - constructor( - private _credentials: string, - private _apiUrl: string, - private _requireSSL: boolean, - private _request: RequestFunction - ) {} - - /** - * Returns all projects accessible by the API key. - * @param {string} endpoint Custom API endpoint - * - * @returns {Promise} - */ - - async list(endpoint = "v1/projects"): Promise { - return this._request( - "GET", - this._credentials, - this._apiUrl, - this._requireSSL, - `/${endpoint}` - ); - } - - /** - * Retrieves a specific project based on the provided project_id. - * @param {string} projectId Unique identifier of the project - * @param {string} endpoint Custom API endpoint - * - * @returns {Promise} - */ - async get(projectId: string, endpoint = "v1/projects"): Promise { - return this._request( - "GET", - this._credentials, - this._apiUrl, - this._requireSSL, - `/${endpoint}/${projectId}` - ); - } - - /** - * Update a project. - * @param {string | Project} project Project to update - * @param {ProjectPatchRequest} payload Details to change as an object - * @param {string} endpoint Custom API endpoint - * - * @returns {Promise} - */ - async update( - project: string | Project, - payload: ProjectPatchRequest, - endpoint = "v1/projects" - ): Promise { - const projectObj = project as Project; - let projectId = project as string; - - if (projectObj.project_id) { - projectId = projectObj.project_id; - } - - return this._request( - "PATCH", - this._credentials, - this._apiUrl, - this._requireSSL, - `/${endpoint}/${projectId}`, - JSON.stringify(payload) - ); - } - - /** - * Delete a project. - * @param {string} projectId Unique identifier of the project - * @param {string} endpoint Custom API endpoint - * - * @returns {Promise} - */ - async delete( - projectId: string, - endpoint = "v1/projects" - ): Promise { - return this._request( - "DELETE", - this._credentials, - this._apiUrl, - this._requireSSL, - `/${endpoint}/${projectId}` - ); - } -} diff --git a/src/scopes.ts b/src/scopes.ts deleted file mode 100644 index 766b55ae..00000000 --- a/src/scopes.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { ScopeList, Message, RequestFunction } from "./types"; - -export class Scopes { - constructor( - private _credentials: string, - private _apiUrl: string, - private _requireSSL: boolean, - private _request: RequestFunction - ) {} - - /** - * Retrieves scopes of the specified member in the specified project. - * @param {string} projectId Unique identifier of the project - * @param {string} memberId Unique identifier of the member - * @param {string} endpoint Custom API endpoint - * - * @returns {Promise} - */ - async get( - projectId: string, - memberId: string, - endpoint = "v1/projects" - ): Promise { - return this._request( - "GET", - this._credentials, - this._apiUrl, - this._requireSSL, - `/${endpoint}/${projectId}/members/${memberId}/scopes` - ); - } - - /** - * Updates the scope for the specified member in the specified project. - * @param {string} projectId Unique identifier of the project - * @param {string} memberId Unique identifier of the member - * @param {string} scope Scope to update the member to - * @param {string} endpoint Custom API endpoint - * - * @returns {Promise} - */ - async update( - projectID: string, - memberId: string, - scope: string, - endpoint = "v1/projects" - ): Promise { - return this._request( - "PUT", - this._credentials, - this._apiUrl, - this._requireSSL, - `/${endpoint}/${projectID}/members/${memberId}/scopes`, - JSON.stringify({ - scope, - }) - ); - } -} diff --git a/src/transcription/index.ts b/src/transcription/index.ts deleted file mode 100644 index 34a108ae..00000000 --- a/src/transcription/index.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { - LiveTranscriptionOptions, - PrerecordedTranscriptionOptions, - PrerecordedTranscriptionResponse, - TranscriptionSource, - ErrorResponse, -} from "../types"; -import { LiveTranscription } from "./liveTranscription"; -import { preRecordedTranscription } from "./preRecordedTranscription"; - -export class Transcriber { - constructor( - private _credentials: string, - private _apiUrl: string, - private _requireSSL: boolean - ) {} - - /** - * Transcribes prerecorded audio from a file or buffer. - * @param {TranscriptionSource} source Source of audio to transcribe - * @param {PrerecordedTranscriptionOptions} options Options used to toggle transcription features - * @param {string} endpoint Custom API endpoint - * - * @returns {Promise} - */ - async preRecorded( - source: TranscriptionSource, - options?: PrerecordedTranscriptionOptions, - endpoint?: string - ): Promise { - return await preRecordedTranscription( - this._credentials, - this._apiUrl || "", - this._requireSSL, - source, - options, - endpoint - ); - } - - /** - * Opens a websocket to Deepgram's API for live transcriptions - * @param {LiveTranscriptionOptions} options Options used to toggle transcription features - * @param {string} endpoint Custom API endpoint - * - * @returns {LiveTranscription} - */ - live( - options?: LiveTranscriptionOptions, - endpoint?: string - ): LiveTranscription { - return new LiveTranscription( - this._credentials, - this._apiUrl || "", - this._requireSSL, - options, - endpoint - ); - } -} diff --git a/src/transcription/liveTranscription.ts b/src/transcription/liveTranscription.ts deleted file mode 100644 index 929b55ca..00000000 --- a/src/transcription/liveTranscription.ts +++ /dev/null @@ -1,108 +0,0 @@ -import EventEmitter from "events"; -import querystring from "querystring"; -import WebSocket from "ws"; -import { ConnectionState, LiveTranscriptionEvents } from "../enums"; -import { LiveTranscriptionOptions, ToggleConfigOptions } from "../types"; -import { userAgent } from "../userAgent"; - -export class LiveTranscription extends EventEmitter { - private _socket: WebSocket; - - constructor( - credentials: string, - apiUrl: string, - requireSSL: boolean, - options?: LiveTranscriptionOptions, - endpoint = "v1/listen" - ) { - super(undefined); - const transcriptionOptions = { ...{}, ...options }; - - const protocol = requireSSL ? "wss" : "ws"; - - this._socket = new WebSocket( - `${protocol}://${apiUrl}/${endpoint}?${querystring.stringify( - transcriptionOptions - )}`, - { - headers: { - Authorization: `token ${credentials}`, - "User-Agent": userAgent(), - }, - } - ); - this._bindSocketEvents(); - } - - private _bindSocketEvents(): void { - this._socket.onopen = () => { - this.emit(LiveTranscriptionEvents.Open, this); - }; - - this._socket.onclose = (event: WebSocket.CloseEvent) => { - // changing the event.target to any to access the private _req property that isn't available on the WebSocket.CloseEvent type - const newTarget: any = event.target; - if (newTarget["_req"]) { - const dgErrorIndex = - newTarget["_req"].res.rawHeaders.indexOf("dg-error"); - event.reason = newTarget["_req"].res.rawHeaders[dgErrorIndex + 1]; - } - this.emit(LiveTranscriptionEvents.Close, event); - }; - - this._socket.onerror = (event) => { - this.emit(LiveTranscriptionEvents.Error, event); - }; - - this._socket.onmessage = (m) => { - this.emit(LiveTranscriptionEvents.TranscriptReceived, m.data); - }; - } - - public configure(config: ToggleConfigOptions): void { - this._socket.send( - JSON.stringify({ - type: "Configure", - processors: config, - }) - ); - } - - public keepAlive(): void { - this._socket.send( - JSON.stringify({ - type: "KeepAlive" - }) - ); - } - - /** - * Returns the ready state of the websocket connection - */ - public getReadyState(): ConnectionState { - return this._socket.readyState; - } - - /** - * Sends data to the Deepgram API via websocket connection - * @param data Audio data to send to Deepgram - */ - public send(data: string | ArrayBufferLike | Blob | ArrayBufferView): void { - if (this._socket.readyState === ConnectionState.OPEN) { - this._socket.send(data); - } else { - this.emit( - LiveTranscriptionEvents.Error, - "Could not send. Connection not open." - ); - } - } - - /** - * Denote that you are finished sending audio and close - * the websocket connection when transcription is finished - */ - public finish(): void { - this._socket.send(new Uint8Array(0)); - } -} diff --git a/src/transcription/preRecordedTranscription.ts b/src/transcription/preRecordedTranscription.ts deleted file mode 100644 index 111d76c5..00000000 --- a/src/transcription/preRecordedTranscription.ts +++ /dev/null @@ -1,104 +0,0 @@ -import querystring from "querystring"; -import { - PrerecordedTranscriptionOptions, - PrerecordedTranscriptionResponse, - TranscriptionSource, - UrlSource, - BufferSource, - ReadStreamSource, -} from "../types"; -import { _request } from "../httpRequest"; - -/** - * @param providedSource TranscriptionSource - * @returns boolean - */ -function isUrlSource( - providedSource: TranscriptionSource -): providedSource is UrlSource { - if ((providedSource as UrlSource).url) return true; - return false; -} - -/** - * @param providedSource TranscriptionSource - * @returns boolean - */ -function isBufferSource( - providedSource: TranscriptionSource -): providedSource is BufferSource { - if ((providedSource as BufferSource).buffer) return true; - return false; -} - -/** - * @param providedSource TranscriptionSource - * @returns boolean - */ -function isReadStreamSource( - providedSource: TranscriptionSource -): providedSource is ReadStreamSource { - if ((providedSource as ReadStreamSource).stream) return true; - return false; -} - -/** - * Transcribes audio from a file or buffer - * - * @param apiKey string - * @param apiUrl string - * @param requireSSL boolean - * @param source TranscriptionSource - * @param options PrerecordedTranscriptionOptions - * @param options string - * @returns Promise - */ -export const preRecordedTranscription = async ( - apiKey: string, - apiUrl: string, - requireSSL: boolean, - source: TranscriptionSource, - options?: PrerecordedTranscriptionOptions, - endpoint = "v1/listen" -): Promise => { - const transcriptionOptions = { ...{}, ...options }; - - if ( - !isUrlSource(source) && - (source.mimetype === undefined || source.mimetype.length === 0) - ) { - throw new Error( - "DG: Mimetype must be provided if the source is a Buffer or a Readable" - ); - } - - let body; - if (isUrlSource(source)) { - body = JSON.stringify(source); - } else if (isBufferSource(source)) { - body = source.buffer; - } else if (isReadStreamSource(source)) { - body = source.stream; - } else { - throw new Error("Unknown TranscriptionSource type"); - } - - const requestOptions: { [name: string]: { [key: string]: string } } = {}; - if (!isUrlSource(source)) { - requestOptions.headers = { - "Content-Type": source.mimetype, - }; - } - - const response = await _request( - "POST", - apiKey, - apiUrl, - requireSSL, - `/${endpoint}?${querystring.stringify(transcriptionOptions)}`, - body, - requestOptions - ); - - return Object.assign(new PrerecordedTranscriptionResponse(), response); -}; diff --git a/src/types/alternatives.ts b/src/types/alternatives.ts deleted file mode 100644 index e174f272..00000000 --- a/src/types/alternatives.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { ParagraphGroup } from "./paragraphGroup"; -import { WordBase } from "./wordBase"; -import { Entity } from "./entity"; -import { Summary } from "./summary"; -import { Translation } from "./translation"; -import { TopicGroup } from "./topicGroup"; - -export type Alternative = { - /** - * Text of speech identified by API - */ - transcript: string; - /** - * Confidence in transcript generated - */ - confidence: number; - /** - * Array of words included in the transcript - */ - words: Array; - /** - * Array of summary objects. - */ - summaries?: Array; - /** - * Array of paragraph objects. - */ - paragraphs?: ParagraphGroup; - /** - * Array of entity objects. - */ - entities?: Array; - - /** - * Array of language objects for each language the response has been translated into - */ - translations?: Array; - /** - * Array of topic group objects. - */ - topics?: Array; -}; diff --git a/src/types/balance.ts b/src/types/balance.ts deleted file mode 100644 index dd8e57d2..00000000 --- a/src/types/balance.ts +++ /dev/null @@ -1,8 +0,0 @@ -export type Balance = { - balance_id: string; - amount: number; - units: string; - purchase: string; - err_code?: string; - err_msg?: string; -}; diff --git a/src/types/balanceList.ts b/src/types/balanceList.ts deleted file mode 100644 index aee00ac6..00000000 --- a/src/types/balanceList.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Balance } from "./balance"; - -export type BalanceList = { - balances?: Array; - err_code?: string; - err_msg?: string; -}; diff --git a/src/types/channel.ts b/src/types/channel.ts deleted file mode 100644 index 40785cab..00000000 --- a/src/types/channel.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Alternative } from "./alternatives"; -import { Search } from "./search"; - -/** - * Channel of speech identified by Deepgram - */ -export type Channel = { - /** - * Searched terms & results - */ - search?: Array; - /** - * Transcription alternatives - */ - alternatives: Array; - /** - * String indicating the detected language. eg: 'en' - */ - detected_language?: string; -}; diff --git a/src/types/createKeyOptions.ts b/src/types/createKeyOptions.ts deleted file mode 100644 index e77cf0d4..00000000 --- a/src/types/createKeyOptions.ts +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Optional options used when creating an API key - */ -export type CreateKeyOptions = { - /** - * Date on which the key you would like to create should expire. - */ - expirationDate?: Date; - /** - * Length of time (in seconds) during which the key you would like to create will remain valid. - */ - timeToLive?: number; - - /** - * Tags associated with the key you would like to create - * */ - tags?: string[]; -}; diff --git a/src/types/entity.ts b/src/types/entity.ts deleted file mode 100644 index d973b744..00000000 --- a/src/types/entity.ts +++ /dev/null @@ -1,23 +0,0 @@ -export type Entity = { - /** - * This is the type of the entity. - * Examples include: PER, ORG, DATE, etc. - */ - label: string; - /** - * This is the value of the detected entity. - */ - value: string; - /** - * Value between 0 and 1 indicating the model's relative confidence in this detected entity. - */ - confidence: number; - /** - * Starting index of the entities words within the transcript. - */ - start_word: number; - /** - * Ending index of the entities words within the transcript. - */ - end_word: number; -}; diff --git a/src/types/error.ts b/src/types/error.ts deleted file mode 100644 index e306cf52..00000000 --- a/src/types/error.ts +++ /dev/null @@ -1,5 +0,0 @@ -export type ErrorResponse = { - err_code: string; - err_msg: string; - request_id: string; -} \ No newline at end of file diff --git a/src/types/hit.ts b/src/types/hit.ts deleted file mode 100644 index 7a06a116..00000000 --- a/src/types/hit.ts +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Represents an identified search term in the transcript - */ -export type Hit = { - /** - * Value between 0 and 1 that indicates the model's relative confidence in this hit. - */ - confidence: number; - /** - * Offset in seconds from the start of the audio to where the hit occurs. - */ - start: number; - /** - * Offset in seconds from the start of the audio to where the hit ends. - */ - end: number; - /** - * Transcript that corresponds to the time between start and end. - */ - snippet: string; -}; diff --git a/src/types/index.ts b/src/types/index.ts deleted file mode 100644 index 65a5f250..00000000 --- a/src/types/index.ts +++ /dev/null @@ -1,49 +0,0 @@ -export * from "./alternatives"; -export * from "./balance"; -export * from "./balanceList"; -export * from "./channel"; -export * from "./createKeyOptions"; -export * from "./entity"; -export * from "./hit"; -export * from "./invitationList"; -export * from "./invitationOptions"; -export * from "./key"; -export * from "./keyResponse"; -export * from "./keyResponseObj"; -export * from "./liveTranscriptionOptions"; -export * from "./liveTranscriptionResponse"; -export * from "./member"; -export * from "./memberList"; -export * from "./message"; -export * from "./metadata"; -export * from "./paragraph"; -export * from "./paragraphGroup"; -export * from "./prerecordedTranscriptionOptions"; -export * from "./prerecordedTranscriptionResponse"; -export * from "./project"; -export * from "./projectPatchRequest"; -export * from "./projectPatchResponse"; -export * from "./projectResponse"; -export * from "./requestFunction"; -export * from "./scopeList"; -export * from "./search"; -export * from "./sentence"; -export * from "./summary"; -export * from "./toggleConfigOptions"; -export * from "./topic"; -export * from "./topicGroup"; -export * from "./transcriptionSource"; -export * from "./translation"; -export * from "./usageCallback"; -export * from "./usageField"; -export * from "./usageFieldOptions"; -export * from "./usageOptions"; -export * from "./usageRequest"; -export * from "./usageRequestDetail"; -export * from "./usageRequestList"; -export * from "./usageRequestListOptions"; -export * from "./usageResponse"; -export * from "./usageResponseDetail"; -export * from "./utterance"; -export * from "./wordBase"; -export * from "./error" \ No newline at end of file diff --git a/src/types/invitationList.ts b/src/types/invitationList.ts deleted file mode 100644 index 74343c71..00000000 --- a/src/types/invitationList.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { InvitationOptions } from "./invitationOptions"; - -export type InvitationList = { - invites?: Array; - err_code?: string; - err_msg?: string; -}; diff --git a/src/types/invitationOptions.ts b/src/types/invitationOptions.ts deleted file mode 100644 index 8fc8def2..00000000 --- a/src/types/invitationOptions.ts +++ /dev/null @@ -1,4 +0,0 @@ -export type InvitationOptions = { - email?: string; - scope?: string; -}; diff --git a/src/types/key.ts b/src/types/key.ts deleted file mode 100644 index 48bb887a..00000000 --- a/src/types/key.ts +++ /dev/null @@ -1,27 +0,0 @@ -/** - * API key used for authenticating with the Deepgram API - */ -export type Key = { - /** - * Unique identifier of the key to use in API requests - */ - api_key_id: string; - /** - * API key to send in API requests (Only displayed when first created) - */ - key?: string; - /** - * Comment for user reference - */ - comment: string; - /** - * Timestamp of the date/time the key was created - */ - created: string; - /** - * Array of scopes assigned to the key - */ - scopes: Array; - err_code?: string; - err_msg?: string; -}; diff --git a/src/types/keyResponse.ts b/src/types/keyResponse.ts deleted file mode 100644 index 4891bbe4..00000000 --- a/src/types/keyResponse.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { KeyResponseObj } from "./keyResponseObj"; - -/** - * Response from the Deepgram API to list keys - */ -export type KeyResponse = { - /** - * Array of API keys associated with the project - */ - api_keys: Array; - err_code?: string; - err_msg?: string; -}; diff --git a/src/types/keyResponseObj.ts b/src/types/keyResponseObj.ts deleted file mode 100644 index 1de57954..00000000 --- a/src/types/keyResponseObj.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { Key } from "./key"; -import { Member } from "./member"; - -export type KeyResponseObj = { - /** - * Optional member associated with the API key - */ - member?: Member; - - /** - * API key - */ - api_key: Key; - - /** - * Unique identifier of the key to use in API requests - * @deprecated This property has moved to api_key.api_key_id and will - * be removed in future versions. - */ - api_key_id: string; - /** - * API key to send in API requests (Only displayed when first created) - * @deprecated This property has moved to api_key.key and will - * be removed in future versions. - */ - key?: string; - /** - * Comment for user reference - * @deprecated This property has moved to api_key.comment and will - * be removed in future versions. - */ - comment: string; - /** - * Timestamp of the date/time the key was created - * @deprecated This property has moved to api_key.created and will - * be removed in future versions. - */ - created: string; - /** - * Array of scopes assigned to the key - * @deprecated This property has moved to api_key.scopes and will - * be removed in future versions. - */ - scopes: Array; -}; diff --git a/src/types/keyword.ts b/src/types/keyword.ts deleted file mode 100644 index 34dd9e8b..00000000 --- a/src/types/keyword.ts +++ /dev/null @@ -1,4 +0,0 @@ -export type Keyword = { - keyword: string; - boost?: number; -}; diff --git a/src/types/liveTranscriptionOptions.ts b/src/types/liveTranscriptionOptions.ts deleted file mode 100644 index 19155489..00000000 --- a/src/types/liveTranscriptionOptions.ts +++ /dev/null @@ -1,264 +0,0 @@ -import { Models } from "../enums"; - -/** - * Options for transcription - */ -export type LiveTranscriptionOptions = { - /** - * AI model used to process submitted audio. - * @default general - * @remarks Possible values are general, phonecall, meeting or a custom string - * @see https://developers.deepgram.com/documentation/features/model/ - */ - model?: Models | string; - - /** - * Version of the model to use. - * @default latest - * @remarks latest OR - * @see https://developers.deepgram.com/documentation/features/version/ - */ - version?: string; - - /** - * Tier of the model to use. - * @default base - * @remarks Possible values are base or enhanced - * @see https://developers.deepgram.com/documentation/features/tier/ - */ - tier?: string; - - /** - * BCP-47 language tag that hints at the primary spoken language. - * @default en-US - * @remarks Possible values are en-GB, en-IN, en-NZ, en-US, es, fr, ko, pt, - * pt-BR, ru, tr or null - * @see https://developers.deepgram.com/documentation/features/language/ - */ - language?: string; - /** - * Indicates whether to add punctuation and capitalization to the transcript. - * @see https://developers.deepgram.com/documentation/features/punctuate/ - */ - punctuate?: boolean; - /** - * Indicates whether to remove profanity from the transcript. - * @see https://developers.deepgram.com/documentation/features/profanity-filter/ - */ - profanity_filter?: boolean; - /** - * Indicates whether to redact sensitive information, replacing redacted content with asterisks (*). - * @remarks Options include: - * `pci`: Redacts sensitive credit card information, including credit card number, expiration date, and CVV - * `numbers` (or `true)`: Aggressively redacts strings of numerals - * `ssn` (*beta*): Redacts social security numbers - * @see https://developers.deepgram.com/documentation/features/redact/ - */ - redact?: Array | Array | boolean; - - /** - * Indicates whether to recognize speaker changes. When passed in, each word - * in the transcript will be assigned a speaker number starting at 0. - * If 'true' is passed, the latest version of the diarizer will be used. - * To use an old version of the diarizer, pass in the version in the `diarize_version` option. - * @see https://developers.deepgram.com/documentation/features/diarize/ - */ - diarize?: boolean; - - /** - * Indicates which version of the diarizer to use. When passed in, each word - * in the transcript will be assigned a speaker number starting at 0. - * Ex: YYYY-MM-DD.X where YYYY-MM-DD is the version date and X is the version number. - * @see https://developers.deepgram.com/documentation/features/diarize/ - */ - diarize_version?: string; - - /** - * Indicates whether to transcribe each audio channel independently. When set - * to true, you will receive one transcript for each channel, which means you - * can apply a different model to each channel using the model parameter (e.g., - * set model to general:phonecall, which applies the general model to channel - * 0 and the phonecall model to channel 1). - * @see https://developers.deepgram.com/documentation/features/multichannel/ - */ - multichannel?: boolean; - /** - * Maximum number of transcript alternatives to return. Just like a human listener, - * Deepgram can provide multiple possible interpretations of what it hears. - * @default 1 - */ - alternatives?: number; - /** - * Indicates whether to convert numbers from written format (e.g., one) to - * numerical format (e.g., 1). Deepgram can format numbers up to 999,999. - * @remarks Converted numbers do not include punctuation. For example, - * 999,999 would be transcribed as 999999. - * @see https://developers.deepgram.com/documentation/features/numerals/ - */ - numbers?: boolean; - - /** - * Same as numbers. Is the old name for the option. Will eventually be deprecated - */ - numerals?: boolean; - - /** - * adds spaces between numbers in the transcript - */ - numbers_spaces?: boolean; - - /** - * Callback URL to provide if you would like your submitted audio to be - * processed asynchronously. When passed, Deepgram will immediately respond - * with a request_id. When it has finished analyzing the audio, it will send - * a POST request to the provided URL with an appropriate HTTP status code. - * @remarks You may embed basic authentication credentials in the callback URL. - * Only ports 80, 443, 8080, and 8443 can be used for callbacks. - * @see https://developers.deepgram.com/documentation/features/callback/ - */ - callback?: string; - - /** - * Terms or phrases to search for in the submitted audio and replace - * @remarks Can send multiple instances in query string replace=this:that&replace=thisalso:thatalso. Replacing a term or phrase with nothing will remove the term or phrase from the audio transcript. - * @see https://developers.deepgram.com/documentation/features/replace/ - */ - replace?: string[] | string; - - /** - * Terms or phrases to search for in the submitted audio. Deepgram searches - * for acoustic patterns in audio rather than text patterns in transcripts - * because we have noticed that acoustic pattern matching is more performant. - * @see https://developers.deepgram.com/documentation/features/search/ - */ - search?: string[] | string; - - /** - * Keywords to which the model should pay particular attention to boosting - * or suppressing to help it understand context. Just like a human listener, - * Deepgram can better understand mumbled, distorted, or otherwise - * hard-to-decipher speech when it knows the context of the conversation. - * @see https://developers.deepgram.com/documentation/features/keywords/ - */ - keywords?: string[] | string; - - /** - * Support for out-of-vocabulary (OOV) keyword boosting when processing streaming audio is - * currently in beta; to fall back to previous keyword behavior append the query parameter - * keyword_boost=legacy to your API request. - */ - keyword_boost?: string; - - /** - * Indicates whether the streaming endpoint should send you updates to its - * transcription as more audio becomes available. By default, the streaming - * endpoint returns regular updates, which means transcription results will - * likely change for a period of time. You can avoid receiving these updates - * by setting this flag to false. - * @see https://developers.deepgram.com/documentation/features/interim-results/ - */ - interim_results?: boolean; - /** - * Indicates whether Deepgram will detect whether a speaker has finished - * speaking (or paused for a significant period of time, indicating the - * completion of an idea). When Deepgram detects an endpoint, it assumes - * that no additional data will improve its prediction, so it immediately - * finalizes the result for the processed time range and returns the - * transcript with a speech_final parameter set to true. - - * @see https://developers.deepgram.com/documentation/features/endpointing/ - - */ - endpointing?: boolean | number; - /** - * Length of time in milliseconds of silence that voice activation detection - * (VAD) will use to detect that a speaker has finished speaking. Used when - * endpointing is enabled. Defaults to 10 ms. Deepgram customers may configure - * a value between 10 ms and 500 ms; on-premise customers may remove this - * restriction. - * @default 10 - */ - vad_turnoff?: number; - /** - * Expected encoding of the submitted streaming audio. - * @see https://developers.deepgram.com/documentation/features/encoding/ - */ - encoding?: string; - /** - * Number of independent audio channels contained in submitted streaming - * audio. Only read when a value is provided for encoding. - * @default 1 - * @see https://developers.deepgram.com/documentation/features/channels/ - */ - channels?: number; - /** - * Sample rate of submitted streaming audio. Required (and only read) - * when a value is provided for encoding. - * @see https://developers.deepgram.com/documentation/features/sample-rate/ - */ - sample_rate?: number; - - /** - * Indicates whether Deepgram will split audio into paragraphs to improve transcript - * readability. When paragraphs is set to true, you must also set either punctuate, - * diarize, or multichannel to true. - */ - paragraphs?: boolean; - - /** - * Indicates whether to convert dates from written format (e.g., january first) to - * numerical format (e.g., 01-01). - */ - dates?: boolean; - - /** - * Indicates the format the dates will be converted to. Requires dates to be turned on. - * Format string is specified using chrono strftime notation https://docs.rs/chrono/latest/chrono/format/strftime/index.html * - * @example %Y-%m-%d - */ - date_format?: string; - - /** - * Indicates whether to convert times from written format (e.g., three oclock) to - * numerical format (e.g., 3:00). - * */ - times?: boolean; - - /** - * Option to format punctuated commands - * Before - “i went to the store period new paragraph then i went home” - * After - “i went to the store. <\n> then i went home” - */ - dictation?: boolean; - - /** - * Option to format measurements in the transcript - * */ - measurements?: boolean; - - /** - * Indicates whether to use Smart Format on the transcript. When enabled, - * Smart Format will add punctuation and formatting to entities like dates, times, - * tracking numbers, and more. - * */ - smart_format?: boolean; - - /** - * allows you to label your API requests for the purpose of identification during usage reporting. - * You can also apply tags to API Keys; if you do, any tags applied to the API Key running the API request - * will also be applied to the request itself. - * */ - tag?: Array; - - ner?: boolean; - - /** - * @see https://developers.deepgram.com/docs/filler-words - */ - filler_words?: boolean; - - /** - * allow arbitrary unknown key/value pairs to be passed through the SDK to the API - */ - [key: string]: unknown; -}; diff --git a/src/types/liveTranscriptionResponse.ts b/src/types/liveTranscriptionResponse.ts deleted file mode 100644 index ca408b54..00000000 --- a/src/types/liveTranscriptionResponse.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Channel } from "./channel"; - -export type LiveTranscriptionResponse = { - channel_index: Array; - duration: number; - start: number; - is_final: boolean; - speech_final: boolean; - channel: Channel; -}; diff --git a/src/types/member.ts b/src/types/member.ts deleted file mode 100644 index 7ef74344..00000000 --- a/src/types/member.ts +++ /dev/null @@ -1,7 +0,0 @@ -export type Member = { - member_id: string; - first_name?: string; - last_name?: string; - scopes?: Array; - email: string; -}; diff --git a/src/types/memberList.ts b/src/types/memberList.ts deleted file mode 100644 index 6179ef44..00000000 --- a/src/types/memberList.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Member } from "./member"; - -export type MemberList = { - members?: Array; - err_code?: string; - err_msg?: string; -}; diff --git a/src/types/message.ts b/src/types/message.ts deleted file mode 100644 index 5350a0f4..00000000 --- a/src/types/message.ts +++ /dev/null @@ -1,5 +0,0 @@ -export type Message = { - message?: string; - err_code?: string; - err_msg?: string; -}; diff --git a/src/types/metadata.ts b/src/types/metadata.ts deleted file mode 100644 index 955c6402..00000000 --- a/src/types/metadata.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Warning } from "./warning"; - -export type Metadata = { - request_id: string; - transaction_key: string; - sha256: string; - created: string; - duration: number; - channels: number; - model_info: { - [key: string]: { - name: string; - version: string; - arch: string; - }; - }; - warnings?: Array; - models: Array; -}; diff --git a/src/types/paragraph.ts b/src/types/paragraph.ts deleted file mode 100644 index 3a39c68e..00000000 --- a/src/types/paragraph.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Sentence } from "./sentence"; - -export type Paragraph = { - /** - * Sentences within the paragraph. - */ - sentences: Array; - /** - * Start time (in seconds) from the start of the audio to where the paragraph starts. - */ - start: number; - /** - * End time (in seconds) from the start of the audio to where the paragraph ends. - */ - end: number; - /** - * Number of words in the paragraph - */ - num_words: number; -}; diff --git a/src/types/paragraphGroup.ts b/src/types/paragraphGroup.ts deleted file mode 100644 index 98f54e39..00000000 --- a/src/types/paragraphGroup.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Paragraph } from "./paragraph"; - -export type ParagraphGroup = { - /** - * Full transcript - */ - transcript: string; - /** - * Array of Paragraph objects. - */ - paragraphs: Array; -}; diff --git a/src/types/prerecordedTranscriptionOptions.ts b/src/types/prerecordedTranscriptionOptions.ts deleted file mode 100644 index d4932127..00000000 --- a/src/types/prerecordedTranscriptionOptions.ts +++ /dev/null @@ -1,292 +0,0 @@ -import { Models } from "../enums"; - -/** - * Options for transcription - */ -export type PrerecordedTranscriptionOptions = { - /** - * AI model used to process submitted audio. - * @default general - * @remarks Possible values are general, phonecall, meeting or a custom string - * @see https://developers.deepgram.com/documentation/features/model/ - */ - model?: Models | string; - - /** - * Version of the model to use. - * @default latest - * @remarks latest OR - * @see https://developers.deepgram.com/documentation/features/version/ - */ - version?: string; - - /** - * Tier of the model to use. - * @default base - * @remarks Possible values are base or enhanced - * @see https://developers.deepgram.com/documentation/features/tier/ - */ - tier?: string; - - /** - * BCP-47 language tag that hints at the primary spoken language. - * @default en-US - * @remarks Possible values are en-GB, en-IN, en-NZ, en-US, es, fr, ko, pt, - * pt-BR, ru, tr or null - * @see https://developers.deepgram.com/documentation/features/language/ - */ - language?: string; - - /** - * Indicates whether to add punctuation and capitalization to the transcript. - * @see https://developers.deepgram.com/documentation/features/punctuate/ - */ - punctuate?: boolean; - - /** - * Indicates whether to remove profanity from the transcript. - * @see https://developers.deepgram.com/documentation/features/profanity-filter/ - */ - profanity_filter?: boolean; - - /** - * Indicates whether to redact sensitive information, replacing redacted content with asterisks (*). - * @remarks Options include: - * `pci`: Redacts sensitive credit card information, including credit card number, expiration date, and CVV - * `numbers` (or `true)`: Aggressively redacts strings of numerals - * `ssn` (*beta*): Redacts social security numbers - * @see https://developers.deepgram.com/documentation/features/redact/ - */ - redact?: Array | Array | boolean; - - /** - * Indicates whether to recognize speaker changes. When passed in, each word - * in the transcript will be assigned a speaker number starting at 0. - * If 'true' is passed, the latest version of the diarizer will be used. - * To use an old version of the diarizer, pass in the version in the `diarize_version` option. - * @see https://developers.deepgram.com/documentation/features/diarize/ - */ - diarize?: boolean; - - /** - * Indicates which version of the diarizer to use. When passed in, each word - * in the transcript will be assigned a speaker number starting at 0. - * Ex: YYYY-MM-DD.X where YYYY-MM-DD is the version date and X is the version number. - * @see https://developers.deepgram.com/documentation/features/diarize/ - */ - diarize_version?: string; - - /** - * Indicates whether to transcribe each audio channel independently. When set - * to true, you will receive one transcript for each channel, which means you - * can apply a different model to each channel using the model parameter (e.g., - * set model to general:phonecall, which applies the general model to channel - * 0 and the phonecall model to channel 1). - * @see https://developers.deepgram.com/documentation/features/multichannel/ - */ - multichannel?: boolean; - - /** - * Maximum number of transcript alternatives to return. Just like a human listener, - * Deepgram can provide multiple possible interpretations of what it hears. - * @default 1 - */ - alternatives?: number; - - /** - * Indicates whether to convert numbers from written format (e.g., one) to - * numerical format (e.g., 1). Deepgram can format numbers up to 999,999. - * @remarks Converted numbers do not include punctuation. For example, - * 999,999 would be transcribed as 999999. - * @see https://developers.deepgram.com/documentation/features/numerals/ - */ - numbers?: boolean; - - /** - * Same as numbers. Is the old name for the option. Will eventually be deprecated - */ - numerals?: boolean; - - /** - * adds spaces between numbers in the transcript - */ - numbers_spaces?: boolean; - - /** - * Callback URL to provide if you would like your submitted audio to be - * processed asynchronously. When passed, Deepgram will immediately respond - * with a request_id. When it has finished analyzing the audio, it will send - * a POST request to the provided URL with an appropriate HTTP status code. - * @remarks You may embed basic authentication credentials in the callback URL. - * Only ports 80, 443, 8080, and 8443 can be used for callbacks. - * @see https://developers.deepgram.com/documentation/features/callback/ - */ - callback?: string; - - /** - * Terms or phrases to search for in the submitted audio and replace - * @remarks Can send multiple instances in query string replace=this:that&replace=thisalso:thatalso. Replacing a term or phrase with nothing will remove the term or phrase from the audio transcript. - * @see https://developers.deepgram.com/documentation/features/replace/ - */ - replace?: string[] | string; - - /** - * Terms or phrases to search for in the submitted audio. Deepgram searches - * for acoustic patterns in audio rather than text patterns in transcripts - * because we have noticed that acoustic pattern matching is more performant. - * @see https://developers.deepgram.com/documentation/features/search/ - */ - search?: string[] | string; - - /** - * Keywords to which the model should pay particular attention to boosting - * or suppressing to help it understand context. Just like a human listener, - * Deepgram can better understand mumbled, distorted, or otherwise - * hard-to-decipher speech when it knows the context of the conversation. - * @see https://developers.deepgram.com/documentation/features/keywords/ - */ - keywords?: string[] | string; - - /** - * Support for out-of-vocabulary (OOV) keyword boosting when processing streaming audio is - * currently in beta; to fall back to previous keyword behavior append the query parameter - * keyword_boost=legacy to your API request. - */ - keyword_boost?: string; - - /** - * Indicates whether Deepgram will segment speech into meaningful semantic - * units, which allows the model to interact more naturally and effectively - * with speakers' spontaneous speech patterns. For example, when humans - * speak to each other conversationally, they often pause mid-sentence to - * reformulate their thoughts, or stop and restart a badly-worded sentence. - * When utterances is set to true, these utterances are identified and - * returned in the transcript results. - * - * By default, when utterances is enabled, it starts a new utterance after - * 0.8 s of silence. You can customize the length of time used to determine - * where to split utterances by submitting the utt_split parameter. - * @see https://developers.deepgram.com/documentation/features/utterances/ - */ - utterances?: boolean; - - /** - * Length of time in seconds of silence between words that Deepgram will - * use when determining where to split utterances. Used when utterances - * is enabled. - * @default 0.8 seconds - * @see https://developers.deepgram.com/documentation/features/utterance-split/ - */ - utt_split?: number; - - /** - * Detects the language of the recorded audio and passes audio through appropriate model - * - * - * @see https://developers.deepgram.com/documentation/features/detect-language/ - */ - detect_language?: boolean; - - /** - * Indicates whether Deepgram will split audio into paragraphs to improve transcript - * readability. When paragraphs is set to true, you must also set either punctuate, - * diarize, or multichannel to true. - */ - paragraphs?: boolean; - - /** - * Indicates whether Deepgram will Identify and detect entities in the transcript - * This is a beta feature and is is subject to change. Right now, pass in the string "latest" instead of a boolean value - */ - detect_entities?: boolean; - - /** - * Indicates whether Deepgram should provide summarizations of sections of the provided audio. - */ - summarize?: boolean | string; - - /** - * Corresponds to the language code Deepgram will translate the results into - * For example, 'es', 'fr', 'ja' - * If requests translation in the same language as their ASR request, a 400 will be returned. - */ - translate?: Array; - - /** - * Indicates whether Deepgram will identify and detect topics in the transcript. - */ - detect_topics?: boolean; - - /** - * Indicates whether Deepgram will identify sentiment in the audio. - */ - sentiment?: boolean; - - /** - * Indicates whether Deepgram will identify sentiment in the transcript. - */ - analyze_sentiment?: boolean; - - /** - * Indicates the confidence requirement for non-neutral sentiment. - * Setting this variable turns sentiment analysis on. - */ - sentiment_threshold?: number; - - /** - * Indicates whether to convert dates from written format (e.g., january first) to - * numerical format (e.g., 01-01). - */ - dates?: boolean; - - /** - * Indicates the format the dates will be converted to. Requires dates to be turned on. - * Format string is specified using chrono strftime notation https://docs.rs/chrono/latest/chrono/format/strftime/index.html * - * @example %Y-%m-%d - */ - date_format?: string; - - /** - * Indicates whether to convert times from written format (e.g., three oclock) to - * numerical format (e.g., 3:00). - * */ - times?: boolean; - - /** - * Option to format punctuated commands - * Before - “i went to the store period new paragraph then i went home” - * After - “i went to the store. <\n> then i went home” - */ - dictation?: boolean; - - /** - * Option to format measurements in the transcript - * */ - measurements?: boolean; - - /** - * Indicates whether to use Smart Format on the transcript. When enabled, - * Smart Format will add punctuation and formatting to entities like dates, times, - * tracking numbers, and more. - * */ - smart_format?: boolean; - - /** - * allows you to label your API requests for the purpose of identification during usage reporting. - * You can also apply tags to API Keys; if you do, any tags applied to the API Key running the API request - * will also be applied to the request itself. - * */ - tag?: Array; - - ner?: boolean; - - /** - * @see https://developers.deepgram.com/docs/filler-words - */ - filler_words?: boolean; - - /** - * allow arbitrary unknown key/value pairs to be passed through the SDK to the API - */ - [key: string]: unknown; -}; diff --git a/src/types/prerecordedTranscriptionResponse.ts b/src/types/prerecordedTranscriptionResponse.ts deleted file mode 100644 index 36cf34b4..00000000 --- a/src/types/prerecordedTranscriptionResponse.ts +++ /dev/null @@ -1,141 +0,0 @@ -import { Metadata } from "./metadata"; -import { Channel } from "./channel"; -import { Utterance } from "./utterance"; -import { secondsToTimestamp } from "../helpers"; -import { WordBase } from "./wordBase"; - -export class PrerecordedTranscriptionResponse { - err_code?: string; - err_msg?: string; - request_id?: string; - metadata?: Metadata; - results?: { - channels: Array; - utterances?: Array; - summary?: { - result: "success" | "failure"; - short: string; - }; - }; - - /** - * Returns a VTT formatted string based on the transcription response. - * @param {number} lineLength The maximum line length. Default: 8 - * @returns {string} - */ - public toWebVTT(lineLength = 8): string { - if (!this.results || !this.results.utterances) { - throw new Error( - "This function requires a transcript that was generated with the utterances feature." - ); - } - - const lines: string[] = []; - lines.push("WEBVTT"); - lines.push(""); - lines.push("NOTE"); - lines.push("Transcription provided by Deepgram"); - lines.push(`Request Id: ${this.metadata?.request_id}`); - lines.push(`Created: ${this.metadata?.created}`); - lines.push(`Duration: ${this.metadata?.duration}`); - lines.push(`Channels: ${this.metadata?.channels}`); - lines.push(""); - - const chunk = (arr: any[], length: number) => { - const res: any[] = []; - - for (let i = 0; i < arr.length; i += length) { - const chunkarr = arr.slice(i, i + length); - res.push(chunkarr); - } - - return res; - }; - - const limitedUtterance = (utterance: Utterance, length: number): string => { - const wordChunks = chunk(utterance.words, length); - const limitedLines: string[] = []; - - wordChunks.forEach((words: WordBase[]) => { - const firstWord = words[0]; - const lastWord = words[words.length - 1]; - - limitedLines.push( - `${secondsToTimestamp(firstWord.start)} --> ${secondsToTimestamp( - lastWord.end - )}` - ); - limitedLines.push( - words.map((word) => word.punctuated_word ?? word.word).join(" ") - ); - limitedLines.push(""); - }); - - return limitedLines.join("\n"); - }; - - this.results.utterances.forEach((utterance) => { - lines.push(limitedUtterance(utterance, lineLength)); - }); - - return lines.join("\n"); - } - - /** - * Returns a SRT formatted string based on the transcription response. - * @param {number} lineLength The maximum line length. Default: 8 - * @returns {string} - */ - public toSRT(lineLength = 8): string { - if (!this.results || !this.results.utterances) { - throw new Error( - "This function requires a transcript that was generated with the utterances feature." - ); - } - - const lines: string[] = []; - - const chunk = (arr: any[], length: number) => { - const res: any[] = []; - - for (let i = 0; i < arr.length; i += length) { - const chunkarr = arr.slice(i, i + length); - res.push(chunkarr); - } - - return res; - }; - - let entry = 1; - - const limitedUtterance = (utterance: Utterance, length: number): string => { - const wordChunks = chunk(utterance.words, length); - const limitedLines: string[] = []; - - wordChunks.forEach((words: WordBase[]) => { - const firstWord = words[0]; - const lastWord = words[words.length - 1]; - - limitedLines.push((entry++).toString()); - limitedLines.push( - `${secondsToTimestamp( - firstWord.start, - "HH:mm:ss,SSS" - )} --> ${secondsToTimestamp(lastWord.end, "HH:mm:ss,SSS")}` - ); - limitedLines.push( - words.map((word) => word.punctuated_word ?? word.word).join(" ") - ); - limitedLines.push(""); - }); - - return limitedLines.join("\n"); - }; - - this.results.utterances.forEach((utterance) => { - lines.push(limitedUtterance(utterance, lineLength)); - }); - - return lines.join("\n"); - } -} diff --git a/src/types/project.ts b/src/types/project.ts deleted file mode 100644 index 69947923..00000000 --- a/src/types/project.ts +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Deepgram project - */ -export type Project = { - /** - * Unique identifier of the project - */ - project_id: string; - /** - * User provided name of the project - */ - name?: string; - /** - * Name of the company associated with the project. Optional. - */ - company?: string; - err_code?: string; - err_msg?: string; -}; diff --git a/src/types/projectPatchRequest.ts b/src/types/projectPatchRequest.ts deleted file mode 100644 index 9e17a992..00000000 --- a/src/types/projectPatchRequest.ts +++ /dev/null @@ -1,4 +0,0 @@ -export type ProjectPatchRequest = { - name?: string; - company?: string; -}; diff --git a/src/types/projectPatchResponse.ts b/src/types/projectPatchResponse.ts deleted file mode 100644 index dae3b401..00000000 --- a/src/types/projectPatchResponse.ts +++ /dev/null @@ -1,8 +0,0 @@ -export type ProjectPatchResponse = { - /** - * Success message. - */ - message: string; - err_code?: string; - err_msg?: string; -}; diff --git a/src/types/projectResponse.ts b/src/types/projectResponse.ts deleted file mode 100644 index 972d08a7..00000000 --- a/src/types/projectResponse.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Project } from "./project"; - -export type ProjectResponse = { - projects: Array; - err_code?: string; - err_msg?: string; -}; diff --git a/src/types/requestFunction.ts b/src/types/requestFunction.ts deleted file mode 100644 index 361e69bc..00000000 --- a/src/types/requestFunction.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { ReadStream } from "fs"; -export type RequestFunction = NodeRequest | BrowserRequest; - -export type NodeRequest = ( - method: string, - apiKey: string, - apiUrl: string, - requireSSL: boolean, - path: string, - payload?: string | Buffer | ReadStream, - // eslint-disable-next-line @typescript-eslint/ban-types - options?: Object - // eslint-disable-next-line @typescript-eslint/no-explicit-any -) => Promise; - -export type BrowserRequest = ( - method: string, - apiKey: string, - apiUrl: string, - requireSSL: boolean, - path: string, - payload?: string - // eslint-disable-next-line @typescript-eslint/no-explicit-any -) => Promise; diff --git a/src/types/scopeList.ts b/src/types/scopeList.ts deleted file mode 100644 index 592762be..00000000 --- a/src/types/scopeList.ts +++ /dev/null @@ -1,5 +0,0 @@ -export type ScopeList = { - scopes: Array; - err_code?: string; - err_msg?: string; -}; diff --git a/src/types/search.ts b/src/types/search.ts deleted file mode 100644 index 311eb46a..00000000 --- a/src/types/search.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Hit } from "./hit"; - -/** - * Search result for a transcription - */ -export type Search = { - /** - * Term for which Deepgram is searching. - */ - query: string; - /** - * Instances of query found in transcript - */ - hits: Array; -}; diff --git a/src/types/sentence.ts b/src/types/sentence.ts deleted file mode 100644 index 3ffebe69..00000000 --- a/src/types/sentence.ts +++ /dev/null @@ -1,14 +0,0 @@ -export type Sentence = { - /** - * Text transcript of the sentence. - */ - text: string; - /** - * Start time (in seconds) from the start of the audio to where the sentence starts. - */ - start: number; - /** - * End time (in seconds) from the start of the audio to where the sentence ends. - */ - end: number; -}; diff --git a/src/types/summary.ts b/src/types/summary.ts deleted file mode 100644 index 7c50938c..00000000 --- a/src/types/summary.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Summary of a section of audio provided. - */ -export type Summary = { - /** - * Summary of a section of the transcript - */ - summary?: string; - /** - * Word position in transcript where the summary begins - */ - start_word?: number; - /** - * Word position in transcript where the summary ends - */ - end_word?: number; -}; diff --git a/src/types/toggleConfigOptions.ts b/src/types/toggleConfigOptions.ts deleted file mode 100644 index 2147118b..00000000 --- a/src/types/toggleConfigOptions.ts +++ /dev/null @@ -1,3 +0,0 @@ -export type ToggleConfigOptions = { - numerals: boolean; -}; diff --git a/src/types/topic.ts b/src/types/topic.ts deleted file mode 100644 index 6215af01..00000000 --- a/src/types/topic.ts +++ /dev/null @@ -1,10 +0,0 @@ -export type Topic = { - /** - * Topic detected. - */ - topic: string; - /** - * Value between 0 and 1 indicating the model's relative confidence in this topic. - */ - confidence: number; -}; diff --git a/src/types/topicGroup.ts b/src/types/topicGroup.ts deleted file mode 100644 index 7668a956..00000000 --- a/src/types/topicGroup.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Topic } from "./topic"; - -export type TopicGroup = { - /** - * Array of Topics identified. - */ - topics: Array; - /** - * Transcript covered by the topic. - */ - text: string; - /** - * Word position in transcript where the topic begins - */ - start_word: number; - /** - * Word position in transcript where the topic ends - */ - end_word: number; -}; diff --git a/src/types/transcriptionSource.ts b/src/types/transcriptionSource.ts deleted file mode 100644 index 43ff5abe..00000000 --- a/src/types/transcriptionSource.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Readable } from "stream"; - -export type TranscriptionSource = UrlSource | BufferSource | ReadStreamSource; - -export type ReadStreamSource = { - stream: Readable; - mimetype: string; -}; - -export type UrlSource = { - url: string; -}; - -export type BufferSource = { - buffer: Buffer; - mimetype: string; -}; diff --git a/src/types/translation.ts b/src/types/translation.ts deleted file mode 100644 index 6aa487dc..00000000 --- a/src/types/translation.ts +++ /dev/null @@ -1,10 +0,0 @@ -export type Translation = { - /** - * Language code of the translation. - */ - language: string; - /** - * Translated transcript. - */ - translation: string; -}; diff --git a/src/types/usageCallback.ts b/src/types/usageCallback.ts deleted file mode 100644 index 91497e74..00000000 --- a/src/types/usageCallback.ts +++ /dev/null @@ -1,4 +0,0 @@ -export type UsageCallback = { - code: number; - completed: string; -}; diff --git a/src/types/usageField.ts b/src/types/usageField.ts deleted file mode 100644 index def12652..00000000 --- a/src/types/usageField.ts +++ /dev/null @@ -1,9 +0,0 @@ -export type UsageField = { - tags: Array; - models: Array; - processing_methods: Array; - languages: Array; - features: Array; - err_code?: string; - err_msg?: string; -}; diff --git a/src/types/usageFieldOptions.ts b/src/types/usageFieldOptions.ts deleted file mode 100644 index c7a5e857..00000000 --- a/src/types/usageFieldOptions.ts +++ /dev/null @@ -1,4 +0,0 @@ -export type UsageFieldOptions = { - start?: string; - end?: string; -}; diff --git a/src/types/usageRequest.ts b/src/types/usageRequest.ts deleted file mode 100644 index b5828bc6..00000000 --- a/src/types/usageRequest.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { UsageCallback } from "./usageCallback"; -import { UsageRequestDetail } from "./usageRequestDetail"; -import { UsageRequestMessage } from "./usageRequestMessage"; - -export type UsageRequest = { - request_id: string; - created: string; - path: string; - accessor: string; - response?: UsageRequestDetail | UsageRequestMessage; - callback?: UsageCallback; - err_code?: string; - err_msg?: string; -}; diff --git a/src/types/usageRequestDetail.ts b/src/types/usageRequestDetail.ts deleted file mode 100644 index 402fa71b..00000000 --- a/src/types/usageRequestDetail.ts +++ /dev/null @@ -1,33 +0,0 @@ -export type UsageRequestDetail = { - details: { - usd: number; - duration: number; - total_audio: number; - channels: number; - streams: number; - model: string; - method: "sync" | "async" | "streaming"; - tags: Array; - features: Array; - config: { - multichannel?: boolean; - interim_results?: boolean; - punctuate?: boolean; - ner?: boolean; - utterances?: boolean; - replace?: boolean; - profanity_filter?: boolean; - keywords?: boolean; - sentiment?: boolean; - diarize?: boolean; - detect_language?: boolean; - search?: boolean; - redact?: boolean; - alternatives?: boolean; - numerals?: boolean; - numbers?: boolean; - smart_format?: boolean; - translate?: boolean; - }; - }; -}; diff --git a/src/types/usageRequestList.ts b/src/types/usageRequestList.ts deleted file mode 100644 index 6d9438d1..00000000 --- a/src/types/usageRequestList.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { UsageRequest } from "./usageRequest"; - -export type UsageRequestList = { - page: number; - limit: number; - requests?: Array; - err_code?: string; - err_msg?: string; -}; diff --git a/src/types/usageRequestListOptions.ts b/src/types/usageRequestListOptions.ts deleted file mode 100644 index d14c501e..00000000 --- a/src/types/usageRequestListOptions.ts +++ /dev/null @@ -1,7 +0,0 @@ -export type UsageRequestListOptions = { - start?: string; - end?: string; - page?: number; - limit?: number; - status?: "succeeded" | "failed"; -}; diff --git a/src/types/usageRequestMessage.ts b/src/types/usageRequestMessage.ts deleted file mode 100644 index b748dcd5..00000000 --- a/src/types/usageRequestMessage.ts +++ /dev/null @@ -1,3 +0,0 @@ -export type UsageRequestMessage = { - message?: string; -}; diff --git a/src/types/usageResponse.ts b/src/types/usageResponse.ts deleted file mode 100644 index f0409991..00000000 --- a/src/types/usageResponse.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { UsageResponseDetail } from "./usageResponseDetail"; - -export type UsageResponse = { - start: string; - end: string; - resolution: { - units: string; - amount: number; - }; - results: Array; - err_code?: string; - err_msg?: string; -}; diff --git a/src/types/usageResponseDetail.ts b/src/types/usageResponseDetail.ts deleted file mode 100644 index dc313de4..00000000 --- a/src/types/usageResponseDetail.ts +++ /dev/null @@ -1,6 +0,0 @@ -export type UsageResponseDetail = { - start: string; - end: string; - hours: number; - requests: number; -}; diff --git a/src/types/utterance.ts b/src/types/utterance.ts deleted file mode 100644 index 3bd9516a..00000000 --- a/src/types/utterance.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { WordBase } from "./wordBase"; - -export type Utterance = { - /** - * Start time (in seconds) from the beginning of the audio stream. - */ - start: number; - /** - * End time (in seconds) from the beginning of the audio stream. - */ - end: number; - /** - * Floating point value between 0 and 1 that indicates overall transcript - * reliability. Larger values indicate higher confidence. - */ - confidence: number; - /** - * Audio channel to which the utterance belongs. When using multichannel audio, - * utterances are chronologically ordered by channel. - */ - channel: number; - /** - * Transcript for the audio segment being processed. - */ - transcript: string; - /** - * Object containing each word in the transcript, along with its start time - * and end time (in seconds) from the beginning of the audio stream, and a confidence value. - */ - words: Array; - /** - * Integer indicating the predicted speaker of the majority of words - * in the utterance who is saying the words being processed. - */ - speaker?: number; - /** - * Unique identifier of the utterance - */ - id: string; -}; diff --git a/src/types/warning.ts b/src/types/warning.ts deleted file mode 100644 index 5d4f95dc..00000000 --- a/src/types/warning.ts +++ /dev/null @@ -1,9 +0,0 @@ -export type Warning = { - parameter: string; - type: - | "unsupported_language" - | "unsupported_model" - | "unsupported_encoding" - | "deprecated"; - message: string; -}; diff --git a/src/types/wordBase.ts b/src/types/wordBase.ts deleted file mode 100644 index 3d8ce4df..00000000 --- a/src/types/wordBase.ts +++ /dev/null @@ -1,10 +0,0 @@ -export type WordBase = { - word: string; - start: number; - end: number; - confidence: number; - punctuated_word?: string; - speaker?: number; - // speaker_confidence will only be included if 'diarize=latest' or 'diarize=VERSION' is passed in the request - speaker_confidence?: number; -}; diff --git a/src/usage.ts b/src/usage.ts deleted file mode 100644 index 1eabb974..00000000 --- a/src/usage.ts +++ /dev/null @@ -1,115 +0,0 @@ -import querystring from "querystring"; -import { - RequestFunction, - UsageField, - UsageFieldOptions, - UsageOptions, - UsageRequest, - UsageRequestList, - UsageRequestListOptions, - UsageResponse, -} from "./types"; - -export class Usage { - constructor( - private _credentials: string, - private _apiUrl: string, - private _requireSSL: boolean, - private _request: RequestFunction - ) {} - - /** - * Retrieves all requests associated with the provided project_id based on the provided options. - * @param {string} projectId Unique identifier of the project - * @param {UsageRequestListOptions} options Additional filter options - * @param {string} endpoint Custom API endpoint - * - * @returns {Promise} - */ - async listRequests( - projectId: string, - options?: UsageRequestListOptions, - endpoint = "v1/projects" - ): Promise { - const requestOptions = { ...{}, ...options }; - return await this._request( - "GET", - this._credentials, - this._apiUrl, - this._requireSSL, - `/${endpoint}/${projectId}/requests?${querystring.stringify( - requestOptions - )}` - ); - } - - /** - * Retrieves a specific request associated with the provided project_id. - * @param {string} projectId Unique identifier of the project - * @param {string} requestId Unique identifier of the request - * @param {string} endpoint Custom API endpoint - * - * @returns {Promise} - */ - async getRequest( - projectId: string, - requestId: string, - endpoint = "v1/projects" - ): Promise { - return await this._request( - "GET", - this._credentials, - this._apiUrl, - this._requireSSL, - `/${endpoint}/${projectId}/requests/${requestId}` - ); - } - - /** - * Retrieves usage associated with the provided project_id based on the provided options. - * @param {string} projectId Unique identifier of the project - * @param {UsageOptions} options Options to filter usage - * @param {string} endpoint Custom API endpoint - * - * @returns {Promise} - */ - async getUsage( - projectId: string, - options?: UsageOptions, - endpoint = "v1/projects" - ): Promise { - const requestOptions = { ...{}, ...options }; - return await this._request( - "GET", - this._credentials, - this._apiUrl, - this._requireSSL, - `/${endpoint}/${projectId}/usage?${querystring.stringify(requestOptions)}` - ); - } - - /** - * Retrieves features used by the provided project_id based on the provided options. - * @param {string} projectId Unique identifier of the project - * @param {UsageFieldOptions} options Options to filter usage - * @param {string} endpoint Custom API endpoint - * - * @returns {Promise} - */ - async getFields( - projectId: string, - options?: UsageFieldOptions, - endpoint = "v1/projects" - ): Promise { - const requestOptions = { ...{}, ...options }; - return await this._request( - "GET", - this._credentials, - this._apiUrl, - this._requireSSL, - `/${endpoint}/${projectId}/usage/fields?${querystring.stringify( - requestOptions - )}` - ); - } -} diff --git a/src/userAgent.ts b/src/userAgent.ts deleted file mode 100644 index e4e92fd0..00000000 --- a/src/userAgent.ts +++ /dev/null @@ -1,18 +0,0 @@ -/* - * The following const is replaced during the CD - * process to the version from package.json - */ -const sdkVersion = "DG_SDK_VERSION"; - -export function userAgent(): string { - let agent = "@deepgram/sdk/UNKNOWN node/UNKNOWN"; - try { - agent = `@deepgram/sdk/${sdkVersion} node/${process.version.replace( - "v", - "" - )}`; - } catch (e) { - console.warn("Could not load package details"); - } - return agent; -} diff --git a/test/client.test.ts b/test/client.test.ts new file mode 100644 index 00000000..04c9b300 --- /dev/null +++ b/test/client.test.ts @@ -0,0 +1,85 @@ +import { createClient } from "../src"; +import { DEFAULT_URL } from "../src/lib/constants"; +import { expect } from "chai"; +import { faker } from "@faker-js/faker"; +import { stripTrailingSlash } from "../src/lib/helpers"; +import DeepgramClient from "../src/DeepgramClient"; +import { ListenClient } from "../src/packages/ListenClient"; + +const deepgram = createClient(faker.string.alphanumeric(40)); + +describe("testing creation of a deepgram client object", () => { + it("it should create the client object", () => { + expect(deepgram).to.not.be.undefined; + expect(deepgram).is.instanceOf(DeepgramClient); + }); + + it("it should provide provide access to a transcription client", () => { + expect(deepgram.listen).to.not.be.undefined; + expect(deepgram.listen).is.instanceOf(ListenClient); + }); + + it("it should have the default URL when no custom URL option is provided", () => { + // @ts-ignore + const url = deepgram.baseUrl.hostname; + + expect(url).to.equal(DEFAULT_URL); + }); + + it("it should throw an error if no valid apiKey is provided", () => { + expect(() => createClient("")).to.throw("A deepgram API key is required"); + }); + + it("it should throw an error if invalid options are provided", () => { + expect(() => createClient(faker.string.alphanumeric(40), { global: { url: "" } })).to.throw( + `An API URL is required. It should be set to ${DEFAULT_URL} by default. No idea what happened!` + ); + }); + + it("it should create the client object with a custom domain", () => { + const domain = faker.internet.url({ appendSlash: false }); + const client = createClient(faker.string.alphanumeric(40), { + global: { url: domain }, + }); + + // @ts-ignore + const baseUrl = client.baseUrl; + + expect(client).is.instanceOf(DeepgramClient); + expect(`${baseUrl.protocol}//${baseUrl.hostname}`).to.equal(domain); + }); + + it("it should strip trailing slashes off the API URL if they're supplied", () => { + const domain = faker.internet.url({ appendSlash: true }); + const client = createClient(faker.string.alphanumeric(40), { + global: { url: domain }, + }); + + // @ts-ignore + const baseUrl = client.baseUrl; + + expect(client).is.instanceOf(DeepgramClient); + expect(`${baseUrl.protocol}//${baseUrl.hostname}`).to.equal(stripTrailingSlash(domain)); + }); + + it("it should still work when provided a URL without a protocol", () => { + const domain = `api.mock.deepgram.com`; + const client = createClient(faker.string.alphanumeric(40), { + global: { url: domain }, + }); + + // @ts-ignore + const url = client.baseUrl.hostname; + + expect(client).is.instanceOf(DeepgramClient); + expect(url).to.equal("api.mock.deepgram.com"); + }); + + it("it should allow for the supply of a custom header", () => { + const client = createClient(faker.string.alphanumeric(40), { + global: { headers: { "X-dg-test": "testing" } }, + }); + + expect(client).is.instanceOf(DeepgramClient); + }); +}); diff --git a/test/constants.test.ts b/test/constants.test.ts new file mode 100644 index 00000000..1bae3f82 --- /dev/null +++ b/test/constants.test.ts @@ -0,0 +1,22 @@ +import { applySettingDefaults } from "../src/lib/helpers"; +import { DeepgramClientOptions } from "../src/lib/types/DeepgramClientOptions"; +import { DEFAULT_OPTIONS } from "../src/lib/constants"; +import { expect } from "chai"; +import { faker } from "@faker-js/faker"; + +describe("testing constants", () => { + it("DEFAULT_OPTIONS are valid options", () => { + const options: DeepgramClientOptions = DEFAULT_OPTIONS; + + expect(options).to.not.be.undefined; + }); + + it("DEFAULT_OPTIONS can be overridden", () => { + const options = { + global: { url: faker.internet.url({ appendSlash: false }) }, + }; + const settings = applySettingDefaults(options, DEFAULT_OPTIONS); + + expect(settings).is.not.deep.equal(options); + }); +}); diff --git a/test/errors.test.ts b/test/errors.test.ts new file mode 100644 index 00000000..61d77743 --- /dev/null +++ b/test/errors.test.ts @@ -0,0 +1,31 @@ +import { expect } from "chai"; +import { + DeepgramApiError, + DeepgramError, + DeepgramUnknownError, + isDeepgramError, +} from "../src/lib/errors"; + +describe("testing errors", () => { + it("we can create an API error", () => { + const error = new DeepgramError("Testing an error"); + expect(error).to.not.be.undefined; + expect(isDeepgramError(error)).equals(true); + expect(error).is.instanceOf(DeepgramError); + }); + + it("an API error will convert to JSON", () => { + const error = new DeepgramApiError("Testing an error", 400); + expect(JSON.stringify(error)).equals( + '{"name":"DeepgramApiError","message":"Testing an error","status":400}' + ); + expect(error).is.instanceOf(DeepgramApiError); + }); + + it("an unknown error is still an error", () => { + const error = new Error("Testing an error"); + const dgError = new DeepgramUnknownError("Unknown error test", error); + expect(isDeepgramError(dgError)).equals(true); + expect(dgError).is.instanceOf(DeepgramUnknownError); + }); +}); diff --git a/test/helpers.test.ts b/test/helpers.test.ts new file mode 100644 index 00000000..e35e5b27 --- /dev/null +++ b/test/helpers.test.ts @@ -0,0 +1,18 @@ +import { expect } from "chai"; +import { faker } from "@faker-js/faker"; +import { applySettingDefaults, stripTrailingSlash } from "../src/lib/helpers"; +import { DEFAULT_OPTIONS } from "../src/lib/constants"; + +describe("testing helpers", () => { + it("it should strip the trailing slash from a URL", () => { + const URL = faker.internet.url({ appendSlash: true }); + const expectedURL = URL.slice(0, -1); + expect(stripTrailingSlash(URL)).to.equal(expectedURL); + }); + + it("it should override defaults with options provided", () => { + const options = JSON.parse(JSON.stringify(DEFAULT_OPTIONS)); // deep copy DEFAULT_OPTIONS + options.global.url = faker.internet.url({ appendSlash: false }); + expect(applySettingDefaults(options, DEFAULT_OPTIONS)).to.deep.equal(options); + }); +}); diff --git a/test/live.test.ts b/test/live.test.ts new file mode 100644 index 00000000..b777af29 --- /dev/null +++ b/test/live.test.ts @@ -0,0 +1,76 @@ +import { assert, expect } from "chai"; +import { createClient } from "../src"; +import { faker } from "@faker-js/faker"; +import DeepgramClient from "../src/DeepgramClient"; +import { LiveConnectionState, LiveTranscriptionEvents } from "../src/lib/enums"; + +describe("connecting to our transcription websocket", () => { + let deepgram: DeepgramClient; + + beforeEach(() => { + deepgram = createClient(faker.string.alphanumeric(40), { + global: { url: "https://api.mock.deepgram.com" }, + }); + }); + + it("should create the client object", () => { + expect(deepgram).to.not.be.undefined; + expect(deepgram).is.instanceOf(DeepgramClient); + }); + + it("should connect to the websocket", function (done) { + const connection = deepgram.listen.live({ model: "general", tier: "enhanced" }); + + connection.on(LiveTranscriptionEvents.Open, (event) => { + expect(connection.getReadyState()).to.eq(LiveConnectionState.OPEN); + + connection.on(LiveTranscriptionEvents.Metadata, (data) => { + assert.isNotNull(data); + assert.containsAllDeepKeys(data, ["request_id"]); + + connection.finish(); + done(); + }); + }); + }); + + it("should send data and recieve a transcription object back", function (done) { + const connection = deepgram.listen.live({ model: "general", tier: "enhanced" }); + + connection.on(LiveTranscriptionEvents.Open, () => { + connection.on(LiveTranscriptionEvents.Metadata, (data) => { + assert.isNotNull(data); + assert.containsAllDeepKeys(data, ["request_id"]); + }); + + connection.on(LiveTranscriptionEvents.Transcript, (data) => { + assert.isNotNull(data); + assert.containsAllDeepKeys(data, ["channel"]); + + connection.finish(); + done(); + }); + + connection.send(new Uint8Array(100)); // mock ArrayBufferLike audio data + }); + }); + + it("should receive a warning if trying to send zero-byte length data", function (done) { + const connection = deepgram.listen.live({ model: "general", tier: "enhanced" }); + + connection.on(LiveTranscriptionEvents.Open, () => { + connection.on(LiveTranscriptionEvents.Warning, (data) => { + assert.isNotNull(data); + + expect(data).to.eq( + "Zero-byte detected, skipping. Send `CloseStream` if trying to close the connection." + ); + + connection.finish(); + done(); + }); + + connection.send(new Uint8Array(0)); + }); + }); +}); diff --git a/test/manage.test.ts b/test/manage.test.ts new file mode 100644 index 00000000..7918d220 --- /dev/null +++ b/test/manage.test.ts @@ -0,0 +1,231 @@ +import { assert, expect } from "chai"; +import { createClient } from "../src"; +import { faker } from "@faker-js/faker"; +import DeepgramClient from "../src/DeepgramClient"; + +describe("making manage requests", () => { + let deepgram: DeepgramClient; + + beforeEach(() => { + deepgram = createClient(faker.string.alphanumeric(40), { + global: { url: "https://api.mock.deepgram.com" }, + }); + }); + + it("should create the client object", () => { + expect(deepgram).to.not.be.undefined; + expect(deepgram).is.instanceOf(DeepgramClient); + }); + + it("should get all projects for a user", async () => { + const { result, error } = await deepgram.manage.getProjects(); + + assert.isNull(error); + assert.isNotNull(result); + assert.containsAllDeepKeys(result, ["projects"]); + }); + + it("should get a project", async () => { + const { result, error } = await deepgram.manage.getProject(faker.string.uuid()); + + assert.isNull(error); + assert.isNotNull(result); + assert.containsAllDeepKeys(result, ["project_id"]); + }); + + it("should update a project", async () => { + const { result, error } = await deepgram.manage.updateProject(faker.string.uuid(), { + name: "test", + }); + + assert.isNull(error); + assert.isNotNull(result); + assert.containsAllDeepKeys(result, ["message"]); + }); + + it("should delete a project", async () => { + const { error } = await deepgram.manage.deleteProject(faker.string.uuid()); + + assert.isNull(error); + }); + + it("should get all project key details", async () => { + const { result, error } = await deepgram.manage.getProjectKeys(faker.string.uuid()); + + assert.isNull(error); + assert.isNotNull(result); + assert.containsAllDeepKeys(result, ["api_keys"]); + }); + + it("should get a project key", async () => { + const { result, error } = await deepgram.manage.getProjectKey( + faker.string.uuid(), + faker.string.uuid() + ); + + assert.isNull(error); + assert.isNotNull(result); + assert.containsAllDeepKeys(result?.api_key, ["api_key_id"]); + }); + + it("should create a project key", async () => { + const { result, error } = await deepgram.manage.createProjectKey(faker.string.uuid(), { + comment: faker.lorem.words(4), + scopes: [faker.lorem.word()], + }); + + assert.isNull(error); + assert.isNotNull(result); + assert.containsAllDeepKeys(result, ["key"]); + }); + + it("should delete a project key", async () => { + const { error } = await deepgram.manage.deleteProjectKey( + faker.string.uuid(), + faker.string.uuid() + ); + + assert.isNull(error); + }); + + it("should get all project members", async () => { + const { result, error } = await deepgram.manage.getProjectMembers(faker.string.uuid()); + + assert.isNull(error); + assert.isNotNull(result); + assert.containsAllDeepKeys(result, ["members"]); + }); + + it("should remove a project member", async () => { + const { error } = await deepgram.manage.removeProjectMember( + faker.string.uuid(), + faker.string.uuid() + ); + + assert.isNull(error); + }); + + it("should get all scopes for a project member", async () => { + const { result, error } = await deepgram.manage.getProjectMemberScopes( + faker.string.uuid(), + faker.string.uuid() + ); + + assert.isNull(error); + assert.isNotNull(result); + assert.containsAllDeepKeys(result, ["scopes"]); + }); + + it("should update a scope for a project member", async () => { + const { result, error } = await deepgram.manage.updateProjectMemberScope( + faker.string.uuid(), + faker.string.uuid(), + { + scope: faker.lorem.word(), + } + ); + + assert.isNull(error); + assert.isNotNull(result); + assert.containsAllDeepKeys(result, ["message"]); + }); + + it("should get all project invites", async () => { + const { result, error } = await deepgram.manage.getProjectInvites(faker.string.uuid()); + + assert.isNull(error); + assert.isNotNull(result); + assert.containsAllDeepKeys(result, ["invites"]); + }); + + it("should send a project invite", async () => { + const { result, error } = await deepgram.manage.sendProjectInvite(faker.string.uuid(), { + email: faker.internet.email(), + scope: faker.lorem.word(), + }); + + assert.isNull(error); + assert.isNotNull(result); + assert.containsAllDeepKeys(result, ["message"]); + }); + + it("should delete a project invite", async () => { + const { error } = await deepgram.manage.deleteProjectInvite( + faker.string.uuid(), + faker.internet.email() + ); + + assert.isNull(error); + }); + + it("should leave a project", async () => { + const { result, error } = await deepgram.manage.leaveProject(faker.string.uuid()); + + assert.isNull(error); + assert.isNotNull(result); + assert.containsAllDeepKeys(result, ["message"]); + }); + + it("should get all usage requests for a project", async () => { + const { result, error } = await deepgram.manage.getProjectUsageRequests(faker.string.uuid(), { + start: faker.date.anytime().toISOString(), + end: faker.date.anytime().toISOString(), + }); + + assert.isNull(error); + assert.isNotNull(result); + assert.containsAllDeepKeys(result, ["requests"]); + }); + + it("should get a usage request for a project", async () => { + const { result, error } = await deepgram.manage.getProjectUsageRequest( + faker.string.uuid(), + faker.string.uuid() + ); + + assert.isNull(error); + assert.isNotNull(result); + assert.containsAllDeepKeys(result, ["response"]); + }); + + it("should get the project usage summary", async () => { + const { result, error } = await deepgram.manage.getProjectUsageSummary(faker.string.uuid(), { + start: faker.date.anytime().toISOString(), + end: faker.date.anytime().toISOString(), + }); + + assert.isNull(error); + assert.isNotNull(result); + assert.containsAllDeepKeys(result, ["results"]); + }); + + it("should get project usage fields", async () => { + const { result, error } = await deepgram.manage.getProjectUsageFields(faker.string.uuid(), { + start: faker.date.anytime().toISOString(), + end: faker.date.anytime().toISOString(), + }); + + assert.isNull(error); + assert.isNotNull(result); + assert.containsAllDeepKeys(result, ["models"]); + }); + + it("should get all project balances", async () => { + const { result, error } = await deepgram.manage.getProjectBalances(faker.string.uuid()); + + assert.isNull(error); + assert.isNotNull(result); + assert.containsAllDeepKeys(result, ["balances"]); + }); + + it("should get a project balance", async () => { + const { result, error } = await deepgram.manage.getProjectBalance( + faker.string.uuid(), + faker.string.uuid() + ); + + assert.isNull(error); + assert.isNotNull(result); + assert.containsAllDeepKeys(result, ["balance_id"]); + }); +}); diff --git a/test/onprem.test.ts b/test/onprem.test.ts new file mode 100644 index 00000000..5a5a4e1c --- /dev/null +++ b/test/onprem.test.ts @@ -0,0 +1,61 @@ +import { assert, expect } from "chai"; +import { createClient } from "../src"; +import { faker } from "@faker-js/faker"; +import DeepgramClient from "../src/DeepgramClient"; + +describe("making onprem requests", () => { + let deepgram: DeepgramClient; + + beforeEach(() => { + deepgram = createClient(faker.string.alphanumeric(40), { + global: { url: "https://api.mock.deepgram.com" }, + }); + }); + + it("should create the client object", () => { + expect(deepgram).to.not.be.undefined; + expect(deepgram).is.instanceOf(DeepgramClient); + }); + + it("should list onprem credentials", async () => { + const { result, error } = await deepgram.onprem.listCredentials(faker.string.uuid()); + + assert.isNull(error); + assert.isNotNull(result); + assert.containsAllDeepKeys(result, ["distribution_credentials"]); + }); + + it("should get onprem credentials", async () => { + const { result, error } = await deepgram.onprem.getCredentials( + faker.string.uuid(), + faker.string.uuid() + ); + + assert.isNull(error); + assert.isNotNull(result); + assert.containsAllDeepKeys(result, ["member"]); + }); + + it("should create onprem credentials", async () => { + const { result, error } = await deepgram.onprem.createCredentials(faker.string.uuid(), { + comment: faker.lorem.paragraph(), + scopes: [faker.lorem.word()], + provider: faker.lorem.word(), + }); + + assert.isNull(error); + assert.isNotNull(result); + assert.containsAllDeepKeys(result, ["member"]); + }); + + it("should delete onprem credentials", async () => { + const { result, error } = await deepgram.onprem.deleteCredentials( + faker.string.uuid(), + faker.string.uuid() + ); + + assert.isNull(error); + assert.isNotNull(result); + assert.containsAllDeepKeys(result, ["message"]); + }); +}); diff --git a/test/prerecorded.test.ts b/test/prerecorded.test.ts new file mode 100644 index 00000000..e726bf2a --- /dev/null +++ b/test/prerecorded.test.ts @@ -0,0 +1,65 @@ +import { assert, expect } from "chai"; +import { createClient } from "../src"; +import { faker } from "@faker-js/faker"; +import DeepgramClient from "../src/DeepgramClient"; +import { CallbackUrl } from "../src/lib/helpers"; +import { UrlSource } from "../src/lib/types"; + +const bufferSource: Buffer = Buffer.from("string"); + +const urlSource: UrlSource = { + url: faker.internet.url({ appendSlash: false }) + "/nasa.wav", +}; + +describe("making listen requests", () => { + let deepgram: DeepgramClient; + + beforeEach(() => { + deepgram = createClient(faker.string.alphanumeric(40), { + global: { url: "https://api.mock.deepgram.com" }, + }); + }); + + it("should create the client object", () => { + expect(deepgram).to.not.be.undefined; + expect(deepgram).is.instanceOf(DeepgramClient); + }); + + it("should transcribe a URL source synchronously", async () => { + const { result, error } = await deepgram.listen.prerecorded.transcribeUrl(urlSource); + + assert.isNull(error); + assert.isNotNull(result); + assert.containsAllDeepKeys(result?.metadata, ["request_id"]); + }); + + it("should transcribe a file source synchronously", async () => { + const { result, error } = await deepgram.listen.prerecorded.transcribeFile(bufferSource); + + assert.isNull(error); + assert.isNotNull(result); + assert.containsAllDeepKeys(result?.metadata, ["request_id"]); + }); + + it("should transcribe a URL source asynchronously", async () => { + const { result, error } = await deepgram.listen.prerecorded.transcribeUrlCallback( + urlSource, + new CallbackUrl("https://example.com/callback") + ); + + assert.isNull(error); + assert.isNotNull(result); + assert.containsAllDeepKeys(result, ["request_id"]); + }); + + it("should transcribe a file source asynchronously", async () => { + const { result, error } = await deepgram.listen.prerecorded.transcribeFileCallback( + bufferSource, + new CallbackUrl("https://example.com/callback") + ); + + assert.isNull(error); + assert.isNotNull(result); + assert.containsAllDeepKeys(result, ["request_id"]); + }); +}); diff --git a/tests/billing.test.ts b/tests/billing.test.ts deleted file mode 100644 index 2cc169e2..00000000 --- a/tests/billing.test.ts +++ /dev/null @@ -1,82 +0,0 @@ -import chai from "chai"; -import { Deepgram } from "../src"; -import { - mockRequestId, - mockProjectId, - mockApiDomain, - mockApiKey, - mockBillingRequestList, - mockBillingBalance, -} from "./mockResults"; -import nock from "nock"; - -chai.should(); - -describe("Billing tests", () => { - let deepgram: Deepgram = new Deepgram(mockApiKey, mockApiDomain); - - before(() => { - if (!nock.isActive()) nock.activate(); - nock.disableNetConnect(); - }); - - afterEach(() => { - if (!nock.isDone()) { - throw new Error( - `Not all nock interceptors were used: ${JSON.stringify( - nock.pendingMocks() - )}` - ); - } - - nock.cleanAll(); - }); - - after(() => { - nock.restore(); - }); - - it("List requests resolves", () => { - nock(`https://${mockApiDomain}`) - .get(`/v1/projects/${mockProjectId}/balances`) - .reply(200, mockBillingRequestList); - - deepgram.billing.listBalances(mockProjectId).then((response) => { - response.should.deep.eq(mockBillingRequestList); - }); - }); - - it("Get request resolves", () => { - nock(`https://${mockApiDomain}`) - .get(`/v1/projects/${mockProjectId}/balances/${mockRequestId}`) - .reply(200, mockBillingBalance); - - deepgram.billing - .getBalance(mockProjectId, mockRequestId) - .then((request) => { - request.should.deep.eq(mockBillingBalance); - }); - }); - - it("Custom endpoint: List requests resolves", () => { - nock(`https://${mockApiDomain}`) - .get(`/test/${mockProjectId}/balances`) - .reply(200, mockBillingRequestList); - - deepgram.billing.listBalances(mockProjectId, "test").then((response) => { - response.should.deep.eq(mockBillingRequestList); - }); - }); - - it("Custom endpoint: Get request resolves", () => { - nock(`https://${mockApiDomain}`) - .get(`/test/${mockProjectId}/balances/${mockRequestId}`) - .reply(200, mockBillingBalance); - - deepgram.billing - .getBalance(mockProjectId, mockRequestId, "test") - .then((request) => { - request.should.deep.eq(mockBillingBalance); - }); - }); -}); diff --git a/tests/index.test.ts b/tests/index.test.ts deleted file mode 100644 index 7aeb4dc3..00000000 --- a/tests/index.test.ts +++ /dev/null @@ -1,12 +0,0 @@ -import chai, { expect } from "chai"; -import { Deepgram } from "../src"; - -chai.should(); - -describe("Constructor", () => { - it("Providing no credentials returns error", () => { - expect(() => { - new Deepgram(""); - }).to.throw(); - }); -}); diff --git a/tests/invitation.test.ts b/tests/invitation.test.ts deleted file mode 100644 index ca41aa09..00000000 --- a/tests/invitation.test.ts +++ /dev/null @@ -1,125 +0,0 @@ -import chai from "chai"; -import { Deepgram } from "../src"; -import { - mockEmail, - mockScope, - mockMessageResponse, - mockProjectId, - mockApiDomain, - mockApiKey, - mockInvites, -} from "./mockResults"; -import nock from "nock"; - -chai.should(); - -describe("Invitation tests", () => { - let deepgram: Deepgram = new Deepgram(mockApiKey, mockApiDomain); - - before(() => { - if (!nock.isActive()) nock.activate(); - nock.disableNetConnect(); - }); - - afterEach(() => { - if (!nock.isDone()) { - throw new Error( - `Not all nock interceptors were used: ${JSON.stringify( - nock.pendingMocks() - )}` - ); - } - - nock.cleanAll(); - }); - - after(() => { - nock.restore(); - }); - - it("List resolves", () => { - nock(`https://${mockApiDomain}`) - .get(`/v1/projects/${mockProjectId}/invites`) - .reply(200, mockInvites); - - deepgram.invitation.list(mockProjectId).then((response) => { - response.should.deep.eq(mockInvites); - }); - }); - - it("Send resolves", () => { - nock(`https://${mockApiDomain}`) - .post(`/v1/projects/${mockProjectId}/invites`) - .reply(200, mockMessageResponse); - - deepgram.invitation - .send(mockProjectId, { email: mockEmail, scope: mockScope }) - .then((response) => { - response.should.eq(mockMessageResponse); - }); - }); - - it("Leave resolves", () => { - nock(`https://${mockApiDomain}`) - .delete(`/v1/projects/${mockProjectId}/leave`) - .reply(200, mockMessageResponse); - - deepgram.invitation.leave(mockProjectId).then((response) => { - response.should.eq(mockMessageResponse); - }); - }); - - it("Delete resolves", () => { - nock(`https://${mockApiDomain}`) - .delete(`/v1/projects/${mockProjectId}/invites/${mockEmail}`) - .reply(200, mockMessageResponse); - - deepgram.invitation.delete(mockProjectId, mockEmail).then((response) => { - response.should.eq(mockMessageResponse); - }); - }); - - it("Custom endpoint: List resolves", () => { - nock(`https://${mockApiDomain}`) - .get(`/test/${mockProjectId}/invites`) - .reply(200, mockInvites); - - deepgram.invitation.list(mockProjectId, "test").then((response) => { - response.should.deep.eq(mockInvites); - }); - }); - - it("Custom endpoint: Send resolves", () => { - nock(`https://${mockApiDomain}`) - .post(`/test/${mockProjectId}/invites`) - .reply(200, mockMessageResponse); - - deepgram.invitation - .send(mockProjectId, { email: mockEmail, scope: mockScope }, "test") - .then((response) => { - response.should.eq(mockMessageResponse); - }); - }); - - it("Custom endpoint: Leave resolves", () => { - nock(`https://${mockApiDomain}`) - .delete(`/test/${mockProjectId}/leave`) - .reply(200, mockMessageResponse); - - deepgram.invitation.leave(mockProjectId, "test").then((response) => { - response.should.eq(mockMessageResponse); - }); - }); - - it("Custom endpoint: Delete resolves", () => { - nock(`https://${mockApiDomain}`) - .delete(`/test/${mockProjectId}/invites/${mockEmail}`) - .reply(200, mockMessageResponse); - - deepgram.invitation - .delete(mockProjectId, mockEmail, "test") - .then((response) => { - response.should.eq(mockMessageResponse); - }); - }); -}); diff --git a/tests/keys.test.ts b/tests/keys.test.ts deleted file mode 100644 index 032fb20c..00000000 --- a/tests/keys.test.ts +++ /dev/null @@ -1,188 +0,0 @@ -import chai, { assert } from "chai"; -import { Deepgram } from "../src"; -import { - mockProjectKeysList, - mockProjectKey, - mockApiKey, - mockApiDomain, - mockProjectId, - mockUuid, -} from "./mockResults"; -import nock from "nock"; - -chai.should(); - -describe("Key tests", () => { - let deepgram: Deepgram = new Deepgram(mockApiKey, mockApiDomain); - - before(() => { - if (!nock.isActive()) nock.activate(); - nock.disableNetConnect(); - }); - - afterEach(() => { - if (!nock.isDone()) { - throw new Error( - `Not all nock interceptors were used: ${JSON.stringify( - nock.pendingMocks() - )}` - ); - } - - nock.cleanAll(); - }); - - after(() => { - nock.restore(); - }); - - it("List resolves", () => { - nock(`https://${mockApiDomain}`) - .get(`/v1/projects/${mockProjectId}/keys`) - .reply(200, mockProjectKeysList); - - deepgram.keys.list(mockProjectId).then((response) => { - response.should.deep.eq(mockProjectKeysList); - }); - }); - - it("Get resolves", () => { - nock(`https://${mockApiDomain}`) - .get(`/v1/projects/${mockProjectId}/keys/${mockUuid}`) - .reply(200, mockProjectKey); - - deepgram.keys.get(mockProjectId, mockUuid).then((response) => { - response.should.deep.eq(mockProjectKey); - }); - }); - - it("Create resolves", () => { - nock(`https://${mockApiDomain}`) - .post(`/v1/projects/${mockProjectId}/keys`) - .reply(200, mockProjectKey); - - deepgram.keys - .create(mockProjectId, "Test Comment", ["member"]) - .then((response) => { - response.should.deep.eq(mockProjectKey); - }); - }); - - it("Delete resolves", () => { - nock(`https://${mockApiDomain}`) - .delete(`/v1/projects/${mockProjectId}/keys/${mockUuid}`) - .reply(200); - - deepgram.keys - .delete(mockProjectId, mockUuid) - .then(() => { - assert.equal(1, 1); - }) - .catch((err) => { - assert.equal(1, 2); - }); - }); - - it("Custom endpoint: List resolves", () => { - nock(`https://${mockApiDomain}`) - .get(`/test/${mockProjectId}/keys`) - .reply(200, mockProjectKeysList); - - deepgram.keys.list(mockProjectId, "test").then((response) => { - response.should.deep.eq(mockProjectKeysList); - }); - }); - - it("Custom endpoint: Get resolves", () => { - nock(`https://${mockApiDomain}`) - .get(`/test/${mockProjectId}/keys/${mockUuid}`) - .reply(200, mockProjectKey); - - deepgram.keys.get(mockProjectId, mockUuid, "test").then((response) => { - response.should.deep.eq(mockProjectKey); - }); - }); - - it("Custom endpoint: Create resolves", () => { - nock(`https://${mockApiDomain}`) - .post(`/test/${mockProjectId}/keys`) - .reply(200, mockProjectKey); - - deepgram.keys - .create(mockProjectId, "Test Comment", ["member"], {}, "test") - .then((response) => { - response.should.deep.eq(mockProjectKey); - }); - }); - - it("Custom endpoint: Delete resolves", () => { - nock(`https://${mockApiDomain}`) - .delete(`/test/${mockProjectId}/keys/${mockUuid}`) - .reply(200); - - deepgram.keys - .delete(mockProjectId, mockUuid, "test") - .then(() => { - assert.equal(1, 1); - }) - .catch((err) => { - assert.equal(1, 2); - }); - }); - - it("Throws an exception if both expirationDate and timeToLive are provided", () => { - const expectedError = `Please provide expirationDate or timeToLive or neither. Providing both is not allowed.`; - - deepgram.keys - .create(mockProjectId, "test Comment", ["member"], { - expirationDate: new Date(), - timeToLive: 30, - }) - .then(() => { - assert.equal(1, 2); - }) - .catch((err) => { - assert.equal(err, expectedError); - }); - }); - - it("Does not throw if only timeToLive is provided as an option", () => { - nock(`https://${mockApiDomain}`) - .post(`/v1/projects/${mockProjectId}/keys`) - .reply(200, mockProjectKey); - - deepgram.keys - .create(mockProjectId, "test Comment", ["member"], { - timeToLive: 30, - }) - .then((response) => { - response.should.deep.eq(mockProjectKey); - }) - .then(() => { - assert.equal(1, 1); - }) - .catch((err) => { - assert.equal(1, 2); - }); - }); - - it("Does not throw if only expirationDate is provided as an option", () => { - nock(`https://${mockApiDomain}`) - .post(`/v1/projects/${mockProjectId}/keys`) - .reply(200, mockProjectKey); - - deepgram.keys - .create(mockProjectId, "test Comment", ["member"], { - expirationDate: new Date(), - }) - .then((response) => { - response.should.deep.eq(mockProjectKey); - }) - .then(() => { - assert.equal(1, 1); - }) - .catch((err) => { - assert.equal(1, 2); - }); - }); -}); diff --git a/tests/members.test.ts b/tests/members.test.ts deleted file mode 100644 index be2e6211..00000000 --- a/tests/members.test.ts +++ /dev/null @@ -1,80 +0,0 @@ -import chai from "chai"; -import { Deepgram } from "../src"; -import { - mockProjectId, - mockApiDomain, - mockApiKey, - mockMembers, - mockUuid, - mockMessageResponse, -} from "./mockResults"; -import nock from "nock"; - -chai.should(); - -describe("Members tests", () => { - let deepgram: Deepgram = new Deepgram(mockApiKey, mockApiDomain); - - before(() => { - if (!nock.isActive()) nock.activate(); - nock.disableNetConnect(); - }); - - afterEach(() => { - if (!nock.isDone()) { - throw new Error( - `Not all nock interceptors were used: ${JSON.stringify( - nock.pendingMocks() - )}` - ); - } - - nock.cleanAll(); - }); - - after(() => { - nock.restore(); - }); - - it("List members resolves", () => { - nock(`https://${mockApiDomain}`) - .get(`/v1/projects/${mockProjectId}/members`) - .reply(200, mockMembers); - - deepgram.members.listMembers(mockProjectId).then((response) => { - response.should.deep.eq(mockMembers); - }); - }); - - it("Remove member resolves", () => { - nock(`https://${mockApiDomain}`) - .delete(`/v1/projects/${mockProjectId}/members/${mockUuid}`) - .reply(200, mockMessageResponse); - - deepgram.members.removeMember(mockProjectId, mockUuid).then((response) => { - response.should.deep.eq(mockMessageResponse); - }); - }); - - it("Custom endpoint: List members resolves", () => { - nock(`https://${mockApiDomain}`) - .get(`/test/${mockProjectId}/members`) - .reply(200, mockMembers); - - deepgram.members.listMembers(mockProjectId, "test").then((response) => { - response.should.deep.eq(mockMembers); - }); - }); - - it("Custom endpoint: Remove member resolves", () => { - nock(`https://${mockApiDomain}`) - .delete(`/test/${mockProjectId}/members/${mockUuid}`) - .reply(200, mockMessageResponse); - - deepgram.members - .removeMember(mockProjectId, mockUuid, "test") - .then((response) => { - response.should.deep.eq(mockMessageResponse); - }); - }); -}); diff --git a/tests/mockResults.ts b/tests/mockResults.ts deleted file mode 100644 index af852aeb..00000000 --- a/tests/mockResults.ts +++ /dev/null @@ -1,309 +0,0 @@ -import { Readable } from "stream"; -import { - Project, - ProjectPatchRequest, - ProjectResponse, - ReadStreamSource, - ScopeList, - BufferSource, - UrlSource, - UsageField, - UsageFieldOptions, - UsageOptions, - UsageRequest, - UsageRequestList, - UsageRequestListOptions, - UsageResponse, - UsageResponseDetail, - PrerecordedTranscriptionOptions, - PrerecordedTranscriptionResponse, - Metadata, - Channel, - Utterance, - Search, - Hit, - Alternative, - WordBase, -} from "../src/types"; - -export const mockApiKey = "testKey"; - -export const mockApiSecret = "testSecret"; - -export const mockApiDomain = "api.deepgram.test"; - -export const mockUuid = "27e92bb2-8edc-4fdf-9a16-b56c78d39c5b"; - -export const mockProjectId = mockUuid; - -export const mockRequestId = mockUuid; - -export const mockEmail = "email@email.com"; - -export const mockScope: string = "read:mock"; - -export const mockTag = "string"; - -export const mockDate = new Date().toISOString(); - -export const mockInvalidCredentials = { - category: "UNAUTHORIZED", - message: "Authentication failed.", - details: "Check that you are using the correct credentials.", - request_id: mockRequestId, -}; - -export const mockListKeys = { - keys: [ - { - key: "string", - label: "string", - }, - ], -}; - -export const mockMessageResponse = { - message: "string", -}; - -export const mockInvite = { - email: mockEmail, - scope: mockScope, -}; - -export const mockInvites = { - invites: [mockInvite, mockInvite], -}; - -export const mockScopesList: ScopeList = { - scopes: [mockScope, mockScope], -}; - -export const mockTags = [mockTag]; - -export const mockProjectKey = { - member: { - member_id: mockUuid, - email: mockEmail, - first_name: "string", - last_name: "string", - }, - api_key: { - api_key_id: mockUuid, - comment: "string", - scopes: mockScopesList, - tags: mockTags, - created: mockDate, - expiration_date: mockDate, - }, -}; - -export const mockProjectKeysList = { - api_keys: [mockProjectKey], -}; - -export const mockBillingBalance = { - balance_id: mockUuid, - amount: 0, - units: "string", - purchase: "string", -}; - -export const mockBillingRequestList = { - balances: [mockBillingBalance], -}; - -export const mockUsageRequestListOptions: UsageRequestListOptions = { - start: "string", - end: "string", - page: 1, - limit: 10, - status: "succeeded", -}; - -export const mockUsageRequest: UsageRequest = { - request_id: "string", - created: "string", - path: "string", - accessor: "string", - response: mockMessageResponse, -}; - -export const mockUsageRequestList: UsageRequestList = { - page: 1, - limit: 10, - requests: [mockUsageRequest], -}; - -export const mockUsageOptions: UsageOptions = { - start: "string", - end: "string", - accessor: "string", - tag: [mockTag], - method: "sync", - model: "string", - multichannel: true, - interim_results: true, - punctuate: true, - ner: true, - utterances: true, - replace: true, - profanity_filter: true, - keywords: true, - sentiment: true, - diarize: true, - detect_language: true, - search: true, - redact: true, - alternatives: true, - numerals: true, - numbers: true, - translate: true, - detect_entities: true, - detect_topics: true, - summarize: true, - paragraphs: true, - utt_split: true, - analyze_sentiment: true, - smart_format: true, - sentiment_threshold: true, -}; - -export const mockUsageResponseDetail: UsageResponseDetail = { - start: "string", - end: "string", - hours: 1, - requests: 1, -}; - -export const mockUsage: UsageResponse = { - start: "string", - end: "string", - resolution: { - units: "string", - amount: 1, - }, - results: [mockUsageResponseDetail], -}; - -export const mockUsageField: UsageField = { - tags: [mockTag], - models: ["string"], - processing_methods: ["string"], - languages: ["string"], - features: ["string"], -}; - -export const mockUsageFieldOptions: UsageFieldOptions = { - start: "string", - end: "string", -}; - -export const mockMember = { - member_id: mockUuid, - scopes: [mockScope], - email: mockEmail, - first_name: "string", - last_name: "string", -}; - -export const mockMembers = { - members: [mockMember], -}; - -export const mockProject: Project = { - project_id: mockUuid, - name: "string", - company: "string", -}; - -export const mockProjects: ProjectResponse = { - projects: [mockProject], -}; - -export const mockProjectUpdate: ProjectPatchRequest = { - name: "string", - company: "string", -}; - -export const mockReadable = new Readable(); -mockReadable._read = () => {}; -mockReadable.push("string"); -mockReadable.push(null); - -export const mockReadStreamSource: ReadStreamSource = { - stream: mockReadable, - mimetype: "video/mpeg", -}; - -export const mockUrlSource: UrlSource = { - url: "string", -}; - -export const mockBuffer: Buffer = Buffer.from("string"); - -export const mockBufferSource: BufferSource = { - buffer: mockBuffer, - mimetype: "video/mpeg", -}; - -export const mockPrerecordedOptions: PrerecordedTranscriptionOptions = { - model: "nova", - punctuate: true, -}; - -export const mockMetaData: Metadata = { - request_id: "string", - transaction_key: "string", - sha256: "string", - created: "string", - duration: 1, - channels: 1, - model_info: { - "b05e2505-2e49-4644-8e58-7878767ca60b": { - name: "fake", - version: "version", - arch: "arch", - }, - }, - models: ["string", "another string", "yet another string"], -}; - -export const mockHit: Hit = { - confidence: 1, - start: 1, - end: 1, - snippet: "string", -}; - -export const mockSearch: Search = { - query: "string", - hits: [mockHit], -}; - -export const mockWordBase: WordBase = { - word: "string", - start: 1, - end: 1, - confidence: 1, -}; - -export const mockAlternative: Alternative = { - transcript: "string", - confidence: 1, - words: [mockWordBase], -}; - -export const mockChannel: Channel = { - search: [mockSearch], - alternatives: [mockAlternative], - detected_language: "string", -}; - -export const mockPrerecordedResponse = { - request_id: mockUuid, - metadata: mockMetaData, - results: { - channels: [mockChannel], - }, -}; diff --git a/tests/projects.test.ts b/tests/projects.test.ts deleted file mode 100644 index 0cf87631..00000000 --- a/tests/projects.test.ts +++ /dev/null @@ -1,142 +0,0 @@ -import chai, { assert } from "chai"; -import { Deepgram } from "../src"; -import { - mockApiDomain, - mockApiKey, - mockMessageResponse, - mockProject, - mockProjectId, - mockProjectUpdate, - mockProjects, - mockUuid, -} from "./mockResults"; -import nock from "nock"; - -chai.should(); - -describe("Projects tests", () => { - let deepgram: Deepgram = new Deepgram(mockApiKey, mockApiDomain); - - before(() => { - if (!nock.isActive()) nock.activate(); - nock.disableNetConnect(); - }); - - afterEach(() => { - if (!nock.isDone()) { - throw new Error( - `Not all nock interceptors were used: ${JSON.stringify( - nock.pendingMocks() - )}` - ); - } - - nock.cleanAll(); - }); - - after(() => { - nock.restore(); - }); - - it("List projects resolves", () => { - nock(`https://${mockApiDomain}`) - .get(`/v1/projects`) - .reply(200, mockProjects); - - deepgram.projects.list().then((response) => { - response.should.deep.eq(mockProjects); - }); - }); - - it("Get project resolves", () => { - nock(`https://${mockApiDomain}`) - .get(`/v1/projects/${mockUuid}`) - .reply(200, mockProject); - - deepgram.projects.get(mockUuid).then((response) => { - response.should.deep.eq(mockProject); - }); - }); - - it("Update project w/ object resolves", () => { - nock(`https://${mockApiDomain}`) - .patch(`/v1/projects/${mockUuid}`) - .reply(200, mockMessageResponse); - - deepgram.projects - .update(mockProject, mockProjectUpdate) - .then((response) => { - response.should.deep.eq(mockMessageResponse); - }); - }); - - it("Update project w/ ID resolves", () => { - nock(`https://${mockApiDomain}`) - .patch(`/v1/projects/${mockUuid}`) - .reply(200, mockMessageResponse); - - deepgram.projects.update(mockUuid, mockProjectUpdate).then((response) => { - response.should.deep.eq(mockMessageResponse); - }); - }); - - it("Delete project resolves", () => { - nock(`https://${mockApiDomain}`) - .delete(`/v1/projects/${mockUuid}`) - .reply(200, mockMessageResponse); - - deepgram.projects - .delete(mockProjectId) - .then(() => { - assert.equal(1, 1); - }) - .catch((err) => { - assert.equal(1, 2); - }); - }); - - it("Custom endpoint: List projects resolves", () => { - nock(`https://${mockApiDomain}`).get(`/test`).reply(200, mockProjects); - - deepgram.projects.list("test").then((response) => { - response.should.deep.eq(mockProjects); - }); - }); - - it("Custom endpoint: Get project resolves", () => { - nock(`https://${mockApiDomain}`) - .get(`/test/${mockUuid}`) - .reply(200, mockProject); - - deepgram.projects.get(mockUuid, "test").then((response) => { - response.should.deep.eq(mockProject); - }); - }); - - it("Custom endpoint: Update project resolves", () => { - nock(`https://${mockApiDomain}`) - .patch(`/test/${mockUuid}`) - .reply(200, mockMessageResponse); - - deepgram.projects - .update(mockProject, mockProjectUpdate, "test") - .then((response) => { - response.should.deep.eq(mockMessageResponse); - }); - }); - - it("Custom endpoint: Delete project resolves", () => { - nock(`https://${mockApiDomain}`) - .delete(`/test/${mockUuid}`) - .reply(200, mockMessageResponse); - - deepgram.projects - .delete(mockProjectId, "test") - .then(() => { - assert.equal(1, 1); - }) - .catch((err) => { - assert.equal(1, 2); - }); - }); -}); diff --git a/tests/scopes.test.ts b/tests/scopes.test.ts deleted file mode 100644 index 9cf580b0..00000000 --- a/tests/scopes.test.ts +++ /dev/null @@ -1,80 +0,0 @@ -import chai, { assert } from "chai"; -import { Deepgram } from "../src"; -import { - mockApiDomain, - mockApiKey, - mockMessageResponse, - mockScope, - mockScopesList, - mockUuid, -} from "./mockResults"; -import nock from "nock"; - -chai.should(); - -describe("Scopes tests", () => { - let deepgram: Deepgram = new Deepgram(mockApiKey, mockApiDomain); - - before(() => { - if (!nock.isActive()) nock.activate(); - nock.disableNetConnect(); - }); - - afterEach(() => { - if (!nock.isDone()) { - throw new Error( - `Not all nock interceptors were used: ${JSON.stringify( - nock.pendingMocks() - )}` - ); - } - - nock.cleanAll(); - }); - - after(() => { - nock.restore(); - }); - - it("Get scopes resolves", () => { - nock(`https://${mockApiDomain}`) - .get(`/v1/projects/${mockUuid}/members/${mockUuid}/scopes`) - .reply(200, mockScopesList); - - deepgram.scopes.get(mockUuid, mockUuid).then((response) => { - response.should.deep.eq(mockScopesList); - }); - }); - - it("Update scopes resolves", () => { - nock(`https://${mockApiDomain}`) - .put(`/v1/projects/${mockUuid}/members/${mockUuid}/scopes`) - .reply(200, mockMessageResponse); - - deepgram.scopes.update(mockUuid, mockUuid, mockScope).then((response) => { - response.should.deep.eq(mockMessageResponse); - }); - }); - - it("Custom endpoint: Get scopes resolves", () => { - nock(`https://${mockApiDomain}`) - .get(`/test/${mockUuid}/members/${mockUuid}/scopes`) - .reply(200, mockScopesList); - - deepgram.scopes.get(mockUuid, mockUuid, "test").then((response) => { - response.should.deep.eq(mockScopesList); - }); - }); - - it("Custom endpoint: Update scopes resolves", () => { - nock(`https://${mockApiDomain}`) - .put(`/test/${mockUuid}/members/${mockUuid}/scopes`) - .reply(200, mockMessageResponse); - - deepgram.scopes - .update(mockUuid, mockUuid, mockScope, "test") - .then((response) => { - response.should.deep.eq(mockMessageResponse); - }); - }); -}); diff --git a/tests/transcription/preRecorded.test.ts b/tests/transcription/preRecorded.test.ts deleted file mode 100644 index 53b4da7e..00000000 --- a/tests/transcription/preRecorded.test.ts +++ /dev/null @@ -1,156 +0,0 @@ -import chai from "chai"; -import { Deepgram } from "../../src"; -import querystring from "querystring"; -import { - mockApiDomain, - mockApiKey, - mockBuffer, - mockBufferSource, - mockPrerecordedOptions, - mockPrerecordedResponse, - mockReadStreamSource, - mockReadable, - mockUrlSource, -} from "../mockResults"; -import nock from "nock"; - -chai.should(); - -describe("Pre-recorded transcription tests", () => { - let deepgram: Deepgram = new Deepgram(mockApiKey, mockApiDomain); - - before(() => { - if (!nock.isActive()) nock.activate(); - nock.disableNetConnect(); - }); - - afterEach(() => { - if (!nock.isDone()) { - throw new Error( - `Not all nock interceptors were used: ${JSON.stringify( - nock.pendingMocks() - )}` - ); - } - - nock.cleanAll(); - }); - - after(() => { - nock.restore(); - }); - - it("Transcribe URL source", () => { - const mockOptions = { ...{}, ...mockPrerecordedOptions }; - - nock(`https://${mockApiDomain}`) - .post(`/v1/listen?${querystring.stringify(mockOptions)}`) - .reply(200, mockPrerecordedResponse); - - deepgram.transcription - .preRecorded(mockUrlSource, mockPrerecordedOptions) - .then((response) => { - response.should.deep.eq(mockPrerecordedResponse); - }); - }); - - it("Transcribe read stream", () => { - const mockOptions = { ...{}, ...mockPrerecordedOptions }; - - nock(`https://${mockApiDomain}`) - .post(`/v1/listen?${querystring.stringify(mockOptions)}`) - .reply(200, mockPrerecordedResponse); - - deepgram.transcription - .preRecorded(mockReadStreamSource, mockPrerecordedOptions) - .then((response) => { - response.should.deep.eq(mockPrerecordedResponse); - }); - }); - - it("Transcribe buffer", () => { - const mockOptions = { ...{}, ...mockPrerecordedOptions }; - - nock(`https://${mockApiDomain}`) - .post(`/v1/listen?${querystring.stringify(mockOptions)}`) - .reply(200, mockPrerecordedResponse); - - deepgram.transcription - .preRecorded(mockBufferSource, mockPrerecordedOptions) - .then((response) => { - response.should.deep.eq(mockPrerecordedResponse); - }); - }); - - it("Transcribe buffer errors without mimetype", () => { - deepgram.transcription - .preRecorded({ buffer: mockBuffer, mimetype: "" }, mockPrerecordedOptions) - .catch((e) => { - e.message.should.eq( - "DG: Mimetype must be provided if the source is a Buffer or a Readable" - ); - }); - }); - - it("Transcribe read stream errors without mimetype", () => { - deepgram.transcription - .preRecorded( - { stream: mockReadable, mimetype: "" }, - mockPrerecordedOptions - ) - .catch((e) => { - e.message.should.eq( - "DG: Mimetype must be provided if the source is a Buffer or a Readable" - ); - }); - }); - - it("Transcribe empty read stream errors", () => { - deepgram.transcription - .preRecorded( - // @ts-ignore - { stream: null, mimetype: "video/mpeg" }, - mockPrerecordedOptions - ) - .catch((e) => { - e.message.should.eq("Unknown TranscriptionSource type"); - }); - }); - - it("Transcribe unknown source type errors", () => { - deepgram.transcription - // @ts-ignore - .preRecorded({ blah: "test" }, mockPrerecordedOptions) - .catch((e) => { - e.message.should.eq("Unknown TranscriptionSource type"); - }); - }); - - it("Custom endpoint: Transcribe URL source", () => { - const mockOptions = { ...{}, ...mockPrerecordedOptions }; - - nock(`https://${mockApiDomain}`) - .post(`/test?${querystring.stringify(mockOptions)}`) - .reply(200, mockPrerecordedResponse); - - deepgram.transcription - .preRecorded(mockUrlSource, mockPrerecordedOptions, "test") - .then((response) => { - response.should.deep.eq(mockPrerecordedResponse); - }); - }); - - it("Transcribe URL source with arbitrary options", () => { - const mockOptions = { ...{ blah: "test" }, ...mockPrerecordedOptions }; - - nock(`https://${mockApiDomain}`) - .post(`/v1/listen?${querystring.stringify(mockOptions)}`) - .reply(200, mockPrerecordedResponse); - - deepgram.transcription - .preRecorded(mockUrlSource, mockOptions) - .then((response) => { - response.should.deep.eq(mockPrerecordedResponse); - }); - }); -}); diff --git a/tests/usage.test.ts b/tests/usage.test.ts deleted file mode 100644 index b9b1b370..00000000 --- a/tests/usage.test.ts +++ /dev/null @@ -1,204 +0,0 @@ -import chai, { assert } from "chai"; -import { Deepgram } from "../src"; -import querystring from "querystring"; -import { - mockApiDomain, - mockApiKey, - mockMessageResponse, - mockUsage, - mockUsageField, - mockUsageFieldOptions, - mockUsageOptions, - mockUsageRequest, - mockUsageRequestList, - mockUsageRequestListOptions, - mockUuid, -} from "./mockResults"; -import nock from "nock"; - -chai.should(); - -describe("Usage tests", () => { - let deepgram: Deepgram = new Deepgram(mockApiKey, mockApiDomain); - - before(() => { - if (!nock.isActive()) nock.activate(); - nock.disableNetConnect(); - }); - - afterEach(() => { - if (!nock.isDone()) { - throw new Error( - `Not all nock interceptors were used: ${JSON.stringify( - nock.pendingMocks() - )}` - ); - } - - nock.cleanAll(); - }); - - after(() => { - nock.restore(); - }); - - it("List requests resolves", () => { - const mockOptions = { ...{}, ...{} }; - - nock(`https://${mockApiDomain}`) - .get( - `/v1/projects/${mockUuid}/requests?${querystring.stringify( - mockOptions - )}` - ) - .reply(200, mockUsageRequestList); - - deepgram.usage.listRequests(mockUuid).then((response) => { - response.should.deep.eq(mockUsageRequestList); - }); - }); - - it("List requests w/options resolves", () => { - const mockOptions = { ...{}, ...mockUsageRequestListOptions }; - - nock(`https://${mockApiDomain}`) - .get( - `/v1/projects/${mockUuid}/requests?${querystring.stringify( - mockOptions - )}` - ) - .reply(200, mockUsageRequestList); - - deepgram.usage - .listRequests(mockUuid, mockUsageRequestListOptions) - .then((response) => { - response.should.deep.eq(mockUsageRequestList); - }); - }); - - it("Get request resolves", () => { - nock(`https://${mockApiDomain}`) - .get(`/v1/projects/${mockUuid}/requests/${mockUuid}`) - .reply(200, mockUsageRequest); - - deepgram.usage.getRequest(mockUuid, mockUuid).then((response) => { - response.should.deep.eq(mockUsageRequest); - }); - }); - - it("Get usage resolves", () => { - const mockOptions = { ...{}, ...{} }; - - nock(`https://${mockApiDomain}`) - .get( - `/v1/projects/${mockUuid}/usage?${querystring.stringify(mockOptions)}` - ) - .reply(200, mockUsage); - - deepgram.usage.getUsage(mockUuid).then((response) => { - response.should.deep.eq(mockUsage); - }); - }); - - it("Get usage resolves w/ options resolves", () => { - const mockOptions = { ...{}, ...mockUsageOptions }; - - nock(`https://${mockApiDomain}`) - .get( - `/v1/projects/${mockUuid}/usage?${querystring.stringify(mockOptions)}` - ) - .reply(200, mockUsage); - - deepgram.usage.getUsage(mockUuid, mockUsageOptions).then((response) => { - response.should.deep.eq(mockUsage); - }); - }); - - it("Get fields resolves", () => { - const mockOptions = { ...{}, ...{} }; - - nock(`https://${mockApiDomain}`) - .get( - `/v1/projects/${mockUuid}/usage/fields?${querystring.stringify( - mockOptions - )}` - ) - .reply(200, mockUsageField); - - deepgram.usage.getFields(mockUuid).then((response) => { - response.should.deep.eq(mockUsageField); - }); - }); - - it("Get fields w/ options resolves", () => { - const mockOptions = { ...{}, ...mockUsageFieldOptions }; - - nock(`https://${mockApiDomain}`) - .get( - `/v1/projects/${mockUuid}/usage/fields?${querystring.stringify( - mockOptions - )}` - ) - .reply(200, mockUsageField); - - deepgram.usage - .getFields(mockUuid, mockUsageFieldOptions) - .then((response) => { - response.should.deep.eq(mockUsageField); - }); - }); - - it("Custom endpoint: List requests w/options resolves", () => { - const mockOptions = { ...{}, ...mockUsageRequestListOptions }; - - nock(`https://${mockApiDomain}`) - .get(`/test/${mockUuid}/requests?${querystring.stringify(mockOptions)}`) - .reply(200, mockUsageRequestList); - - deepgram.usage - .listRequests(mockUuid, mockUsageRequestListOptions, "test") - .then((response) => { - response.should.deep.eq(mockUsageRequestList); - }); - }); - - it("Custom endpoint: Get request resolves", () => { - nock(`https://${mockApiDomain}`) - .get(`/test/${mockUuid}/requests/${mockUuid}`) - .reply(200, mockUsageRequest); - - deepgram.usage.getRequest(mockUuid, mockUuid, "test").then((response) => { - response.should.deep.eq(mockUsageRequest); - }); - }); - - it("Custom endpoint: Get usage w/ options resolves", () => { - const mockOptions = { ...{}, ...mockUsageOptions }; - - nock(`https://${mockApiDomain}`) - .get(`/test/${mockUuid}/usage?${querystring.stringify(mockOptions)}`) - .reply(200, mockUsage); - - deepgram.usage - .getUsage(mockUuid, mockUsageOptions, "test") - .then((response) => { - response.should.deep.eq(mockUsage); - }); - }); - - it("Custom endpoint: Get fields w/ options resolves", () => { - const mockOptions = { ...{}, ...mockUsageFieldOptions }; - - nock(`https://${mockApiDomain}`) - .get( - `/test/${mockUuid}/usage/fields?${querystring.stringify(mockOptions)}` - ) - .reply(200, mockUsageField); - - deepgram.usage - .getFields(mockUuid, mockUsageFieldOptions, "test") - .then((response) => { - response.should.deep.eq(mockUsageField); - }); - }); -}); diff --git a/tsconfig.json b/tsconfig.json index 5faae1e0..0d3739dc 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,21 +1,22 @@ { + "include": ["src"], + "exclude": ["node_modules/**/*.ts"], "compilerOptions": { - "target": "ES5" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */, - "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */, - "outDir": "./bundle" /* Redirect output structure to the directory. */, "declaration": true, - "downlevelIteration": true, + "declarationMap": true, + "module": "CommonJS", + "outDir": "dist/main", + "rootDir": "src", "sourceMap": true, - "rootDirs": [ - "./src", - "./tests" - ] /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */, - "strict": true /* Enable all strict type-checking options. */, - "noImplicitAny": true /* Raise error on expressions and declarations with an implied 'any' type. */, - "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, - "moduleResolution": "node" - }, - "exclude": ["node_modules", "**/*.test.ts"], - "include": ["src"], - "mode": "production" + "target": "ES2015", + + "strict": true, + + "esModuleInterop": true, + "moduleResolution": "Node", + + "forceConsistentCasingInFileNames": true, + "stripInternal": true, + "allowSyntheticDefaultImports": true + } } diff --git a/tsconfig.module.json b/tsconfig.module.json new file mode 100644 index 00000000..8726ca43 --- /dev/null +++ b/tsconfig.module.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig", + "compilerOptions": { + "module": "ES2020", + "outDir": "dist/module" + } +} diff --git a/webpack.config.js b/webpack.config.js index 7b0cc51f..04a8b84c 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,19 +1,27 @@ const path = require("path"); - - module.exports = { - name: "server", - target: "node", - entry: "./bundle/index.js", + entry: "./src/index.ts", output: { - path: path.resolve(__dirname, "dist"), - filename: "index.js", + path: path.resolve(__dirname, "dist/umd"), + filename: "deepgram.js", library: { - name: "dg-node-sdk", type: "umd", + name: "deepgram", }, }, + module: { + rules: [ + { + test: /\.ts$/, + loader: "ts-loader", + options: { + transpileOnly: true, + }, + }, + ], + }, + resolve: { + extensions: [".ts", ".js", ".json"], + }, }; - -