From 670c2ea8aadb77ba40430f2233cf353aa0498ff7 Mon Sep 17 00:00:00 2001 From: Shahar Cohen Date: Fri, 5 Jul 2024 18:49:53 -0500 Subject: [PATCH] update --- .eslintrc.json | 38 + .github/PROTECTED_BRANCHES | 1 + .github/workflows/build-checks.yml | 33 + .github/workflows/pr-checks.yml | 28 + .github/workflows/release-checks.yml | 31 + .gitignore | 134 + .manifest.json | 173 + .prettierrc.json | 26 + LICENSE | 19 + README.md | 474 ++ examples/.env.example | 2 + examples/README.md | 27 + examples/package.json | 18 + examples/src/index.ts | 5 + examples/tsconfig.json | 103 + install.sh | 4 + jest.config.json | 4 + package-lock.json | 6775 +++++++++++++++++ package.json | 57 + src/BaseService.ts | 97 + src/hooks/Hook.ts | 30 + src/http/Environment.ts | 5 + src/http/HTTPClient.ts | 14 + src/http/HTTPLibrary.ts | 176 + src/http/QuerySerializer.ts | 44 + src/http/errors/BadGateway.ts | 13 + src/http/errors/BadRequest.ts | 13 + src/http/errors/Conflict.ts | 13 + src/http/errors/ExpectationFailed.ts | 13 + src/http/errors/FailedDependency.ts | 13 + src/http/errors/Forbidden.ts | 13 + src/http/errors/GatewayTimeout.ts | 13 + src/http/errors/Gone.ts | 13 + src/http/errors/HttpVersionNotSupported.ts | 13 + src/http/errors/InternalServerError.ts | 13 + src/http/errors/LengthRequired.ts | 13 + src/http/errors/Locked.ts | 13 + src/http/errors/LoopDetected.ts | 13 + src/http/errors/MethodNotAllowed.ts | 16 + src/http/errors/MisdirectedRequest.ts | 13 + .../errors/NetworkAuthenticationRequired.ts | 13 + src/http/errors/NotAcceptable.ts | 13 + src/http/errors/NotExtended.ts | 13 + src/http/errors/NotFound.ts | 13 + src/http/errors/NotImplemented.ts | 13 + src/http/errors/PayloadTooLarge.ts | 16 + src/http/errors/PaymentRequired.ts | 13 + src/http/errors/PreconditionFailed.ts | 13 + src/http/errors/PreconditionRequired.ts | 13 + .../errors/ProxyAuthenticationRequired.ts | 16 + src/http/errors/RangeNotSatisfiable.ts | 13 + .../errors/RequestHeaderFieldsTooLarge.ts | 13 + src/http/errors/RequestTimeout.ts | 13 + src/http/errors/ServiceUnavailable.ts | 16 + src/http/errors/TooEarly.ts | 13 + src/http/errors/TooManyRequests.ts | 16 + src/http/errors/Unauthorized.ts | 16 + src/http/errors/UnavailableForLegalReasons.ts | 13 + src/http/errors/UnprocessableEntity.ts | 13 + src/http/errors/UnsufficientStorage.ts | 13 + src/http/errors/UnsupportedMediaType.ts | 13 + src/http/errors/UpgradeRequired.ts | 13 + src/http/errors/UriTooLong.ts | 13 + src/http/errors/VariantAlsoNegotiates.ts | 13 + src/http/errors/base.ts | 54 + src/http/errors/index.ts | 85 + src/http/httpExceptions.ts | 140 + src/index.ts | 35 + src/models.ts | 20 + src/services/README.md | 428 ++ .../v1V7OlderVersions/V1V7OlderVersions.ts | 291 + src/services/v1V7OlderVersions/index.ts | 10 + .../models/AssessRelevance1Request.ts | 24 + .../models/AssessRelevance1Response.ts | 104 + .../models/ScoreAPhonemeList1Request.ts | 27 + .../models/ScoreAPhonemeList1Response.ts | 22 + .../models/ScoreVocabularyGrammarRequest.ts | 35 + .../models/ScoreVocabularyGrammarResponse.ts | 98 + .../models/ValidateText1Request.ts | 3 + .../models/ValidateText1Response.ts | 7 + src/services/v9Latest/V9Latest.ts | 346 + src/services/v9Latest/index.ts | 12 + ...marVocabCoherenceFeedbackMetricsRequest.ts | 16 + ...arVocabCoherenceFeedbackMetricsResponse.ts | 300 + .../models/PteAnswerQuestionRequest.ts | 20 + .../models/PteAnswerQuestionResponse.ts | 14 + .../models/ScoreAPhonemeListRequest.ts | 16 + .../models/ScoreAPhonemeListResponse.ts | 22 + .../models/ScoreFluencySpanishRequest.ts | 24 + .../models/ScoreFluencySpanishResponse.ts | 98 + .../v9Latest/models/ValidateTextRequest.ts | 3 + .../v9Latest/models/ValidateTextResponse.ts | 6 + .../V1V7OlderVersions.test.ts | 72 + test/services/v9Latest/V9Latest.test.ts | 86 + tsconfig.eslint.json | 4 + tsconfig.json | 23 + 96 files changed, 11288 insertions(+) create mode 100644 .eslintrc.json create mode 100644 .github/PROTECTED_BRANCHES create mode 100644 .github/workflows/build-checks.yml create mode 100644 .github/workflows/pr-checks.yml create mode 100644 .github/workflows/release-checks.yml create mode 100644 .gitignore create mode 100644 .manifest.json create mode 100644 .prettierrc.json create mode 100644 LICENSE create mode 100644 README.md create mode 100644 examples/.env.example create mode 100644 examples/README.md create mode 100644 examples/package.json create mode 100644 examples/src/index.ts create mode 100644 examples/tsconfig.json create mode 100644 install.sh create mode 100644 jest.config.json create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 src/BaseService.ts create mode 100644 src/hooks/Hook.ts create mode 100644 src/http/Environment.ts create mode 100644 src/http/HTTPClient.ts create mode 100644 src/http/HTTPLibrary.ts create mode 100644 src/http/QuerySerializer.ts create mode 100644 src/http/errors/BadGateway.ts create mode 100644 src/http/errors/BadRequest.ts create mode 100644 src/http/errors/Conflict.ts create mode 100644 src/http/errors/ExpectationFailed.ts create mode 100644 src/http/errors/FailedDependency.ts create mode 100644 src/http/errors/Forbidden.ts create mode 100644 src/http/errors/GatewayTimeout.ts create mode 100644 src/http/errors/Gone.ts create mode 100644 src/http/errors/HttpVersionNotSupported.ts create mode 100644 src/http/errors/InternalServerError.ts create mode 100644 src/http/errors/LengthRequired.ts create mode 100644 src/http/errors/Locked.ts create mode 100644 src/http/errors/LoopDetected.ts create mode 100644 src/http/errors/MethodNotAllowed.ts create mode 100644 src/http/errors/MisdirectedRequest.ts create mode 100644 src/http/errors/NetworkAuthenticationRequired.ts create mode 100644 src/http/errors/NotAcceptable.ts create mode 100644 src/http/errors/NotExtended.ts create mode 100644 src/http/errors/NotFound.ts create mode 100644 src/http/errors/NotImplemented.ts create mode 100644 src/http/errors/PayloadTooLarge.ts create mode 100644 src/http/errors/PaymentRequired.ts create mode 100644 src/http/errors/PreconditionFailed.ts create mode 100644 src/http/errors/PreconditionRequired.ts create mode 100644 src/http/errors/ProxyAuthenticationRequired.ts create mode 100644 src/http/errors/RangeNotSatisfiable.ts create mode 100644 src/http/errors/RequestHeaderFieldsTooLarge.ts create mode 100644 src/http/errors/RequestTimeout.ts create mode 100644 src/http/errors/ServiceUnavailable.ts create mode 100644 src/http/errors/TooEarly.ts create mode 100644 src/http/errors/TooManyRequests.ts create mode 100644 src/http/errors/Unauthorized.ts create mode 100644 src/http/errors/UnavailableForLegalReasons.ts create mode 100644 src/http/errors/UnprocessableEntity.ts create mode 100644 src/http/errors/UnsufficientStorage.ts create mode 100644 src/http/errors/UnsupportedMediaType.ts create mode 100644 src/http/errors/UpgradeRequired.ts create mode 100644 src/http/errors/UriTooLong.ts create mode 100644 src/http/errors/VariantAlsoNegotiates.ts create mode 100644 src/http/errors/base.ts create mode 100644 src/http/errors/index.ts create mode 100644 src/http/httpExceptions.ts create mode 100644 src/index.ts create mode 100644 src/models.ts create mode 100644 src/services/README.md create mode 100644 src/services/v1V7OlderVersions/V1V7OlderVersions.ts create mode 100644 src/services/v1V7OlderVersions/index.ts create mode 100644 src/services/v1V7OlderVersions/models/AssessRelevance1Request.ts create mode 100644 src/services/v1V7OlderVersions/models/AssessRelevance1Response.ts create mode 100644 src/services/v1V7OlderVersions/models/ScoreAPhonemeList1Request.ts create mode 100644 src/services/v1V7OlderVersions/models/ScoreAPhonemeList1Response.ts create mode 100644 src/services/v1V7OlderVersions/models/ScoreVocabularyGrammarRequest.ts create mode 100644 src/services/v1V7OlderVersions/models/ScoreVocabularyGrammarResponse.ts create mode 100644 src/services/v1V7OlderVersions/models/ValidateText1Request.ts create mode 100644 src/services/v1V7OlderVersions/models/ValidateText1Response.ts create mode 100644 src/services/v9Latest/V9Latest.ts create mode 100644 src/services/v9Latest/index.ts create mode 100644 src/services/v9Latest/models/GetGrammarVocabCoherenceFeedbackMetricsRequest.ts create mode 100644 src/services/v9Latest/models/GetGrammarVocabCoherenceFeedbackMetricsResponse.ts create mode 100644 src/services/v9Latest/models/PteAnswerQuestionRequest.ts create mode 100644 src/services/v9Latest/models/PteAnswerQuestionResponse.ts create mode 100644 src/services/v9Latest/models/ScoreAPhonemeListRequest.ts create mode 100644 src/services/v9Latest/models/ScoreAPhonemeListResponse.ts create mode 100644 src/services/v9Latest/models/ScoreFluencySpanishRequest.ts create mode 100644 src/services/v9Latest/models/ScoreFluencySpanishResponse.ts create mode 100644 src/services/v9Latest/models/ValidateTextRequest.ts create mode 100644 src/services/v9Latest/models/ValidateTextResponse.ts create mode 100644 test/services/v1V7OlderVersions/V1V7OlderVersions.test.ts create mode 100644 test/services/v9Latest/V9Latest.test.ts create mode 100644 tsconfig.eslint.json create mode 100644 tsconfig.json diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..5820122 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,38 @@ +{ + "env": { + "browser": true, + "commonjs": true, + "es2021": true + }, + "extends": ["airbnb-base", "airbnb-typescript/base", "prettier"], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": "latest", + "sourceType": "module", + "project": "./tsconfig.eslint.json" + }, + "plugins": ["@typescript-eslint", "prettier"], + "rules": { + "no-console": "off", + "max-len": [ + "error", + { + "code": 150, + "ignoreComments": true, + "ignoreRegExpLiterals": true, + "ignoreStrings": true, + "ignoreTemplateLiterals": true + } + ], + "prettier/prettier": "error", + "@typescript-eslint/dot-notation": "off", + "import/prefer-default-export": "off" + }, + "settings": { + "import/resolver": { + "node": { + "extensions": [".js", ".jsx", ".ts", ".tsx"] + } + } + } +} diff --git a/.github/PROTECTED_BRANCHES b/.github/PROTECTED_BRANCHES new file mode 100644 index 0000000..ba2906d --- /dev/null +++ b/.github/PROTECTED_BRANCHES @@ -0,0 +1 @@ +main diff --git a/.github/workflows/build-checks.yml b/.github/workflows/build-checks.yml new file mode 100644 index 0000000..984dd02 --- /dev/null +++ b/.github/workflows/build-checks.yml @@ -0,0 +1,33 @@ +name: Release Checks + +on: + push: + branches: + - main + +jobs: + github-publish: + runs-on: ubuntu-latest + + steps: + - name: Checkout Repository & Submo + uses: actions/checkout@v2 + with: + submodules: recursive + + - name: Setup Node + uses: actions/setup-node@v2 + with: + node-version: '16' + cache: 'npm' + cache-dependency-path: '**/package-lock.json' + + - name: Install dependencies + run: npm install + + # TODO: Finish fixing eslint issues + # - name: Run ESLint check + # run: npm run lint:ci + + - name: Run Test & Coverage check + run: npm run test diff --git a/.github/workflows/pr-checks.yml b/.github/workflows/pr-checks.yml new file mode 100644 index 0000000..7aaa365 --- /dev/null +++ b/.github/workflows/pr-checks.yml @@ -0,0 +1,28 @@ +name: Pull Request Checks + +on: [pull_request] + +jobs: + linting-and-testing: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup Node + uses: actions/setup-node@v2 + with: + node-version: '16' + cache: 'npm' + cache-dependency-path: '**/package-lock.json' + + - name: Install dependencies + run: npm install + + # TODO: Finish fixing eslint issues + # - name: Run ESLint check + # run: npm run lint:ci + + - name: Run Test & Coverage check + run: npm run test diff --git a/.github/workflows/release-checks.yml b/.github/workflows/release-checks.yml new file mode 100644 index 0000000..81b9e24 --- /dev/null +++ b/.github/workflows/release-checks.yml @@ -0,0 +1,31 @@ +name: Release Checks + +on: + release: + types: [created] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: '16' + cache: 'npm' + - run: npm ci + - run: npm run test + + npm-publish: + needs: build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: '16' + registry-url: https://registry.npmjs.org/ + - run: npm ci + - run: npm publish + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f517c79 --- /dev/null +++ b/.gitignore @@ -0,0 +1,134 @@ +# This file was generated by liblab | https://liblab.com/ + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# 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/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# 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 variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# 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 + +# vuepress v2.x temp and cache directory +.temp +.cache + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +.parcel-cache diff --git a/.manifest.json b/.manifest.json new file mode 100644 index 0000000..d73ccbd --- /dev/null +++ b/.manifest.json @@ -0,0 +1,173 @@ +{ + "liblabVersion": "1.1.48", + "date": "2024-07-05T23:48:19.695Z", + "config": { + "authentication": {}, + "deliveryType": "zip", + "languages": ["typescript"], + "inputFileName": "/tmp/resources/spec/open-api-spec.json", + "environmentVariables": [], + "fileOutput": "/tmp", + "tempDir": "/tmp/liblab-codegen-1.1.48-KNhics", + "inferServiceNames": false, + "httpLibrary": { + "name": "axios", + "packages": { + "axios": "^1.0.0" + }, + "languages": ["javascript", "typescript"] + }, + "auth": [], + "privateRepo": false, + "githubRef": "", + "sdkName": "Speechaceapi", + "sdkVersion": "1.0.0", + "retry": { + "enabled": true, + "maxAttempts": 3, + "retryDelay": 150 + }, + "customQueries": { + "paths": [], + "rawQueries": [], + "queriesData": [] + }, + "generateEnv": true, + "npmName": "", + "npmOrg": "", + "injectedModels": [], + "includeWatermark": true, + "license": { + "type": "MIT", + "name": "MIT", + "url": "https://opensource.org/licenses/MIT" + }, + "ignoreFiles": [".devcontainer"], + "alwaysInitializeOptionals": false, + "environments": [], + "reservedKeywords": {}, + "deliveryMethods": [], + "bundle": false, + "exportClassDefault": false, + "responseHeaders": false, + "renameIllegalModelProperties": false, + "devContainer": false, + "strictVersion": false, + "authors": [], + "classifiers": [], + "projectUrls": {}, + "homepage": "", + "enforceRequestValidation": false, + "denoteCommon": false, + "includeOptionalSnippetParameters": true, + "githubRepoName": "", + "publishing": { + "githubOrg": "" + }, + "hooks": { + "enabled": false, + "sourceDir": "" + }, + "spec": { + "type": "postman", + "version": "2.1" + }, + "usesFormData": true + }, + "files": [ + ".eslintrc.json", + ".github/PROTECTED_BRANCHES", + ".github/workflows/build-checks.yml", + ".github/workflows/pr-checks.yml", + ".github/workflows/release-checks.yml", + ".gitignore", + ".prettierrc.json", + "LICENSE", + "README.md", + "examples/.env.example", + "examples/README.md", + "examples/package.json", + "examples/src/index.ts", + "examples/tsconfig.json", + "install.sh", + "jest.config.json", + "package.json", + "src/BaseService.ts", + "src/hooks/Hook.ts", + "src/http/Environment.ts", + "src/http/HTTPClient.ts", + "src/http/HTTPLibrary.ts", + "src/http/QuerySerializer.ts", + "src/http/errors/BadGateway.ts", + "src/http/errors/BadRequest.ts", + "src/http/errors/Conflict.ts", + "src/http/errors/ExpectationFailed.ts", + "src/http/errors/FailedDependency.ts", + "src/http/errors/Forbidden.ts", + "src/http/errors/GatewayTimeout.ts", + "src/http/errors/Gone.ts", + "src/http/errors/HttpVersionNotSupported.ts", + "src/http/errors/InternalServerError.ts", + "src/http/errors/LengthRequired.ts", + "src/http/errors/Locked.ts", + "src/http/errors/LoopDetected.ts", + "src/http/errors/MethodNotAllowed.ts", + "src/http/errors/MisdirectedRequest.ts", + "src/http/errors/NetworkAuthenticationRequired.ts", + "src/http/errors/NotAcceptable.ts", + "src/http/errors/NotExtended.ts", + "src/http/errors/NotFound.ts", + "src/http/errors/NotImplemented.ts", + "src/http/errors/PayloadTooLarge.ts", + "src/http/errors/PaymentRequired.ts", + "src/http/errors/PreconditionFailed.ts", + "src/http/errors/PreconditionRequired.ts", + "src/http/errors/ProxyAuthenticationRequired.ts", + "src/http/errors/RangeNotSatisfiable.ts", + "src/http/errors/RequestHeaderFieldsTooLarge.ts", + "src/http/errors/RequestTimeout.ts", + "src/http/errors/ServiceUnavailable.ts", + "src/http/errors/TooEarly.ts", + "src/http/errors/TooManyRequests.ts", + "src/http/errors/Unauthorized.ts", + "src/http/errors/UnavailableForLegalReasons.ts", + "src/http/errors/UnprocessableEntity.ts", + "src/http/errors/UnsufficientStorage.ts", + "src/http/errors/UnsupportedMediaType.ts", + "src/http/errors/UpgradeRequired.ts", + "src/http/errors/UriTooLong.ts", + "src/http/errors/VariantAlsoNegotiates.ts", + "src/http/errors/base.ts", + "src/http/errors/index.ts", + "src/http/httpExceptions.ts", + "src/index.ts", + "src/models.ts", + "src/services/README.md", + "src/services/v1V7OlderVersions/V1V7OlderVersions.ts", + "src/services/v1V7OlderVersions/index.ts", + "src/services/v1V7OlderVersions/models/AssessRelevance1Request.ts", + "src/services/v1V7OlderVersions/models/AssessRelevance1Response.ts", + "src/services/v1V7OlderVersions/models/ScoreAPhonemeList1Request.ts", + "src/services/v1V7OlderVersions/models/ScoreAPhonemeList1Response.ts", + "src/services/v1V7OlderVersions/models/ScoreVocabularyGrammarRequest.ts", + "src/services/v1V7OlderVersions/models/ScoreVocabularyGrammarResponse.ts", + "src/services/v1V7OlderVersions/models/ValidateText1Request.ts", + "src/services/v1V7OlderVersions/models/ValidateText1Response.ts", + "src/services/v9Latest/V9Latest.ts", + "src/services/v9Latest/index.ts", + "src/services/v9Latest/models/GetGrammarVocabCoherenceFeedbackMetricsRequest.ts", + "src/services/v9Latest/models/GetGrammarVocabCoherenceFeedbackMetricsResponse.ts", + "src/services/v9Latest/models/PteAnswerQuestionRequest.ts", + "src/services/v9Latest/models/PteAnswerQuestionResponse.ts", + "src/services/v9Latest/models/ScoreAPhonemeListRequest.ts", + "src/services/v9Latest/models/ScoreAPhonemeListResponse.ts", + "src/services/v9Latest/models/ScoreFluencySpanishRequest.ts", + "src/services/v9Latest/models/ScoreFluencySpanishResponse.ts", + "src/services/v9Latest/models/ValidateTextRequest.ts", + "src/services/v9Latest/models/ValidateTextResponse.ts", + "test/services/v1V7OlderVersions/V1V7OlderVersions.test.ts", + "test/services/v9Latest/V9Latest.test.ts", + "tsconfig.eslint.json", + "tsconfig.json" + ] +} diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..b09cba1 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,26 @@ +{ + "printWidth": 100, + "tabWidth": 2, + "useTabs": false, + "semi": true, + "singleQuote": true, + "quoteProps": "as-needed", + "jsxSingleQuote": false, + "trailingComma": "all", + "bracketSpacing": true, + "arrowParens": "always", + "overrides": [ + { + "files": ".editorconfig", + "options": { + "parser": "yaml" + } + }, + { + "files": "LICENSE", + "options": { + "parser": "markdown" + } + } + ] +} diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..4dc8223 --- /dev/null +++ b/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2024 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE +OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..9b93172 --- /dev/null +++ b/README.md @@ -0,0 +1,474 @@ +# Speechaceapi Typescript SDK 1.0.0 + +The Typescript SDK for Speechaceapi. + +- API version: 1.0.0 +- SDK version: 1.0.0 + +## Table of Contents + +- [About the API](#requirements) +- [Installation](#installation) +- [API Endpoint Services](#api-endpoint-services) +- [API Models](#api-models) +- [Sample Usage](#sample-usage) +- [Speechaceapi Services](#speechaceapi-services) +- [License](#license) + +## About the API + + [Speechace](https://www.speechace.com) is a Speech Recognition API for fluency and pronunciation assessment. Our patented technology is unique in its ability to score a learner's speech and pinpoint individual syllable and phoneme level mistakes in a user's pronunciation in real time. --- # NEW! Task Achievement and full PTE Speaking assessment ## Introducing the Score Task API with support for Describe-Image, Retell-Lecture, and Answer-Question content scoring The new [Score Task API](https://docs.speechace.com/#a9d386e2-c8fc-492f-a6b4-eefc24895aa5) now supports advanced evaluation of the content of a spontaneous response, and how well it accomplished the task set out in the question. The API supports scoring tasks with either audio or text only and provides a content score aligned with the PTE content score scale. --- # NEW! French and Spanish Scripted and Spontaneous Speech Assessment with Task Achievment ## Speechace Pronunciation Assessment API and Fluency Assessment API now support French and Spanish Speechace API v9.9 now supports assessment of pronunciation and fluency in 4 new dialects: (fr-fr, fr-ca, es-es, es-mx): - Pronunciation assessment with utterance, word, syllable, and phoneme level scores - Fluency assessment with utterance and segment level scores - Scores provided on 0..100 scale and CEFR - Available today in all regions - Premium API support for Spontaneous Speech transcription + Scoring in French and Spanish - Premium API support for Task Achievment scoring in French and Spanish See the API examples for details: [Score Pronunciation API](https://docs.speechace.com/#0d443b6f-56ae-4ce3-b25f-81d8fa189ec5) [Score Fluency API](https://docs.speechace.com/#fcfed32d-25e9-40a7-bddc-cca399489d65) [Transcribe & Score API](https://docs.speechace.com/#76089b5d-7e25-4744-8d32-f6c230acf217) [Score Task API](https://docs.speechace.com/#a9d386e2-c8fc-492f-a6b4-eefc24895aa5) --- # API SKUs and Use Cases The Speechace API comes in 3 SKUs and can be used to assess and score a variety of speaking activities. | API SKU | Use Cases | | --- | --- | | BASIC | **Pronunciation Assessment** **API**
Word and Sentence speaking activities
Multiple Choice speaking activities | | PRO | **Fluency Assessment** **API**
Read Aloud, Repeat Sentence
IELTS/PTE Fluency practice activities | | PREMIUM | **Spontaneous Speech Assessment** **API**
CEFR, IELTS, TOEIC, PTE Speaking Proficiency Assessment
Free speaking activities
Relevance Assessment
Comprehensive skill assessment: Grammar, Vocabulary, Coherence, Pronunciation, Fluency
Task Achievement | # API Keys You need a Speechace API Subscription to obtain a key. You can obtain a Speechace key [at https://www.speechace.com/speechace-api-plans/](https://www.speechace.com/speechace-api-plans/) # API Regions The Speechace API currently supports the following regions. Your API Key is tied to a specific region. You can request additional API Keys under the same Subscription within other regions. | **Region** | **API Endpoint** | | --- | --- | | US West (Oregon) | [https://api.speechace.co](https://) | | AP Southeast (Singapore) | [https://api2.speechace.com](https://) | | EU West (Ireland) | [https://api4.speechace.com](https://) | | AP South (Mumbai) | [https://api5.speechace.com](https://) | # API Versioning The Speechace API versioning is explicit in the request URL. Up to v9.0 Speechace API versioning was explicit with the caller specifying the exact version they use in the request url. From v9.0 onwards the API caller can choose to take silent minor version updates. | **Request url** | **Resulting** **version** | | --- | --- | | [https://api.speechace.co/scoring/text/v9/json](https://)? | This request will use the latest available minor version of v9 (e.g. v9.0 or v9.1 or v9.2 etc.) | | [https://api.speechace.co/scoring/text/v9.0/json](https://)? | This request will explicitly use the minor version v9.0 | **Major version history:** | **version** | **url** | **notes** | | --- | --- | --- | | 1 | [https://api.speechace.co/api/scoring/text/v0.1/json](https://)? | v1 | | 2 | [https://api.speechace.co/api/scoring/text/v0.2/json](https://)? | v2 | | 3 | [https://api.speechace.co/api/scoring/text/v0.3/json](https://)? | v3 | | 5 | [https://api.speechace.co/api/scoring/text/v0.5/json](https://)? | v5 | | 7 | [https://api.speechace.co/api/scoring/text/v0.7/json](https://)? | v7 | | 9 | [https://api.speechace.co/api/scoring/text/v9/json](https://)? | current latest production major version | | 9.2 | [https://api.speechace.co/api/scoring/text/v9.2/json](https://)? | New minor version scoring models. | | 9.4 | [https://api.speechace.co/api/scoring/text/v9.4/json](https://)? | New minor version Transcription models | | 9.5 | [https://api.speechace.co/api/scoring/text/v9.5/json](https://)? | New noise reduction enhacement.
Beta Grammar, Coherence, Vocab feedback metrices.
Current latest production minor version | | 9.7 | [https://api.speechace.co/api/scoring/text/v9.7/json](https://api.speechace.co/api/scoring/text/v9.7/json)? | Noise and aligment updates.
New relevance scoring model
[Markup language support for letter to phoneme mapping](https://) | | 9.8 | [https://api.speechace.co/api/scoring/text/v9.8/json](https://api.speechace.co/api/scoring/text/v9.8/json)? | Pronunciation model update
Grammatical accuracy model update | | 9.9 | [https://api.speechace.co/api/scoring/text/v9.9/json](https://api.speechace.co/api/scoring/text/v9.9/json)? | Core model updates
Major performance enhancement | You can keep up with new version announcements by subscribing to the Speechace Blog at [https://www.speechace.com/blog/](https://www.speechace.com/blog/) # Samples You can download samples showing both: - frontend (recording audio, passing to backend, showing scores) - backend (calling speechace API, passing scores to frontend) The samples are available at [https://github.com/speechace/speechace-api-samples](https://github.com/speechace/speechace-api-samples) # API Limits The Speechace API has the following limits per the API SKU license: Basic, Pro, or Premium. | Limit | API SKU (BASIC) | API SKU (PRO) | API SKU (PREMIUM) | | --- | --- | --- | --- | | Max Audio Length | 15 seconds | 45 seconds | 2 minutes | | Max File Size | 1.9MB | 2.5MB | 3.8MB | # Recording Audio Speechace supports audio in most formats used on the web (e.g. wav, mp3, m4a, ogg, webm, aiff). We strongly recommend recording at the following settings to optimize your file size and increase performance: - _sample size_: 16-bit - _sample rate_: 16Khz - _channels_: 1 (i.e. mono) # Terms of Service By using the Speechace API you agree to the [Privacy Policy](https://www.speechace.com/api-privacy-policy/) and the [Terms of Service](https://www.speechace.com/terms-of-service/). Speechace API is the Copyright © Speechace LLC, Seattle, WA, USA. + +## Installation + +```sh +npm install speechaceapi +``` + +## Sample Usage + +Here is a simple program demonstrating usage of this SDK. It can also be found in the `examples/src/index.ts` file in this directory. + +When running the sample make sure to use `npm install` to install all the dependencies. + +```Typescript +import { Speechaceapi } from 'speechaceapi'; + + + // No simple endpoint service was given + + +``` + +# Speechaceapi Services + +A list of all services and services methods. + +- Services + + - [V9Latest](#v9latest) + + - [V1V7OlderVersions](#v1v7olderversions) + +- [All Methods](#all-methods) + +## V9Latest + +| Method | Description | +| :---------------------------------------------------------------------------------- | :--------------------------------------------- | +| [scoreFluencySpanish](#scorefluencyspanish) | Score Fluency - Spanish | +| [scoreAPhonemeList](#scoreaphonemelist) | Score a Phoneme list | +| [validateText](#validatetext) | Validate Text | +| [pteAnswerQuestion](#pteanswerquestion) | PTE Answer Question | +| [getGrammarVocabCoherenceFeedbackMetrics](#getgrammarvocabcoherencefeedbackmetrics) | Get Grammar, Vocab, Coherence feedback metrics | + +## V1V7OlderVersions + +| Method | Description | +| :------------------------------------------------ | :------------------------- | +| [scoreVocabularyGrammar](#scorevocabularygrammar) | Score Vocabulary & Grammar | +| [scoreAPhonemeList1](#scoreaphonemelist1) | Score a Phoneme list | +| [validateText1](#validatetext1) | Validate Text | +| [assessRelevance1](#assessrelevance1) | Assess Relevance | + +## All Methods + +### **scoreFluencySpanish** + +Score Fluency - Spanish + +- HTTP Method: POST +- Endpoint: /api/scoring/text/v9/json + +**Required Parameters** + +| input | object | Request body. | + +**Optional Parameters** + +Optional parameters are passed as part of the last parameter to the method. Ex. {optionalParam1 : 'value1', optionalParam2: 'value2'} + +| Name | Type | Description | +| :------ | :----- | :------------------------------------------------------------------------------- | +| key | string | API key issued by Speechace. | +| dialect | string | The dialect to use for scoring. Supported values are: en-us, en-gb, fr-fr, fr-ca | + +**Return Type** + +ScoreFluencySpanishResponse + +**Example Usage Code Snippet** + +```Typescript +import { Speechaceapi } from 'speechaceapi'; + +const sdk = new Speechaceapi(); + +(async () => { + const input = {}; + const result = await sdk.v9Latest.scoreFluencySpanish(input, { + key: '{{speechace_prokey}}', + dialect: 'es-es', + }); + console.log(result); +})(); + +``` + +### **scoreAPhonemeList** + +Score a Phoneme list + +- HTTP Method: POST +- Endpoint: /api/scoring/phone_list/v9/json + +**Required Parameters** + +| input | object | Request body. | + +**Optional Parameters** + +Optional parameters are passed as part of the last parameter to the method. Ex. {optionalParam1 : 'value1', optionalParam2: 'value2'} + +| Name | Type | Description | +| :------ | :----- | :-------------------------------------------------------------------------------------------------- | +| key | string | API key issued by Speechace. | +| userId | string | Optional: A unique anonymized identifier for the end-user who spoke the audio. | +| dialect | string | The dialect to use for scoring. Supported values are "en-us" (US English) and "en-gb" (UK English). | + +**Return Type** + +ScoreAPhonemeListResponse + +**Example Usage Code Snippet** + +```Typescript +import { Speechaceapi } from 'speechaceapi'; + +const sdk = new Speechaceapi(); + +(async () => { + const input = {}; + const result = await sdk.v9Latest.scoreAPhonemeList(input, { + key: '{{speechacekey}}', + userId: 'XYZ-ABC-99001', + dialect: 'en-us', + }); + console.log(result); +})(); + +``` + +### **validateText** + +Validate Text + +- HTTP Method: POST +- Endpoint: /api/validating/text/v9/json + +**Required Parameters** + +| input | object | Request body. | + +**Optional Parameters** + +Optional parameters are passed as part of the last parameter to the method. Ex. {optionalParam1 : 'value1', optionalParam2: 'value2'} + +| Name | Type | Description | +| :------ | :----- | :------------------------------------------------------------------------------------------------------------------------- | +| key | string | API key issued by Speechace. | +| text | string | A sentence or sequence of words to validate. | +| dialect | string | The dialect to use for validation. Default is "en-us". Supported values are "en-us" (US English) and "en-gb" (UK English). | + +**Return Type** + +ValidateTextResponse + +**Example Usage Code Snippet** + +```Typescript +import { Speechaceapi } from 'speechaceapi'; + +const sdk = new Speechaceapi(); + +(async () => { + const input = {}; + const result = await sdk.v9Latest.validateText(input, { + key: '{{speechacekey}}', + text: '"Validate these words existeee."', + dialect: 'en-us', + }); + console.log(result); +})(); + +``` + +### **pteAnswerQuestion** + +PTE Answer Question + +- HTTP Method: POST +- Endpoint: /api/scoring/task/v9/json + +**Required Parameters** + +| input | object | Request body. | + +**Optional Parameters** + +Optional parameters are passed as part of the last parameter to the method. Ex. {optionalParam1 : 'value1', optionalParam2: 'value2'} + +| Name | Type | Description | +| :------- | :----- | :---------------------------------------------------------------------------------------------- | +| key | string | API key issued by Speechace | +| taskType | string | The task_type to score. Supported types are: describe-image, retell-lecture, answer-question. | +| dialect | string | The dialect to use for scoring. Supported values are: en-us, en-gb, fr-fr, fr-ca, es-es, es-mx. | + +**Return Type** + +PteAnswerQuestionResponse + +**Example Usage Code Snippet** + +```Typescript +import { Speechaceapi } from 'speechaceapi'; + +const sdk = new Speechaceapi(); + +(async () => { + const input = {}; + const result = await sdk.v9Latest.pteAnswerQuestion(input, { + key: '{{speechace_premiumkey}}', + taskType: 'answer-question', + dialect: 'en-us', + }); + console.log(result); +})(); + +``` + +### **getGrammarVocabCoherenceFeedbackMetrics** + +Get Grammar, Vocab, Coherence feedback metrics + +- HTTP Method: POST +- Endpoint: /api/scoring/speech/v9/json + +**Required Parameters** + +| input | object | Request body. | + +**Optional Parameters** + +Optional parameters are passed as part of the last parameter to the method. Ex. {optionalParam1 : 'value1', optionalParam2: 'value2'} + +| Name | Type | Description | +| :------ | :----- | :------------------------------------------------------------------------------------------------------------ | +| key | string | API key issued by Speechace. | +| userId | string | A unique anonymized identifier for the end-user who spoke the audio. | +| dialect | string | Optional: The dialect to use for scoring. Supported values are "en-us" (US English) and "en-gb" (UK English). | + +**Return Type** + +GetGrammarVocabCoherenceFeedbackMetricsResponse + +**Example Usage Code Snippet** + +```Typescript +import { Speechaceapi } from 'speechaceapi'; + +const sdk = new Speechaceapi(); + +(async () => { + const input = {}; + const result = await sdk.v9Latest.getGrammarVocabCoherenceFeedbackMetrics(input, { + key: '{{speechace_premiumkey}}', + userId: 'XYZ-ABC-99001', + dialect: 'en-us', + }); + console.log(result); +})(); + +``` + +### **scoreVocabularyGrammar** + +Score Vocabulary & Grammar + +- HTTP Method: POST +- Endpoint: /api/scoring/text/v0.5/json + +**Required Parameters** + +| input | object | Request body. | + +**Optional Parameters** + +Optional parameters are passed as part of the last parameter to the method. Ex. {optionalParam1 : 'value1', optionalParam2: 'value2'} + +| Name | Type | Description | +| :------ | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| key | string | API key issued by Speechace. | +| userId | string | A unique anonymized identifier for the end-user who spoke the audio.

Structure this field to include as much info as possible to aid in reporting and analytics.

For example: **user_id=XYZ-ABC-99001** where:

_ XYZ is an id for your Product or App
_ ABC is an id for the customer/site/account
\* 99001 is an id for the end-user

Ensure user_id is unique and anonymized containing **no personally identifiable information**. | +| dialect | string | The dialect to use for scoring. Supported values are "en-us" (US English) and "en-gb" (UK English).

en-gb requires setting v0.1 in url path. i.e. `https://api.speechace.co/api/scoring/text/v0.1/json?` | + +**Return Type** + +ScoreVocabularyGrammarResponse + +**Example Usage Code Snippet** + +```Typescript +import { Speechaceapi } from 'speechaceapi'; + +const sdk = new Speechaceapi(); + +(async () => { + const input = {}; + const result = await sdk.v1V7OlderVersions.scoreVocabularyGrammar(input, { + key: '{{speechace_premiumkey}}', + userId: 'XYZ-ABC-99001', + dialect: 'en-us', + }); + console.log(result); +})(); + +``` + +### **scoreAPhonemeList1** + +Score a Phoneme list + +- HTTP Method: POST +- Endpoint: /api/scoring/phone_list/v0.5/json + +**Required Parameters** + +| input | object | Request body. | + +**Optional Parameters** + +Optional parameters are passed as part of the last parameter to the method. Ex. {optionalParam1 : 'value1', optionalParam2: 'value2'} + +| Name | Type | Description | +| :------ | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| key | string | API key issued by Speechace. | +| userId | string | A unique anonymized identifier for the end-user who spoke the audio.

Structure this field to include as much info as possible to aid in reporting and analytics.

For example: **user_id=XYZ-ABC-99001** where:

_ XYZ is an id for your Product or App
_ ABC is an id for the customer/site/account
\* 99001 is an id for the end-user

Ensure user_id is unique and anonymized containing **no personally identifiable information**. | +| dialect | string | The dialect to use for scoring. Supported values are "en-us" (US English) and "en-gb" (UK English).

en-gb requires setting v0.1 in url path. i.e. `https://api.speechace.co/api/scoring/text/v0.1/json?` | + +**Return Type** + +ScoreAPhonemeList1Response + +**Example Usage Code Snippet** + +```Typescript +import { Speechaceapi } from 'speechaceapi'; + +const sdk = new Speechaceapi(); + +(async () => { + const input = {}; + const result = await sdk.v1V7OlderVersions.scoreAPhonemeList1(input, { + key: '{{speechacekey}}', + userId: 'XYZ-ABC-99001', + dialect: 'en-us', + }); + console.log(result); +})(); + +``` + +### **validateText1** + +Validate Text + +- HTTP Method: POST +- Endpoint: /api/validating/text/v0.5/json + +**Required Parameters** + +| input | object | Request body. | + +**Optional Parameters** + +Optional parameters are passed as part of the last parameter to the method. Ex. {optionalParam1 : 'value1', optionalParam2: 'value2'} + +| Name | Type | Description | +| :------ | :----- | :------------------------------------------------------------------------------------------------------------------------- | +| key | string | API key issued by Speechace. | +| text | string | A sentence or sequence of words to validate. | +| dialect | string | The dialect to use for validation. Default is "en-us". Supported values are "en-us" (US English) and "en-gb" (UK English). | + +**Return Type** + +ValidateText1Response + +**Example Usage Code Snippet** + +```Typescript +import { Speechaceapi } from 'speechaceapi'; + +const sdk = new Speechaceapi(); + +(async () => { + const input = {}; + const result = await sdk.v1V7OlderVersions.validateText1(input, { + key: '{{speechacekey}}', + text: '"Validate these words existeee."', + dialect: 'en-us', + }); + console.log(result); +})(); + +``` + +### **assessRelevance1** + +Assess Relevance + +- HTTP Method: POST +- Endpoint: /api/scoring/speech/v0.5/json + +**Required Parameters** + +| input | object | Request body. | + +**Optional Parameters** + +Optional parameters are passed as part of the last parameter to the method. Ex. {optionalParam1 : 'value1', optionalParam2: 'value2'} + +| Name | Type | Description | +| :------ | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| key | string | API key issued by Speechace. | +| dialect | string | The dialect to use for scoring. Supported values are "en-us" (US English) and "en-gb" (UK English). | +| userId | string | A unique anonymized identifier for the end-user who spoke the audio.
Structure this field to include as much info as possible to aid in reporting and analytics.
For example: **user_id=XYZ-ABC-99001** where:

_ XYZ is an id for your Product or App
_ ABC is an id for the customer/site/account
\* 99001 is an id for the end-user
Ensure user_id is unique and anonymized containing **no personally identifiable information**. | + +**Return Type** + +AssessRelevance1Response + +**Example Usage Code Snippet** + +```Typescript +import { Speechaceapi } from 'speechaceapi'; + +const sdk = new Speechaceapi(); + +(async () => { + const input = {}; + const result = await sdk.v1V7OlderVersions.assessRelevance1(input, { + key: '{{speechace_premiumkey}}', + dialect: 'en-us', + userId: 'XYZ-ABC-99001', + }); + console.log(result); +})(); + +``` + +## License + +License: MIT. See license in LICENSE. + + diff --git a/examples/.env.example b/examples/.env.example new file mode 100644 index 0000000..f05954a --- /dev/null +++ b/examples/.env.example @@ -0,0 +1,2 @@ +# This file was generated by liblab | https://liblab.com/ + diff --git a/examples/README.md b/examples/README.md new file mode 100644 index 0000000..d495ba0 --- /dev/null +++ b/examples/README.md @@ -0,0 +1,27 @@ +# speechaceapi-example + +A basic example of how to use the speechaceapi package. + +## Installation + +In the event `speechaceapi` is not published to npm, you can install it locally by running the following command in the examples folder: + +```sh +npm run setup +``` + +This will rebuild the parent package and install it locally. + +Otherwise you can install it from npm: + +```sh +npm install speechaceapi +``` + +## Usage + +To run the example, run the following command in the examples folder: + +```sh +npm run start +``` diff --git a/examples/package.json b/examples/package.json new file mode 100644 index 0000000..e6eefc0 --- /dev/null +++ b/examples/package.json @@ -0,0 +1,18 @@ +{ + "name": "speechaceapi-example", + "version": "1.0.0", + "private": true, + "dependencies": { + "speechaceapi": "file:../" + }, + "scripts": { + "setup": "npm --prefix ../ install && npm --prefix ../ run build && npm install", + "start": "tsc && node -r dotenv/config dist/index.js", + "dev": "ts-node src/index.ts" + }, + "devDependencies": { + "ts-node": "^10.9.1", + "typescript": "^4.6.0", + "dotenv": "^8.2.0" + } +} diff --git a/examples/src/index.ts b/examples/src/index.ts new file mode 100644 index 0000000..51a412b --- /dev/null +++ b/examples/src/index.ts @@ -0,0 +1,5 @@ +// This file was generated by liblab | https://liblab.com/ + +import { Speechaceapi } from 'speechaceapi'; + +// No simple endpoint service was given diff --git a/examples/tsconfig.json b/examples/tsconfig.json new file mode 100644 index 0000000..a63d73c --- /dev/null +++ b/examples/tsconfig.json @@ -0,0 +1,103 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "commonjs" /* Specify what module code is generated. */, + "rootDir": "./src" /* Specify the root folder within your source files. */, + // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + "outDir": "./dist" /* Specify an output folder for all emitted files. */, + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, + + /* Type Checking */ + "strict": true /* Enable all strict type-checking options. */, + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +} diff --git a/install.sh b/install.sh new file mode 100644 index 0000000..c21151d --- /dev/null +++ b/install.sh @@ -0,0 +1,4 @@ +# This file was generated by liblab | https://liblab.com/ + +npm install +npm run test diff --git a/jest.config.json b/jest.config.json new file mode 100644 index 0000000..2717f58 --- /dev/null +++ b/jest.config.json @@ -0,0 +1,4 @@ +{ + "preset": "ts-jest", + "testEnvironment": "node" +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..85e1988 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6775 @@ +{ + "name": "speechaceapi", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "speechaceapi", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "axios": "^1.0.0" + }, + "devDependencies": { + "@types/jest": "^29.5.6", + "@types/node": "^17.0.23", + "@typescript-eslint/eslint-plugin": "^5.43.0", + "@typescript-eslint/parser": "^5.43.0", + "eslint": "^8.20.0", + "eslint-config-airbnb-base": "^15.0.0", + "eslint-config-airbnb-typescript": "^17.0.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-prettier": "^4.2.1", + "jest": "^29.7.0", + "nock": "^13.2.4", + "prettier": "^2.6.2", + "ts-jest": "^29.1.1", + "typescript": "^4.6.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz", + "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz", + "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helpers": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", + "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz", + "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", + "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", + "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz", + "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz", + "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", + "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", + "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz", + "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", + "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", + "dev": true, + "license": "MIT", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", + "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", + "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", + "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", + "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", + "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "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, + "license": "MIT", + "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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.12", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", + "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "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, + "license": "Python-2.0" + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axios": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", + "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", + "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001629", + "electron-to-chromium": "^1.4.796", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.16" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001640", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001640.tgz", + "integrity": "sha512-lA4VMpW0PSUrFnkmVuEKBUovSWKhj7puyCg8StBChgu298N1AtuF1sKWEvfDuimSEDbhlb/KqPKC3fs1HbuQUA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", + "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/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, + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.817", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.817.tgz", + "integrity": "sha512-3znu+lZMIbTe8ZOs360OMJvVroVF2NpNI8T5jfLnDetVvj0uNmIucZzQVYMSJfsu9f47Ssox1Gt46PR+R+1JUg==", + "dev": true, + "license": "ISC" + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + } + }, + "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, + "license": "MIT", + "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/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-airbnb-base": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", + "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", + "dev": true, + "license": "MIT", + "dependencies": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5", + "semver": "^6.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "peerDependencies": { + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.2" + } + }, + "node_modules/eslint-config-airbnb-base/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-config-airbnb-typescript": { + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-17.1.0.tgz", + "integrity": "sha512-GPxI5URre6dDpJ0CtcthSZVBAfI+Uw7un5OYNVxP2EYi3H81Jw701yFP7AU+/vCE7xBtFmjge7kfhhk4+RAiig==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-config-airbnb-base": "^15.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^5.13.0 || ^6.0.0", + "@typescript-eslint/parser": "^5.0.0 || ^6.0.0", + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.3" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", + "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "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, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "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, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": ">=7.28.0", + "prettier": ">=2.0.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": 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==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "license": "BSD-3-Clause", + "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, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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, + "license": "MIT" + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "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, + "license": "MIT" + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "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, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", + "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "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": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true, + "license": "ISC" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "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, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "license": "ISC" + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "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, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true, + "license": "MIT" + }, + "node_modules/nock": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.5.4.tgz", + "integrity": "sha512-yAyTfdeNJGGBFxWdzSKCBYxs5FxLbCg5X5Q4ets974hcQzG1+qCxvIyOo4j2Ry6MUlhWVMX4OoYDefAIIwupjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "json-stringify-safe": "^5.0.1", + "propagate": "^2.0.0" + }, + "engines": { + "node": ">= 10.13" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true, + "license": "MIT" + }, + "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, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-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, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "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, + "license": "MIT", + "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, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.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, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/propagate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", + "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, + "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" + } + ], + "license": "MIT" + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "license": "ISC" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-jest": { + "version": "29.1.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.5.tgz", + "integrity": "sha512-UuClSYxM7byvvYfyWdFI+/2UxMmwNyJb0NPkZPQE2hew3RurV7l7zURgOHAd/1I1ZdPpe3GUsXNXAcN8TFKSIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "^7.5.3", + "yargs-parser": "^21.0.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/transform": "^29.0.0", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/transform": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "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, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..7e00c04 --- /dev/null +++ b/package.json @@ -0,0 +1,57 @@ +{ + "source": "./src/index.ts", + "exports": { + "require": "./dist/commonjs/index.js", + "types": "./dist/commonjs/index.d.ts", + "default": "./dist/esm/index.js" + }, + "main": "./dist/commonjs/index.js", + "module": "./dist/esm/index.js", + "browser": "./dist/index.umd.js", + "unpkg": "./dist/index.umd.js", + "types": "./dist/commonjs/index.d.ts", + "files": [ + "dist", + "README.md" + ], + "devDependencies": { + "@typescript-eslint/eslint-plugin": "^5.43.0", + "@typescript-eslint/parser": "^5.43.0", + "@types/node": "^17.0.23", + "@types/jest": "^29.5.6", + "eslint": "^8.20.0", + "eslint-config-airbnb-base": "^15.0.0", + "eslint-config-airbnb-typescript": "^17.0.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-prettier": "^4.2.1", + "jest": "^29.7.0", + "nock": "^13.2.4", + "prettier": "^2.6.2", + "ts-jest": "^29.1.1", + "typescript": "^4.6.0" + }, + "scripts": { + "build": "npm run build:all", + "build:cjs": "tsc --module commonjs --outDir dist/commonjs", + "build:esm": "tsc --module esnext --outDir dist/esm", + "build:umd": "tsc --module umd --outDir dist/umd", + "build:all": "npm run build:cjs && npm run build:esm && npm run build:umd", + "lint": "eslint --ext .ts,.js ./src/ --resolve-plugins-relative-to .", + "lint:ci": "eslint --ext .ts,.js ./src/ --resolve-plugins-relative-to . --cache --quiet", + "lint:fix": "eslint --ext .ts,.js ./src/ --resolve-plugins-relative-to . --cache --fix", + "rebuild": "rm -rf dist/ && tsc", + "test": "jest --detectOpenHandles", + "watch": "rm -rf dist/ && tsc -w", + "version": "tsc --version", + "prepublishOnly": "npm run build" + }, + "name": "speechaceapi", + "description": "Speechaceapi - [Speechace](https://www.speechace.com) is a Speech Recognition API for fluency and pronunciation assessment. Our patented technology is unique in its ability to score a learner's speech and pinpoint individual syllable and phoneme level mistakes in a user's pronunciation in real time. --- # NEW! Task Achievement and full PTE Speaking assessment ## Introducing the Score Task API with support for Describe-Image, Retell-Lecture, and Answer-Question content scoring The new [Score Task API](https://docs.speechace.com/#a9d386e2-c8fc-492f-a6b4-eefc24895aa5) now supports advanced evaluation of the content of a spontaneous response, and how well it accomplished the task set out in the question. The API supports scoring tasks with either audio or text only and provides a content score aligned with the PTE content score scale. --- # NEW! French and Spanish Scripted and Spontaneous Speech Assessment with Task Achievment ## Speechace Pronunciation Assessment API and Fluency Assessment API now support French and Spanish Speechace API v9.9 now supports assessment of pronunciation and fluency in 4 new dialects: (fr-fr, fr-ca, es-es, es-mx): - Pronunciation assessment with utterance, word, syllable, and phoneme level scores - Fluency assessment with utterance and segment level scores - Scores provided on 0..100 scale and CEFR - Available today in all regions - Premium API support for Spontaneous Speech transcription + Scoring in French and Spanish - Premium API support for Task Achievment scoring in French and Spanish See the API examples for details: [Score Pronunciation API](https://docs.speechace.com/#0d443b6f-56ae-4ce3-b25f-81d8fa189ec5) [Score Fluency API](https://docs.speechace.com/#fcfed32d-25e9-40a7-bddc-cca399489d65) [Transcribe & Score API](https://docs.speechace.com/#76089b5d-7e25-4744-8d32-f6c230acf217) [Score Task API](https://docs.speechace.com/#a9d386e2-c8fc-492f-a6b4-eefc24895aa5) --- # API SKUs and Use Cases The Speechace API comes in 3 SKUs and can be used to assess and score a variety of speaking activities. | API SKU | Use Cases | | --- | --- | | BASIC | **Pronunciation Assessment** **API**
Word and Sentence speaking activities
Multiple Choice speaking activities | | PRO | **Fluency Assessment** **API**
Read Aloud, Repeat Sentence
IELTS/PTE Fluency practice activities | | PREMIUM | **Spontaneous Speech Assessment** **API**
CEFR, IELTS, TOEIC, PTE Speaking Proficiency Assessment
Free speaking activities
Relevance Assessment
Comprehensive skill assessment: Grammar, Vocabulary, Coherence, Pronunciation, Fluency
Task Achievement | # API Keys You need a Speechace API Subscription to obtain a key. You can obtain a Speechace key [at https://www.speechace.com/speechace-api-plans/](https://www.speechace.com/speechace-api-plans/) # API Regions The Speechace API currently supports the following regions. Your API Key is tied to a specific region. You can request additional API Keys under the same Subscription within other regions. | **Region** | **API Endpoint** | | --- | --- | | US West (Oregon) | [https://api.speechace.co](https://) | | AP Southeast (Singapore) | [https://api2.speechace.com](https://) | | EU West (Ireland) | [https://api4.speechace.com](https://) | | AP South (Mumbai) | [https://api5.speechace.com](https://) | # API Versioning The Speechace API versioning is explicit in the request URL. Up to v9.0 Speechace API versioning was explicit with the caller specifying the exact version they use in the request url. From v9.0 onwards the API caller can choose to take silent minor version updates. | **Request url** | **Resulting** **version** | | --- | --- | | [https://api.speechace.co/scoring/text/v9/json](https://)? | This request will use the latest available minor version of v9 (e.g. v9.0 or v9.1 or v9.2 etc.) | | [https://api.speechace.co/scoring/text/v9.0/json](https://)? | This request will explicitly use the minor version v9.0 | **Major version history:** | **version** | **url** | **notes** | | --- | --- | --- | | 1 | [https://api.speechace.co/api/scoring/text/v0.1/json](https://)? | v1 | | 2 | [https://api.speechace.co/api/scoring/text/v0.2/json](https://)? | v2 | | 3 | [https://api.speechace.co/api/scoring/text/v0.3/json](https://)? | v3 | | 5 | [https://api.speechace.co/api/scoring/text/v0.5/json](https://)? | v5 | | 7 | [https://api.speechace.co/api/scoring/text/v0.7/json](https://)? | v7 | | 9 | [https://api.speechace.co/api/scoring/text/v9/json](https://)? | current latest production major version | | 9.2 | [https://api.speechace.co/api/scoring/text/v9.2/json](https://)? | New minor version scoring models. | | 9.4 | [https://api.speechace.co/api/scoring/text/v9.4/json](https://)? | New minor version Transcription models | | 9.5 | [https://api.speechace.co/api/scoring/text/v9.5/json](https://)? | New noise reduction enhacement.
Beta Grammar, Coherence, Vocab feedback metrices.
Current latest production minor version | | 9.7 | [https://api.speechace.co/api/scoring/text/v9.7/json](https://api.speechace.co/api/scoring/text/v9.7/json)? | Noise and aligment updates.
New relevance scoring model
[Markup language support for letter to phoneme mapping](https://) | | 9.8 | [https://api.speechace.co/api/scoring/text/v9.8/json](https://api.speechace.co/api/scoring/text/v9.8/json)? | Pronunciation model update
Grammatical accuracy model update | | 9.9 | [https://api.speechace.co/api/scoring/text/v9.9/json](https://api.speechace.co/api/scoring/text/v9.9/json)? | Core model updates
Major performance enhancement | You can keep up with new version announcements by subscribing to the Speechace Blog at [https://www.speechace.com/blog/](https://www.speechace.com/blog/) # Samples You can download samples showing both: - frontend (recording audio, passing to backend, showing scores) - backend (calling speechace API, passing scores to frontend) The samples are available at [https://github.com/speechace/speechace-api-samples](https://github.com/speechace/speechace-api-samples) # API Limits The Speechace API has the following limits per the API SKU license: Basic, Pro, or Premium. | Limit | API SKU (BASIC) | API SKU (PRO) | API SKU (PREMIUM) | | --- | --- | --- | --- | | Max Audio Length | 15 seconds | 45 seconds | 2 minutes | | Max File Size | 1.9MB | 2.5MB | 3.8MB | # Recording Audio Speechace supports audio in most formats used on the web (e.g. wav, mp3, m4a, ogg, webm, aiff). We strongly recommend recording at the following settings to optimize your file size and increase performance: - _sample size_: 16-bit - _sample rate_: 16Khz - _channels_: 1 (i.e. mono) # Terms of Service By using the Speechace API you agree to the [Privacy Policy](https://www.speechace.com/api-privacy-policy/) and the [Terms of Service](https://www.speechace.com/terms-of-service/). Speechace API is the Copyright © Speechace LLC, Seattle, WA, USA.", + "version": "1.0.0", + "author": "Speechaceapi", + "dependencies": { + "axios": "^1.0.0" + }, + "license": "MIT" +} diff --git a/src/BaseService.ts b/src/BaseService.ts new file mode 100644 index 0000000..3d630e4 --- /dev/null +++ b/src/BaseService.ts @@ -0,0 +1,97 @@ +// This file was generated by liblab | https://liblab.com/ + +import FormData from 'form-data'; +import { Environment } from './http/Environment'; +import HTTPLibrary from './http/HTTPLibrary'; + +export default class BaseService { + public baseUrl: string = Environment.DEFAULT; + + public httpClient = new HTTPLibrary(); + + setBaseUrl(url: string): void { + this.baseUrl = url; + } + + static patternMatching(value: string, pattern: string, variableName: string): string { + if (!value) { + throw new Error(`${variableName} cannot be null or undefined`); + } + if (!value.match(new RegExp(pattern))) { + throw new Error(`Invalid value for ${variableName}: must match ${pattern}`); + } + return value; + } + + /** + * Converts model objects to FormData for multipart/form-data requests + * + * @param {any} input The original data that fills a model + * @return {FormData} The input converted to a form + */ + static formData(input: { [key: string]: any }): any { + const formData = new FormData(); + const flatInput: { [key: string]: any } = BaseService.flattenObject(input, ''); + Object.keys(flatInput).forEach((key) => { + const value = flatInput[key]; + if (value !== undefined && value !== null) { + if (value instanceof Date) { + formData.append(key, value.toISOString()); + } else if (typeof value === 'boolean') { + formData.append(key, value ? 'true' : 'false'); + } else if (value instanceof Array) { + formData.append(key, value.join(',')); + } else { + formData.append(key, value); + } + } + }); + return formData; + } + + /** + * Flattens an object into a single level object + * @param {Object} obj The object to flatten + * @param {string} parentKey The parent key + * @return {Object} The flattened object + */ + static flattenObject = (obj: { [key: string]: any }, parentKey?: string): Object => { + let result: { [key: string]: any } = {}; + Object.keys(obj).forEach((key) => { + const value: any = obj[key]; + if (Object.hasOwn(value, '_readableState')) { + result[key] = value; + return; + } + if ( + Object.hasOwn(value, 'name') && + Object.hasOwn(value, 'lastModified') && + Object.hasOwn(value, 'size') && + Object.hasOwn(value, 'type') && + Object.hasOwn(value, 'webkitRelativePath') + ) { + result[key] = value; + return; + } + + if (value instanceof Array || value.path) { + result[key] = value; + return; + } + + const formattedKey: string = parentKey ? `${parentKey}.${key}` : key; + + if (typeof value === 'object' && value !== null) { + result = { ...result, ...BaseService.flattenObject(value, formattedKey) }; + } else { + result[formattedKey] = value; + } + }); + return result; + }; + + static urlEncode = (input: { [key: string]: any }): string => + Object.keys(input) + .map((key) => `${key}=${encodeURIComponent(input[key])}`) + .join('&'); +} diff --git a/src/hooks/Hook.ts b/src/hooks/Hook.ts new file mode 100644 index 0000000..5801d44 --- /dev/null +++ b/src/hooks/Hook.ts @@ -0,0 +1,30 @@ +// This file was generated by liblab | https://liblab.com/ + +export interface Request { + method: string; + url: string; + input?: object; + headers: object; +} + +export interface Response { + data: object; + headers: object; + status: number; +} + +export interface Exception extends Error { + title: string; + type?: string; + detail?: string; + instance?: string; + statusCode: number; +} + +export interface Hook { + beforeRequest(request: Request): Promise; + + afterResponse(request: Request, response: Response): Promise; + + onError(error: Exception): Promise; +} diff --git a/src/http/Environment.ts b/src/http/Environment.ts new file mode 100644 index 0000000..c9b09dc --- /dev/null +++ b/src/http/Environment.ts @@ -0,0 +1,5 @@ +// This file was generated by liblab | https://liblab.com/ + +export enum Environment { + DEFAULT = 'https://api.speechace.co', +} diff --git a/src/http/HTTPClient.ts b/src/http/HTTPClient.ts new file mode 100644 index 0000000..2458931 --- /dev/null +++ b/src/http/HTTPClient.ts @@ -0,0 +1,14 @@ +// This file was generated by liblab | https://liblab.com/ + +export interface Headers extends Record {} + +/** + * Defines the basic operations for an HTTP client. + */ +export default interface HTTPClient { + get(url: string, input: any, headers: Headers, retry?: boolean): Promise; + post(url: string, input: any, headers: Headers, retry?: boolean): Promise; + delete(url: string, input: any, headers: Headers, retry?: boolean): Promise; + put(url: string, input: any, headers: Headers, retry?: boolean): Promise; + patch(url: string, input: any, headers: Headers, retry?: boolean): Promise; +} diff --git a/src/http/HTTPLibrary.ts b/src/http/HTTPLibrary.ts new file mode 100644 index 0000000..b2b8ce7 --- /dev/null +++ b/src/http/HTTPLibrary.ts @@ -0,0 +1,176 @@ +// This file was generated by liblab | https://liblab.com/ + +import FormData from 'form-data'; + +import axios, { AxiosError } from 'axios'; + +import HTTPClient, { Headers } from './HTTPClient'; +import throwHttpError from './httpExceptions'; + +// Ignore TS errors when checking if we are running inside Deno or Bun +declare const Deno: any; +declare const Bun: any; + +export default class HTTPLibrary implements HTTPClient { + readonly retryAttempts: number = 3; + readonly retryDelayMs: number = 150; + + private static readonly responseMapper: Map = new Map([ + ['type', 'type_'], + ['class', 'class_'], + ]); + + private readonly requestMapper: Map = new Map([ + ['type_', 'type'], + ['class_', 'class'], + ]); + + async get(url: string, input: any, headers: Headers, retry: boolean = false): Promise { + const request = () => + axios.get(url, { + headers: { ...headers, ...this.getUserAgentHeader() }, + data: + Object.keys(input).length > 0 + ? HTTPLibrary.convertKeysWithMapper(input, this.requestMapper) + : undefined, + }); + + const response = retry + ? await this.retry(this.retryAttempts, request, this.retryDelayMs) + : await request(); + return HTTPLibrary.handleResponse(response); + } + + async post(url: string, input: any, headers: Headers, retry: boolean = false): Promise { + const request = () => + axios.post(url, HTTPLibrary.convertKeysWithMapper(input, this.requestMapper), { + headers: { ...headers, ...this.getUserAgentHeader() }, + }); + + const response = retry + ? await this.retry(this.retryAttempts, request, this.retryDelayMs) + : await request(); + + return HTTPLibrary.handleResponse(response); + } + + async delete(url: string, input: any, headers: Headers, retry: boolean = false): Promise { + const request = () => + axios.delete(url, { + headers: { ...headers, ...this.getUserAgentHeader() }, + data: HTTPLibrary.convertKeysWithMapper(input, this.requestMapper), + }); + + const response = retry + ? await this.retry(this.retryAttempts, request, this.retryDelayMs) + : await request(); + + return HTTPLibrary.handleResponse(response); + } + + async put(url: string, input: any, headers: Headers, retry: boolean = false): Promise { + const request = () => + axios.put(url, HTTPLibrary.convertKeysWithMapper(input, this.requestMapper), { + headers: { ...headers, ...this.getUserAgentHeader() }, + }); + + const response = retry + ? await this.retry(this.retryAttempts, request, this.retryDelayMs) + : await request(); + + return HTTPLibrary.handleResponse(response); + } + + async patch(url: string, input: any, headers: Headers, retry: boolean = false): Promise { + const request = () => + axios.patch(url, HTTPLibrary.convertKeysWithMapper(input, this.requestMapper), { + headers: { ...headers, ...this.getUserAgentHeader() }, + }); + + const response = retry + ? await this.retry(this.retryAttempts, request, this.retryDelayMs) + : await request(); + + return HTTPLibrary.handleResponse(response); + } + + async retry(retries: number, callbackFn: () => any, delay: number): Promise { + let result: any; + + try { + result = await callbackFn(); + } catch (e: any) { + if ((e as AxiosError).isAxiosError) { + if (e.response) { + if (![500, 503, 504].includes(e.response.status)) { + return e.response; + } + } + } + if (retries > 1) { + // eslint-disable-next-line no-promise-executor-return + await new Promise((resolve) => setTimeout(resolve, delay)); + result = await this.retry(retries - 1, callbackFn, delay * 2); + } else { + throw e; + } + } + + return result; + } + + private static handleResponse(response: any) { + if (response.status >= 400) { + throwHttpError(response); + } + + response.data = HTTPLibrary.convertKeysWithMapper(response.data, this.responseMapper); + + return response; + } + + private getUserAgentHeader(): Headers { + const userAgentBase = 'Speechaceapi/1.0.0'; + + let userAgent = ''; + if (typeof window !== 'undefined') { + return {}; + } else if (typeof process !== 'undefined') { + userAgent = `Node.js/${process.version} ${userAgentBase}`; + } else if (typeof Deno !== 'undefined') { + userAgent = `Deno/${Deno.version.deno} ${userAgentBase}`; + } else if (typeof Bun !== 'undefined') { + userAgent = `Bun/${Bun.version} ${userAgentBase}`; + } else { + userAgent = userAgentBase; + } + + return { 'User-Agent': userAgent }; + } + + /** + *Converts keys in an object using a provided JSON mapper. + * @param {any} obj - The object to convert keys for. + * @param {Object} jsonMapper - The JSON mapper containing key mappings. + * @returns {any} - The object with converted keys. + */ + private static convertKeysWithMapper(obj: T, jsonMapper: Map): any { + if (!obj || typeof obj !== 'object' || obj instanceof FormData) { + return obj; + } + + if (Array.isArray(obj)) { + return obj.map((item) => HTTPLibrary.convertKeysWithMapper(item, jsonMapper)); + } + + const convertedObj: Record = {}; + Object.entries(obj).forEach(([key, value]) => { + if (value !== undefined) { + const convertedKey = jsonMapper.get(key) || key; + convertedObj[convertedKey] = HTTPLibrary.convertKeysWithMapper(value, jsonMapper); + } + }); + + return convertedObj; + } +} diff --git a/src/http/QuerySerializer.ts b/src/http/QuerySerializer.ts new file mode 100644 index 0000000..486526d --- /dev/null +++ b/src/http/QuerySerializer.ts @@ -0,0 +1,44 @@ +// This file was generated by liblab | https://liblab.com/ + +export type Explode = boolean; +export type QueryStyles = 'form' | 'spaceDelimited' | 'pipeDelimited' | 'deepObject'; +export type PathStyles = 'simple' | 'label' | 'matrix'; + +const styleMethods: Record = { + form: (parameterName: string, parameterValue: unknown, explode: boolean) => { + // Check if the parameterValue is an array + if (Array.isArray(parameterValue)) { + return explode + ? parameterValue.map((value) => `${parameterName}=${value}`).join('&') + : `${parameterName}=${parameterValue.join(',')}`; + } + + // Check if the parameterValue is an object + if (typeof parameterValue === 'object' && parameterValue !== null) { + if (explode) { + // Serialize object with exploded format: "key1=value1&key2=value2" + return Object.entries(parameterValue) + .map(([name, value]) => `${name}=${value}`) + .join('&'); + } + // Serialize object with non-exploded format: "key=key1,value1,key2,value2" + return `${parameterName}=${Object.entries(parameterValue) + .flatMap(([name, value]) => [name, value]) + .join(',')}`; + } + + // For primitive values + return `${parameterName}=${parameterValue}`; + }, +}; + +export function serializeQuery( + style: QueryStyles, + explode: Explode, + key: string, + value: unknown, +): string { + const method = styleMethods[style]; + if (!method) return ''; + return method(key, value, explode); +} diff --git a/src/http/errors/BadGateway.ts b/src/http/errors/BadGateway.ts new file mode 100644 index 0000000..a61dbd4 --- /dev/null +++ b/src/http/errors/BadGateway.ts @@ -0,0 +1,13 @@ +// This file was generated by liblab | https://liblab.com/ + +import { BaseHTTPError } from './base'; + +export default class BadGateway extends BaseHTTPError { + statusCode = 502; + + title = 'Bad Gateway'; + + constructor(detail: string = '') { + super(detail); + } +} diff --git a/src/http/errors/BadRequest.ts b/src/http/errors/BadRequest.ts new file mode 100644 index 0000000..ebfdc8a --- /dev/null +++ b/src/http/errors/BadRequest.ts @@ -0,0 +1,13 @@ +// This file was generated by liblab | https://liblab.com/ + +import { BaseHTTPError } from './base'; + +export default class BadRequest extends BaseHTTPError { + statusCode = 400; + + title = 'Bad Request'; + + constructor(detail: string = '') { + super(detail); + } +} diff --git a/src/http/errors/Conflict.ts b/src/http/errors/Conflict.ts new file mode 100644 index 0000000..c7d480d --- /dev/null +++ b/src/http/errors/Conflict.ts @@ -0,0 +1,13 @@ +// This file was generated by liblab | https://liblab.com/ + +import { BaseHTTPError } from './base'; + +export default class Conflict extends BaseHTTPError { + statusCode = 409; + + title = 'Conflict'; + + constructor(detail: string = '') { + super(detail); + } +} diff --git a/src/http/errors/ExpectationFailed.ts b/src/http/errors/ExpectationFailed.ts new file mode 100644 index 0000000..e110b8f --- /dev/null +++ b/src/http/errors/ExpectationFailed.ts @@ -0,0 +1,13 @@ +// This file was generated by liblab | https://liblab.com/ + +import { BaseHTTPError } from './base'; + +export default class ExpectationFailed extends BaseHTTPError { + statusCode = 417; + + title = 'Expectation Failed'; + + constructor(detail: string = '') { + super(detail); + } +} diff --git a/src/http/errors/FailedDependency.ts b/src/http/errors/FailedDependency.ts new file mode 100644 index 0000000..78269e3 --- /dev/null +++ b/src/http/errors/FailedDependency.ts @@ -0,0 +1,13 @@ +// This file was generated by liblab | https://liblab.com/ + +import { BaseHTTPError } from './base'; + +export default class FailedDependency extends BaseHTTPError { + statusCode = 424; + + title = 'Failed Dependency'; + + constructor(detail: string = '') { + super(detail); + } +} diff --git a/src/http/errors/Forbidden.ts b/src/http/errors/Forbidden.ts new file mode 100644 index 0000000..eb54af8 --- /dev/null +++ b/src/http/errors/Forbidden.ts @@ -0,0 +1,13 @@ +// This file was generated by liblab | https://liblab.com/ + +import { BaseHTTPError } from './base'; + +export default class Forbidden extends BaseHTTPError { + statusCode = 403; + + title = 'Forbidden'; + + constructor(detail: string = '') { + super(detail); + } +} diff --git a/src/http/errors/GatewayTimeout.ts b/src/http/errors/GatewayTimeout.ts new file mode 100644 index 0000000..4dab240 --- /dev/null +++ b/src/http/errors/GatewayTimeout.ts @@ -0,0 +1,13 @@ +// This file was generated by liblab | https://liblab.com/ + +import { BaseHTTPError } from './base'; + +export default class GatewayTimeout extends BaseHTTPError { + statusCode = 504; + + title = 'Gateway Timeout'; + + constructor(detail: string = '') { + super(detail); + } +} diff --git a/src/http/errors/Gone.ts b/src/http/errors/Gone.ts new file mode 100644 index 0000000..b7c6983 --- /dev/null +++ b/src/http/errors/Gone.ts @@ -0,0 +1,13 @@ +// This file was generated by liblab | https://liblab.com/ + +import { BaseHTTPError } from './base'; + +export default class Gone extends BaseHTTPError { + statusCode = 410; + + title = 'Gone'; + + constructor(detail: string = '') { + super(detail); + } +} diff --git a/src/http/errors/HttpVersionNotSupported.ts b/src/http/errors/HttpVersionNotSupported.ts new file mode 100644 index 0000000..c4c5fe9 --- /dev/null +++ b/src/http/errors/HttpVersionNotSupported.ts @@ -0,0 +1,13 @@ +// This file was generated by liblab | https://liblab.com/ + +import { BaseHTTPError } from './base'; + +export default class HttpVersionNotSupported extends BaseHTTPError { + statusCode = 505; + + title = 'HTTP Version Not Supported'; + + constructor(detail: string = '') { + super(detail); + } +} diff --git a/src/http/errors/InternalServerError.ts b/src/http/errors/InternalServerError.ts new file mode 100644 index 0000000..7be4493 --- /dev/null +++ b/src/http/errors/InternalServerError.ts @@ -0,0 +1,13 @@ +// This file was generated by liblab | https://liblab.com/ + +import { BaseHTTPError } from './base'; + +export default class InternalServerError extends BaseHTTPError { + statusCode = 500; + + title = 'Internal Server Error'; + + constructor(detail: string = '') { + super(detail); + } +} diff --git a/src/http/errors/LengthRequired.ts b/src/http/errors/LengthRequired.ts new file mode 100644 index 0000000..46059af --- /dev/null +++ b/src/http/errors/LengthRequired.ts @@ -0,0 +1,13 @@ +// This file was generated by liblab | https://liblab.com/ + +import { BaseHTTPError } from './base'; + +export default class LengthRequired extends BaseHTTPError { + statusCode = 411; + + title = 'LengthRequired'; + + constructor(detail: string = '') { + super(detail); + } +} diff --git a/src/http/errors/Locked.ts b/src/http/errors/Locked.ts new file mode 100644 index 0000000..7c8607d --- /dev/null +++ b/src/http/errors/Locked.ts @@ -0,0 +1,13 @@ +// This file was generated by liblab | https://liblab.com/ + +import { BaseHTTPError } from './base'; + +export default class Locked extends BaseHTTPError { + statusCode = 423; + + title = 'Locked'; + + constructor(detail: string = '') { + super(detail); + } +} diff --git a/src/http/errors/LoopDetected.ts b/src/http/errors/LoopDetected.ts new file mode 100644 index 0000000..aceb4e4 --- /dev/null +++ b/src/http/errors/LoopDetected.ts @@ -0,0 +1,13 @@ +// This file was generated by liblab | https://liblab.com/ + +import { BaseHTTPError } from './base'; + +export default class LoopDetected extends BaseHTTPError { + statusCode = 508; + + title = 'Loop Detected'; + + constructor(detail: string = '') { + super(detail); + } +} diff --git a/src/http/errors/MethodNotAllowed.ts b/src/http/errors/MethodNotAllowed.ts new file mode 100644 index 0000000..56b7588 --- /dev/null +++ b/src/http/errors/MethodNotAllowed.ts @@ -0,0 +1,16 @@ +// This file was generated by liblab | https://liblab.com/ + +import { BaseHTTPError } from './base'; + +export default class MethodNotAllowed extends BaseHTTPError { + statusCode = 405; + + title = 'Method Not Allowed'; + + allow?: string[]; + + constructor(detail: string = '', allow?: string[]) { + super(detail); + this.allow = allow; + } +} diff --git a/src/http/errors/MisdirectedRequest.ts b/src/http/errors/MisdirectedRequest.ts new file mode 100644 index 0000000..fa95de4 --- /dev/null +++ b/src/http/errors/MisdirectedRequest.ts @@ -0,0 +1,13 @@ +// This file was generated by liblab | https://liblab.com/ + +import { BaseHTTPError } from './base'; + +export default class MisdirectedRequest extends BaseHTTPError { + statusCode = 421; + + title = 'Misdirected Request'; + + constructor(detail: string = '') { + super(detail); + } +} diff --git a/src/http/errors/NetworkAuthenticationRequired.ts b/src/http/errors/NetworkAuthenticationRequired.ts new file mode 100644 index 0000000..06b0770 --- /dev/null +++ b/src/http/errors/NetworkAuthenticationRequired.ts @@ -0,0 +1,13 @@ +// This file was generated by liblab | https://liblab.com/ + +import { BaseHTTPError } from './base'; + +export default class NetworkAuthenticationRequired extends BaseHTTPError { + statusCode = 511; + + title = 'Network Authentication Required'; + + constructor(detail: string = '') { + super(detail); + } +} diff --git a/src/http/errors/NotAcceptable.ts b/src/http/errors/NotAcceptable.ts new file mode 100644 index 0000000..7d45a96 --- /dev/null +++ b/src/http/errors/NotAcceptable.ts @@ -0,0 +1,13 @@ +// This file was generated by liblab | https://liblab.com/ + +import { BaseHTTPError } from './base'; + +export default class NotAcceptable extends BaseHTTPError { + statusCode = 406; + + title = 'Not Acceptable'; + + constructor(detail: string = '') { + super(detail); + } +} diff --git a/src/http/errors/NotExtended.ts b/src/http/errors/NotExtended.ts new file mode 100644 index 0000000..1bbb8ce --- /dev/null +++ b/src/http/errors/NotExtended.ts @@ -0,0 +1,13 @@ +// This file was generated by liblab | https://liblab.com/ + +import { BaseHTTPError } from './base'; + +export default class NotExtended extends BaseHTTPError { + statusCode = 510; + + title = 'Not Extended'; + + constructor(detail: string = '') { + super(detail); + } +} diff --git a/src/http/errors/NotFound.ts b/src/http/errors/NotFound.ts new file mode 100644 index 0000000..ab0a265 --- /dev/null +++ b/src/http/errors/NotFound.ts @@ -0,0 +1,13 @@ +// This file was generated by liblab | https://liblab.com/ + +import { BaseHTTPError } from './base'; + +export default class NotFound extends BaseHTTPError { + statusCode = 404; + + title = 'Not Found'; + + constructor(detail: string = '') { + super(detail); + } +} diff --git a/src/http/errors/NotImplemented.ts b/src/http/errors/NotImplemented.ts new file mode 100644 index 0000000..0ffb365 --- /dev/null +++ b/src/http/errors/NotImplemented.ts @@ -0,0 +1,13 @@ +// This file was generated by liblab | https://liblab.com/ + +import { BaseHTTPError } from './base'; + +export default class NotImplemented extends BaseHTTPError { + statusCode = 501; + + title = 'Not Implemented'; + + constructor(detail: string = '') { + super(detail); + } +} diff --git a/src/http/errors/PayloadTooLarge.ts b/src/http/errors/PayloadTooLarge.ts new file mode 100644 index 0000000..17e6b8f --- /dev/null +++ b/src/http/errors/PayloadTooLarge.ts @@ -0,0 +1,16 @@ +// This file was generated by liblab | https://liblab.com/ + +import { BaseHTTPError } from './base'; + +export default class PayloadTooLarge extends BaseHTTPError { + statusCode = 413; + + title = 'Payload Too Large'; + + retryAfter: number | null; + + constructor(detail: string = '', retryAfter: number | null = null) { + super(detail); + this.retryAfter = retryAfter; + } +} diff --git a/src/http/errors/PaymentRequired.ts b/src/http/errors/PaymentRequired.ts new file mode 100644 index 0000000..e623260 --- /dev/null +++ b/src/http/errors/PaymentRequired.ts @@ -0,0 +1,13 @@ +// This file was generated by liblab | https://liblab.com/ + +import { BaseHTTPError } from './base'; + +export default class PaymentRequired extends BaseHTTPError { + statusCode = 402; + + title = 'Payment Required'; + + constructor(detail: string = '') { + super(detail); + } +} diff --git a/src/http/errors/PreconditionFailed.ts b/src/http/errors/PreconditionFailed.ts new file mode 100644 index 0000000..282ca7a --- /dev/null +++ b/src/http/errors/PreconditionFailed.ts @@ -0,0 +1,13 @@ +// This file was generated by liblab | https://liblab.com/ + +import { BaseHTTPError } from './base'; + +export default class PreconditionFailed extends BaseHTTPError { + statusCode = 412; + + title = 'PreconditionFailed'; + + constructor(detail: string = '') { + super(detail); + } +} diff --git a/src/http/errors/PreconditionRequired.ts b/src/http/errors/PreconditionRequired.ts new file mode 100644 index 0000000..bebfa34 --- /dev/null +++ b/src/http/errors/PreconditionRequired.ts @@ -0,0 +1,13 @@ +// This file was generated by liblab | https://liblab.com/ + +import { BaseHTTPError } from './base'; + +export default class PreconditionRequired extends BaseHTTPError { + statusCode = 428; + + title = 'Precondition Required'; + + constructor(detail: string = '') { + super(detail); + } +} diff --git a/src/http/errors/ProxyAuthenticationRequired.ts b/src/http/errors/ProxyAuthenticationRequired.ts new file mode 100644 index 0000000..73bd14e --- /dev/null +++ b/src/http/errors/ProxyAuthenticationRequired.ts @@ -0,0 +1,16 @@ +// This file was generated by liblab | https://liblab.com/ + +import { AuthenticateChallenge, BaseHTTPError } from './base'; + +export default class ProxyAuthenticationRequired extends BaseHTTPError { + statusCode = 407; + + title = 'Proxy Authentication Required'; + + proxyAuthenticate?: AuthenticateChallenge; + + constructor(detail: string = '', proxyAuthenticate?: AuthenticateChallenge) { + super(detail); + this.proxyAuthenticate = proxyAuthenticate; + } +} diff --git a/src/http/errors/RangeNotSatisfiable.ts b/src/http/errors/RangeNotSatisfiable.ts new file mode 100644 index 0000000..304b975 --- /dev/null +++ b/src/http/errors/RangeNotSatisfiable.ts @@ -0,0 +1,13 @@ +// This file was generated by liblab | https://liblab.com/ + +import { BaseHTTPError } from './base'; + +export default class RangeNotSatisfiable extends BaseHTTPError { + statusCode = 416; + + title = 'Range Not Satisfiable'; + + constructor(detail: string = '') { + super(detail); + } +} diff --git a/src/http/errors/RequestHeaderFieldsTooLarge.ts b/src/http/errors/RequestHeaderFieldsTooLarge.ts new file mode 100644 index 0000000..1b69cee --- /dev/null +++ b/src/http/errors/RequestHeaderFieldsTooLarge.ts @@ -0,0 +1,13 @@ +// This file was generated by liblab | https://liblab.com/ + +import { BaseHTTPError } from './base'; + +export default class RequestHeaderFieldsTooLarge extends BaseHTTPError { + statusCode = 431; + + title = 'Request Header Fields Too Large'; + + constructor(detail: string = '') { + super(detail); + } +} diff --git a/src/http/errors/RequestTimeout.ts b/src/http/errors/RequestTimeout.ts new file mode 100644 index 0000000..7378312 --- /dev/null +++ b/src/http/errors/RequestTimeout.ts @@ -0,0 +1,13 @@ +// This file was generated by liblab | https://liblab.com/ + +import { BaseHTTPError } from './base'; + +export default class RequestTimeout extends BaseHTTPError { + statusCode = 408; + + title = 'Request Timeout'; + + constructor(detail: string = '') { + super(detail); + } +} diff --git a/src/http/errors/ServiceUnavailable.ts b/src/http/errors/ServiceUnavailable.ts new file mode 100644 index 0000000..64051aa --- /dev/null +++ b/src/http/errors/ServiceUnavailable.ts @@ -0,0 +1,16 @@ +// This file was generated by liblab | https://liblab.com/ + +import { BaseHTTPError } from './base'; + +export default class ServiceUnavailable extends BaseHTTPError { + statusCode = 503; + + title = 'Service Unavailable'; + + retryAfter: number | null; + + constructor(detail: string = '', retryAfter: number | null = null) { + super(detail); + this.retryAfter = retryAfter; + } +} diff --git a/src/http/errors/TooEarly.ts b/src/http/errors/TooEarly.ts new file mode 100644 index 0000000..ca2a185 --- /dev/null +++ b/src/http/errors/TooEarly.ts @@ -0,0 +1,13 @@ +// This file was generated by liblab | https://liblab.com/ + +import { BaseHTTPError } from './base'; + +export default class TooEarly extends BaseHTTPError { + statusCode = 425; + + title = 'Too Early'; + + constructor(detail: string = '') { + super(detail); + } +} diff --git a/src/http/errors/TooManyRequests.ts b/src/http/errors/TooManyRequests.ts new file mode 100644 index 0000000..3ab6328 --- /dev/null +++ b/src/http/errors/TooManyRequests.ts @@ -0,0 +1,16 @@ +// This file was generated by liblab | https://liblab.com/ + +import { BaseHTTPError } from './base'; + +export default class TooManyRequests extends BaseHTTPError { + statusCode = 429; + + title = 'Too Many Requests'; + + retryAfter: number | null; + + constructor(detail: string = '', retryAfter: number | null = null) { + super(detail); + this.retryAfter = retryAfter; + } +} diff --git a/src/http/errors/Unauthorized.ts b/src/http/errors/Unauthorized.ts new file mode 100644 index 0000000..3e04ff2 --- /dev/null +++ b/src/http/errors/Unauthorized.ts @@ -0,0 +1,16 @@ +// This file was generated by liblab | https://liblab.com/ + +import { AuthenticateChallenge, BaseHTTPError } from './base'; + +export default class Unauthorized extends BaseHTTPError { + statusCode = 401; + + title = 'Unauthorized'; + + wwwAuthenticate?: AuthenticateChallenge; + + constructor(detail: string = '', wwwAuthenticate?: AuthenticateChallenge) { + super(detail); + this.wwwAuthenticate = wwwAuthenticate; + } +} diff --git a/src/http/errors/UnavailableForLegalReasons.ts b/src/http/errors/UnavailableForLegalReasons.ts new file mode 100644 index 0000000..d079b6c --- /dev/null +++ b/src/http/errors/UnavailableForLegalReasons.ts @@ -0,0 +1,13 @@ +// This file was generated by liblab | https://liblab.com/ + +import { BaseHTTPError } from './base'; + +export default class UnavailableForLegalReasons extends BaseHTTPError { + statusCode = 451; + + title = 'Unavailable For Legal Reasons'; + + constructor(detail: string = '') { + super(detail); + } +} diff --git a/src/http/errors/UnprocessableEntity.ts b/src/http/errors/UnprocessableEntity.ts new file mode 100644 index 0000000..5f71072 --- /dev/null +++ b/src/http/errors/UnprocessableEntity.ts @@ -0,0 +1,13 @@ +// This file was generated by liblab | https://liblab.com/ + +import { BaseHTTPError } from './base'; + +export default class UnprocessableEntity extends BaseHTTPError { + statusCode = 422; + + title = 'Unprocessable Entity'; + + constructor(detail: string = '') { + super(detail); + } +} diff --git a/src/http/errors/UnsufficientStorage.ts b/src/http/errors/UnsufficientStorage.ts new file mode 100644 index 0000000..e488f4b --- /dev/null +++ b/src/http/errors/UnsufficientStorage.ts @@ -0,0 +1,13 @@ +// This file was generated by liblab | https://liblab.com/ + +import { BaseHTTPError } from './base'; + +export default class UnsufficientStorage extends BaseHTTPError { + statusCode = 507; + + title = 'Unsufficient Storage'; + + constructor(detail: string = '') { + super(detail); + } +} diff --git a/src/http/errors/UnsupportedMediaType.ts b/src/http/errors/UnsupportedMediaType.ts new file mode 100644 index 0000000..c90fbf9 --- /dev/null +++ b/src/http/errors/UnsupportedMediaType.ts @@ -0,0 +1,13 @@ +// This file was generated by liblab | https://liblab.com/ + +import { BaseHTTPError } from './base'; + +export default class UnsupportedMediaType extends BaseHTTPError { + statusCode = 415; + + title = 'Unsupported Media Type'; + + constructor(detail: string = '') { + super(detail); + } +} diff --git a/src/http/errors/UpgradeRequired.ts b/src/http/errors/UpgradeRequired.ts new file mode 100644 index 0000000..5565147 --- /dev/null +++ b/src/http/errors/UpgradeRequired.ts @@ -0,0 +1,13 @@ +// This file was generated by liblab | https://liblab.com/ + +import { BaseHTTPError } from './base'; + +export default class UpgradeRequired extends BaseHTTPError { + statusCode = 426; + + title = 'Upgrade Required'; + + constructor(detail: string = '') { + super(detail); + } +} diff --git a/src/http/errors/UriTooLong.ts b/src/http/errors/UriTooLong.ts new file mode 100644 index 0000000..02eb5a8 --- /dev/null +++ b/src/http/errors/UriTooLong.ts @@ -0,0 +1,13 @@ +// This file was generated by liblab | https://liblab.com/ + +import { BaseHTTPError } from './base'; + +export default class UriTooLong extends BaseHTTPError { + statusCode = 414; + + title = 'URI Too Long'; + + constructor(detail: string = '') { + super(detail); + } +} diff --git a/src/http/errors/VariantAlsoNegotiates.ts b/src/http/errors/VariantAlsoNegotiates.ts new file mode 100644 index 0000000..bae60eb --- /dev/null +++ b/src/http/errors/VariantAlsoNegotiates.ts @@ -0,0 +1,13 @@ +// This file was generated by liblab | https://liblab.com/ + +import { BaseHTTPError } from './base'; + +export default class VariantAlsoNegotiates extends BaseHTTPError { + statusCode = 506; + + title = 'Variant Also Negotiates'; + + constructor(detail: string = '') { + super(detail); + } +} diff --git a/src/http/errors/base.ts b/src/http/errors/base.ts new file mode 100644 index 0000000..1272b1e --- /dev/null +++ b/src/http/errors/base.ts @@ -0,0 +1,54 @@ +// This file was generated by liblab | https://liblab.com/ + +export interface IHTTPError extends Error { + statusCode: number; +} + +export interface IHTTPErrorDescription extends IHTTPError { + type?: string; + title: string; + detail?: string; + instance?: string; +} + +export function isHTTPError(error: unknown): error is IHTTPError { + if (!error) { + return false; + } + return Number.isInteger((error as IHTTPError).statusCode); +} + +export function isHTTPIssue(error: unknown): error is IHTTPErrorDescription { + if (!error) { + return false; + } + return (error as IHTTPErrorDescription).title !== undefined && isHTTPError(error); +} + +export class BaseHTTPError extends Error implements IHTTPError { + public type?: string; + + public title: string = 'Internal Server Error'; + + public detail?: string; + + public instance?: string; + + public statusCode: number = 500; + + constructor(detail: string = '') { + super(detail || 'An Unknown HTTP Error Occurred'); + this.detail = detail; + this.stack = (new Error()).stack; + } +} + +export function isClientError(error: Error): boolean { + return isHTTPError(error); +} + +export function isServerError(e: Error): boolean { + return isHTTPError(e) && e.statusCode >= 500 && e.statusCode <= 599; +} + +export type AuthenticateChallenge = string | string[]; diff --git a/src/http/errors/index.ts b/src/http/errors/index.ts new file mode 100644 index 0000000..f815b07 --- /dev/null +++ b/src/http/errors/index.ts @@ -0,0 +1,85 @@ +// This file was generated by liblab | https://liblab.com/ + +import BadRequest from './BadRequest'; +import Unauthorized from './Unauthorized'; +import PaymentRequired from './PaymentRequired'; +import Forbidden from './Forbidden'; +import NotFound from './NotFound'; +import MethodNotAllowed from './MethodNotAllowed'; +import NotAcceptable from './NotAcceptable'; +import ProxyAuthenticationRequired from './ProxyAuthenticationRequired'; +import RequestTimeout from './RequestTimeout'; +import Conflict from './Conflict'; +import Gone from './Gone'; +import LengthRequired from './LengthRequired'; +import PreconditionFailed from './PreconditionFailed'; +import PayloadTooLarge from './PayloadTooLarge'; +import UriTooLong from './UriTooLong'; +import UnsupportedMediaType from './UnsupportedMediaType'; +import RangeNotSatisfiable from './RangeNotSatisfiable'; +import ExpectationFailed from './ExpectationFailed'; +import MisdirectedRequest from './MisdirectedRequest'; +import UnprocessableEntity from './UnprocessableEntity'; +import Locked from './Locked'; +import FailedDependency from './FailedDependency'; +import TooEarly from './TooEarly'; +import UpgradeRequired from './UpgradeRequired'; +import PreconditionRequired from './PreconditionRequired'; +import TooManyRequests from './TooManyRequests'; +import RequestHeaderFieldsTooLarge from './RequestHeaderFieldsTooLarge'; +import UnavailableForLegalReasons from './UnavailableForLegalReasons'; +import InternalServerError from './InternalServerError'; +import NotImplemented from './NotImplemented'; +import BadGateway from './BadGateway'; +import ServiceUnavailable from './ServiceUnavailable'; +import GatewayTimeout from './GatewayTimeout'; +import HttpVersionNotSupported from './HttpVersionNotSupported'; +import VariantAlsoNegotiates from './VariantAlsoNegotiates'; +import UnsufficientStorage from './UnsufficientStorage'; +import LoopDetected from './LoopDetected'; +import NotExtended from './NotExtended'; +import NetworkAuthenticationRequired from './NetworkAuthenticationRequired'; +import { BaseHTTPError } from './base'; + +export { + BaseHTTPError, + BadRequest, + Unauthorized, + PaymentRequired, + Forbidden, + NotFound, + MethodNotAllowed, + NotAcceptable, + ProxyAuthenticationRequired, + RequestTimeout, + Conflict, + Gone, + LengthRequired, + PreconditionFailed, + PayloadTooLarge, + UriTooLong, + UnsupportedMediaType, + RangeNotSatisfiable, + ExpectationFailed, + MisdirectedRequest, + UnprocessableEntity, + Locked, + FailedDependency, + TooEarly, + UpgradeRequired, + PreconditionRequired, + TooManyRequests, + RequestHeaderFieldsTooLarge, + UnavailableForLegalReasons, + InternalServerError, + NotImplemented, + BadGateway, + ServiceUnavailable, + GatewayTimeout, + HttpVersionNotSupported, + VariantAlsoNegotiates, + UnsufficientStorage, + LoopDetected, + NotExtended, + NetworkAuthenticationRequired, +}; diff --git a/src/http/httpExceptions.ts b/src/http/httpExceptions.ts new file mode 100644 index 0000000..cf9291d --- /dev/null +++ b/src/http/httpExceptions.ts @@ -0,0 +1,140 @@ +// This file was generated by liblab | https://liblab.com/ + +import { + BaseHTTPError, + BadRequest, + Unauthorized, + PaymentRequired, + Forbidden, + NotFound, + MethodNotAllowed, + NotAcceptable, + ProxyAuthenticationRequired, + RequestTimeout, + Conflict, + Gone, + LengthRequired, + PreconditionFailed, + PayloadTooLarge, + UriTooLong, + UnsupportedMediaType, + RangeNotSatisfiable, + ExpectationFailed, + MisdirectedRequest, + UnprocessableEntity, + Locked, + FailedDependency, + TooEarly, + UpgradeRequired, + PreconditionRequired, + TooManyRequests, + RequestHeaderFieldsTooLarge, + UnavailableForLegalReasons, + InternalServerError, + NotImplemented, + BadGateway, + ServiceUnavailable, + GatewayTimeout, + HttpVersionNotSupported, + VariantAlsoNegotiates, + UnsufficientStorage, + LoopDetected, + NotExtended, + NetworkAuthenticationRequired, +} from './errors'; + +interface HttpResponseWithError { + status: number; + headers: any; + data?: any; +} + +interface NumberToClass { + [key: number]: any; +} + +const statusCodeToErrorFunction: NumberToClass = { + 400: BadRequest, + 401: Unauthorized, + 402: PaymentRequired, + 403: Forbidden, + 404: NotFound, + 405: MethodNotAllowed, + 406: NotAcceptable, + 407: ProxyAuthenticationRequired, + 408: RequestTimeout, + 409: Conflict, + 410: Gone, + 411: LengthRequired, + 412: PreconditionFailed, + 413: PayloadTooLarge, + 414: UriTooLong, + 415: UnsupportedMediaType, + 416: RangeNotSatisfiable, + 417: ExpectationFailed, + 421: MisdirectedRequest, + 422: UnprocessableEntity, + 423: Locked, + 424: FailedDependency, + 425: TooEarly, + 426: UpgradeRequired, + 428: PreconditionRequired, + 429: TooManyRequests, + 431: RequestHeaderFieldsTooLarge, + 451: UnavailableForLegalReasons, + 500: InternalServerError, + 501: NotImplemented, + 502: BadGateway, + 503: ServiceUnavailable, + 504: GatewayTimeout, + 505: HttpVersionNotSupported, + 506: VariantAlsoNegotiates, + 507: UnsufficientStorage, + 508: LoopDetected, + 510: NotExtended, + 511: NetworkAuthenticationRequired, +}; + +/** + * @summary This function will throw an error. + * + * @param {HttpResponseWithError} response - the response from a request, must contain a status and data fields + * @throws {Error} - an http error + */ +export default function throwHttpError(response: HttpResponseWithError): never { + let error: BaseHTTPError = new BaseHTTPError(response.data); + switch (response.status) { + case 401: + error = new Unauthorized(response.data, response.headers['WWW-Authenticate']); + break; + case 405: + // this indicates a bug in the spec if it allows a method that the server rejects + error = new MethodNotAllowed(response.data, response.headers.allowed); + break; + case 407: + error = new ProxyAuthenticationRequired( + response.data, + response.headers['Proxy-Authenticate'], + ); + break; + case 413: + error = new PayloadTooLarge(response.data, response.headers['Retry-After']); + break; + case 429: + error = new TooManyRequests(response.data, response.headers['Retry-After']); + break; + case 503: + error = new ServiceUnavailable(response.data, response.headers['Retry-After']); + break; + default: + if (response.status in statusCodeToErrorFunction) { + error = new statusCodeToErrorFunction[response.status](response.data); + } else { + const error = new BaseHTTPError(response.data); + error.statusCode = response.status; + error.title = 'unknown error'; + } + } + + throw error; +} diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..456d540 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,35 @@ +// This file was generated by liblab | https://liblab.com/ + +import { V1V7OlderVersionsService } from './services/v1V7OlderVersions/V1V7OlderVersions'; +import { V9LatestService } from './services/v9Latest/V9Latest'; + +export * from './models'; + +export * as V1V7OlderVersionsModels from './services/v1V7OlderVersions'; +export * as V9LatestModels from './services/v9Latest'; + +export * from './http/errors'; + +/** + * [Speechace](https://www.speechace.com) is a Speech Recognition API for fluency and pronunciation assessment. Our patented technology is unique in its ability to score a learner's speech and pinpoint individual syllable and phoneme level mistakes in a user's pronunciation in real time. --- # NEW! Task Achievement and full PTE Speaking assessment ## Introducing the Score Task API with support for Describe-Image, Retell-Lecture, and Answer-Question content scoring The new [Score Task API](https://docs.speechace.com/#a9d386e2-c8fc-492f-a6b4-eefc24895aa5) now supports advanced evaluation of the content of a spontaneous response, and how well it accomplished the task set out in the question. The API supports scoring tasks with either audio or text only and provides a content score aligned with the PTE content score scale. --- # NEW! French and Spanish Scripted and Spontaneous Speech Assessment with Task Achievment ## Speechace Pronunciation Assessment API and Fluency Assessment API now support French and Spanish Speechace API v9.9 now supports assessment of pronunciation and fluency in 4 new dialects: (fr-fr, fr-ca, es-es, es-mx): - Pronunciation assessment with utterance, word, syllable, and phoneme level scores - Fluency assessment with utterance and segment level scores - Scores provided on 0..100 scale and CEFR - Available today in all regions - Premium API support for Spontaneous Speech transcription + Scoring in French and Spanish - Premium API support for Task Achievment scoring in French and Spanish See the API examples for details: [Score Pronunciation API](https://docs.speechace.com/#0d443b6f-56ae-4ce3-b25f-81d8fa189ec5) [Score Fluency API](https://docs.speechace.com/#fcfed32d-25e9-40a7-bddc-cca399489d65) [Transcribe & Score API](https://docs.speechace.com/#76089b5d-7e25-4744-8d32-f6c230acf217) [Score Task API](https://docs.speechace.com/#a9d386e2-c8fc-492f-a6b4-eefc24895aa5) --- # API SKUs and Use Cases The Speechace API comes in 3 SKUs and can be used to assess and score a variety of speaking activities. | API SKU | Use Cases | | --- | --- | | BASIC | **Pronunciation Assessment** **API**
Word and Sentence speaking activities
Multiple Choice speaking activities | | PRO | **Fluency Assessment** **API**
Read Aloud, Repeat Sentence
IELTS/PTE Fluency practice activities | | PREMIUM | **Spontaneous Speech Assessment** **API**
CEFR, IELTS, TOEIC, PTE Speaking Proficiency Assessment
Free speaking activities
Relevance Assessment
Comprehensive skill assessment: Grammar, Vocabulary, Coherence, Pronunciation, Fluency
Task Achievement | # API Keys You need a Speechace API Subscription to obtain a key. You can obtain a Speechace key [at https://www.speechace.com/speechace-api-plans/](https://www.speechace.com/speechace-api-plans/) # API Regions The Speechace API currently supports the following regions. Your API Key is tied to a specific region. You can request additional API Keys under the same Subscription within other regions. | **Region** | **API Endpoint** | | --- | --- | | US West (Oregon) | [https://api.speechace.co](https://) | | AP Southeast (Singapore) | [https://api2.speechace.com](https://) | | EU West (Ireland) | [https://api4.speechace.com](https://) | | AP South (Mumbai) | [https://api5.speechace.com](https://) | # API Versioning The Speechace API versioning is explicit in the request URL. Up to v9.0 Speechace API versioning was explicit with the caller specifying the exact version they use in the request url. From v9.0 onwards the API caller can choose to take silent minor version updates. | **Request url** | **Resulting** **version** | | --- | --- | | [https://api.speechace.co/scoring/text/v9/json](https://)? | This request will use the latest available minor version of v9 (e.g. v9.0 or v9.1 or v9.2 etc.) | | [https://api.speechace.co/scoring/text/v9.0/json](https://)? | This request will explicitly use the minor version v9.0 | **Major version history:** | **version** | **url** | **notes** | | --- | --- | --- | | 1 | [https://api.speechace.co/api/scoring/text/v0.1/json](https://)? | v1 | | 2 | [https://api.speechace.co/api/scoring/text/v0.2/json](https://)? | v2 | | 3 | [https://api.speechace.co/api/scoring/text/v0.3/json](https://)? | v3 | | 5 | [https://api.speechace.co/api/scoring/text/v0.5/json](https://)? | v5 | | 7 | [https://api.speechace.co/api/scoring/text/v0.7/json](https://)? | v7 | | 9 | [https://api.speechace.co/api/scoring/text/v9/json](https://)? | current latest production major version | | 9.2 | [https://api.speechace.co/api/scoring/text/v9.2/json](https://)? | New minor version scoring models. | | 9.4 | [https://api.speechace.co/api/scoring/text/v9.4/json](https://)? | New minor version Transcription models | | 9.5 | [https://api.speechace.co/api/scoring/text/v9.5/json](https://)? | New noise reduction enhacement.
Beta Grammar, Coherence, Vocab feedback metrices.
Current latest production minor version | | 9.7 | [https://api.speechace.co/api/scoring/text/v9.7/json](https://api.speechace.co/api/scoring/text/v9.7/json)? | Noise and aligment updates.
New relevance scoring model
[Markup language support for letter to phoneme mapping](https://) | | 9.8 | [https://api.speechace.co/api/scoring/text/v9.8/json](https://api.speechace.co/api/scoring/text/v9.8/json)? | Pronunciation model update
Grammatical accuracy model update | | 9.9 | [https://api.speechace.co/api/scoring/text/v9.9/json](https://api.speechace.co/api/scoring/text/v9.9/json)? | Core model updates
Major performance enhancement | You can keep up with new version announcements by subscribing to the Speechace Blog at [https://www.speechace.com/blog/](https://www.speechace.com/blog/) # Samples You can download samples showing both: - frontend (recording audio, passing to backend, showing scores) - backend (calling speechace API, passing scores to frontend) The samples are available at [https://github.com/speechace/speechace-api-samples](https://github.com/speechace/speechace-api-samples) # API Limits The Speechace API has the following limits per the API SKU license: Basic, Pro, or Premium. | Limit | API SKU (BASIC) | API SKU (PRO) | API SKU (PREMIUM) | | --- | --- | --- | --- | | Max Audio Length | 15 seconds | 45 seconds | 2 minutes | | Max File Size | 1.9MB | 2.5MB | 3.8MB | # Recording Audio Speechace supports audio in most formats used on the web (e.g. wav, mp3, m4a, ogg, webm, aiff). We strongly recommend recording at the following settings to optimize your file size and increase performance: - _sample size_: 16-bit - _sample rate_: 16Khz - _channels_: 1 (i.e. mono) # Terms of Service By using the Speechace API you agree to the [Privacy Policy](https://www.speechace.com/api-privacy-policy/) and the [Terms of Service](https://www.speechace.com/terms-of-service/). Speechace API is the Copyright © Speechace LLC, Seattle, WA, USA. + */ +export class Speechaceapi { + public v1V7OlderVersions: V1V7OlderVersionsService; + public v9Latest: V9LatestService; + + constructor() { + this.v1V7OlderVersions = new V1V7OlderVersionsService(); + this.v9Latest = new V9LatestService(); + } + + /** + * Sets the baseUrl that the SDK will use for its requests. + * @param {string} url + */ + setBaseUrl(url: string): void { + this.v1V7OlderVersions.setBaseUrl(url); + this.v9Latest.setBaseUrl(url); + } +} + +// c029837e0e474b76bc487506e8799df5e3335891efe4fb02bda7a1441840310c diff --git a/src/models.ts b/src/models.ts new file mode 100644 index 0000000..c37c6e7 --- /dev/null +++ b/src/models.ts @@ -0,0 +1,20 @@ +// This file was generated by liblab | https://liblab.com/ + +export type { AssessRelevance1Request } from './services/v1V7OlderVersions/models/AssessRelevance1Request'; +export type { AssessRelevance1Response } from './services/v1V7OlderVersions/models/AssessRelevance1Response'; +export type { GetGrammarVocabCoherenceFeedbackMetricsRequest } from './services/v9Latest/models/GetGrammarVocabCoherenceFeedbackMetricsRequest'; +export type { GetGrammarVocabCoherenceFeedbackMetricsResponse } from './services/v9Latest/models/GetGrammarVocabCoherenceFeedbackMetricsResponse'; +export type { PteAnswerQuestionRequest } from './services/v9Latest/models/PteAnswerQuestionRequest'; +export type { PteAnswerQuestionResponse } from './services/v9Latest/models/PteAnswerQuestionResponse'; +export type { ScoreAPhonemeList1Request } from './services/v1V7OlderVersions/models/ScoreAPhonemeList1Request'; +export type { ScoreAPhonemeList1Response } from './services/v1V7OlderVersions/models/ScoreAPhonemeList1Response'; +export type { ScoreAPhonemeListRequest } from './services/v9Latest/models/ScoreAPhonemeListRequest'; +export type { ScoreAPhonemeListResponse } from './services/v9Latest/models/ScoreAPhonemeListResponse'; +export type { ScoreFluencySpanishRequest } from './services/v9Latest/models/ScoreFluencySpanishRequest'; +export type { ScoreFluencySpanishResponse } from './services/v9Latest/models/ScoreFluencySpanishResponse'; +export type { ScoreVocabularyGrammarRequest } from './services/v1V7OlderVersions/models/ScoreVocabularyGrammarRequest'; +export type { ScoreVocabularyGrammarResponse } from './services/v1V7OlderVersions/models/ScoreVocabularyGrammarResponse'; +export type { ValidateText1Request } from './services/v1V7OlderVersions/models/ValidateText1Request'; +export type { ValidateText1Response } from './services/v1V7OlderVersions/models/ValidateText1Response'; +export type { ValidateTextRequest } from './services/v9Latest/models/ValidateTextRequest'; +export type { ValidateTextResponse } from './services/v9Latest/models/ValidateTextResponse'; diff --git a/src/services/README.md b/src/services/README.md new file mode 100644 index 0000000..5fb9207 --- /dev/null +++ b/src/services/README.md @@ -0,0 +1,428 @@ +# Speechaceapi Services + +A list of all services and services methods. + +- Services + + - [V9Latest](#v9latest) + + - [V1V7OlderVersions](#v1v7olderversions) + +- [All Methods](#all-methods) + +## V9Latest + +| Method | Description | +| :---------------------------------------------------------------------------------- | :--------------------------------------------- | +| [scoreFluencySpanish](#scorefluencyspanish) | Score Fluency - Spanish | +| [scoreAPhonemeList](#scoreaphonemelist) | Score a Phoneme list | +| [validateText](#validatetext) | Validate Text | +| [pteAnswerQuestion](#pteanswerquestion) | PTE Answer Question | +| [getGrammarVocabCoherenceFeedbackMetrics](#getgrammarvocabcoherencefeedbackmetrics) | Get Grammar, Vocab, Coherence feedback metrics | + +## V1V7OlderVersions + +| Method | Description | +| :------------------------------------------------ | :------------------------- | +| [scoreVocabularyGrammar](#scorevocabularygrammar) | Score Vocabulary & Grammar | +| [scoreAPhonemeList1](#scoreaphonemelist1) | Score a Phoneme list | +| [validateText1](#validatetext1) | Validate Text | +| [assessRelevance1](#assessrelevance1) | Assess Relevance | + +## All Methods + +### **scoreFluencySpanish** + +Score Fluency - Spanish + +- HTTP Method: POST +- Endpoint: /api/scoring/text/v9/json + +**Required Parameters** + +| input | object | Request body. | + +**Optional Parameters** + +Optional parameters are passed as part of the last parameter to the method. Ex. {optionalParam1 : 'value1', optionalParam2: 'value2'} + +| Name | Type | Description | +| :------ | :----- | :------------------------------------------------------------------------------- | +| key | string | API key issued by Speechace. | +| dialect | string | The dialect to use for scoring. Supported values are: en-us, en-gb, fr-fr, fr-ca | + +**Return Type** + +ScoreFluencySpanishResponse + +**Example Usage Code Snippet** + +```Typescript +import { Speechaceapi } from 'speechaceapi'; + +const sdk = new Speechaceapi(); + +(async () => { + const input = {}; + const result = await sdk.v9Latest.scoreFluencySpanish(input, { + key: '{{speechace_prokey}}', + dialect: 'es-es', + }); + console.log(result); +})(); + +``` + +### **scoreAPhonemeList** + +Score a Phoneme list + +- HTTP Method: POST +- Endpoint: /api/scoring/phone_list/v9/json + +**Required Parameters** + +| input | object | Request body. | + +**Optional Parameters** + +Optional parameters are passed as part of the last parameter to the method. Ex. {optionalParam1 : 'value1', optionalParam2: 'value2'} + +| Name | Type | Description | +| :------ | :----- | :-------------------------------------------------------------------------------------------------- | +| key | string | API key issued by Speechace. | +| userId | string | Optional: A unique anonymized identifier for the end-user who spoke the audio. | +| dialect | string | The dialect to use for scoring. Supported values are "en-us" (US English) and "en-gb" (UK English). | + +**Return Type** + +ScoreAPhonemeListResponse + +**Example Usage Code Snippet** + +```Typescript +import { Speechaceapi } from 'speechaceapi'; + +const sdk = new Speechaceapi(); + +(async () => { + const input = {}; + const result = await sdk.v9Latest.scoreAPhonemeList(input, { + key: '{{speechacekey}}', + userId: 'XYZ-ABC-99001', + dialect: 'en-us', + }); + console.log(result); +})(); + +``` + +### **validateText** + +Validate Text + +- HTTP Method: POST +- Endpoint: /api/validating/text/v9/json + +**Required Parameters** + +| input | object | Request body. | + +**Optional Parameters** + +Optional parameters are passed as part of the last parameter to the method. Ex. {optionalParam1 : 'value1', optionalParam2: 'value2'} + +| Name | Type | Description | +| :------ | :----- | :------------------------------------------------------------------------------------------------------------------------- | +| key | string | API key issued by Speechace. | +| text | string | A sentence or sequence of words to validate. | +| dialect | string | The dialect to use for validation. Default is "en-us". Supported values are "en-us" (US English) and "en-gb" (UK English). | + +**Return Type** + +ValidateTextResponse + +**Example Usage Code Snippet** + +```Typescript +import { Speechaceapi } from 'speechaceapi'; + +const sdk = new Speechaceapi(); + +(async () => { + const input = {}; + const result = await sdk.v9Latest.validateText(input, { + key: '{{speechacekey}}', + text: '"Validate these words existeee."', + dialect: 'en-us', + }); + console.log(result); +})(); + +``` + +### **pteAnswerQuestion** + +PTE Answer Question + +- HTTP Method: POST +- Endpoint: /api/scoring/task/v9/json + +**Required Parameters** + +| input | object | Request body. | + +**Optional Parameters** + +Optional parameters are passed as part of the last parameter to the method. Ex. {optionalParam1 : 'value1', optionalParam2: 'value2'} + +| Name | Type | Description | +| :------- | :----- | :---------------------------------------------------------------------------------------------- | +| key | string | API key issued by Speechace | +| taskType | string | The task_type to score. Supported types are: describe-image, retell-lecture, answer-question. | +| dialect | string | The dialect to use for scoring. Supported values are: en-us, en-gb, fr-fr, fr-ca, es-es, es-mx. | + +**Return Type** + +PteAnswerQuestionResponse + +**Example Usage Code Snippet** + +```Typescript +import { Speechaceapi } from 'speechaceapi'; + +const sdk = new Speechaceapi(); + +(async () => { + const input = {}; + const result = await sdk.v9Latest.pteAnswerQuestion(input, { + key: '{{speechace_premiumkey}}', + taskType: 'answer-question', + dialect: 'en-us', + }); + console.log(result); +})(); + +``` + +### **getGrammarVocabCoherenceFeedbackMetrics** + +Get Grammar, Vocab, Coherence feedback metrics + +- HTTP Method: POST +- Endpoint: /api/scoring/speech/v9/json + +**Required Parameters** + +| input | object | Request body. | + +**Optional Parameters** + +Optional parameters are passed as part of the last parameter to the method. Ex. {optionalParam1 : 'value1', optionalParam2: 'value2'} + +| Name | Type | Description | +| :------ | :----- | :------------------------------------------------------------------------------------------------------------ | +| key | string | API key issued by Speechace. | +| userId | string | A unique anonymized identifier for the end-user who spoke the audio. | +| dialect | string | Optional: The dialect to use for scoring. Supported values are "en-us" (US English) and "en-gb" (UK English). | + +**Return Type** + +GetGrammarVocabCoherenceFeedbackMetricsResponse + +**Example Usage Code Snippet** + +```Typescript +import { Speechaceapi } from 'speechaceapi'; + +const sdk = new Speechaceapi(); + +(async () => { + const input = {}; + const result = await sdk.v9Latest.getGrammarVocabCoherenceFeedbackMetrics(input, { + key: '{{speechace_premiumkey}}', + userId: 'XYZ-ABC-99001', + dialect: 'en-us', + }); + console.log(result); +})(); + +``` + +### **scoreVocabularyGrammar** + +Score Vocabulary & Grammar + +- HTTP Method: POST +- Endpoint: /api/scoring/text/v0.5/json + +**Required Parameters** + +| input | object | Request body. | + +**Optional Parameters** + +Optional parameters are passed as part of the last parameter to the method. Ex. {optionalParam1 : 'value1', optionalParam2: 'value2'} + +| Name | Type | Description | +| :------ | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| key | string | API key issued by Speechace. | +| userId | string | A unique anonymized identifier for the end-user who spoke the audio.

Structure this field to include as much info as possible to aid in reporting and analytics.

For example: **user_id=XYZ-ABC-99001** where:

_ XYZ is an id for your Product or App
_ ABC is an id for the customer/site/account
\* 99001 is an id for the end-user

Ensure user_id is unique and anonymized containing **no personally identifiable information**. | +| dialect | string | The dialect to use for scoring. Supported values are "en-us" (US English) and "en-gb" (UK English).

en-gb requires setting v0.1 in url path. i.e. `https://api.speechace.co/api/scoring/text/v0.1/json?` | + +**Return Type** + +ScoreVocabularyGrammarResponse + +**Example Usage Code Snippet** + +```Typescript +import { Speechaceapi } from 'speechaceapi'; + +const sdk = new Speechaceapi(); + +(async () => { + const input = {}; + const result = await sdk.v1V7OlderVersions.scoreVocabularyGrammar(input, { + key: '{{speechace_premiumkey}}', + userId: 'XYZ-ABC-99001', + dialect: 'en-us', + }); + console.log(result); +})(); + +``` + +### **scoreAPhonemeList1** + +Score a Phoneme list + +- HTTP Method: POST +- Endpoint: /api/scoring/phone_list/v0.5/json + +**Required Parameters** + +| input | object | Request body. | + +**Optional Parameters** + +Optional parameters are passed as part of the last parameter to the method. Ex. {optionalParam1 : 'value1', optionalParam2: 'value2'} + +| Name | Type | Description | +| :------ | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| key | string | API key issued by Speechace. | +| userId | string | A unique anonymized identifier for the end-user who spoke the audio.

Structure this field to include as much info as possible to aid in reporting and analytics.

For example: **user_id=XYZ-ABC-99001** where:

_ XYZ is an id for your Product or App
_ ABC is an id for the customer/site/account
\* 99001 is an id for the end-user

Ensure user_id is unique and anonymized containing **no personally identifiable information**. | +| dialect | string | The dialect to use for scoring. Supported values are "en-us" (US English) and "en-gb" (UK English).

en-gb requires setting v0.1 in url path. i.e. `https://api.speechace.co/api/scoring/text/v0.1/json?` | + +**Return Type** + +ScoreAPhonemeList1Response + +**Example Usage Code Snippet** + +```Typescript +import { Speechaceapi } from 'speechaceapi'; + +const sdk = new Speechaceapi(); + +(async () => { + const input = {}; + const result = await sdk.v1V7OlderVersions.scoreAPhonemeList1(input, { + key: '{{speechacekey}}', + userId: 'XYZ-ABC-99001', + dialect: 'en-us', + }); + console.log(result); +})(); + +``` + +### **validateText1** + +Validate Text + +- HTTP Method: POST +- Endpoint: /api/validating/text/v0.5/json + +**Required Parameters** + +| input | object | Request body. | + +**Optional Parameters** + +Optional parameters are passed as part of the last parameter to the method. Ex. {optionalParam1 : 'value1', optionalParam2: 'value2'} + +| Name | Type | Description | +| :------ | :----- | :------------------------------------------------------------------------------------------------------------------------- | +| key | string | API key issued by Speechace. | +| text | string | A sentence or sequence of words to validate. | +| dialect | string | The dialect to use for validation. Default is "en-us". Supported values are "en-us" (US English) and "en-gb" (UK English). | + +**Return Type** + +ValidateText1Response + +**Example Usage Code Snippet** + +```Typescript +import { Speechaceapi } from 'speechaceapi'; + +const sdk = new Speechaceapi(); + +(async () => { + const input = {}; + const result = await sdk.v1V7OlderVersions.validateText1(input, { + key: '{{speechacekey}}', + text: '"Validate these words existeee."', + dialect: 'en-us', + }); + console.log(result); +})(); + +``` + +### **assessRelevance1** + +Assess Relevance + +- HTTP Method: POST +- Endpoint: /api/scoring/speech/v0.5/json + +**Required Parameters** + +| input | object | Request body. | + +**Optional Parameters** + +Optional parameters are passed as part of the last parameter to the method. Ex. {optionalParam1 : 'value1', optionalParam2: 'value2'} + +| Name | Type | Description | +| :------ | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| key | string | API key issued by Speechace. | +| dialect | string | The dialect to use for scoring. Supported values are "en-us" (US English) and "en-gb" (UK English). | +| userId | string | A unique anonymized identifier for the end-user who spoke the audio.
Structure this field to include as much info as possible to aid in reporting and analytics.
For example: **user_id=XYZ-ABC-99001** where:

_ XYZ is an id for your Product or App
_ ABC is an id for the customer/site/account
\* 99001 is an id for the end-user
Ensure user_id is unique and anonymized containing **no personally identifiable information**. | + +**Return Type** + +AssessRelevance1Response + +**Example Usage Code Snippet** + +```Typescript +import { Speechaceapi } from 'speechaceapi'; + +const sdk = new Speechaceapi(); + +(async () => { + const input = {}; + const result = await sdk.v1V7OlderVersions.assessRelevance1(input, { + key: '{{speechace_premiumkey}}', + dialect: 'en-us', + userId: 'XYZ-ABC-99001', + }); + console.log(result); +})(); + +``` + + diff --git a/src/services/v1V7OlderVersions/V1V7OlderVersions.ts b/src/services/v1V7OlderVersions/V1V7OlderVersions.ts new file mode 100644 index 0000000..8f38e0b --- /dev/null +++ b/src/services/v1V7OlderVersions/V1V7OlderVersions.ts @@ -0,0 +1,291 @@ +// This file was generated by liblab | https://liblab.com/ + +import BaseService from '../../BaseService'; + +import { ScoreVocabularyGrammarResponse } from './models/ScoreVocabularyGrammarResponse'; +import { ScoreVocabularyGrammarRequest } from './models/ScoreVocabularyGrammarRequest'; +import { ScoreAPhonemeList1Response } from './models/ScoreAPhonemeList1Response'; +import { ScoreAPhonemeList1Request } from './models/ScoreAPhonemeList1Request'; +import { ValidateText1Response } from './models/ValidateText1Response'; +import { ValidateText1Request } from './models/ValidateText1Request'; +import { AssessRelevance1Response } from './models/AssessRelevance1Response'; +import { AssessRelevance1Request } from './models/AssessRelevance1Request'; + +import { serializeQuery } from '../../http/QuerySerializer'; + +export class V1V7OlderVersionsService extends BaseService { + /** + * @summary Score Vocabulary & Grammar + * @description **In this example we score the IELTS Speaking Fluency and obtain the IELTS Vocabulary and Grammar subscore of a scripted speech answer.** + +Scoring Vocabulary & Grammar is typically done in Spontaneous speaking Transcribe & Score requests. In this example we demonstrate how it can be done in a scripted speech request as well. + +In this request in addition to fluency and pronunciation scores, the fluency node in the JSON result includes the following scores: + +| Field | Description | +| --- | --- | +| ielts_estimate | an estimate of the IELTS Speaking Fluency of the speaker. | +| pte_estimate | an estimate of the PTE Read-Aloud Speaking Fluency of the speaker. | +| ielts_subscore.vocab | an estimate of the Vocabulary IELTS band of the text submitted. | +| ielts_subscore.grammar | an estimate of the Grammar IELTS band of the text submitted. | +| segment_metrics_list\[\] | A list of segments within the overall text/audio with the fluency and ielt_subscore.vocab scores for each segment. | + + * @param optionalParams - Optional parameters + * @param optionalParams.key - API key issued by Speechace. + * @param optionalParams.userId - A unique anonymized identifier for the end-user who spoke the audio. + +Structure this field to include as much info as possible to aid in reporting and analytics. + +For example: **user_id=XYZ-ABC-99001** where: + +* XYZ is an id for your Product or App +* ABC is an id for the customer/site/account +* 99001 is an id for the end-user + +Ensure user_id is unique and anonymized containing **no personally identifiable information**. + * @param optionalParams.dialect - The dialect to use for scoring. Supported values are "en-us" (US English) and "en-gb" (UK English). + +en-gb requires setting v0.1 in url path. i.e. `https://api.speechace.co/api/scoring/text/v0.1/json?` + * @returns {Promise} - The promise with the result + */ + async scoreVocabularyGrammar( + input: ScoreVocabularyGrammarRequest, + optionalParams: { key?: string; userId?: string; dialect?: string } = {}, + ): Promise { + const { key, userId, dialect } = optionalParams; + + const queryParams: string[] = []; + const headers: { [key: string]: string } = { 'Content-Type': 'multipart/form-data' }; + if (key) { + queryParams.push(serializeQuery('form', true, 'key', key)); + } + if (userId) { + queryParams.push(serializeQuery('form', true, 'user_id', userId)); + } + if (dialect) { + queryParams.push(serializeQuery('form', true, 'dialect', dialect)); + } + const urlEndpoint = '/api/scoring/text/v0.5/json'; + const urlParams = queryParams.length > 0 ? `?${queryParams.join('&')}` : ''; + const finalUrl = encodeURI(`${this.baseUrl + urlEndpoint}${urlParams}`); + const formInput = V1V7OlderVersionsService.formData(input); + const response: any = await this.httpClient.post( + finalUrl, + formInput, + { + ...headers, + }, + true, + ); + const responseModel = response.data as ScoreVocabularyGrammarResponse; + return responseModel; + } + + /** + * @summary Score a Phoneme list + * @description **In this example we score the term:** + +"gotcha" /g/ao1/ch/ah0 + +Since **gotcha** is an american vernacular and not a valid dictionary word we use the phoneme list API to score it. + +The phoneme list uses a different url endpoint and expects the list of phonemes in [Arpabet notation](https://en.wikipedia.org/wiki/Arpabet). + +Note that we specify phoneme stress as 0,1,2 per Arpabet notation. This API allows you to score any word or sentence that can phonetically expressed in Arpabet. + +**Copy the example code and be sure to:** + +1. Add your Speechace API key +2. Add a valid file path in the **user_audio_file** parameter. *For example in curl the you would add something like @/tmp/gotcha_16k.wav* + +You can download a sample *gotcha_16k.wav* file [here](https://s3-us-west-2.amazonaws.com/speechace-public/sample-audio/gotcha_16k.wav). + + * @param optionalParams - Optional parameters + * @param optionalParams.key - API key issued by Speechace. + * @param optionalParams.userId - A unique anonymized identifier for the end-user who spoke the audio. + +Structure this field to include as much info as possible to aid in reporting and analytics. + +For example: **user_id=XYZ-ABC-99001** where: + +* XYZ is an id for your Product or App +* ABC is an id for the customer/site/account +* 99001 is an id for the end-user + +Ensure user_id is unique and anonymized containing **no personally identifiable information**. + * @param optionalParams.dialect - The dialect to use for scoring. Supported values are "en-us" (US English) and "en-gb" (UK English). + +en-gb requires setting v0.1 in url path. i.e. `https://api.speechace.co/api/scoring/text/v0.1/json?` + * @returns {Promise} - The promise with the result + */ + async scoreAPhonemeList1( + input: ScoreAPhonemeList1Request, + optionalParams: { key?: string; userId?: string; dialect?: string } = {}, + ): Promise { + const { key, userId, dialect } = optionalParams; + + const queryParams: string[] = []; + const headers: { [key: string]: string } = { 'Content-Type': 'multipart/form-data' }; + if (key) { + queryParams.push(serializeQuery('form', true, 'key', key)); + } + if (userId) { + queryParams.push(serializeQuery('form', true, 'user_id', userId)); + } + if (dialect) { + queryParams.push(serializeQuery('form', true, 'dialect', dialect)); + } + const urlEndpoint = '/api/scoring/phone_list/v0.5/json'; + const urlParams = queryParams.length > 0 ? `?${queryParams.join('&')}` : ''; + const finalUrl = encodeURI(`${this.baseUrl + urlEndpoint}${urlParams}`); + const formInput = V1V7OlderVersionsService.formData(input); + const response: any = await this.httpClient.post( + finalUrl, + formInput, + { + ...headers, + }, + true, + ); + const responseModel = response.data as ScoreAPhonemeList1Response; + return responseModel; + } + + /** + * @summary Validate Text + * @description In this example we validate whether all the words in the text exist in the Speechace lexicon. This API allows you to quickly check whether authored content will be able to be scored with Speechace. This is useful to use at the time of text authoring to avoid errors later on. + +Out of lexicon terms can be reported to support@speechace.com for inclusion. Or you can see the phoneme list API as an alternative. + +**Copy the example code and be sure to:** + +1. Add your Speechace API key +2. Replace text with the text you wish to validate. +3. Set the dialect parameter to the dialect you will use when scoring. If you are not sure which dialect will be used then validate once using each available dialect. + + * @param optionalParams - Optional parameters + * @param optionalParams.key - API key issued by Speechace. + * @param optionalParams.text - A sentence or sequence of words to validate. + * @param optionalParams.dialect - The dialect to use for validation. Default is "en-us". Supported values are "en-us" (US English) and "en-gb" (UK English). + * @returns {Promise} - The promise with the result + */ + async validateText1( + input: ValidateText1Request, + optionalParams: { key?: string; text?: string; dialect?: string } = {}, + ): Promise { + const { key, text, dialect } = optionalParams; + + const queryParams: string[] = []; + const headers: { [key: string]: string } = { 'Content-Type': 'multipart/form-data' }; + if (key) { + queryParams.push(serializeQuery('form', true, 'key', key)); + } + if (text) { + queryParams.push(serializeQuery('form', true, 'text', text)); + } + if (dialect) { + queryParams.push(serializeQuery('form', true, 'dialect', dialect)); + } + const urlEndpoint = '/api/validating/text/v0.5/json'; + const urlParams = queryParams.length > 0 ? `?${queryParams.join('&')}` : ''; + const finalUrl = encodeURI(`${this.baseUrl + urlEndpoint}${urlParams}`); + const formInput = V1V7OlderVersionsService.formData(input); + const response: any = await this.httpClient.post( + finalUrl, + formInput, + { + ...headers, + }, + true, + ); + const responseModel = response.data as ValidateText1Response; + return responseModel; + } + + /** + * @summary Assess Relevance + * @description **In this example we transcribe a free speaking audio and evaluate the relevance of the response given a particular question prompt.** + +In addition we also score Fluency, Pronunciation, Grammar, Vocabulary, and Coherence on an IELTS Speaking scale. + +The API accepts the user audio and a relevance context as inputs. The relevance context is typically a question prompt provided to the user. + +In this request JSON result includes the following fields: + +| Field | Description | +| --- | --- | +| transcript | The speech-to-text transcript of what the user has said. | +| relevance.class | Boolean. Whether the user response is relevant to the relevance context passed to the API. | +| ielts_estimate | an estimate of the IELTS Speaking Fluency of the speaker | +| ielts_subscore.vocab | an estimate of the IELTS Vocabulary level of the speaker's response | +| ielts_subscore.grammar | an estimate of the IELTS Grammar level of the speaker's response | +| ielts_subscore.coherence | an estimate of the IELTS Coherence level of the speaker's response | +| quality_score | An overall pronunciation score for the the utterance on a scale of 0 to 100. See [guide](https://docs.speechace.com/#b41375b3-a9e6-48f0-aa92-a9a1a0aed116) for detail on score rubric. | +| duration | total length of speech in seconds | +| articulation | total length of articulation (speech minus pauses, hesitations and non-speech events such as laughter). Excludes beginning silence on very first segment and ending silence on very last segment. | +| speech_rate | speaking rate in syllables per second. | +| articulation_rate | articulation rate in syllables per second. | +| syllable_count | Count of syllables in this segmtent | +| word_count | Count of words in this segment | +| correct_syllable_count | Count of correctly spoken syllables in this segment | +| correct_word_count | Count of correctly spoken words in this segment | +| syllable_correct_per_minute | correct_syllable_count / duration in mins | +| word_correct_per_minute | correct_word_count / duration in mins | +| all_pause_count | count of all pauses (filled and unfilled) which are longer than the minimum pause threshold | +| all_pause_duration | total duration of all pauses (filled and unfilled) in seconds | +| all_pause_list\[\] | a list of all the pauses with the begin/end markers for each in extents of 10 msecs | +| mean_length_run | mean length of run in syllables between pauses | +| max_length_run | max length of run in syllables between pauses | +| segment_metrics_list\[\] | A list of segments within the overall text/audio with the IELTS scores, subscrores, and fluency metrics for each segment. | +| syllable_score_list\[\] | a list of syllables in each word in the word_score_list\[\], each with it's own quality_score | +| word_score_list\[\] | a list of words in the utterance, each with it's own quality_score | +| syllable_score_list\[\] | a list of syllables in each word in the word_score_list\[\], each with it's own quality_score | +| phone_score_list\[\] | a list of phonemes in each word in the word_score_list\[\], each with it's own quality_score | +| extent\[\] | start and end boundaries of a syllable or phoneme in units of 10 msec. | + + * @param optionalParams - Optional parameters + * @param optionalParams.key - API key issued by Speechace. + * @param optionalParams.dialect - The dialect to use for scoring. Supported values are "en-us" (US English) and "en-gb" (UK English). + * @param optionalParams.userId - A unique anonymized identifier for the end-user who spoke the audio. +Structure this field to include as much info as possible to aid in reporting and analytics. +For example: **user_id=XYZ-ABC-99001** where: + +* XYZ is an id for your Product or App +* ABC is an id for the customer/site/account +* 99001 is an id for the end-user +Ensure user_id is unique and anonymized containing **no personally identifiable information**. + * @returns {Promise} - The promise with the result + */ + async assessRelevance1( + input: AssessRelevance1Request, + optionalParams: { key?: string; dialect?: string; userId?: string } = {}, + ): Promise { + const { key, dialect, userId } = optionalParams; + + const queryParams: string[] = []; + const headers: { [key: string]: string } = { 'Content-Type': 'multipart/form-data' }; + if (key) { + queryParams.push(serializeQuery('form', true, 'key', key)); + } + if (dialect) { + queryParams.push(serializeQuery('form', true, 'dialect', dialect)); + } + if (userId) { + queryParams.push(serializeQuery('form', true, 'user_id', userId)); + } + const urlEndpoint = '/api/scoring/speech/v0.5/json'; + const urlParams = queryParams.length > 0 ? `?${queryParams.join('&')}` : ''; + const finalUrl = encodeURI(`${this.baseUrl + urlEndpoint}${urlParams}`); + const formInput = V1V7OlderVersionsService.formData(input); + const response: any = await this.httpClient.post( + finalUrl, + formInput, + { + ...headers, + }, + true, + ); + const responseModel = response.data as AssessRelevance1Response; + return responseModel; + } +} diff --git a/src/services/v1V7OlderVersions/index.ts b/src/services/v1V7OlderVersions/index.ts new file mode 100644 index 0000000..4e7a12b --- /dev/null +++ b/src/services/v1V7OlderVersions/index.ts @@ -0,0 +1,10 @@ +// This file was generated by liblab | https://liblab.com/ + +export type { AssessRelevance1Request } from './models/AssessRelevance1Request'; +export type { AssessRelevance1Response } from './models/AssessRelevance1Response'; +export type { ScoreAPhonemeList1Request } from './models/ScoreAPhonemeList1Request'; +export type { ScoreAPhonemeList1Response } from './models/ScoreAPhonemeList1Response'; +export type { ScoreVocabularyGrammarRequest } from './models/ScoreVocabularyGrammarRequest'; +export type { ScoreVocabularyGrammarResponse } from './models/ScoreVocabularyGrammarResponse'; +export type { ValidateText1Request } from './models/ValidateText1Request'; +export type { ValidateText1Response } from './models/ValidateText1Response'; diff --git a/src/services/v1V7OlderVersions/models/AssessRelevance1Request.ts b/src/services/v1V7OlderVersions/models/AssessRelevance1Request.ts new file mode 100644 index 0000000..2ba31e3 --- /dev/null +++ b/src/services/v1V7OlderVersions/models/AssessRelevance1Request.ts @@ -0,0 +1,24 @@ +// This file was generated by liblab | https://liblab.com/ + +export interface AssessRelevance1Request { + /** + * includes fluency scoring for this request. To use this field you must have a Speechace API PRO key. + */ + include_fluency?: string; + /** + * include IELTS subscores for (Vocabulary, Grammar, Coherence). + */ + include_ielts_subscore?: string; + /** + * automatically identify the phonetic mapping for any unknown words such as names or locations and use that for scoring. + */ + include_unknown_words?: string; + /** + * Question Prompt text provided to the user. When this parameter is passed, the relevance of the user audio transcript is evaluated for the given question prompt and a resulting relevance class is returned in .speech_score.relevance.class (TRUE/FALSE). A FALSE relevance class will result in .speech_score.fluency.overall_metrics.ielts_estimate and .speech_score.fluency.overall_metrics.pte_estimate to be set to the lowest possible score. + */ + relevance_context?: string; + /** + * file with user audio (wav, mp3, m4a, webm, ogg, aiff) + */ + user_audio_file?: import('fs').ReadStream | Buffer | File; +} diff --git a/src/services/v1V7OlderVersions/models/AssessRelevance1Response.ts b/src/services/v1V7OlderVersions/models/AssessRelevance1Response.ts new file mode 100644 index 0000000..c91d58f --- /dev/null +++ b/src/services/v1V7OlderVersions/models/AssessRelevance1Response.ts @@ -0,0 +1,104 @@ +// This file was generated by liblab | https://liblab.com/ + +export interface AssessRelevance1Response { + quota_remaining?: number; + speech_score?: SpeechScore; + status?: string; + version?: string; +} +interface SpeechScore { + fidelity_class?: string; + fluency?: Fluency; + quality_score?: number; + relevance?: Relevance; + transcript?: string; + word_score_list?: { + ending_punctuation?: string; + phone_score_list?: { + extent?: number[]; + phone?: string; + quality_score?: number; + sound_most_like?: string; + stress_level?: number; + stress_score?: number; + }[]; + quality_score?: number; + syllable_score_list?: { + extent?: number[]; + letters?: string; + phone_count?: number; + quality_score?: number; + stress_level?: number; + stress_score?: number; + }[]; + word?: string; + }[]; +} +interface Fluency { + fluency_version?: FluencyVersion; + ielts_subscore_version?: IeltsSubscoreVersion; + overall_metrics?: OverallMetrics; + segment_metrics_list?: { + all_pause_count?: number; + all_pause_duration?: number; + all_pause_list?: number[][]; + articulation_length?: number; + articulation_rate?: number; + correct_syllable_count?: number; + correct_word_count?: number; + duration?: number; + fluency_score?: number; + ielts_estimate?: number; + ielts_subscore?: IeltsSubscore1; + max_length_run?: number; + mean_length_run?: number; + pte_estimate?: number; + segment?: number[]; + speech_rate?: number; + syllable_correct_per_minute?: number; + syllable_count?: number; + word_correct_per_minute?: number; + word_count?: number; + }[]; +} +interface FluencyVersion { + [k: string]: unknown; +} +interface IeltsSubscoreVersion { + [k: string]: unknown; +} +interface OverallMetrics { + all_pause_count?: number; + all_pause_duration?: number; + all_pause_list?: number[][]; + articulation_length?: number; + articulation_rate?: number; + correct_syllable_count?: number; + correct_word_count?: number; + duration?: number; + fluency_score?: number; + ielts_estimate?: number; + ielts_subscore?: IeltsSubscore; + max_length_run?: number; + mean_length_run?: number; + pte_estimate?: number; + segment?: number[]; + speech_rate?: number; + syllable_correct_per_minute?: number; + syllable_count?: number; + word_correct_per_minute?: number; + word_count?: number; +} +interface IeltsSubscore { + coherence?: number; + grammar?: number; + vocab?: number; +} +interface IeltsSubscore1 { + coherence?: number; + grammar?: number; + vocab?: number; +} +interface Relevance { + class_?: string; +} diff --git a/src/services/v1V7OlderVersions/models/ScoreAPhonemeList1Request.ts b/src/services/v1V7OlderVersions/models/ScoreAPhonemeList1Request.ts new file mode 100644 index 0000000..eff8d48 --- /dev/null +++ b/src/services/v1V7OlderVersions/models/ScoreAPhonemeList1Request.ts @@ -0,0 +1,27 @@ +// This file was generated by liblab | https://liblab.com/ + +export interface ScoreAPhonemeList1Request { + /** + * A phoneme list to score. + */ + phone_list?: string; + /** + * A unique identifier for the activity or question this user audio is answering. + * + * Structure this field to include as much info as possible to aid in reporting and analytics. + * + * For example: **question_info='u1/q1'** where: + * + * * u1: means the question belongs to Unit 1 in your content + * * q1: means this is question 1 within the unit + * + * You can add more levels as needed. + * + * Ensure **no personally identifiable information** is passed in this field. + */ + question_info?: string; + /** + * file with user audio (wav, mp3, m4a, webm, ogg, aiff) + */ + user_audio_file?: import('fs').ReadStream | Buffer | File; +} diff --git a/src/services/v1V7OlderVersions/models/ScoreAPhonemeList1Response.ts b/src/services/v1V7OlderVersions/models/ScoreAPhonemeList1Response.ts new file mode 100644 index 0000000..ae7001b --- /dev/null +++ b/src/services/v1V7OlderVersions/models/ScoreAPhonemeList1Response.ts @@ -0,0 +1,22 @@ +// This file was generated by liblab | https://liblab.com/ + +export interface ScoreAPhonemeList1Response { + quota_remaining?: number; + status?: string; + version?: string; + word_score?: WordScore; +} +interface WordScore { + phone_score_list?: { + extent?: number[]; + phone?: string; + quality_score?: number; + sound_most_like?: string; + stress_level?: StressLevel; + }[]; + quality_score?: number; + word?: string; +} +interface StressLevel { + [k: string]: unknown; +} diff --git a/src/services/v1V7OlderVersions/models/ScoreVocabularyGrammarRequest.ts b/src/services/v1V7OlderVersions/models/ScoreVocabularyGrammarRequest.ts new file mode 100644 index 0000000..bef764a --- /dev/null +++ b/src/services/v1V7OlderVersions/models/ScoreVocabularyGrammarRequest.ts @@ -0,0 +1,35 @@ +// This file was generated by liblab | https://liblab.com/ + +export interface ScoreVocabularyGrammarRequest { + /** + * includes fluency scoring for this request. To use this field you must have a Speechace API PRO key. + */ + include_fluency?: string; + /** + * beta: include IELTS subscores for (Vocabulary, Grammar). + */ + include_ielts_subscore?: string; + /** + * A unique identifier for the activity or question this user audio is answering. + * + * Structure this field to include as much info as possible to aid in reporting and analytics. + * + * For example: **question_info='u1/q1'** where: + * + * * u1: means the question belongs to Unit 1 in your content + * * q1: means this is question 1 within the unit + * + * You can add more levels as needed. + * + * Ensure **no personally identifiable information** is passed in this field. + */ + question_info?: string; + /** + * One or more paragraphs of text to score. + */ + text?: string; + /** + * file with user audio (wav, mp3, m4a, webm, ogg, aiff) + */ + user_audio_file?: import('fs').ReadStream | Buffer | File; +} diff --git a/src/services/v1V7OlderVersions/models/ScoreVocabularyGrammarResponse.ts b/src/services/v1V7OlderVersions/models/ScoreVocabularyGrammarResponse.ts new file mode 100644 index 0000000..9b1b255 --- /dev/null +++ b/src/services/v1V7OlderVersions/models/ScoreVocabularyGrammarResponse.ts @@ -0,0 +1,98 @@ +// This file was generated by liblab | https://liblab.com/ + +export interface ScoreVocabularyGrammarResponse { + quota_remaining?: number; + status?: string; + text_score?: TextScore; + version?: string; +} +interface TextScore { + fidelity_class?: string; + fluency?: Fluency; + quality_score?: number; + text?: string; + word_score_list?: { + ending_punctuation?: string; + phone_score_list?: { + extent?: number[]; + phone?: string; + quality_score?: number; + sound_most_like?: string; + stress_level?: number; + stress_score?: number; + }[]; + quality_score?: number; + syllable_score_list?: { + extent?: number[]; + letters?: string; + phone_count?: number; + quality_score?: number; + stress_level?: number; + stress_score?: number; + }[]; + word?: string; + }[]; +} +interface Fluency { + fluency_version?: FluencyVersion; + ielts_subscore_version?: IeltsSubscoreVersion; + overall_metrics?: OverallMetrics; + segment_metrics_list?: { + all_pause_count?: number; + all_pause_duration?: number; + all_pause_list?: number[][]; + articulation_length?: number; + articulation_rate?: number; + correct_syllable_count?: number; + correct_word_count?: number; + duration?: number; + fluency_score?: number; + ielts_estimate?: number; + ielts_subscore?: IeltsSubscore1; + max_length_run?: number; + mean_length_run?: number; + pte_estimate?: number; + segment?: number[]; + speech_rate?: number; + syllable_correct_per_minute?: number; + syllable_count?: number; + word_correct_per_minute?: number; + word_count?: number; + }[]; +} +interface FluencyVersion { + [k: string]: unknown; +} +interface IeltsSubscoreVersion { + [k: string]: unknown; +} +interface OverallMetrics { + all_pause_count?: number; + all_pause_duration?: number; + all_pause_list?: number[][]; + articulation_length?: number; + articulation_rate?: number; + correct_syllable_count?: number; + correct_word_count?: number; + duration?: number; + fluency_score?: number; + ielts_estimate?: number; + ielts_subscore?: IeltsSubscore; + max_length_run?: number; + mean_length_run?: number; + pte_estimate?: number; + segment?: number[]; + speech_rate?: number; + syllable_correct_per_minute?: number; + syllable_count?: number; + word_correct_per_minute?: number; + word_count?: number; +} +interface IeltsSubscore { + grammar?: number; + vocab?: number; +} +interface IeltsSubscore1 { + grammar?: number; + vocab?: number; +} diff --git a/src/services/v1V7OlderVersions/models/ValidateText1Request.ts b/src/services/v1V7OlderVersions/models/ValidateText1Request.ts new file mode 100644 index 0000000..e69379a --- /dev/null +++ b/src/services/v1V7OlderVersions/models/ValidateText1Request.ts @@ -0,0 +1,3 @@ +// This file was generated by liblab | https://liblab.com/ + +export interface ValidateText1Request {} diff --git a/src/services/v1V7OlderVersions/models/ValidateText1Response.ts b/src/services/v1V7OlderVersions/models/ValidateText1Response.ts new file mode 100644 index 0000000..6574367 --- /dev/null +++ b/src/services/v1V7OlderVersions/models/ValidateText1Response.ts @@ -0,0 +1,7 @@ +// This file was generated by liblab | https://liblab.com/ + +export interface ValidateText1Response { + detail_message?: string; + short_message?: string; + status?: string; +} diff --git a/src/services/v9Latest/V9Latest.ts b/src/services/v9Latest/V9Latest.ts new file mode 100644 index 0000000..77dd955 --- /dev/null +++ b/src/services/v9Latest/V9Latest.ts @@ -0,0 +1,346 @@ +// This file was generated by liblab | https://liblab.com/ + +import BaseService from '../../BaseService'; + +import { ScoreFluencySpanishResponse } from './models/ScoreFluencySpanishResponse'; +import { ScoreFluencySpanishRequest } from './models/ScoreFluencySpanishRequest'; +import { ScoreAPhonemeListResponse } from './models/ScoreAPhonemeListResponse'; +import { ScoreAPhonemeListRequest } from './models/ScoreAPhonemeListRequest'; +import { ValidateTextResponse } from './models/ValidateTextResponse'; +import { ValidateTextRequest } from './models/ValidateTextRequest'; +import { PteAnswerQuestionResponse } from './models/PteAnswerQuestionResponse'; +import { PteAnswerQuestionRequest } from './models/PteAnswerQuestionRequest'; +import { GetGrammarVocabCoherenceFeedbackMetricsResponse } from './models/GetGrammarVocabCoherenceFeedbackMetricsResponse'; +import { GetGrammarVocabCoherenceFeedbackMetricsRequest } from './models/GetGrammarVocabCoherenceFeedbackMetricsRequest'; + +import { serializeQuery } from '../../http/QuerySerializer'; + +export class V9LatestService extends BaseService { + /** + * @summary Score Fluency - Spanish + * @description Score Fluency - Spanish + + * @param optionalParams - Optional parameters + * @param optionalParams.key - API key issued by Speechace. + * @param optionalParams.dialect - The dialect to use for scoring. Supported values are: en-us, en-gb, fr-fr, fr-ca + * @returns {Promise} - The promise with the result + */ + async scoreFluencySpanish( + input: ScoreFluencySpanishRequest, + optionalParams: { key?: string; dialect?: string } = {}, + ): Promise { + const { key, dialect } = optionalParams; + + const queryParams: string[] = []; + const headers: { [key: string]: string } = { 'Content-Type': 'multipart/form-data' }; + if (key) { + queryParams.push(serializeQuery('form', true, 'key', key)); + } + if (dialect) { + queryParams.push(serializeQuery('form', true, 'dialect', dialect)); + } + const urlEndpoint = '/api/scoring/text/v9/json'; + const urlParams = queryParams.length > 0 ? `?${queryParams.join('&')}` : ''; + const finalUrl = encodeURI(`${this.baseUrl + urlEndpoint}${urlParams}`); + const formInput = V9LatestService.formData(input); + const response: any = await this.httpClient.post( + finalUrl, + formInput, + { + ...headers, + }, + true, + ); + const responseModel = response.data as ScoreFluencySpanishResponse; + return responseModel; + } + + /** + * @summary Score a Phoneme list + * @description **In this example we score the term:** + +"gotcha" /g/ao1/ch/ah0 + +Since **gotcha** is an american vernacular and not a valid dictionary word we use the phoneme list API to score it. + +The phoneme list uses a different url endpoint and expects the list of phonemes in [Arpabet notation](https://en.wikipedia.org/wiki/Arpabet). + +Note that we specify phoneme stress as 0,1,2 per Arpabet notation. This API allows you to score any word or sentence that can phonetically expressed in Arpabet. + + * @param optionalParams - Optional parameters + * @param optionalParams.key - API key issued by Speechace. + * @param optionalParams.userId - Optional: A unique anonymized identifier for the end-user who spoke the audio. + * @param optionalParams.dialect - The dialect to use for scoring. Supported values are "en-us" (US English) and "en-gb" (UK English). + * @returns {Promise} - The promise with the result + */ + async scoreAPhonemeList( + input: ScoreAPhonemeListRequest, + optionalParams: { key?: string; userId?: string; dialect?: string } = {}, + ): Promise { + const { key, userId, dialect } = optionalParams; + + const queryParams: string[] = []; + const headers: { [key: string]: string } = { 'Content-Type': 'multipart/form-data' }; + if (key) { + queryParams.push(serializeQuery('form', true, 'key', key)); + } + if (userId) { + queryParams.push(serializeQuery('form', true, 'user_id', userId)); + } + if (dialect) { + queryParams.push(serializeQuery('form', true, 'dialect', dialect)); + } + const urlEndpoint = '/api/scoring/phone_list/v9/json'; + const urlParams = queryParams.length > 0 ? `?${queryParams.join('&')}` : ''; + const finalUrl = encodeURI(`${this.baseUrl + urlEndpoint}${urlParams}`); + const formInput = V9LatestService.formData(input); + const response: any = await this.httpClient.post( + finalUrl, + formInput, + { + ...headers, + }, + true, + ); + const responseModel = response.data as ScoreAPhonemeListResponse; + return responseModel; + } + + /** + * @summary Validate Text + * @description In this example we validate whether all the words in the text exist in the Speechace lexicon. This API allows you to quickly check whether authored content will be able to be scored with Speechace. This is useful to use at the time of text authoring to avoid errors later on. + +Out of lexicon terms can be reported to [support@speechace.com](mailto:support@speechace.com) for inclusion. Or you can see the phoneme list API as an alternative. + +You may also opt let Speechace API [automatically handle unknown words](https://docs.speechace.com/#2f59fc09-d3ef-410c-b9e8-ee91dddc0eec) by finding the most likely phonetic mapping for the term. + + * @param optionalParams - Optional parameters + * @param optionalParams.key - API key issued by Speechace. + * @param optionalParams.text - A sentence or sequence of words to validate. + * @param optionalParams.dialect - The dialect to use for validation. Default is "en-us". Supported values are "en-us" (US English) and "en-gb" (UK English). + * @returns {Promise} - The promise with the result + */ + async validateText( + input: ValidateTextRequest, + optionalParams: { key?: string; text?: string; dialect?: string } = {}, + ): Promise { + const { key, text, dialect } = optionalParams; + + const queryParams: string[] = []; + const headers: { [key: string]: string } = { 'Content-Type': 'multipart/form-data' }; + if (key) { + queryParams.push(serializeQuery('form', true, 'key', key)); + } + if (text) { + queryParams.push(serializeQuery('form', true, 'text', text)); + } + if (dialect) { + queryParams.push(serializeQuery('form', true, 'dialect', dialect)); + } + const urlEndpoint = '/api/validating/text/v9/json'; + const urlParams = queryParams.length > 0 ? `?${queryParams.join('&')}` : ''; + const finalUrl = encodeURI(`${this.baseUrl + urlEndpoint}${urlParams}`); + const formInput = V9LatestService.formData(input); + const response: any = await this.httpClient.post( + finalUrl, + formInput, + { + ...headers, + }, + true, + ); + const responseModel = response.data as ValidateTextResponse; + return responseModel; + } + + /** + * @summary PTE Answer Question + * @description PTE Answer Question + + * @param optionalParams - Optional parameters + * @param optionalParams.key - API key issued by Speechace + * @param optionalParams.taskType - The task_type to score. Supported types are: describe-image, retell-lecture, answer-question. + * @param optionalParams.dialect - The dialect to use for scoring. Supported values are: en-us, en-gb, fr-fr, fr-ca, es-es, es-mx. + * @returns {Promise} - The promise with the result + */ + async pteAnswerQuestion( + input: PteAnswerQuestionRequest, + optionalParams: { key?: string; taskType?: string; dialect?: string } = {}, + ): Promise { + const { key, taskType, dialect } = optionalParams; + + const queryParams: string[] = []; + const headers: { [key: string]: string } = { 'Content-Type': 'multipart/form-data' }; + if (key) { + queryParams.push(serializeQuery('form', true, 'key', key)); + } + if (taskType) { + queryParams.push(serializeQuery('form', true, 'task_type', taskType)); + } + if (dialect) { + queryParams.push(serializeQuery('form', true, 'dialect', dialect)); + } + const urlEndpoint = '/api/scoring/task/v9/json'; + const urlParams = queryParams.length > 0 ? `?${queryParams.join('&')}` : ''; + const finalUrl = encodeURI(`${this.baseUrl + urlEndpoint}${urlParams}`); + const formInput = V9LatestService.formData(input); + const response: any = await this.httpClient.post( + finalUrl, + formInput, + { + ...headers, + }, + true, + ); + const responseModel = response.data as PteAnswerQuestionResponse; + return responseModel; + } + + /** + * @summary Get Grammar, Vocab, Coherence feedback metrics + * @description **In this Spontaneous Speech Scoring example, we obtain and present feedback metrics for Grammar, Vocabulary, Coherence.** + +Feedback metrics help the learner identify specific areas of weaknesses within each skill and provide score explainability. For example, a low grammar score could be due to accuracy or range, or simply because the response was too short to showcase sufficient grammatical mastery. The feedback indices provide insight into the reasoning behind the score and direct the learner on how to improve their next attempt. + +To obtain the feedback metrics we add the body parameter `include_ielts_feedback=1` to the request. + +### Feedbck Indices: + +In the API result JSON the following fields are returned within the `speech_score.grammar`, `speech_score.vocab, speech_score.coherence` nodes. Each index has 3 sub-elements: + +- **score:** on a scale of 1 to 10 +- **level:** an interpretation of the score as low/mid/high +- **message:** a feedback message if the score is low. + + +| **Index** | **Description** | +| --- | --- | +| grammar.overall_metrics.length | The sufficiency of the response length in words to demonstrate the necessary grammatical range. | +| grammar.overall_metrics.lexical_diversity | The degree of variation in syntactic structures such as diversity in verbs, adjectives and adverbial modifiers. | +| grammar.overall_metrics.grammatical_accuracy | The degree of grammatical inaccuracies in the response. A list of grammatical errors with suggested replacements is returned in the `grammar.errors` node when this index is low. | +| grammar.overall_metrics.grammatical_range | The degree of grammatical range demonstrated in the response. This score is further broken down into 4 additional sub-indices:
\- noun_phrase_variation
\- noun_phrase_complexity
\- verb_construction_variation
\- adverb_modifier_variation | +| grammar.overall_metrics.grammatical_range.noun_phrase_variation | The degree of variation in structure of noun phrases such as the number and types of modifiers used in the response. | +| grammar.overall_metrics.grammatical_range.noun_phrase_complexity | The degree of complexity of noun phrases such as the richness of adjectives, relative clauses, prepositional phrases, nonfinite elements, determiners, and demonstratives used in the response. | +| grammar.overall.metrics.grammatical_range.verb_construction_variation | The degree of variation in verbal structures such as the number and types of verb structural elements used in the response. | +| grammar.overall.metrics.grammatical_range.adverb_modifier_variation | The degree of variation in types of adverbs or adverb phrases to modify clauses, verbs, and adjectives used in the response. | +| vocab.overall_metrics.lexical_diversity | The degree of word diversity in the response. | +| vocab.overall_metrics.word_sophistication | The degree of use of advanced, less common vocabulary in the response. | +| vocab.overall_metrics.word_specificity | The degree of use of specific (less general) verbs, nouns, and adjectives which are specific to the meaning being conveyed. | +| vocab.overall_metrics.academic_language_use | The degree of use of academic language in the response. | +| vocab.overall_metrics.collocation_commonality | The degree of use of advanced word combinations. | +| vocab.overall_metrics.idiomaticity | The degree of use of idiomatic language. | +| coherence.overall_metrics.lexical_density | The degree of use of content words within the response. | +| coherence.overall_metrics.basic_connectives | The degree and variety of basic connectives within the response. A list of most overused basic connectives is included. | +| coherence.overall_metrics.causal_connectives | The degree and variety of causal connectives within the response. A list of most overused causal connectives is included. | +| coherence.overall_metrics.negative_connectives | The degree and variety of negative connectives within the response. A list of most used negative connectives is included. | +| coherence.overall_metrics.pronoun_density | The degree of use of pronouns within the response. | +| coherence.overall_metrics.adverb_diversity | The degree and variety of adverbs within the response. A list of most overused adverbs is included. | +| coherence.overall_metrics.verb_diversity | The degree and variety of verbs within the response. A list of most overused verbs is included. | + +An example grammar feedback looks like the following: + +``` json +{ +"grammar": + { + "overall_metrics": { + "length": { + "score": 4, + "level": "mid" + }, + "lexical_diversity": { + "score": 8, + "level": "high" + }, + "grammatical_accuracy": { + "score": 8, + "level": "high" + }, + "grammatical_range": { + "score": 5, + "level": "mid", + "message": "Your response has less grammatical range than most advanced speakers. To improve, you should use a wider range of phrasal and clausal structures and verb-argument constructions.", + "noun_phrase_complexity": { + "score": 1, + "level": "low", + "message": "Your response lacks noun phrase complexity. You should use richer modifiers in noun phrases by using adjectives, relative clauses, prepositional phrases, non-finite elements, determiners, and demonstratives." + }, + "noun_phrase_variation": { + "score": 5, + "level": "mid" + }, + "verb_construction_variation": { + "score": 6, + "level": "mid" + }, + "adverb_modifier_variation": { + "score": 9, + "level": "high" + } + } + }, + "errors": [ + { + "category": "STYLE", + "message": "Did you mean 'different from'? 'Different than' is often considered colloquial style.", + "span": [44,48], + "matched_text": "than", + "replacements": ["from"] + } + ] + } +} + + ``` + +### Grammatical Errors + +The `grammar.errors` node contains a JSON array of grammatical errors found in the response. Each array element is an object with the following properties: + +| **key** | **Description** | +| --- | --- | +| category | The type of error such as; STYLE, GRAMMAR, COLLOCATION, CONFUSED_WORDS | +| message | A descriptive message of the error. The message may refer to words within the evalauted text and include suggested replacements within the ... markup tags. | +| span | The \[begin, end\] indices of the matched text in characters. | +| matched_text | The matched text where the error was found. | +| replacements | An array of zero or more suggested replacements where applicable. | + + * @param optionalParams - Optional parameters + * @param optionalParams.key - API key issued by Speechace. + * @param optionalParams.userId - A unique anonymized identifier for the end-user who spoke the audio. + * @param optionalParams.dialect - Optional: The dialect to use for scoring. Supported values are "en-us" (US English) and "en-gb" (UK English). + * @returns {Promise} - The promise with the result + */ + async getGrammarVocabCoherenceFeedbackMetrics( + input: GetGrammarVocabCoherenceFeedbackMetricsRequest, + optionalParams: { key?: string; userId?: string; dialect?: string } = {}, + ): Promise { + const { key, userId, dialect } = optionalParams; + + const queryParams: string[] = []; + const headers: { [key: string]: string } = { 'Content-Type': 'multipart/form-data' }; + if (key) { + queryParams.push(serializeQuery('form', true, 'key', key)); + } + if (userId) { + queryParams.push(serializeQuery('form', true, 'user_id', userId)); + } + if (dialect) { + queryParams.push(serializeQuery('form', true, 'dialect', dialect)); + } + const urlEndpoint = '/api/scoring/speech/v9/json'; + const urlParams = queryParams.length > 0 ? `?${queryParams.join('&')}` : ''; + const finalUrl = encodeURI(`${this.baseUrl + urlEndpoint}${urlParams}`); + const formInput = V9LatestService.formData(input); + const response: any = await this.httpClient.post( + finalUrl, + formInput, + { + ...headers, + }, + true, + ); + const responseModel = response.data as GetGrammarVocabCoherenceFeedbackMetricsResponse; + return responseModel; + } +} diff --git a/src/services/v9Latest/index.ts b/src/services/v9Latest/index.ts new file mode 100644 index 0000000..81d697b --- /dev/null +++ b/src/services/v9Latest/index.ts @@ -0,0 +1,12 @@ +// This file was generated by liblab | https://liblab.com/ + +export type { GetGrammarVocabCoherenceFeedbackMetricsRequest } from './models/GetGrammarVocabCoherenceFeedbackMetricsRequest'; +export type { GetGrammarVocabCoherenceFeedbackMetricsResponse } from './models/GetGrammarVocabCoherenceFeedbackMetricsResponse'; +export type { PteAnswerQuestionRequest } from './models/PteAnswerQuestionRequest'; +export type { PteAnswerQuestionResponse } from './models/PteAnswerQuestionResponse'; +export type { ScoreAPhonemeListRequest } from './models/ScoreAPhonemeListRequest'; +export type { ScoreAPhonemeListResponse } from './models/ScoreAPhonemeListResponse'; +export type { ScoreFluencySpanishRequest } from './models/ScoreFluencySpanishRequest'; +export type { ScoreFluencySpanishResponse } from './models/ScoreFluencySpanishResponse'; +export type { ValidateTextRequest } from './models/ValidateTextRequest'; +export type { ValidateTextResponse } from './models/ValidateTextResponse'; diff --git a/src/services/v9Latest/models/GetGrammarVocabCoherenceFeedbackMetricsRequest.ts b/src/services/v9Latest/models/GetGrammarVocabCoherenceFeedbackMetricsRequest.ts new file mode 100644 index 0000000..0aa01bd --- /dev/null +++ b/src/services/v9Latest/models/GetGrammarVocabCoherenceFeedbackMetricsRequest.ts @@ -0,0 +1,16 @@ +// This file was generated by liblab | https://liblab.com/ + +export interface GetGrammarVocabCoherenceFeedbackMetricsRequest { + /** + * include feedback metrics for Grammar, Vocab, Coherence. + */ + include_ielts_feedback?: string; + /** + * A unique identifier for the activity or question this user audio is answering. + */ + question_info?: string; + /** + * file with user audio (wav, mp3, m4a, webm, ogg, aiff) + */ + user_audio_file?: import('fs').ReadStream | Buffer | File; +} diff --git a/src/services/v9Latest/models/GetGrammarVocabCoherenceFeedbackMetricsResponse.ts b/src/services/v9Latest/models/GetGrammarVocabCoherenceFeedbackMetricsResponse.ts new file mode 100644 index 0000000..7e30b48 --- /dev/null +++ b/src/services/v9Latest/models/GetGrammarVocabCoherenceFeedbackMetricsResponse.ts @@ -0,0 +1,300 @@ +// This file was generated by liblab | https://liblab.com/ + +export interface GetGrammarVocabCoherenceFeedbackMetricsResponse { + quota_remaining?: number; + speech_score?: SpeechScore; + status?: string; + version?: string; +} +interface SpeechScore { + asr_version?: string; + cefr_score?: CefrScore; + coherence?: Coherence; + fluency?: Fluency; + grammar?: Grammar; + ielts_score?: IeltsScore1; + pte_score?: PteScore1; + speechace_score?: SpeechaceScore1; + toeic_score?: ToeicScore1; + transcript?: string; + vocab?: Vocab; + word_score_list?: { + ending_punctuation?: string; + phone_score_list?: { + extent?: number[]; + phone?: string; + predicted_stress_level?: number; + quality_score?: number; + sound_most_like?: string; + stress_level?: number; + stress_score?: number; + word_extent?: number[]; + }[]; + quality_score?: number; + syllable_score_list?: { + extent?: number[]; + letters?: string; + phone_count?: number; + predicted_stress_level?: number; + quality_score?: number; + stress_level?: number; + stress_score?: number; + }[]; + word?: string; + }[]; +} +interface CefrScore { + coherence?: string; + fluency?: string; + grammar?: string; + overall?: string; + pronunciation?: string; + vocab?: string; +} +interface Coherence { + overall_metrics?: OverallMetrics; +} +interface OverallMetrics { + adverb_diversity?: AdverbDiversity; + basic_connectives?: BasicConnectives; + causal_connectives?: CausalConnectives; + lexical_density?: LexicalDensity; + negative_connectives?: NegativeConnectives; + pronoun_density?: PronounDensity; + verb_diversity?: VerbDiversity; +} +interface AdverbDiversity { + level?: string; + score?: number; +} +interface BasicConnectives { + examples?: string[]; + level?: string; + score?: number; +} +interface CausalConnectives { + level?: string; + score?: number; +} +interface LexicalDensity { + level?: string; + score?: number; +} +interface NegativeConnectives { + examples?: string[]; + level?: string; + message?: string; + score?: number; +} +interface PronounDensity { + level?: string; + score?: number; +} +interface VerbDiversity { + level?: string; + score?: number; +} +interface Fluency { + fluency_version?: string; + ielts_subscore_version?: string; + overall_metrics?: OverallMetrics1; + segment_metrics_list?: { + all_pause_count?: number; + all_pause_duration?: number; + all_pause_list?: number[][]; + articulation_length?: number; + articulation_rate?: number; + cefr_score?: CefrScore1; + correct_syllable_count?: number; + correct_word_count?: number; + duration?: number; + ielts_score?: IeltsScore; + max_length_run?: number; + mean_length_run?: number; + pte_score?: PteScore; + segment?: number[]; + speech_rate?: number; + speechace_score?: SpeechaceScore; + syllable_correct_per_minute?: number; + syllable_count?: number; + toeic_score?: ToeicScore; + word_correct_per_minute?: number; + word_count?: number; + }[]; +} +interface OverallMetrics1 { + all_pause_count?: number; + all_pause_duration?: number; + all_pause_list?: number[][]; + articulation_length?: number; + articulation_rate?: number; + correct_syllable_count?: number; + correct_word_count?: number; + duration?: number; + max_length_run?: number; + mean_length_run?: number; + segment?: number[]; + speech_rate?: number; + syllable_correct_per_minute?: number; + syllable_count?: number; + word_correct_per_minute?: number; + word_count?: number; +} +interface CefrScore1 { + coherence?: string; + fluency?: string; + grammar?: string; + pronunciation?: string; + vocab?: string; +} +interface IeltsScore { + coherence?: number; + fluency?: number; + grammar?: number; + pronunciation?: number; + vocab?: number; +} +interface PteScore { + coherence?: number; + fluency?: number; + grammar?: number; + pronunciation?: number; + vocab?: number; +} +interface SpeechaceScore { + coherence?: number; + fluency?: number; + grammar?: number; + pronunciation?: number; + vocab?: number; +} +interface ToeicScore { + coherence?: number; + fluency?: number; + grammar?: number; + pronunciation?: number; + vocab?: number; +} +interface Grammar { + errors?: { + category?: string; + matched_text?: string; + message?: string; + replacements?: string[]; + span?: number[]; + }[]; + overall_metrics?: OverallMetrics2; +} +interface OverallMetrics2 { + grammatical_accuracy?: GrammaticalAccuracy; + grammatical_range?: GrammaticalRange; + length?: Length; + lexical_diversity?: LexicalDiversity; +} +interface GrammaticalAccuracy { + level?: string; + score?: number; +} +interface GrammaticalRange { + adverb_modifier_variation?: AdverbModifierVariation; + level?: string; + message?: string; + noun_phrase_complexity?: NounPhraseComplexity; + noun_phrase_variation?: NounPhraseVariation; + score?: number; + verb_construction_variation?: VerbConstructionVariation; +} +interface AdverbModifierVariation { + level?: string; + score?: number; +} +interface NounPhraseComplexity { + level?: string; + message?: string; + score?: number; +} +interface NounPhraseVariation { + level?: string; + score?: number; +} +interface VerbConstructionVariation { + level?: string; + score?: number; +} +interface Length { + level?: string; + score?: number; +} +interface LexicalDiversity { + level?: string; + score?: number; +} +interface IeltsScore1 { + coherence?: number; + fluency?: number; + grammar?: number; + overall?: number; + pronunciation?: number; + vocab?: number; +} +interface PteScore1 { + coherence?: number; + fluency?: number; + grammar?: number; + overall?: number; + pronunciation?: number; + vocab?: number; +} +interface SpeechaceScore1 { + coherence?: number; + fluency?: number; + grammar?: number; + overall?: number; + pronunciation?: number; + vocab?: number; +} +interface ToeicScore1 { + coherence?: number; + fluency?: number; + grammar?: number; + overall?: number; + pronunciation?: number; + vocab?: number; +} +interface Vocab { + overall_metrics?: OverallMetrics3; +} +interface OverallMetrics3 { + academic_language_use?: AcademicLanguageUse; + collocation_commonality?: CollocationCommonality; + idiomaticity?: Idiomaticity; + lexical_diversity?: LexicalDiversity1; + word_sophistication?: WordSophistication; + word_specificity?: WordSpecificity; +} +interface AcademicLanguageUse { + level?: string; + message?: string; + score?: number; +} +interface CollocationCommonality { + level?: string; + score?: number; +} +interface Idiomaticity { + level?: string; + score?: number; +} +interface LexicalDiversity1 { + level?: string; + score?: number; +} +interface WordSophistication { + level?: string; + score?: number; +} +interface WordSpecificity { + level?: string; + message?: string; + score?: number; +} diff --git a/src/services/v9Latest/models/PteAnswerQuestionRequest.ts b/src/services/v9Latest/models/PteAnswerQuestionRequest.ts new file mode 100644 index 0000000..477b024 --- /dev/null +++ b/src/services/v9Latest/models/PteAnswerQuestionRequest.ts @@ -0,0 +1,20 @@ +// This file was generated by liblab | https://liblab.com/ + +export interface PteAnswerQuestionRequest { + /** + * Default: 1 + * Whether to include scoring other aspects of the speech: Pronunciation, Fluency, Grammar, Vocab, Coherence. + * Set to 0 if you only want to receive the task score. + * + * + */ + include_speech_score?: string; + /** + * The question presented to the user. + */ + task_question?: string; + /** + * The user audio file containing the speaker's response to the task. + */ + user_audio_file?: import('fs').ReadStream | Buffer | File; +} diff --git a/src/services/v9Latest/models/PteAnswerQuestionResponse.ts b/src/services/v9Latest/models/PteAnswerQuestionResponse.ts new file mode 100644 index 0000000..4b2a641 --- /dev/null +++ b/src/services/v9Latest/models/PteAnswerQuestionResponse.ts @@ -0,0 +1,14 @@ +// This file was generated by liblab | https://liblab.com/ + +export interface PteAnswerQuestionResponse { + quota_remaining?: number; + status?: string; + task_score?: TaskScore; + version?: string; +} +interface TaskScore { + score?: number; + transcript?: string; + version?: string; + type_?: string; +} diff --git a/src/services/v9Latest/models/ScoreAPhonemeListRequest.ts b/src/services/v9Latest/models/ScoreAPhonemeListRequest.ts new file mode 100644 index 0000000..a0d18c3 --- /dev/null +++ b/src/services/v9Latest/models/ScoreAPhonemeListRequest.ts @@ -0,0 +1,16 @@ +// This file was generated by liblab | https://liblab.com/ + +export interface ScoreAPhonemeListRequest { + /** + * A phoneme list to score. + */ + phone_list?: string; + /** + * A unique identifier for the activity or question this user audio is answering. + */ + question_info?: string; + /** + * file with user audio (wav, mp3, m4a, webm, ogg, aiff) + */ + user_audio_file?: import('fs').ReadStream | Buffer | File; +} diff --git a/src/services/v9Latest/models/ScoreAPhonemeListResponse.ts b/src/services/v9Latest/models/ScoreAPhonemeListResponse.ts new file mode 100644 index 0000000..e18350c --- /dev/null +++ b/src/services/v9Latest/models/ScoreAPhonemeListResponse.ts @@ -0,0 +1,22 @@ +// This file was generated by liblab | https://liblab.com/ + +export interface ScoreAPhonemeListResponse { + quota_remaining?: number; + status?: string; + version?: string; + word_score?: WordScore; +} +interface WordScore { + phone_score_list?: { + extent?: number[]; + phone?: string; + quality_score?: number; + sound_most_like?: string; + stress_level?: StressLevel; + }[]; + quality_score?: number; + word?: string; +} +interface StressLevel { + [k: string]: unknown; +} diff --git a/src/services/v9Latest/models/ScoreFluencySpanishRequest.ts b/src/services/v9Latest/models/ScoreFluencySpanishRequest.ts new file mode 100644 index 0000000..3e9198b --- /dev/null +++ b/src/services/v9Latest/models/ScoreFluencySpanishRequest.ts @@ -0,0 +1,24 @@ +// This file was generated by liblab | https://liblab.com/ + +export interface ScoreFluencySpanishRequest { + /** + * includes fluency scoring for this request. + */ + include_fluency?: string; + /** + * Instructs Speechace to automatically infer expected pronunciation for unknown terms such names, places, etc. + */ + include_unknown_words?: string; + /** + * Indicates no multiple choice type text used. + */ + no_mc?: string; + /** + * One or more paragraphs of text to score. + */ + text?: string; + /** + * file with user audio (wav, mp3, m4a, webm, ogg, aiff) + */ + user_audio_file?: import('fs').ReadStream | Buffer | File; +} diff --git a/src/services/v9Latest/models/ScoreFluencySpanishResponse.ts b/src/services/v9Latest/models/ScoreFluencySpanishResponse.ts new file mode 100644 index 0000000..73efc20 --- /dev/null +++ b/src/services/v9Latest/models/ScoreFluencySpanishResponse.ts @@ -0,0 +1,98 @@ +// This file was generated by liblab | https://liblab.com/ + +export interface ScoreFluencySpanishResponse { + quota_remaining?: number; + status?: string; + text_score?: TextScore; + version?: string; +} +interface TextScore { + cefr_score?: CefrScore; + fluency?: Fluency; + speechace_score?: SpeechaceScore1; + text?: string; + word_score_list?: { + ending_punctuation?: string; + phone_score_list?: { + extent?: number[]; + phone?: string; + quality_score?: number; + sound_most_like?: string; + stress_level?: StressLevel; + word_extent?: number[]; + }[]; + quality_score?: number; + syllable_score_list?: { + extent?: number[]; + letters?: string; + phone_count?: number; + quality_score?: number; + stress_level?: number; + }[]; + word?: string; + }[]; +} +interface CefrScore { + fluency?: string; + pronunciation?: string; +} +interface Fluency { + fluency_version?: FluencyVersion; + overall_metrics?: OverallMetrics; + segment_metrics_list?: { + all_pause_count?: number; + all_pause_duration?: number; + all_pause_list?: number[][]; + articulation_length?: number; + articulation_rate?: number; + cefr_score?: CefrScore1; + correct_syllable_count?: number; + correct_word_count?: number; + duration?: number; + max_length_run?: number; + mean_length_run?: number; + segment?: number[]; + speech_rate?: number; + speechace_score?: SpeechaceScore; + syllable_correct_per_minute?: number; + syllable_count?: number; + word_correct_per_minute?: number; + word_count?: number; + }[]; +} +interface FluencyVersion { + [k: string]: unknown; +} +interface OverallMetrics { + all_pause_count?: number; + all_pause_duration?: number; + all_pause_list?: number[][]; + articulation_length?: number; + articulation_rate?: number; + correct_syllable_count?: number; + correct_word_count?: number; + duration?: number; + max_length_run?: number; + mean_length_run?: number; + segment?: number[]; + speech_rate?: number; + syllable_correct_per_minute?: number; + syllable_count?: number; + word_correct_per_minute?: number; + word_count?: number; +} +interface CefrScore1 { + fluency?: string; + pronunciation?: string; +} +interface SpeechaceScore { + fluency?: number; + pronunciation?: number; +} +interface SpeechaceScore1 { + fluency?: number; + pronunciation?: number; +} +interface StressLevel { + [k: string]: unknown; +} diff --git a/src/services/v9Latest/models/ValidateTextRequest.ts b/src/services/v9Latest/models/ValidateTextRequest.ts new file mode 100644 index 0000000..e5cf217 --- /dev/null +++ b/src/services/v9Latest/models/ValidateTextRequest.ts @@ -0,0 +1,3 @@ +// This file was generated by liblab | https://liblab.com/ + +export interface ValidateTextRequest {} diff --git a/src/services/v9Latest/models/ValidateTextResponse.ts b/src/services/v9Latest/models/ValidateTextResponse.ts new file mode 100644 index 0000000..e9fe46d --- /dev/null +++ b/src/services/v9Latest/models/ValidateTextResponse.ts @@ -0,0 +1,6 @@ +// This file was generated by liblab | https://liblab.com/ + +export interface ValidateTextResponse { + quota_remaining?: number; + status?: string; +} diff --git a/test/services/v1V7OlderVersions/V1V7OlderVersions.test.ts b/test/services/v1V7OlderVersions/V1V7OlderVersions.test.ts new file mode 100644 index 0000000..c7e2692 --- /dev/null +++ b/test/services/v1V7OlderVersions/V1V7OlderVersions.test.ts @@ -0,0 +1,72 @@ +// This file was generated by liblab | https://liblab.com/ + +import nock from 'nock'; + +import { Speechaceapi } from '../../../src'; + +import { V1V7OlderVersionsService } from '../../../src/services/v1V7OlderVersions/V1V7OlderVersions'; + +describe('test V1V7OlderVersionsService object', () => { + it('should be an object', () => { + expect(typeof V1V7OlderVersionsService).toBe('function'); + }); +}); + +describe('test V1V7OlderVersions', () => { + let sdk: any; + + beforeEach(() => { + sdk = new Speechaceapi(); + + nock.cleanAll(); + }); + + describe('test scoreVocabularyGrammar', () => { + test('test api call', () => { + const scope = nock('https://api.speechace.co') + .post('/api/scoring/text/v0.5/json?key=voluptas&user_id=5880960154&dialect=sunt') + .reply(200, { data: {} }); + return sdk.v1V7OlderVersions + .scoreVocabularyGrammar({}, { key: 'voluptas', userId: '5880960154', dialect: 'sunt' }) + .then((r: any) => expect(r.data).toEqual({})); + }); + }); + + describe('test scoreAPhonemeList1', () => { + test('test api call', () => { + const scope = nock('https://api.speechace.co') + .post('/api/scoring/phone_list/v0.5/json?key=cum&user_id=3112096560&dialect=consequatur') + .reply(200, { data: {} }); + return sdk.v1V7OlderVersions + .scoreAPhonemeList1({}, { key: 'cum', userId: '3112096560', dialect: 'consequatur' }) + .then((r: any) => expect(r.data).toEqual({})); + }); + }); + + describe('test validateText1', () => { + test('test api call', () => { + const scope = nock('https://api.speechace.co') + .post( + '/api/validating/text/v0.5/json?key=saepe&text=commodiiustocumreprehenderitcommodi&dialect=enim', + ) + .reply(200, { data: {} }); + return sdk.v1V7OlderVersions + .validateText1( + {}, + { key: 'saepe', text: 'commodiiustocumreprehenderitcommodi', dialect: 'enim' }, + ) + .then((r: any) => expect(r.data).toEqual({})); + }); + }); + + describe('test assessRelevance1', () => { + test('test api call', () => { + const scope = nock('https://api.speechace.co') + .post('/api/scoring/speech/v0.5/json?key=blanditiis&dialect=occaecati&user_id=2816198777') + .reply(200, { data: {} }); + return sdk.v1V7OlderVersions + .assessRelevance1({}, { key: 'blanditiis', dialect: 'occaecati', userId: '2816198777' }) + .then((r: any) => expect(r.data).toEqual({})); + }); + }); +}); diff --git a/test/services/v9Latest/V9Latest.test.ts b/test/services/v9Latest/V9Latest.test.ts new file mode 100644 index 0000000..9814ba5 --- /dev/null +++ b/test/services/v9Latest/V9Latest.test.ts @@ -0,0 +1,86 @@ +// This file was generated by liblab | https://liblab.com/ + +import nock from 'nock'; + +import { Speechaceapi } from '../../../src'; + +import { V9LatestService } from '../../../src/services/v9Latest/V9Latest'; + +describe('test V9LatestService object', () => { + it('should be an object', () => { + expect(typeof V9LatestService).toBe('function'); + }); +}); + +describe('test V9Latest', () => { + let sdk: any; + + beforeEach(() => { + sdk = new Speechaceapi(); + + nock.cleanAll(); + }); + + describe('test scoreFluencySpanish', () => { + test('test api call', () => { + const scope = nock('https://api.speechace.co') + .post('/api/scoring/text/v9/json?key=assumenda&dialect=unde') + .reply(200, { data: {} }); + return sdk.v9Latest + .scoreFluencySpanish({}, { key: 'assumenda', dialect: 'unde' }) + .then((r: any) => expect(r.data).toEqual({})); + }); + }); + + describe('test scoreAPhonemeList', () => { + test('test api call', () => { + const scope = nock('https://api.speechace.co') + .post('/api/scoring/phone_list/v9/json?key=fugit&user_id=7046316927&dialect=dicta') + .reply(200, { data: {} }); + return sdk.v9Latest + .scoreAPhonemeList({}, { key: 'fugit', userId: '7046316927', dialect: 'dicta' }) + .then((r: any) => expect(r.data).toEqual({})); + }); + }); + + describe('test validateText', () => { + test('test api call', () => { + const scope = nock('https://api.speechace.co') + .post( + '/api/validating/text/v9/json?key=excepturi&text=enimdolorevoluptatesfugiatquo&dialect=accusamus', + ) + .reply(200, { data: {} }); + return sdk.v9Latest + .validateText( + {}, + { key: 'excepturi', text: 'enimdolorevoluptatesfugiatquo', dialect: 'accusamus' }, + ) + .then((r: any) => expect(r.data).toEqual({})); + }); + }); + + describe('test pteAnswerQuestion', () => { + test('test api call', () => { + const scope = nock('https://api.speechace.co') + .post('/api/scoring/task/v9/json?key=in&task_type=fugiat&dialect=ut') + .reply(200, { data: {} }); + return sdk.v9Latest + .pteAnswerQuestion({}, { key: 'in', taskType: 'fugiat', dialect: 'ut' }) + .then((r: any) => expect(r.data).toEqual({})); + }); + }); + + describe('test getGrammarVocabCoherenceFeedbackMetrics', () => { + test('test api call', () => { + const scope = nock('https://api.speechace.co') + .post('/api/scoring/speech/v9/json?key=ullam&user_id=1800534821&dialect=facilis') + .reply(200, { data: {} }); + return sdk.v9Latest + .getGrammarVocabCoherenceFeedbackMetrics( + {}, + { key: 'ullam', userId: '1800534821', dialect: 'facilis' }, + ) + .then((r: any) => expect(r.data).toEqual({})); + }); + }); +}); diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json new file mode 100644 index 0000000..83e7556 --- /dev/null +++ b/tsconfig.eslint.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "include": ["./src", "./test", "./examples"] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..f3a53e1 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "target": "es2018", + "module": "commonjs", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "skipLibCheck": true, + "outDir": "./dist", + "rootDir": "./src", + "noImplicitAny": true, + "baseUrl": "./", + "declaration": true, + "moduleResolution": "node", + "isolatedModules": true, + "allowSyntheticDefaultImports": true, + "declarationMap": true, + "lib": ["ES2021.String", "dom", "esnext"], + "sourceMap": true + }, + "include": ["./src/"], + "exclude": ["src/client/@custom_types"] +}