From b067f123ed9f2e0fce53673306b05fcf479c17f0 Mon Sep 17 00:00:00 2001 From: Pierluigi Viti Date: Tue, 31 Oct 2023 15:35:22 +0100 Subject: [PATCH 01/30] feat: first commit of provisioning sdk --- .eslintignore | 3 + .eslintrc | 15 + .github/dependabot.yml | 11 + .github/release.yaml | 24 + .github/workflows/codeql-analysis.yml | 60 + .github/workflows/semantic-release.yml | 40 + .gitignore | 166 + .markdownlint.json | 14 + .npmignore | 12 + .npmrc | 5 + .prettierrc | 6 + .releaserc | 23 + CHANGELOG.md | 0 LICENSE | 21 + README.md | 416 +- SECURITY.md | 13 + babel.config.js | 4 + gen/fixer.ts | 49 + gen/generator.ts | 796 +++ gen/openapi.json | 4484 +++++++++++++++ gen/schema.ts | 373 ++ gen/templates/create.tpl | 3 + gen/templates/delete.tpl | 3 + gen/templates/header.tpl | 3 + gen/templates/list.tpl | 3 + gen/templates/model.tpl | 4 + gen/templates/model_empty.tpl | 1 + gen/templates/relationship_many.tpl | 4 + gen/templates/relationship_one.tpl | 4 + gen/templates/resource.tpl | 40 + gen/templates/retrieve.tpl | 3 + gen/templates/singleton.tpl | 3 + gen/templates/spec.tpl | 213 + gen/templates/spec_relationship.tpl | 19 + gen/templates/spec_trigger.tpl | 23 + gen/templates/trigger.tpl | 3 + gen/templates/update.tpl | 3 + jest.config.js | 8 + package.json | 69 + pnpm-lock.yaml | 6896 +++++++++++++++++++++++ specs/commercelayer.spec.ts | 56 + specs/error.spec.ts | 44 + specs/headers.spec.ts | 59 + specs/jsonapi.spec.ts | 96 + specs/resource.spec.ts | 98 + specs/resources/api_credentials.spec.ts | 241 + specs/resources/memberships.spec.ts | 261 + specs/resources/organizations.spec.ts | 240 + specs/resources/permissions.spec.ts | 245 + specs/resources/roles.spec.ts | 283 + specs/resources/user.spec.ts | 129 + specs/resources/versions.spec.ts | 128 + specs/sdk.spec.ts | 70 + specs/static.spec.ts | 43 + src/api.ts | 134 + src/client.ts | 179 + src/commercelayer.ts | 154 + src/common.ts | 17 + src/config.ts | 18 + src/debug.ts | 51 + src/error.ts | 92 + src/index.ts | 21 + src/interceptor.ts | 43 + src/jsonapi.ts | 111 + src/model.ts | 14 + src/query.ts | 76 + src/resource.ts | 326 ++ src/resources/api_credentials.ts | 104 + src/resources/memberships.ts | 98 + src/resources/organizations.ts | 130 + src/resources/permissions.ts | 103 + src/resources/roles.ts | 106 + src/resources/user.ts | 61 + src/resources/versions.ts | 50 + src/static.ts | 29 + src/util.ts | 19 + test/common.ts | 182 + test/interceptor.ts | 49 + test/spot.ts | 27 + test/token.ts | 56 + tsconfig.esm.json | 72 + tsconfig.json | 72 + 82 files changed, 18226 insertions(+), 1 deletion(-) create mode 100644 .eslintignore create mode 100644 .eslintrc create mode 100644 .github/dependabot.yml create mode 100644 .github/release.yaml create mode 100644 .github/workflows/codeql-analysis.yml create mode 100644 .github/workflows/semantic-release.yml create mode 100644 .gitignore create mode 100644 .markdownlint.json create mode 100644 .npmignore create mode 100644 .npmrc create mode 100644 .prettierrc create mode 100644 .releaserc create mode 100644 CHANGELOG.md create mode 100644 LICENSE create mode 100644 SECURITY.md create mode 100644 babel.config.js create mode 100644 gen/fixer.ts create mode 100644 gen/generator.ts create mode 100644 gen/openapi.json create mode 100644 gen/schema.ts create mode 100644 gen/templates/create.tpl create mode 100644 gen/templates/delete.tpl create mode 100644 gen/templates/header.tpl create mode 100644 gen/templates/list.tpl create mode 100644 gen/templates/model.tpl create mode 100644 gen/templates/model_empty.tpl create mode 100644 gen/templates/relationship_many.tpl create mode 100644 gen/templates/relationship_one.tpl create mode 100644 gen/templates/resource.tpl create mode 100644 gen/templates/retrieve.tpl create mode 100644 gen/templates/singleton.tpl create mode 100644 gen/templates/spec.tpl create mode 100644 gen/templates/spec_relationship.tpl create mode 100644 gen/templates/spec_trigger.tpl create mode 100644 gen/templates/trigger.tpl create mode 100644 gen/templates/update.tpl create mode 100644 jest.config.js create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 specs/commercelayer.spec.ts create mode 100644 specs/error.spec.ts create mode 100644 specs/headers.spec.ts create mode 100644 specs/jsonapi.spec.ts create mode 100644 specs/resource.spec.ts create mode 100644 specs/resources/api_credentials.spec.ts create mode 100644 specs/resources/memberships.spec.ts create mode 100644 specs/resources/organizations.spec.ts create mode 100644 specs/resources/permissions.spec.ts create mode 100644 specs/resources/roles.spec.ts create mode 100644 specs/resources/user.spec.ts create mode 100644 specs/resources/versions.spec.ts create mode 100644 specs/sdk.spec.ts create mode 100644 specs/static.spec.ts create mode 100644 src/api.ts create mode 100644 src/client.ts create mode 100644 src/commercelayer.ts create mode 100644 src/common.ts create mode 100644 src/config.ts create mode 100644 src/debug.ts create mode 100644 src/error.ts create mode 100644 src/index.ts create mode 100644 src/interceptor.ts create mode 100644 src/jsonapi.ts create mode 100644 src/model.ts create mode 100644 src/query.ts create mode 100644 src/resource.ts create mode 100644 src/resources/api_credentials.ts create mode 100644 src/resources/memberships.ts create mode 100644 src/resources/organizations.ts create mode 100644 src/resources/permissions.ts create mode 100644 src/resources/roles.ts create mode 100644 src/resources/user.ts create mode 100644 src/resources/versions.ts create mode 100644 src/static.ts create mode 100644 src/util.ts create mode 100644 test/common.ts create mode 100644 test/interceptor.ts create mode 100644 test/spot.ts create mode 100644 test/token.ts create mode 100644 tsconfig.esm.json create mode 100644 tsconfig.json diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..ce76cf8 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,3 @@ +lib/ +dist/ +coverage/ diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..c5f4106 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,15 @@ +{ + "extends": [ + "@commercelayer/eslint-config-ts" + ], + "ignorePatterns": ["test/**/*.ts", "gen/**/*.ts", "specs/**/*.ts", "*.config.js"], + "rules": { + "prettier/prettier": "off", + "@typescript-eslint/prefer-nullish-coalescing": "off", + "@typescript-eslint/strict-boolean-expressions": "off", + "@typescript-eslint/no-var-requires": "off", + "@typescript-eslint/restrict-template-expressions": "off", + "@typescript-eslint/consistent-type-definitions": "off", + "@typescript-eslint/return-await": "off" + } +} diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..808ccab --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,11 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: "npm" # See documentation for possible values + directory: "/" # Location of package manifests + schedule: + interval: "monthly" # daily, weekly, monthly diff --git a/.github/release.yaml b/.github/release.yaml new file mode 100644 index 0000000..0fa560f --- /dev/null +++ b/.github/release.yaml @@ -0,0 +1,24 @@ +# .github/release.yaml + +changelog: + exclude: + labels: + - ignore-for-release + authors: + - octocat + categories: + - title: 💥 Breaking Change + labels: + - breaking-change + - title: 🚀 Enhancement + labels: + - enhancement + - title: 🐛 Bug Fix + labels: + - bug + - title: 📝 Documentation + labels: + - documentation + - title: Other Changes + labels: + - "*" diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml new file mode 100644 index 0000000..3b537c2 --- /dev/null +++ b/.github/workflows/codeql-analysis.yml @@ -0,0 +1,60 @@ + +name: "CodeQL" + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + schedule: + - cron: '43 18 * * 4' + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: [ 'javascript' ] + # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ] + # Learn more: + # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v1 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + # queries: ./path/to/local/query, your-org/your-repo/queries@main + + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v1 + + # ℹ️ Command-line programs to run using the OS shell. + # 📚 https://git.io/JvXDl + + # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines + # and modify them (or add more) to build your code if your project + # uses a compiled language + + #- run: | + # make bootstrap + # make release + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v1 diff --git a/.github/workflows/semantic-release.yml b/.github/workflows/semantic-release.yml new file mode 100644 index 0000000..db884fd --- /dev/null +++ b/.github/workflows/semantic-release.yml @@ -0,0 +1,40 @@ +name: Release +on: + push: + branches: [ main, beta ] + pull_request: + branches: [ main ] +jobs: + release: + name: Release + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 + persist-credentials: false + - name: Install pnpm + uses: pnpm/action-setup@v2 + with: + version: latest + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: 'lts/*' + cache: 'pnpm' + - name: Install dependencies + run: pnpm install --frozen-lockfile + - name: Build package + run: pnpm build + - name: Run specs + env: + CL_SDK_DOMAIN: commercelayer.co + CL_SDK_CLIENT_ID: P1GMFxhvca4CqYtBeAKb_E4LUVEbp9bCGMP8ZiHlZo8 + CL_SDK_CLIENT_SECRET: 3xMxL0giBfoxl02TbGrNYeYl5KCmq2TdF71P05BWQzk + run: pnpm test + - name: Release + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + run: pnpx semantic-release diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..39efbb6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,166 @@ +build/ +dist/ + + +# Created by https://www.toptal.com/developers/gitignore/api/node,macos +# Edit at https://www.toptal.com/developers/gitignore?templates=node,macos + +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### Node ### +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-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/ + +# TypeScript v1 declaration files +typings/ + +# 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 variables file +.env +.env.test +.env*.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next + +# Nuxt.js build / generate output +.nuxt +dist +lib + +# Storybook build outputs +.out +.storybook-out +storybook-static + +# rollup.js default build output +dist/ + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# Temporary folders +tmp/ +temp/ + +# End of https://www.toptal.com/developers/gitignore/api/node,macos +test.ts +yarn.lock diff --git a/.markdownlint.json b/.markdownlint.json new file mode 100644 index 0000000..82e2329 --- /dev/null +++ b/.markdownlint.json @@ -0,0 +1,14 @@ +{ + "default": true, + "MD001": false, + "MD012": false, + "MD013": { + "line_length": 1000 + }, + "MD024": { + "siblings_only": true + }, + "MD025": false, + "MD033": false, + "MD041": false +} \ No newline at end of file diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..0b853a4 --- /dev/null +++ b/.npmignore @@ -0,0 +1,12 @@ +build/ +gen/ +src/ +node_modules/ + +tsconfig.json +tsconfig.*.json +tslint.json +.prettierrc + +**/*.zip +**/*.log \ No newline at end of file diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..3369ecf --- /dev/null +++ b/.npmrc @@ -0,0 +1,5 @@ + +auto-install-peers=true +#strict-peer-dependencies=false + +#registry=http://localhost:4873 \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..a718d76 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,6 @@ +{ + "semi": false, + "trailingComma": "none", + "singleQuote": true, + "printWidth": 150 +} \ No newline at end of file diff --git a/.releaserc b/.releaserc new file mode 100644 index 0000000..9d11bf3 --- /dev/null +++ b/.releaserc @@ -0,0 +1,23 @@ +{ + "ci": true, + "dryRun": false, + "branches": [ + { "name": "main", "channel": "latest" }, + "+([0-9])?(.{+([0-9]),x}).x", + { "name": "beta", "prerelease": true }, + { "name": "sdk2", "channel": "sdk2", "prerelease": "beta" } + ], + "plugins": [ + "@semantic-release/commit-analyzer", + "@semantic-release/release-notes-generator", + "@semantic-release/github", + "@semantic-release/npm", + ["@semantic-release/changelog", { + "changelogFile": "CHANGELOG.md" + }], + ["@semantic-release/git", { + "assets": [ "package.json", "CHANGELOG.md" ], + "message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}" + }] + ] +} diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..e69de29 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..3b4d2b3 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) [2023] [Commerce Layer] + +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. diff --git a/README.md b/README.md index decbac3..cd31635 100644 --- a/README.md +++ b/README.md @@ -1 +1,415 @@ -# provisioning-sdk \ No newline at end of file +# Commerce Layer Provisioning SDK + +[![Version](https://img.shields.io/npm/v/@commercelayer/sdk.svg)](https://npmjs.org/package/@commercelayer/sdk) +[![Downloads/week](https://img.shields.io/npm/dw/@commercelayer/sdk.svg)](https://npmjs.org/package/@commercelayer/sdk) +[![License](https://img.shields.io/npm/l/@commercelayer/sdk.svg)](https://github.com/commercelayer/commercelayer-sdk/blob/master/package.json) +[![semantic-release: angular](https://img.shields.io/badge/semantic--release-angular-e10079?logo=semantic-release)](https://github.com/semantic-release/semantic-release) +[![Release](https://github.com/commercelayer/commercelayer-sdk/actions/workflows/semantic-release.yml/badge.svg)](https://github.com/commercelayer/commercelayer-sdk/actions/workflows/semantic-release.yml) +[![CodeQL](https://github.com/commercelayer/commercelayer-cli/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/commercelayer/commercelayer-cli/actions/workflows/codeql-analysis.yml) +[![TypeScript](https://img.shields.io/badge/%3C%2F%3E-TypeScript%205-%230074c1.svg)](https://www.typescriptlang.org/) + +A JavaScript Library wrapper that makes it quick and easy to interact with the [Commerce Layer API](https://docs.commercelayer.io/developers). + +## What is Commerce Layer? + +[Commerce Layer](https://commercelayer.io) is a multi-market commerce API and order management system that lets you add global shopping capabilities to any website, mobile app, chatbot, wearable, voice, or IoT device, with ease. Compose your stack with the best-of-breed tools you already mastered and love. Make any experience shoppable, anywhere, through a blazing-fast, enterprise-grade, and secure API. + +## Table of contents + +- [Getting started](#getting-started) +- [Installation](#installation) +- [Authentication](#authentication) +- [Import](#import) +- [SDK usage](#sdk-usage) +- [Overriding credentials](#overriding-credentials) +- [Handling validation errors](#handling-validation-errors) +- [Contributors guide](#contributors-guide) +- [Need help?](#need-help) +- [License](#license) + +--- + +## Getting started + +To get started with Commerce Layer JS SDK you need to install it, get the credentials that will allow you to perform your API calls, and import the SDK into your application's code. The sections below explain how to achieve this. + +> If you want, you can also read [this tutorial](https://commercelayer.io/blog/getting-started-with-commerce-layer-javascript-sdk) from Commerce Layer's blog. + +### Installation + +Commerce Layer JS SDK is available as an [npm](https://www.npmjs.com/package/@commercelayer/sdk) and [yarn](https://yarnpkg.com/package/@commercelayer/sdk) package that you can install with the command below: + +```shell +npm install @commercelayer/sdk + +// or + +yarn add @commercelayer/sdk +``` + +### Authentication + +All requests to Commerce Layer API must be authenticated with an [OAuth2](https://oauth.net/2) bearer token. Hence, before starting to use this SDK you need to get a valid access token. Kindly check [our documentation](https://docs.commercelayer.io/developers/authentication) for more information about the available authorization flows. + +> Feel free to use [Commerce Layer JS Auth](https://github.com/commercelayer/commercelayer-js-auth), a JavaScript library that helps you wrap our authentication API. + +### Import + +You can use the ES6 default import with the SDK like so: + +```javascript +import CommerceLayer from '@commercelayer/sdk' + +const cl = CommerceLayer({ + organization: 'your-organization-slug', + accessToken: 'your-access-token' +}) +``` + +## SDK usage + +The JavaScript SDK is a wrapper around Commerce Layer API which means you would still be making API requests but with a different syntax. For now, we don't have comprehensive SDK documentation for every single resource our API supports (about 400+ endpoints), hence you will need to rely on our comprehensive [API Reference](https://docs.commercelayer.io/core/v/api-reference) as you go about using this SDK. So for example, if you want to create an order, take a look at the [Order object](https://docs.commercelayer.io/core/v/api-reference/orders/object) or the [Create an order](https://docs.commercelayer.io/core/v/api-reference/orders/create) documentation to see the required attributes and/or relationships. The same goes for every other supported resource. + +To show you how things work, we will use the [SKUs](https://docs.commercelayer.io/core/v/api-reference/skus) and [Shipping Categories](https://docs.commercelayer.io/core/v/api-reference/shipping_categories) resource in the following examples. The code snippets below show how to use the SDK when performing the standard CRUD operations provided by our REST API. Kindly check our [API reference](https://docs.commercelayer.io/core/v/api-reference) for the complete list of available **resources** and their **attributes**. + +### Create + +
+How to create an SKU +
+ +```javascript + // Select the shipping category (it's a required relationship for the SKU resource) + const shippingCategories = await cl.shipping_categories.list({ filters: { name_eq: 'Merchandising' } }) + + const attributes = { + code: 'TSHIRTMM000000FFFFFFXL', + name: 'Black Men T-shirt with White Logo (XL)', + description: "A very beautiful and cozy mens t-shirt", + weight: "500", + unit_of_weight: "gr" + shipping_category: cl.shipping_categories.relationship(shippingCategories[0].id), // assigns the relationship + } + + const newSku = await cl.skus.create(attributes) +``` + +ℹ️ Check our API reference for more information on how to [create an SKU](https://docs.commercelayer.io/developers/v/api-reference/skus/create). +
+ +### Retrieve / List + +
+How to fetch a single SKU +
+ +```javascript + // Fetch the SKU by ID + const sku = await cl.skus.retrieve('BxAkSVqKEn') + + // Fetch all SKUs and filter by code + const sku = await cl.skus.list({ filters: { code_eq: 'TSHIRTMM000000FFFFFFXLXX' } }) + + // Fetch the first SKU of the list + const sku = (await cl.skus.list()).first() + + // Fetch the last SKU of the list + const sku = (await cl.skus.list()).last() +``` + +ℹ️ Check our API reference for more information on how to [retrieve an SKU](https://docs.commercelayer.io/developers/v/api-reference/skus/retrieve). +
+ +
+How to fetch a collection of SKUs +
+ +```javascript + // Fetch all the SKUs + const skus = await cl.skus.list() +``` + +When fetching a collection of resources you can leverage the `meta` attribute to get its `meta` information like so: + +```javascript + const skus = await cl.skus.list() + const meta = skus.meta +``` + +ℹ️ Check our API reference for more information on how to [list all SKUs](https://docs.commercelayer.io/developers/v/api-reference/skus/list). +
+ +
+How to fetch a collection of SKUs and sort the results +
+ +```javascript + // Sort the results by creation date in ascending order (default) + const skus = await cl.skus.list({ sort: { created_at: 'asc' } }) + + // Sort the results by creation date in descending order + const skus = await cl.skus.list({ sort: { created_at: 'desc' } }) + ``` + +ℹ️ Check our API reference for more information on how to [sort results](https://docs.commercelayer.io/developers/sorting-results). +
+ +
+How to fetch a collection of SKUs and include associations +
+ +```javascript + // Include an association (prices) + const skus = await cl.skus.list({ include: [ 'prices' ] }) + + // Include an association (stock items) + const skus = await cl.skus.list({ include: [ 'stock_items' ] }) + ``` + +ℹ️ Check our API reference for more information on how to [include associations](https://docs.commercelayer.io/developers/including-associations). +
+ +
+How to fetch a collection of SKUs and return specific fields (sparse fieldsets) +
+ +```javascript + // Request the API to return only specific fields + const skus = await cl.skus.list({ fields: { skus: [ 'name', 'metadata' ] } }) + + // Request the API to return only specific fields of the included resource + const skus = await cl.skus.list({ include: [ 'prices' ], fields: { prices: [ 'currency_code', 'formatted_amount' ] } }) + ``` + +ℹ️ Check our API reference for more information on how to [use sparse fieldsets](https://docs.commercelayer.io/developers/sparse-fieldsets). +
+ +
+How to fetch a collection of SKUs and filter data +
+ +```javascript + // Filter all the SKUs fetching only the ones whose code starts with the string "TSHIRT" + const skus = await cl.skus.list({ filters: { code_start: 'TSHIRT' } }) + + // Filter all the SKUs fetching only the ones whose code ends with the string "XLXX" + const skus = await cl.skus.list({ filters: { code_end: 'XLXX' } }) + + // Filter all the SKUs fetching only the ones whose name contains the string "White Logo" + const skus = await cl.skus.list({ filters: { name_cont: 'White Logo' } }) + + // Filter all the SKUs fetching only the ones created between two specific dates + // (filters combined according to the AND logic) + const skus = await cl.skus.list({ filters: { created_at_gt: '2018-01-01', created_at_lt: '2018-01-31'} }) + + // Filters all the SKUs fetching only the ones created or updated after a specific date + // (attributes combined according to the OR logic) + const skus = await cl.skus.list({ filters: { updated_at_or_created_at_gt: '2019-10-10' } }) + + // Filters all the SKUs fetching only the ones whose name contains the string "Black" + // and whose shipping category name starts with the string "MERCH" + const skus = await cl.skus.list({ filters: { name_cont: 'Black', shipping_category_name_start: 'MERCH'} }) + ``` + +ℹ️ Check our API reference for more information on how to [filter data](https://docs.commercelayer.io/developers/filtering-data). +
+ +
+How to paginate a collection of SKUs +
+ +When you fetch a collection of resources, you get paginated results. You can request specific pages or items in a page like so: + +```javascript + // Fetch the SKUs, setting the page number to 3 and the page size to 5 + const skus = await cl.skus.list({ pageNumber: 3, pageSize: 5 }) + + // Get the total number of SKUs in the collection + const skuCount = skus.meta.recordCount + + // Get the total number of pages + const pageCount = skus.meta.pageCount +``` + +> PS: the default page number is **1**, the default page size is **10**, and the maximum page size allowed is **25**. + +ℹ️ Check our API reference for more information on how [pagination](https://docs.commercelayer.io/developers/pagination) works. +
+ +
+How to iterate through a collection of SKUs +
+ +To execute a function for every item of a collection, use the `map()` method like so: + +```javascript + // Fetch the whole list of SKUs (1st page) and print their names and codes to console + const skus = await cl.skus.list() + skus.map(p => console.log('Product: ' + p.name + ' - Code: ' + p.code)) +``` + +
+ + + +
+How to fetch resource relationships +
+ +Many resources have relationships with other resources and instead of including these associations as seen above, you can fetch them directly. This way, in the case of 1-to-N relationships, you can filter or sort the resulting collection as standard resources. + +```javascript +// Fetch 1-to-1 related resource: billing address of an order +const billingAddress = cl.orders.billing_address('xYZkjABcde') + +// Fetch 1-to-N related resources: orders associated to a customer +const orders = cl.customers.orders('XyzKjAbCDe', { fields: ['status', 'number'] }) +``` + +In general: + +- An API endpoint like `/api/customers` or `/api/customers/` translates to `cl.customers` or `cl.customers('')` with the SDK. +- 1-to-1 relationship API endpoints like `/api/orders//shipping_address` translates to `cl.orders('', { include: ['shipping_address'] }}` with the SDK. +- 1-to-N relationship API endpoints like `/api/customers/?include=orders` or `/api/customers//orders` translates to `cl.customers.retrieve('customerId', { include: ['orders'] })` or `cl.customers.orders('')` with the SDK. + +ℹ️ Check our API reference for more information on how to [fetch relationships](https://docs.commercelayer.io/core/fetching-relationships). +
+ +
+How to count resources +
+ +Many times you simply need to count how many resources exist with +certain characteristics. You can then call the special `count` +function passing a filter to get as result the total number of +resources. + +```javascript +// Get the total number of placed orders +const placedOrders = cl.orders.count({ filters: { status_eq: 'placed' } }) + +``` + +
+ +### Update + +
+How to update an existing SKU +
+ +```javascript + const sku = { + id: 'xYZkjABcde', + description: 'Updated description...', + imageUrl: 'https://img.yourdomain.com/skus/new-image.png' + } + + cl.skus.update(sku) // updates the SKU on the server +``` + +ℹ️ Check our API reference for more information on how to [update an SKU](https://docs.commercelayer.io/developers/v/api-reference/skus/update). +
+ +### Delete + +
+How to delete an existing SKU +
+ +```javascript + cl.skus.delete('xYZkjABcde') // persisted deletion +``` + +ℹ️ Check our API reference for more information on how to [delete an SKU](https://docs.commercelayer.io/developers/v/api-reference/skus/delete). +
+ +## Overriding credentials + +If needed, Commerce Layer JS SDK lets you change the client configuration and set it at a request level. To do that, just use the `config()` method or pass the `options` parameter and authenticate the API call with the desired credentials: + +```javascript + // Permanently change configuration at client level + cl.config({ organization: 'you-organization-slug', accessToken: 'your-access-token' }) + const skus = await cl.skus.list() + + or + + // Use configuration at request level + cl.skus.list({}, { organization: 'you-organization-slug', accessToken: 'your-access-token' }) +``` + +## Handling validation errors + +Commerce Layer API returns specific errors (with extra information) on each attribute of a single resource. You can inspect them to properly handle validation errors (if any). To do that, use the `errors` attribute of the catched error: + +```javascript + // Log error messages to console: + const attributes = { code: 'TSHIRTMM000000FFFFFFXL', name: '' } + + const newSku = await cl.skus.create(attributes).catch(error => console.log(error.errors)) + + // Logged errors + /* + [ + { + title: "can't be blank", + detail: "name - can't be blank", + code: 'VALIDATION_ERROR', + source: { pointer: '/data/attributes/name' }, + status: '422', + meta: { error: 'blank' } + }, + { + title: 'has already been taken', + detail: 'code - has already been taken', + code: 'VALIDATION_ERROR', + source: { pointer: '/data/attributes/code' }, + status: '422', + meta: { error: 'taken', value: 'TSHIRTMM000000FFFFFFXL' } + }, + { + title: "can't be blank", + detail: "shipping_category - can't be blank", + code: 'VALIDATION_ERROR', + source: { pointer: '/data/relationships/shipping_category' }, + status: '422', + meta: { error: 'blank' } + } + ] + */ + +``` + +ℹ️ Check our API reference for more information about the [errors](https://docs.commercelayer.io/developers/handling-errors) returned by the API. + +## Contributors guide + +1. Fork [this repository](https://github.com/commercelayer/commercelayer-sdk) (learn how to do this [here](https://help.github.com/articles/fork-a-repo)). + +2. Clone the forked repository like so: + + ```shell + git clone https://github.com//commercelayer-sdk.git && cd commercelayer-sdk + ``` + +3. Make your changes and create a pull request ([learn how to do this](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request)). + +4. Someone will attend to your pull request and provide some feedback. + +## Need help? + +1. Join [Commerce Layer's Slack community](https://slack.commercelayer.app). + +2. Create an [issue](https://github.com/commercelayer/commercelayer-cli/issues) in this repository. + +3. Ping us [on Twitter](https://twitter.com/commercelayer). + +## License + +This repository is published under the [MIT](LICENSE) license. diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..1d7941d --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,13 @@ +# Security Policy + +## Supported Versions + +| Version | Supported | +| ------- | ------------------ | +| 1.x.x | :white_check_mark: | +| < 1.0.0 | :x: | + +## Reporting a Vulnerability + +Please report (suspected) security vulnerabilities to . +You will receive a response from us and if the issue is confirmed, we will release patch as soon as possible depending on complexity. diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 0000000..eb5877d --- /dev/null +++ b/babel.config.js @@ -0,0 +1,4 @@ +/* global module */ +module.exports = { + presets: [['@babel/preset-env', { targets: { node: 'current' } }], '@babel/preset-typescript'] +} diff --git a/gen/fixer.ts b/gen/fixer.ts new file mode 100644 index 0000000..9f5c500 --- /dev/null +++ b/gen/fixer.ts @@ -0,0 +1,49 @@ +/* eslint-disable no-console */ +import { ApiSchema } from './schema' +import { sortObjectFields } from '../src/util' +import { inspect } from 'util' + + + +const fixRedundantComponents = (schema: ApiSchema): ApiSchema => { + + const fixResMatcher = /(ResponseList|ResponseCreated|ResponseUpdated|Response)$/ + + Object.values(schema.resources).forEach(res => { + + // Remove redundant components and replace them with global resource component + Object.values(res.operations).forEach(op => { + if (op.responseType && (fixResMatcher.test(op.responseType))) { + const rt = op.responseType.replace(fixResMatcher, '') + if (res.components[op.responseType]) delete res.components[op.responseType] + if (!res.components[rt]) res.components[rt] = schema.components[rt] + op.responseType = rt + } + }) + + // Remove potential redundant operation components + Object.keys(res.components).forEach(key => { + if (fixResMatcher.test(key)) delete res.components[key] + }) + + // Sort components + res.components = sortObjectFields(res.components) + + }) + + console.log('Redundant components have been replaced') + + return schema + +} + + +const fixSchema = (schema: ApiSchema): ApiSchema => { + console.log('Fixing parsed schema...') + const fixedSchema = fixRedundantComponents(schema) + console.log('Schema fixed.') + return fixedSchema +} + + +export default fixSchema diff --git a/gen/generator.ts b/gen/generator.ts new file mode 100644 index 0000000..f04d669 --- /dev/null +++ b/gen/generator.ts @@ -0,0 +1,796 @@ + +import apiSchema, { Resource, Operation, Component, Cardinality, Attribute } from './schema' +import { readFileSync, writeFileSync, existsSync, mkdirSync, readdirSync, rmSync } from 'fs' +import { basename } from 'path' +import { snakeCase } from 'lodash' +import fixSchema from './fixer' + + +/**** SDK source code generator settings ****/ +const CONFIG = { + RELATIONSHIP_FUNCTIONS: true, + TRIGGER_FUNCTIONS: true +} +/**** **** **** **** **** **** **** **** ****/ + + +const Inflector = require('inflector-js') + + +type OperationType = 'retrieve' | 'list' | 'create' | 'update' | 'delete' + +type ApiRes = { + type: string + apiClass: string + models: Array + singleton: boolean + operations: Array + taggable: boolean + versionable: boolean +} + + +const templates: { [key: string]: string } = {} + +const global: { + version?: string +} = {} + + + +const loadTemplates = (): void => { + const tplDir = './gen/templates' + const tplList = readdirSync(tplDir, { encoding: 'utf-8' }).filter(f => f.endsWith('.tpl')) + tplList.forEach(t => { + const tplName = basename(t).replace('.tpl', '') + const tpl = readFileSync(`${tplDir}/${tplName}.tpl`, { encoding: 'utf-8' }) + templates[tplName] = tpl + }) +} + + +const generate = async (localSchema?: boolean) => { + + console.log('>> Local schema: ' + (localSchema || false) + '\n') + + if (!localSchema) { + + let currentVersion = '0.0.0' + + try { + const currentSchema = apiSchema.current() + currentVersion = currentSchema.info.version + } catch (err) { + console.log('No current local schema available') + } + + const schemaInfo = await apiSchema.download() + + if (schemaInfo.version === currentVersion) { + console.log('No new OpenAPI schema version: ' + currentVersion) + return + } + else console.log(`New OpenAPI schema version: ${currentVersion} --> ${schemaInfo.version}`) + + } + + const schemaPath = apiSchema.localPath + if (!existsSync(schemaPath)) { + console.log('Cannot find schema file: ' + schemaPath) + return + } + + console.log('Generating SDK resources from schema ' + schemaPath) + + const schema = apiSchema.parse(schemaPath) + global.version = schema.version + + + // Remove redundant components and force usage of global resource component + fixSchema(schema) + // console.log(inspect(schema, false, null, true)) + + + loadTemplates() + + // Initialize source dir + const resDir = 'src/resources' + if (existsSync(resDir)) rmSync(resDir, { recursive: true }) + mkdirSync(resDir, { recursive: true }) + + // Initialize test dir + const testDir = 'specs/resources' + if (existsSync(testDir)) rmSync(testDir, { recursive: true }) + mkdirSync(testDir, { recursive: true }) + + + const resources: { [key: string]: ApiRes } = {} + + Object.entries(schema.resources).forEach(([type, res]) => { + + const name = Inflector.pluralize(Inflector.camelize(type)) as string + + const tplRes = generateResource(type, name, res) + writeFileSync(`${resDir}/${type}.ts`, tplRes) + console.log('Generated resource ' + name) + + const tplSpec = generateSpec(type, name, res) + writeFileSync(`${testDir}/${type}.spec.ts`, tplSpec) + console.log('Generated spec ' + name) + + + const models = Object.keys(res.components) + const singleton = Object.values(res.operations).some(op => op.singleton) + const operations = Object.keys(res.operations).filter(op => ['retrieve', 'list', 'create', 'update', 'delete'].includes(op)) as OperationType[] + const taggable = Object.keys(res.operations).includes('tags') + const versionable = Object.keys(res.operations).includes('versions') + + resources[type] = { + type, + apiClass: name, + models, + singleton, + operations: singleton? [] : operations, + taggable, + versionable + } + + }) + + + updateApiResources(resources) + updateSdkInterfaces(resources) + updateModelTypes(resources) + + console.log(`SDK generation completed [${global.version}].\n`) + +} + + +const findLine = (str: string, lines: string[]): { text: string, index: number, offset: number } => { + let idx = 0 + for (const l of lines) { + const i = l.indexOf(str) + if (i > -1) return { text: l, index: idx, offset: i } + else idx++ + } + return { text: '', index: -1, offset: -1 } +} + + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +const tabsCount = (template: string): number => { + return template.match(/##__TAB__##/g)?.length || 0 +} + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +const tabsString = (num: number): string => { + let str = '' + for (let i = 0; i < num; i++) str += '\t' + return str +} + + +const updateSdkInterfaces = (resources: { [key: string]: ApiRes }): void => { + + const cl = readFileSync('src/commercelayer.ts', { encoding: 'utf-8' }) + + const lines = cl.split('\n') + + // OpenAPI schema version + if (global.version) { + const schemaLine = findLine('const OPEN_API_SCHEMA_VERSION', lines) + if (schemaLine.index >= 0) lines[schemaLine.index] = `const OPEN_API_SCHEMA_VERSION = '${global.version}'` + } + + // Definitions + const defTplLine = findLine('##__CL_RESOURCES_DEF_TEMPLATE::', lines) + const defTplIdx = defTplLine.offset + '##__CL_RESOURCES_DEF_TEMPLATE::'.length + 1 + const defTpl = defTplLine.text.substring(defTplIdx) + + const definitions: string[] = [] + Object.entries(resources).forEach(([type, res]) => { + let def = defTpl + def = def.replace(/##__TAB__##/g, '\t') + def = def.replace('##__RESOURCE_TYPE__##', type) + def = def.replace('##__RESOURCE_CLASS__##', res.apiClass) + definitions.push(def) + }) + + const defStartIdx = findLine('##__CL_RESOURCES_DEF_START__##', lines).index + 2 + const defStopIdx = findLine('##__CL_RESOURCES_DEF_STOP__##', lines).index + lines.splice(defStartIdx, defStopIdx - defStartIdx, ...definitions) + + + // Initializations + const iniTplLine = findLine('##__CL_RESOURCES_INIT_TEMPLATE::', lines) + const iniTplIdx = iniTplLine.offset + '##__CL_RESOURCES_INIT_TEMPLATE::'.length + 1 + const iniTpl = iniTplLine.text.substring(iniTplIdx) + + const initializations: string[] = [] + Object.entries(resources).forEach(([type, res]) => { + let ini = iniTpl + ini = ini.replace(/##__TAB__##/g, '\t') + ini = ini.replace('##__RESOURCE_TYPE__##', type) + ini = ini.replace('##__RESOURCE_CLASS__##', res.apiClass) + initializations.push(ini) + }) + + const iniStartIdx = findLine('##__CL_RESOURCES_INIT_START__##', lines).index + 2 + const iniStopIdx = findLine('##__CL_RESOURCES_INIT_STOP__##', lines).index + lines.splice(iniStartIdx, iniStopIdx - iniStartIdx, ...initializations) + + + writeFileSync('src/commercelayer.ts', lines.join('\n'), { encoding: 'utf-8' }) + + console.log('API interfaces generated.') + +} + + +const updateModelTypes = (resources: { [key: string]: ApiRes }): void => { + + const cl = readFileSync('src/model.ts', { encoding: 'utf-8' }) + + const lines = cl.split('\n') + + // Exports + const expTplLine = findLine('##__MODEL_TYPES_TEMPLATE::', lines) + const expTplIdx = expTplLine.offset + '##__MODEL_TYPES_TEMPLATE::'.length + 1 + const expTpl = expTplLine.text.substring(expTplIdx) + + const exports: string[] = [copyrightHeader(templates.header)] + const types: string[] = [] + Object.entries(resources).forEach(([type, res]) => { + let exp = expTpl + exp = exp.replace(/##__TAB__##/g, '\t') + exp = exp.replace('##__RESOURCE_TYPE__##', type) + exp = exp.replace('##__RESOURCE_MODELS__##', res.models.join(', ')) + exports.push(exp) + types.push(`\t'${type}'`) + }) + + const expStartIdx = findLine('##__MODEL_TYPES_START__##', lines).index + 2 + const expStopIdx = findLine('##__MODEL_TYPES_STOP__##', lines).index + lines.splice(expStartIdx, expStopIdx - expStartIdx, ...exports) + + + writeFileSync('src/model.ts', lines.join('\n'), { encoding: 'utf-8' }) + + console.log('Model types generated.') + +} + + +const updateApiResources = (resources: { [key: string]: ApiRes }): void => { + + const cl = readFileSync('src/api.ts', { encoding: 'utf-8' }) + + const lines = cl.split('\n') + + // Exports + const expTplLine = findLine('##__API_RESOURCES_TEMPLATE::', lines) + const expTplIdx = expTplLine.offset + '##__API_RESOURCES_TEMPLATE::'.length + 1 + const expTpl = expTplLine.text.substring(expTplIdx) + + + const exports: string[] = [copyrightHeader(templates.header)] + const types: string[] = [] + + const singletons: string[] = [] + const listables: string[] = [] + const creatables: string[] = [] + const updatables: string[] = [] + const deletables: string[] = [] + const taggables: string[] = [] + const versionables: string[] = [] + + Object.entries(resources).forEach(([type, res]) => { + + let exp = expTpl + exp = exp.replace(/##__TAB__##/g, '\t') + exp = exp.replace('##__RESOURCE_TYPE__##', type) + exp = exp.replace('##__RESOURCE_CLASS__##', res.apiClass) + exports.push(exp) + const tabType = `\t'${type}'` + types.push(tabType) + + if (res.singleton) singletons.push(tabType) + if (res.operations.includes('list')) listables.push(tabType) + if (res.operations.includes('create')) creatables.push(tabType) + if (res.operations.includes('update')) updatables.push(tabType) + if (res.operations.includes('delete')) deletables.push(tabType) + if (res.taggable) taggables.push(tabType) + if (res.versionable) versionables.push(tabType) + + }) + + const expStartIdx = findLine('##__API_RESOURCES_START__##', lines).index + 2 + const expStopIdx = findLine('##__API_RESOURCES_STOP__##', lines).index + lines.splice(expStartIdx, expStopIdx - expStartIdx, ...exports) + + const typeStartIdx = findLine('##__API_RESOURCE_TYPES_START__##', lines).index + 1 + const typeStopIdx = findLine('##__API_RESOURCE_TYPES_STOP__##', lines).index + lines.splice(typeStartIdx, typeStopIdx - typeStartIdx, types.join('\n|')) + + const resStartIdx = findLine('##__API_RESOURCE_LIST_START__##', lines).index + 1 + const resStopIdx = findLine('##__API_RESOURCE_LIST_STOP__##', lines).index + lines.splice(resStartIdx, resStopIdx - resStartIdx, types.join(',\n')) + + /* + const mapStartIdx = findLine('##__API_RESOURCE_MAP_START__##', lines).index + 1 + const mapStopIdx = findLine('##__API_RESOURCE_MAP_STOP__##', lines).index + lines.splice(mapStartIdx, mapStopIdx - mapStartIdx, + Object.keys(resources).map(t => `\t${t}: { name: '${Inflector.singularize(t)}', type: '${t}', api: '${t}' }`).join(',\n') + ) + */ + + const rsStartIdx = findLine('##__API_RESOURCE_SINGLETON_START__##', lines).index + 1 + const rsStopIdx = findLine('##__API_RESOURCE_SINGLETON_STOP__##', lines).index + lines.splice(rsStartIdx, rsStopIdx - rsStartIdx, singletons.join('\n|')) + + const rcStartIdx = findLine('##__API_RESOURCE_CREATABLE_START__##', lines).index + 1 + const rcStopIdx = findLine('##__API_RESOURCE_CREATABLE_STOP__##', lines).index + lines.splice(rcStartIdx, rcStopIdx - rcStartIdx, creatables.join('\n|')) + + const ruStartIdx = findLine('##__API_RESOURCE_UPDATABLE_START__##', lines).index + 1 + const ruStopIdx = findLine('##__API_RESOURCE_UPDATABLE_STOP__##', lines).index + lines.splice(ruStartIdx, ruStopIdx - ruStartIdx, updatables.join('\n|')) + + const rdStartIdx = findLine('##__API_RESOURCE_DELETABLE_START__##', lines).index + 1 + const rdStopIdx = findLine('##__API_RESOURCE_DELETABLE_STOP__##', lines).index + lines.splice(rdStartIdx, rdStopIdx - rdStartIdx, deletables.join('\n|')) + + const rtStartIdx = findLine('##__API_RESOURCE_TAGGABLE_START__##', lines).index + 1 + const rtStopIdx = findLine('##__API_RESOURCE_TAGGABLE_STOP__##', lines).index + lines.splice(rtStartIdx, rtStopIdx - rtStartIdx, taggables.join('\n|')) + + const rvStartIdx = findLine('##__API_RESOURCE_VERSIONABLE_START__##', lines).index + 1 + const rvStopIdx = findLine('##__API_RESOURCE_VERSIONABLE_STOP__##', lines).index + lines.splice(rvStartIdx, rvStopIdx - rvStartIdx, versionables.join('\n|')) + + + writeFileSync('src/api.ts', lines.join('\n'), { encoding: 'utf-8' }) + + console.log('API resources generated.') + +} + + +const generateSpec = (type: string, name: string, resource: Resource): string => { + + let spec = templates.spec + + // Remove unsupported operations + const lines = spec.split('\n') + + const allOperations = ['list', 'create', 'retrieve', 'update', 'delete', 'singleton'] + + // Generate CRUD operations specs + allOperations.forEach(op => { + if (!Object.values(resource.operations).map(o => { + if ((o.name === 'list') && o.singleton) return 'singleton' + else return o.name + }).includes(op)) { + const opStartIdx = findLine(`spec.${op}.start`, lines).index - 2 + const opStopIdx = findLine(`spec.${op}.stop`, lines).index + 2 + lines.splice(opStartIdx, opStopIdx - opStartIdx, '') + } + }) + + spec = lines.join('\n') + + + if (CONFIG.RELATIONSHIP_FUNCTIONS) { + // Generate relationships operations specs + Object.keys(resource.operations).filter(o => !allOperations.includes(o)).forEach(o => { + const op = resource.operations[o] + if (op.relationship) { + + let specRel = templates.spec_relationship.split('\n').join('\n\t') + + specRel = specRel.replace(/##__OPERATION_NAME__##/g, op.name) + specRel = specRel.replace(/##__RELATIONSHIP_TYPE__##/g, op.relationship.type) + spec = spec.replace(/##__RELATIONSHIP_SPECS__##/g, '\n\n\t' + specRel + '\n\t##__RELATIONSHIP_SPECS__##') + + } + }) + } + + + if (CONFIG.TRIGGER_FUNCTIONS) { + // Generate triggers operations specs + const compUpdKey = Object.keys(resource.components).find(c => c.endsWith('Update')) + if (compUpdKey) { + const compUpd = resource.components[compUpdKey] + const triggers = Object.values(compUpd.attributes).filter(a => a.name.startsWith('_') ) + if (triggers.length > 0) { + const tplt = templates.spec_trigger.split('\n').join('\n\t') + for (const trigger of triggers) { + const triggerValue = (trigger.type === 'boolean')? 'true' : `randomValue('${trigger.type}')` + const triggerParams = (trigger.type === 'boolean')? 'id' : 'id, triggerValue' + let specTrg = tplt + specTrg = specTrg.replace(/##__OPERATION_NAME__##/g, trigger.name) + specTrg = specTrg.replace(/##__TRIGGER_VALUE__##/g, triggerValue) + specTrg = specTrg.replace(/##__TRIGGER_PARAMS__##/g, triggerParams) + spec = spec.replace(/##__TRIGGER_SPECS__##/g, '\n\n\t' + specTrg + '\n\t##__TRIGGER_SPECS__##') + } + } + } + } + + + // Header + spec = copyrightHeader(spec) + + spec = spec.replace(/##__RESOURCE_CLASS__##/g, name) + spec = spec.replace(/##__RESOURCE_TYPE__##/g, type) + // Clear unused placeholders + spec = spec.replace(/##__RELATIONSHIP_SPECS__##/g, '') + spec = spec.replace(/##__TRIGGER_SPECS__##/g, '') + + if (resource.operations.create) { + + let obj = '{\n' + + // Attriburtes + const reqType = resource.operations.create.requestType + const attributes = reqType ? resource.components[reqType].attributes : {} + const required = Object.values(attributes).filter(attr => attr.required) + // required.forEach(r => obj += `\t\t\t${r.name}: ${inspect(randomValue(r.type, r.name))},\n`) + required.forEach(r => obj += `\t\t\t${r.name}: randomValue('${r.type}', '${r.name}'),\n`) + + // Relationships + const relationships = reqType ? resource.components[reqType].relationships : {} + const filtered = Object.values(relationships).filter(rel => !rel.deprecated) + filtered.forEach(f => { + let relVal: string | string[] = `clp.${f.type}.relationship(TestData.id)` + if (f.cardinality === 'to_many') relVal = `[ ${relVal} ]` + obj += `\t\t\t${f.name}: ${relVal},\n` + }) + + obj += '\t\t}\n' + + spec = spec.replace(/##__RESOURCE_ATTRIBUTES_CREATE__##/g, obj) + + } + + const modelName = String(Object.keys(resource.components)[0].replace(/(Create|Update)$/g, '')) + spec = spec.replace(/##__RESOURCE_MODEL__##/g, modelName) + + + return spec + +} + + +const copyrightHeader = (template: string): string => { + + // Header + const now = new Date() + const year = String(now.getFullYear()) + const date = `${String(now.getDate()).padStart(2, '0')}-${String(now.getMonth() + 1).padStart(2, '0')}-${year}` + template = template.replace(/##__CURRENT_YEAR__##/g, year) + template = template.replace(/##__CURRENT_DATE__##/g, date) + if (global.version) template = template.replace(/##__SCHEMA_VERSION__##/g, global.version) + + return template + +} + + +const triggerFunctions = (type: string, name: string, resource: Resource, operations: string[]): void => { + + const resName = name + const compSuffix = 'Update' + + const compUpdKey = Object.keys(resource.components).find(c => c.endsWith(compSuffix)) + if (compUpdKey) { + const compUpd = resource.components[compUpdKey] + const triggers = Object.values(compUpd.attributes).filter(a => a.name.startsWith('_') ) + if (triggers.length > 0) { + const tplt = templates.trigger + for (const trigger of triggers) { + + const resId = `${snakeCase(type)}Id` + const op: Operation = { + type, + path: `/${type}/{${resId}}`, + name: trigger.name, + singleton: false, + requestType: compUpdKey, + responseType: compUpdKey.replace(compSuffix, ''), + id: resId, + trigger: true + } + + const placeholders: Record = {} + if (trigger.type !== 'boolean') placeholders.trigger_value = fixAttributeType({ name: '', type: trigger.type, fetchable: true, required: false, enum: [] }) + + const tpltOp = templatedOperation(resName, trigger.name, op, tplt, placeholders) + operations.push(tpltOp.operation) + + } + } + } + +} + + +const generateResource = (type: string, name: string, resource: Resource): string => { + + let res = templates.resource + const operations: string[] = [] + + const resName = name + + const resModelInterface = Inflector.singularize(resName) + let resModelType = 'ApiResource' + + const declaredTypes: Set = new Set([resModelInterface]) + // const declaredEnums: ComponentEnums = {} + const declaredImportsModels: Set = new Set() + const declaredImportsCommon: Set = new Set(['ResourceId']) + + + // Header + res = copyrightHeader(res) + + + // Operations + const qryMod = new Set() + const resMod = new Set() + Object.entries(resource.operations).forEach(([opName, op]) => { + const tpl = op.singleton ? templates['singleton'] : templates[opName] + if (op.singleton) resModelType = 'ApiSingleton' + if (tpl) { + if (['create', 'update'].includes(opName)) qryMod.add('QueryParamsRetrieve') + if (['retrieve', 'list'].includes(opName)) { + /* do nothing: + retrieve operation is common to all resoucres + list operation is common to all non singleton resoucres + */ + } + else { + const tplOp = templatedOperation(resName, opName, op, tpl) + operations.push(tplOp.operation) + tplOp.types.forEach(t => { declaredTypes.add(t) }) + } + } + else { + if (op.relationship && CONFIG.RELATIONSHIP_FUNCTIONS) { + const tplr = templates[`relationship_${op.relationship.cardinality.replace('to_', '')}`] + const tplrOp = templatedOperation(resName, opName, op, tplr) + if (op.relationship.cardinality === Cardinality.to_one) qryMod.add('QueryParamsRetrieve') + else + if (op.relationship.cardinality === Cardinality.to_many) { + qryMod.add('QueryParamsList') + resMod.add('ListResponse') + } + operations.push(tplrOp.operation) + } else console.log('Unknown operation: ' + opName) + } + }) + + + // Trigger functions (only boolean) + if (CONFIG.TRIGGER_FUNCTIONS) triggerFunctions(type, resName, resource, operations) + + + if (operations && (operations.length > 0)) declaredImportsCommon.add('ResourcesConfig') + + res = res.replace(/##__RESOURCE_MODEL_TYPE__##/g, resModelType) + res = res.replace(/##__RESPONSE_MODELS__##/g, (resMod.size > 0) ? `, ${Array.from(resMod).join(', ')}`: '') + res = res.replace(/##__MODEL_RESOURCE_INTERFACE__##/g, resModelInterface) + res = res.replace(/##__IMPORT_RESOURCE_COMMON__##/, Array.from(declaredImportsCommon).join(', ')) + + const importQueryModels = (qryMod.size > 0)? `import type { ${Array.from(qryMod).sort().reverse().join(', ')} } from '../query'` : '' + res = res.replace(/##__IMPORT_QUERY_MODELS__##/, importQueryModels) + + + // Resource definition + res = res.replace(/##__RESOURCE_TYPE__##/g, type) + res = res.replace(/##__RESOURCE_CLASS__##/g, resName) + + const resourceOperations = (operations && (operations.length > 0))? operations.join('\n\n\t') : '' + res = res.replace(/##__RESOURCE_OPERATIONS__##/, resourceOperations) + + + // Interfaces export + const typesArray = Array.from(declaredTypes) + res = res.replace(/##__EXPORT_RESOURCE_TYPES__##/g, typesArray.join(', ')) + + // Interfaces and types definition + const modelInterfaces: string[] = [] + const resourceInterfaces: string[] = [] + const relationshipTypes: Set = new Set() + + typesArray.forEach(t => { + const cudSuffix = getCUDSuffix(t) + resourceInterfaces.push(`Resource${cudSuffix}`) + const tplCmp = templatedComponent(resName, t, resource.components[t]) + tplCmp.models.forEach(m => declaredImportsModels.add(m)) + modelInterfaces.push(tplCmp.component) + if (cudSuffix) tplCmp.models.forEach(t => relationshipTypes.add(t)) + }) + res = res.replace(/##__MODEL_INTERFACES__##/g, modelInterfaces.join('\n\n\n')) + res = res.replace(/##__RESOURCE_INTERFACES__##/g, resourceInterfaces.join(', ')) + + + // Relationships definition + const relTypesArray = Array.from(relationshipTypes).map(i => `type ${i}Rel = ResourceRel & { type: ${i}Type }`) + res = res.replace(/##__RELATIONSHIP_TYPES__##/g, relTypesArray.length ? (relTypesArray.join('\n') + '\n') : '') + + // Resources import + const impResMod: string[] = Array.from(declaredImportsModels) + .filter(i => !typesArray.includes(i)) // exludes resource self reference + .map(i => `import type { ${i}${relationshipTypes.has(i)? `, ${i}Type` : ''} } from './${snakeCase(Inflector.pluralize(i))}'`) + const importStr = impResMod.join('\n') + (impResMod.length ? '\n' : '') + res = res.replace(/##__IMPORT_RESOURCE_MODELS__##/g, importStr) + + // Enum types definitions + + + return res + +} + + +const templatedOperation = (res: string, name: string, op: Operation, tpl: string, placeholders?: Record): { operation: string, types: string[] } => { + + let operation = tpl + const types: string[] = [] + + operation = operation.replace(/##__OPERATION_NAME__##/g, name) + operation = operation.replace(/##__RESOURCE_CLASS__##/g, res) + + if (op.requestType) { + const requestType = op.requestType + operation = operation.replace(/##__RESOURCE_REQUEST_CLASS__##/g, requestType) + if (!types.includes(requestType)) types.push(requestType) + } + if (op.responseType) { + const responseType = op.responseType + operation = operation.replace(/##__RESOURCE_RESPONSE_CLASS__##/g, responseType) + if (!types.includes(responseType)) types.push(responseType) + } + + const opIdVar = op.id? Inflector.camelize(op.id, true) : '' + if (op.relationship) { // Relationship + operation = operation.replace(/##__RELATIONSHIP_TYPE__##/g, op.relationship.type) + operation = operation.replace(/##__RELATIONSHIP_PATH__##/g, op.path.substring(1).replace('{' + op.id, '${_' + opIdVar)) + operation = operation.replace(/##__RESOURCE_ID__##/g, opIdVar) + operation = operation.replace(/##__MODEL_RESOURCE_INTERFACE__##/g, Inflector.singularize(res)) + } + else + if (op.trigger) { // Trigger + operation = operation.replace(/##__RESOURCE_ID__##/g, opIdVar) + operation = operation.replace(/##__MODEL_RESOURCE_INTERFACE__##/g, Inflector.singularize(res)) + operation = operation.replace(/##__TRIGGER_VALUE__##/, placeholders?.trigger_value? ` triggerValue: ${ placeholders.trigger_value},` : '') + operation = operation.replace(/##__TRIGGER_VALUE_TYPE__##/, placeholders?.trigger_value? 'triggerValue' : 'true') + } + + if (placeholders) Object.entries(placeholders).forEach(([key, val]) => { + const plh = (key.startsWith('##__') && key.endsWith('__##'))? key : `##__${key.toUpperCase()}__##` + operation = operation.replace(key, val) + }) + + operation = operation.replace(/\n/g, '\n\t') + + + return { operation, types } + +} + + +const fixAttributeType = (attr: Attribute): string => { + if (attr.enum?.length > 0) return `${attr.enum.map(a => `'${a}'`).join(' | ')}` + else + switch (attr.type) { + case 'integer': return 'number' + case 'object': return 'Record' + case 'object[]': return 'Array>' + default: return attr.type + } +} + + +const getCUDSuffix = (name: string): string => { + const suffixes = ['Create', 'Update', 'Delete'] + let suffix = '' + if (name) { + suffixes.some(x => { + if (name.endsWith(x)) { + suffix = x + return true + } + return false + }) + } + return suffix +} + +const isCUDModel = (name: string): boolean => { + return (name !== undefined) && (getCUDSuffix(name) !== '') +} + + +type ComponentEnums = { [key: string]: string } + +const templatedComponent = (res: string, name: string, cmp: Component): { component: string, models: string[], enums: ComponentEnums } => { + + const cudModel = isCUDModel(name) + + const models: string[] = [] + const enums: ComponentEnums = {} + + // Attributes + const attributes = Object.values(cmp.attributes) + const fields: string[] = [] + attributes.forEach(a => { + if (!['type', 'id', 'reference', 'reference_origin', 'metadata', 'created_at', 'updated_at'].includes(a.name)) { + if (cudModel || a.fetchable) { + let attrType = fixAttributeType(a) + if (a.enum) enums[a.name] = attrType + fields.push(`${a.name}${a.required ? '' : '?'}: ${attrType}${a.required ? '' : ' | null'}`) + } + } + }) + + // Specific resource type + if (!cudModel) fields.unshift(`readonly type: ${name}Type\n`) + + // Relationships + const relationships = Object.values(cmp.relationships) + const rels: string[] = [] + relationships.forEach(r => { + if (r.deprecated) { + const deprecated = '/**\n\t* @deprecated This field should not be used as it may be removed in the future without notice\n\t*/\n\t' + rels.push(`${deprecated}${r.name}?: object${(r.cardinality === Cardinality.to_many) ? '[]' : ''}`) + } + else { + + let resName = r.type + + if (resName !== 'object') { + const relStr = cudModel ? 'Rel' : '' + if (r.polymorphic && r.oneOf) { + resName = r.oneOf.map(o => `${o}${relStr}`).join(' | ') + models.push(...r.oneOf) + } + else { + resName = Inflector.camelize(Inflector.singularize(r.type)) + models.push(resName) + resName += relStr + } + } + + if ((r.cardinality === Cardinality.to_many)) { + if (r.polymorphic) resName = `Array<${resName}>` + else resName += '[]' + } + + rels.push(`${r.name}${r.required ? '' : '?'}: ${resName}${r.required ? '' : ' | null'}`) + + } + }) + + + let component = (fields.length || rels.length) ? templates.model : templates.model_empty + + component = component.replace(/##__RESOURCE_MODEL__##/g, name) + component = component.replace(/##__EXTEND_TYPE__##/g, getCUDSuffix(name)) + + const fieldsStr = (fields.length ? '\n\t' : '') + fields.join('\n\t') + (fields.length && rels.length ? '\n' : '') + const relsStr = rels.join('\n\t') + (rels.length ? '\n' : '') + component = component.replace(/##__RESOURCE_MODEL_FIELDS__##/g, fieldsStr) + component = component.replace(/##__RESOURCE_MODEL_RELATIONSHIPS__##/g, relsStr) + + + return { component, models, enums } + +} + + + +generate(process.argv.indexOf('--local') > -1) diff --git a/gen/openapi.json b/gen/openapi.json new file mode 100644 index 0000000..3c1317e --- /dev/null +++ b/gen/openapi.json @@ -0,0 +1,4484 @@ +{ + "openapi": "3.0.1", + "info": { + "title": "Commerce Layer Provisioning API", + "version": "1.0.0", + "contact": { + "name": "API Support", + "url": "https://commercelayer.io", + "email": "support@commercelayer.io" + }, + "description": "Headless Commerce for Global Brands." + }, + "servers": [ + { + "url": "https://provisioning.commercelayer.io", + "description": "Commerce Layer Provisioning API" + }, + { + "url": "https://docs.commercelayer.io/provisioning-api", + "description": "API reference" + } + ], + "paths": { + "/api_credentials": { + "get": { + "operationId": "GET/api_credentials", + "summary": "List all API credentials", + "description": "List all API credentials", + "tags": [ + "api_credentials" + ], + "responses": { + "200": { + "description": "A list of API credential objects", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/apiCredentialResponseList" + } + } + } + } + } + }, + "post": { + "operationId": "POST/api_credentials", + "summary": "Creates an API credential", + "description": "Creates an API credential", + "tags": [ + "api_credentials" + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/apiCredentialCreate" + } + } + } + }, + "responses": { + "201": { + "description": "The created API credential object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/apiCredentialResponse" + } + } + } + } + } + } + }, + "/api_credentials/{apiCredentialId}": { + "get": { + "operationId": "GET/api_credentials/apiCredentialId", + "summary": "Retrieve an API credential", + "description": "Retrieve an API credential", + "parameters": [ + { + "name": "apiCredentialId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "tags": [ + "api_credentials" + ], + "responses": { + "200": { + "description": "The API credential object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/apiCredentialResponse" + } + } + } + } + } + }, + "patch": { + "operationId": "PATCH/api_credentials/apiCredentialId", + "summary": "Updates an API credential", + "description": "Updates an API credential", + "tags": [ + "api_credentials" + ], + "parameters": [ + { + "name": "apiCredentialId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/apiCredentialUpdate" + } + } + } + }, + "responses": { + "200": { + "description": "The updated API credential object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/apiCredentialResponse" + } + } + } + } + } + }, + "delete": { + "operationId": "DELETE/api_credentials/apiCredentialId", + "summary": "Delete an API credential", + "description": "Delete an API credential", + "tags": [ + "api_credentials" + ], + "parameters": [ + { + "name": "apiCredentialId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "204": { + "description": "No content" + } + } + } + }, + "/api_credentials/{apiCredentialId}/organization": { + "get": { + "operationId": "GET/apiCredentialId/organization", + "summary": "Related API credential", + "description": "Related API credential", + "tags": [ + "organizations", + "has_one" + ], + "parameters": [ + { + "name": "apiCredentialId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The organization associated to the API credential" + } + } + } + }, + "/api_credentials/{apiCredentialId}/role": { + "get": { + "operationId": "GET/apiCredentialId/role", + "summary": "Related API credential", + "description": "Related API credential", + "tags": [ + "roles", + "has_one" + ], + "parameters": [ + { + "name": "apiCredentialId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The role associated to the API credential" + } + } + } + }, + "/memberships": { + "get": { + "operationId": "GET/memberships", + "summary": "List all memberships", + "description": "List all memberships", + "tags": [ + "memberships" + ], + "responses": { + "200": { + "description": "A list of membership objects", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/membershipResponseList" + } + } + } + } + } + }, + "post": { + "operationId": "POST/memberships", + "summary": "Creates an membership", + "description": "Creates an membership", + "tags": [ + "memberships" + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/membershipCreate" + } + } + } + }, + "responses": { + "201": { + "description": "The created membership object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/membershipResponse" + } + } + } + } + } + } + }, + "/memberships/{membershipId}": { + "get": { + "operationId": "GET/memberships/membershipId", + "summary": "Retrieve an membership", + "description": "Retrieve an membership", + "parameters": [ + { + "name": "membershipId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "tags": [ + "memberships" + ], + "responses": { + "200": { + "description": "The membership object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/membershipResponse" + } + } + } + } + } + }, + "patch": { + "operationId": "PATCH/memberships/membershipId", + "summary": "Updates an membership", + "description": "Updates an membership", + "tags": [ + "memberships" + ], + "parameters": [ + { + "name": "membershipId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/membershipUpdate" + } + } + } + }, + "responses": { + "200": { + "description": "The updated membership object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/membershipResponse" + } + } + } + } + } + }, + "delete": { + "operationId": "DELETE/memberships/membershipId", + "summary": "Delete an membership", + "description": "Delete an membership", + "tags": [ + "memberships" + ], + "parameters": [ + { + "name": "membershipId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "204": { + "description": "No content" + } + } + } + }, + "/memberships/{membershipId}/organization": { + "get": { + "operationId": "GET/membershipId/organization", + "summary": "Related membership", + "description": "Related membership", + "tags": [ + "organizations", + "has_one" + ], + "parameters": [ + { + "name": "membershipId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The organization associated to the membership" + } + } + } + }, + "/memberships/{membershipId}/role": { + "get": { + "operationId": "GET/membershipId/role", + "summary": "Related membership", + "description": "Related membership", + "tags": [ + "roles", + "has_one" + ], + "parameters": [ + { + "name": "membershipId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The role associated to the membership" + } + } + } + }, + "/memberships/{membershipId}/versions": { + "get": { + "operationId": "GET/membershipId/versions", + "summary": "Related membership", + "description": "Related membership", + "tags": [ + "versions", + "has_many" + ], + "parameters": [ + { + "name": "membershipId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The versions associated to the membership" + } + } + } + }, + "/organizations": { + "get": { + "operationId": "GET/organizations", + "summary": "List all organizations", + "description": "List all organizations", + "tags": [ + "organizations" + ], + "responses": { + "200": { + "description": "A list of organization objects", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/organizationResponseList" + } + } + } + } + } + }, + "post": { + "operationId": "POST/organizations", + "summary": "Creates an organization", + "description": "Creates an organization", + "tags": [ + "organizations" + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/organizationCreate" + } + } + } + }, + "responses": { + "201": { + "description": "The created organization object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/organizationResponse" + } + } + } + } + } + } + }, + "/organizations/{organizationId}": { + "get": { + "operationId": "GET/organizations/organizationId", + "summary": "Retrieve an organization", + "description": "Retrieve an organization", + "parameters": [ + { + "name": "organizationId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "tags": [ + "organizations" + ], + "responses": { + "200": { + "description": "The organization object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/organizationResponse" + } + } + } + } + } + }, + "patch": { + "operationId": "PATCH/organizations/organizationId", + "summary": "Updates an organization", + "description": "Updates an organization", + "tags": [ + "organizations" + ], + "parameters": [ + { + "name": "organizationId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/organizationUpdate" + } + } + } + }, + "responses": { + "200": { + "description": "The updated organization object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/organizationResponse" + } + } + } + } + } + } + }, + "/organizations/{organizationId}/memberships": { + "get": { + "operationId": "GET/organizationId/memberships", + "summary": "Related organization", + "description": "Related organization", + "tags": [ + "memberships", + "has_many" + ], + "parameters": [ + { + "name": "organizationId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The memberships associated to the organization" + } + } + } + }, + "/organizations/{organizationId}/roles": { + "get": { + "operationId": "GET/organizationId/roles", + "summary": "Related organization", + "description": "Related organization", + "tags": [ + "roles", + "has_many" + ], + "parameters": [ + { + "name": "organizationId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The roles associated to the organization" + } + } + } + }, + "/organizations/{organizationId}/permissions": { + "get": { + "operationId": "GET/organizationId/permissions", + "summary": "Related organization", + "description": "Related organization", + "tags": [ + "permissions", + "has_many" + ], + "parameters": [ + { + "name": "organizationId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The permissions associated to the organization" + } + } + } + }, + "/organizations/{organizationId}/api_credentials": { + "get": { + "operationId": "GET/organizationId/api_credentials", + "summary": "Related organization", + "description": "Related organization", + "tags": [ + "has_many" + ], + "parameters": [ + { + "name": "organizationId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The api_credentials associated to the organization" + } + } + } + }, + "/permissions": { + "get": { + "operationId": "GET/permissions", + "summary": "List all permissions", + "description": "List all permissions", + "tags": [ + "permissions" + ], + "responses": { + "200": { + "description": "A list of permission objects", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/permissionResponseList" + } + } + } + } + } + }, + "post": { + "operationId": "POST/permissions", + "summary": "Creates an permission", + "description": "Creates an permission", + "tags": [ + "permissions" + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/permissionCreate" + } + } + } + }, + "responses": { + "201": { + "description": "The created permission object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/permissionResponse" + } + } + } + } + } + } + }, + "/permissions/{permissionId}": { + "get": { + "operationId": "GET/permissions/permissionId", + "summary": "Retrieve an permission", + "description": "Retrieve an permission", + "parameters": [ + { + "name": "permissionId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "tags": [ + "permissions" + ], + "responses": { + "200": { + "description": "The permission object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/permissionResponse" + } + } + } + } + } + }, + "patch": { + "operationId": "PATCH/permissions/permissionId", + "summary": "Updates an permission", + "description": "Updates an permission", + "tags": [ + "permissions" + ], + "parameters": [ + { + "name": "permissionId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/permissionUpdate" + } + } + } + }, + "responses": { + "200": { + "description": "The updated permission object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/permissionResponse" + } + } + } + } + } + } + }, + "/permissions/{permissionId}/organization": { + "get": { + "operationId": "GET/permissionId/organization", + "summary": "Related permission", + "description": "Related permission", + "tags": [ + "organizations", + "has_one" + ], + "parameters": [ + { + "name": "permissionId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The organization associated to the permission" + } + } + } + }, + "/permissions/{permissionId}/role": { + "get": { + "operationId": "GET/permissionId/role", + "summary": "Related permission", + "description": "Related permission", + "tags": [ + "roles", + "has_one" + ], + "parameters": [ + { + "name": "permissionId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The role associated to the permission" + } + } + } + }, + "/permissions/{permissionId}/versions": { + "get": { + "operationId": "GET/permissionId/versions", + "summary": "Related permission", + "description": "Related permission", + "tags": [ + "versions", + "has_many" + ], + "parameters": [ + { + "name": "permissionId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The versions associated to the permission" + } + } + } + }, + "/roles": { + "get": { + "operationId": "GET/roles", + "summary": "List all roles", + "description": "List all roles", + "tags": [ + "roles" + ], + "responses": { + "200": { + "description": "A list of role objects", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/roleResponseList" + } + } + } + } + } + }, + "post": { + "operationId": "POST/roles", + "summary": "Creates an role", + "description": "Creates an role", + "tags": [ + "roles" + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/roleCreate" + } + } + } + }, + "responses": { + "201": { + "description": "The created role object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/roleResponse" + } + } + } + } + } + } + }, + "/roles/{roleId}": { + "get": { + "operationId": "GET/roles/roleId", + "summary": "Retrieve an role", + "description": "Retrieve an role", + "parameters": [ + { + "name": "roleId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "tags": [ + "roles" + ], + "responses": { + "200": { + "description": "The role object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/roleResponse" + } + } + } + } + } + }, + "patch": { + "operationId": "PATCH/roles/roleId", + "summary": "Updates an role", + "description": "Updates an role", + "tags": [ + "roles" + ], + "parameters": [ + { + "name": "roleId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/roleUpdate" + } + } + } + }, + "responses": { + "200": { + "description": "The updated role object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/roleResponse" + } + } + } + } + } + } + }, + "/roles/{roleId}/organization": { + "get": { + "operationId": "GET/roleId/organization", + "summary": "Related role", + "description": "Related role", + "tags": [ + "organizations", + "has_one" + ], + "parameters": [ + { + "name": "roleId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The organization associated to the role" + } + } + } + }, + "/roles/{roleId}/permissions": { + "get": { + "operationId": "GET/roleId/permissions", + "summary": "Related role", + "description": "Related role", + "tags": [ + "permissions", + "has_many" + ], + "parameters": [ + { + "name": "roleId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The permissions associated to the role" + } + } + } + }, + "/roles/{roleId}/memberships": { + "get": { + "operationId": "GET/roleId/memberships", + "summary": "Related role", + "description": "Related role", + "tags": [ + "memberships", + "has_many" + ], + "parameters": [ + { + "name": "roleId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The memberships associated to the role" + } + } + } + }, + "/roles/{roleId}/api_credentials": { + "get": { + "operationId": "GET/roleId/api_credentials", + "summary": "Related role", + "description": "Related role", + "tags": [ + "api_credentials", + "has_many" + ], + "parameters": [ + { + "name": "roleId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The api_credentials associated to the role" + } + } + } + }, + "/roles/{roleId}/versions": { + "get": { + "operationId": "GET/roleId/versions", + "summary": "Related role", + "description": "Related role", + "tags": [ + "versions", + "has_many" + ], + "parameters": [ + { + "name": "roleId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The versions associated to the role" + } + } + } + }, + "/user": { + "get": { + "operationId": "GET/user/userId", + "summary": "Retrieve an user", + "description": "Retrieve an user", + "parameters": [ + + ], + "tags": [ + "user", + "singleton" + ], + "responses": { + "200": { + "description": "The user object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/userResponse" + } + } + } + } + } + }, + "patch": { + "operationId": "PATCH/user/userId", + "summary": "Updates an user", + "description": "Updates an user", + "tags": [ + "user", + "singleton" + ], + "parameters": [ + + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/userUpdate" + } + } + } + }, + "responses": { + "200": { + "description": "The updated user object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/userResponse" + } + } + } + } + } + } + }, + "/versions": { + "get": { + "operationId": "GET/versions", + "summary": "List all versions", + "description": "List all versions", + "tags": [ + "versions" + ], + "responses": { + "200": { + "description": "A list of version objects", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/versionResponseList" + } + } + } + } + } + } + }, + "/versions/{versionId}": { + "get": { + "operationId": "GET/versions/versionId", + "summary": "Retrieve an version", + "description": "Retrieve an version", + "parameters": [ + { + "name": "versionId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "tags": [ + "versions" + ], + "responses": { + "200": { + "description": "The version object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/versionResponse" + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "apiCredential": { + "type": "object", + "properties": { + "data": { + "type": "object", + "required": [ + "type", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "api_credentials" + ] + }, + "attributes": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The API credential internal name.", + "example": "My app", + "nullable": false + }, + "kind": { + "type": "string", + "description": "The API credential kind, can be one of: `sales_channel`, `integration` and `webapp`.", + "example": "sales-channel", + "nullable": false + }, + "confidential": { + "type": "boolean", + "description": "Indicates if the API credential it's confidential.", + "example": true, + "nullable": true + }, + "redirect_uri": { + "type": "string", + "description": "The API credential redirect URI.", + "example": "https://bluebrand.com/img/logo.svg", + "nullable": true + }, + "client_id": { + "type": "string", + "description": "The API credential unique ID.", + "example": "xxxx-yyyy-zzzz", + "nullable": true + }, + "client_secret": { + "type": "string", + "description": "The API credential unique secret.", + "example": "xxxx-yyyy-zzzz", + "nullable": true + }, + "scopes": { + "type": "string", + "description": "The API credential scopes.", + "example": "market:all market:9 market:122 market:6 stock_location:6 stock_location:33", + "nullable": true + }, + "expires_in": { + "type": "integer", + "description": "The lifetime of the access token in seconds (min. `7200`, max. `31536000`. Default is `14400` for Sales channels and `7200` for other client types).", + "example": 7200, + "nullable": true + }, + "created_at": { + "type": "string", + "description": "Time at which the resource was created.", + "example": "2018-01-01T12:00:00.000Z", + "nullable": false + }, + "updated_at": { + "type": "string", + "description": "Time at which the resource was last updated.", + "example": "2018-01-01T12:00:00.000Z", + "nullable": false + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE", + "nullable": true + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", + "nullable": true + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + }, + "nullable": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "organization": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organizations" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "role": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "roles" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + } + } + } + } + } + } + }, + "apiCredentialCreate": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "required": [ + "type", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "api_credentials" + ] + }, + "attributes": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The API credential internal name.", + "example": "My app" + }, + "kind": { + "type": "string", + "description": "The API credential kind, can be one of: `sales_channel`, `integration` and `webapp`.", + "example": "sales-channel" + }, + "redirect_uri": { + "type": "string", + "description": "The API credential redirect URI.", + "example": "https://bluebrand.com/img/logo.svg" + }, + "expires_in": { + "type": "integer", + "description": "The lifetime of the access token in seconds (min. `7200`, max. `31536000`. Default is `14400` for Sales channels and `7200` for other client types).", + "example": 7200 + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE" + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN" + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + } + } + }, + "required": [ + "name", + "kind" + ] + }, + "relationships": { + "type": "object", + "properties": { + "organization": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organizations" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "role": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "roles" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + } + }, + "required": [ + "organization" + ] + } + } + } + } + }, + "apiCredentialUpdate": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "required": [ + "type", + "id", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "api_credentials" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + }, + "attributes": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The API credential internal name.", + "example": "My app", + "nullable": false + }, + "redirect_uri": { + "type": "string", + "description": "The API credential redirect URI.", + "example": "https://bluebrand.com/img/logo.svg", + "nullable": true + }, + "expires_in": { + "type": "integer", + "description": "The lifetime of the access token in seconds (min. `7200`, max. `31536000`. Default is `14400` for Sales channels and `7200` for other client types).", + "example": 7200, + "nullable": true + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE", + "nullable": true + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", + "nullable": true + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + }, + "nullable": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "role": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "roles" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + } + } + } + } + } + } + }, + "apiCredentialResponse": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + }, + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "api_credentials" + ] + }, + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + } + } + }, + "attributes": { + "$ref": "#/components/schemas/apiCredential/properties/data/properties/attributes" + }, + "relationships": { + "type": "object", + "properties": { + "organization": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organization" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + }, + "role": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "role" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + } + } + } + } + } + } + }, + "apiCredentialResponseList": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/apiCredentialResponse/properties/data" + } + } + } + }, + "membership": { + "type": "object", + "properties": { + "data": { + "type": "object", + "required": [ + "type", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "memberships" + ] + }, + "attributes": { + "type": "object", + "properties": { + "user_email": { + "type": "string", + "description": "The user email.", + "example": "commercelayer@commercelayer.io", + "nullable": false + }, + "status": { + "type": "string", + "description": "The memberships status. One of `pending` (default), `active`.", + "example": "pending", + "nullable": false, + "enum": [ + "pending", + "active" + ] + }, + "created_at": { + "type": "string", + "description": "Time at which the resource was created.", + "example": "2018-01-01T12:00:00.000Z", + "nullable": false + }, + "updated_at": { + "type": "string", + "description": "Time at which the resource was last updated.", + "example": "2018-01-01T12:00:00.000Z", + "nullable": false + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE", + "nullable": true + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", + "nullable": true + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + }, + "nullable": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "organization": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organizations" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "role": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "roles" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "versions": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "versions" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + } + } + } + } + } + } + }, + "membershipCreate": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "required": [ + "type", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "memberships" + ] + }, + "attributes": { + "type": "object", + "properties": { + "user_email": { + "type": "string", + "description": "The user email.", + "example": "commercelayer@commercelayer.io" + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE" + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN" + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + } + } + }, + "required": [ + "user_email" + ] + }, + "relationships": { + "type": "object", + "properties": { + "organization": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organizations" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "role": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "roles" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + } + }, + "required": [ + "organization", + "role" + ] + } + } + } + } + }, + "membershipUpdate": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "required": [ + "type", + "id", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "memberships" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + }, + "attributes": { + "type": "object", + "properties": { + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE", + "nullable": true + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", + "nullable": true + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + }, + "nullable": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "role": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "roles" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + } + } + } + } + } + } + }, + "membershipResponse": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + }, + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "memberships" + ] + }, + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + } + } + }, + "attributes": { + "$ref": "#/components/schemas/membership/properties/data/properties/attributes" + }, + "relationships": { + "type": "object", + "properties": { + "organization": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organization" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + }, + "role": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "role" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + }, + "versions": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "versions" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + } + } + } + } + } + } + }, + "membershipResponseList": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/membershipResponse/properties/data" + } + } + } + }, + "organization": { + "type": "object", + "properties": { + "data": { + "type": "object", + "required": [ + "type", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organizations" + ] + }, + "attributes": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The organization's internal name.", + "example": "The Blue Brand", + "nullable": false + }, + "slug": { + "type": "string", + "description": "The organization's slug name.", + "example": "the-blue-brand", + "nullable": true + }, + "domain": { + "type": "string", + "description": "The organization's domain.", + "example": "the-blue-brand.commercelayer.io", + "nullable": true + }, + "support_phone": { + "type": "string", + "description": "The organization's support phone.", + "example": "+01 30800857", + "nullable": true + }, + "support_email": { + "type": "string", + "description": "The organization's support email.", + "example": "support@bluebrand.com", + "nullable": true + }, + "logo_url": { + "type": "string", + "description": "The URL to the organization's logo.", + "example": "https://bluebrand.com/img/logo.svg", + "nullable": true + }, + "favicon_url": { + "type": "string", + "description": "The URL to the organization's favicon.", + "example": "https://bluebrand.com/img/favicon.ico", + "nullable": true + }, + "primary_color": { + "type": "string", + "description": "The organization's primary color. Format is HEX (starts with `#` and it's followed by six letters and/or numbers).", + "example": "#C8984E", + "nullable": true + }, + "contrast_color": { + "type": "string", + "description": "The organization's contrast color. Format is HEX (starts with `#` and it's followed by six letters and/or numbers).", + "example": "#FFFFCC", + "nullable": true + }, + "gtm_id": { + "type": "string", + "description": "The organization's Google Tag Manager ID.", + "example": "GTM-5FJXX6", + "nullable": true + }, + "gtm_id_test": { + "type": "string", + "description": "The organization's Google Tag Manager ID for test.", + "example": "GTM-5FJXX7", + "nullable": true + }, + "discount_disabled": { + "type": "boolean", + "description": "Indicates if organization has discount disabled.", + "example": false, + "nullable": true + }, + "account_disabled": { + "type": "boolean", + "description": "Indicates if organization has account disabled.", + "example": false, + "nullable": true + }, + "acceptance_disabled": { + "type": "boolean", + "description": "Indicates if organization has acceptance disabled.", + "example": false, + "nullable": true + }, + "max_concurrent_promotions": { + "type": "integer", + "description": "The maximum number of active concurrent promotions allowed for your organization.", + "example": 10, + "nullable": true + }, + "max_concurrent_imports": { + "type": "integer", + "description": "The maximum number of concurrent imports allowed for your organization.", + "example": 30, + "nullable": true + }, + "associated_markets": { + "type": "object", + "description": "An object that contains the markets of the organization.", + "example": { + "foo": "bar" + }, + "nullable": true + }, + "region": { + "type": "string", + "description": "The region where the organization it's located, default value it's `eu-west-1`.", + "example": "eu-west-1", + "nullable": true + }, + "created_at": { + "type": "string", + "description": "Time at which the resource was created.", + "example": "2018-01-01T12:00:00.000Z", + "nullable": false + }, + "updated_at": { + "type": "string", + "description": "Time at which the resource was last updated.", + "example": "2018-01-01T12:00:00.000Z", + "nullable": false + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE", + "nullable": true + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", + "nullable": true + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + }, + "nullable": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "memberships": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "memberships" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "roles": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "roles" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "permissions": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "permissions" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "api_credentials": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "api_credentials" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + } + } + } + } + } + } + }, + "organizationCreate": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "required": [ + "type", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organizations" + ] + }, + "attributes": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The organization's internal name.", + "example": "The Blue Brand" + }, + "support_phone": { + "type": "string", + "description": "The organization's support phone.", + "example": "+01 30800857" + }, + "support_email": { + "type": "string", + "description": "The organization's support email.", + "example": "support@bluebrand.com" + }, + "logo_url": { + "type": "string", + "description": "The URL to the organization's logo.", + "example": "https://bluebrand.com/img/logo.svg" + }, + "favicon_url": { + "type": "string", + "description": "The URL to the organization's favicon.", + "example": "https://bluebrand.com/img/favicon.ico" + }, + "primary_color": { + "type": "string", + "description": "The organization's primary color. Format is HEX (starts with `#` and it's followed by six letters and/or numbers).", + "example": "#C8984E" + }, + "contrast_color": { + "type": "string", + "description": "The organization's contrast color. Format is HEX (starts with `#` and it's followed by six letters and/or numbers).", + "example": "#FFFFCC" + }, + "gtm_id": { + "type": "string", + "description": "The organization's Google Tag Manager ID.", + "example": "GTM-5FJXX6" + }, + "gtm_id_test": { + "type": "string", + "description": "The organization's Google Tag Manager ID for test.", + "example": "GTM-5FJXX7" + }, + "discount_disabled": { + "type": "boolean", + "description": "Indicates if organization has discount disabled.", + "example": false + }, + "account_disabled": { + "type": "boolean", + "description": "Indicates if organization has account disabled.", + "example": false + }, + "acceptance_disabled": { + "type": "boolean", + "description": "Indicates if organization has acceptance disabled.", + "example": false + }, + "region": { + "type": "string", + "description": "The region where the organization it's located, default value it's `eu-west-1`.", + "example": "eu-west-1" + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE" + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN" + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + } + } + }, + "required": [ + "name" + ] + }, + "relationships": { + "type": "object", + "properties": { + } + } + } + } + } + }, + "organizationUpdate": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "required": [ + "type", + "id", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organizations" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + }, + "attributes": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The organization's internal name.", + "example": "The Blue Brand", + "nullable": false + }, + "support_phone": { + "type": "string", + "description": "The organization's support phone.", + "example": "+01 30800857", + "nullable": true + }, + "support_email": { + "type": "string", + "description": "The organization's support email.", + "example": "support@bluebrand.com", + "nullable": true + }, + "logo_url": { + "type": "string", + "description": "The URL to the organization's logo.", + "example": "https://bluebrand.com/img/logo.svg", + "nullable": true + }, + "favicon_url": { + "type": "string", + "description": "The URL to the organization's favicon.", + "example": "https://bluebrand.com/img/favicon.ico", + "nullable": true + }, + "primary_color": { + "type": "string", + "description": "The organization's primary color. Format is HEX (starts with `#` and it's followed by six letters and/or numbers).", + "example": "#C8984E", + "nullable": true + }, + "contrast_color": { + "type": "string", + "description": "The organization's contrast color. Format is HEX (starts with `#` and it's followed by six letters and/or numbers).", + "example": "#FFFFCC", + "nullable": true + }, + "gtm_id": { + "type": "string", + "description": "The organization's Google Tag Manager ID.", + "example": "GTM-5FJXX6", + "nullable": true + }, + "gtm_id_test": { + "type": "string", + "description": "The organization's Google Tag Manager ID for test.", + "example": "GTM-5FJXX7", + "nullable": true + }, + "discount_disabled": { + "type": "boolean", + "description": "Indicates if organization has discount disabled.", + "example": false, + "nullable": false + }, + "account_disabled": { + "type": "boolean", + "description": "Indicates if organization has account disabled.", + "example": false, + "nullable": false + }, + "acceptance_disabled": { + "type": "boolean", + "description": "Indicates if organization has acceptance disabled.", + "example": false, + "nullable": false + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE", + "nullable": true + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", + "nullable": true + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + }, + "nullable": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + } + } + } + } + } + }, + "organizationResponse": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + }, + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organizations" + ] + }, + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + } + } + }, + "attributes": { + "$ref": "#/components/schemas/organization/properties/data/properties/attributes" + }, + "relationships": { + "type": "object", + "properties": { + "memberships": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "memberships" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + }, + "roles": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "roles" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + }, + "permissions": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "permissions" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + }, + "api_credentials": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "api_credentials" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + } + } + } + } + } + } + }, + "organizationResponseList": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/organizationResponse/properties/data" + } + } + } + }, + "permission": { + "type": "object", + "properties": { + "data": { + "type": "object", + "required": [ + "type", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "permissions" + ] + }, + "attributes": { + "type": "object", + "properties": { + "can_create": { + "type": "boolean", + "description": "Determines if the permission have access to create rights.", + "example": false, + "nullable": false + }, + "can_read": { + "type": "boolean", + "description": "Determines if the permission have access to read rights.", + "example": false, + "nullable": false + }, + "can_update": { + "type": "boolean", + "description": "Determines if the permission have access to update rights.", + "example": false, + "nullable": false + }, + "can_destroy": { + "type": "boolean", + "description": "Determines if the permission have access to destroy rights.", + "example": false, + "nullable": false + }, + "subject": { + "type": "string", + "description": "The resource where this permission is applied.", + "example": "", + "nullable": false + }, + "restrictions": { + "type": "object", + "description": "An object that contains additional restrictions.", + "example": { + "foo": "bar" + }, + "nullable": true + }, + "created_at": { + "type": "string", + "description": "Time at which the resource was created.", + "example": "2018-01-01T12:00:00.000Z", + "nullable": false + }, + "updated_at": { + "type": "string", + "description": "Time at which the resource was last updated.", + "example": "2018-01-01T12:00:00.000Z", + "nullable": false + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE", + "nullable": true + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", + "nullable": true + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + }, + "nullable": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "organization": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organizations" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "role": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "roles" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "versions": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "versions" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + } + } + } + } + } + } + }, + "permissionCreate": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "required": [ + "type", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "permissions" + ] + }, + "attributes": { + "type": "object", + "properties": { + "can_create": { + "type": "boolean", + "description": "Determines if the permission have access to create rights.", + "example": false + }, + "can_read": { + "type": "boolean", + "description": "Determines if the permission have access to read rights.", + "example": false + }, + "can_update": { + "type": "boolean", + "description": "Determines if the permission have access to update rights.", + "example": false + }, + "can_destroy": { + "type": "boolean", + "description": "Determines if the permission have access to destroy rights.", + "example": false + }, + "subject": { + "type": "string", + "description": "The resource where this permission is applied.", + "example": "" + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE" + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN" + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + } + } + }, + "required": [ + "can_create", + "can_read", + "can_update", + "can_destroy", + "subject" + ] + }, + "relationships": { + "type": "object", + "properties": { + "role": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "roles" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + } + }, + "required": [ + "role" + ] + } + } + } + } + }, + "permissionUpdate": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "required": [ + "type", + "id", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "permissions" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + }, + "attributes": { + "type": "object", + "properties": { + "can_create": { + "type": "boolean", + "description": "Determines if the permission have access to create rights.", + "example": false, + "nullable": false + }, + "can_read": { + "type": "boolean", + "description": "Determines if the permission have access to read rights.", + "example": false, + "nullable": false + }, + "can_update": { + "type": "boolean", + "description": "Determines if the permission have access to update rights.", + "example": false, + "nullable": false + }, + "can_destroy": { + "type": "boolean", + "description": "Determines if the permission have access to destroy rights.", + "example": false, + "nullable": false + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE", + "nullable": true + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", + "nullable": true + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + }, + "nullable": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + } + } + } + } + } + }, + "permissionResponse": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + }, + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "permissions" + ] + }, + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + } + } + }, + "attributes": { + "$ref": "#/components/schemas/permission/properties/data/properties/attributes" + }, + "relationships": { + "type": "object", + "properties": { + "organization": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organization" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + }, + "role": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "role" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + }, + "versions": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "versions" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + } + } + } + } + } + } + }, + "permissionResponseList": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/permissionResponse/properties/data" + } + } + } + }, + "role": { + "type": "object", + "properties": { + "data": { + "type": "object", + "required": [ + "type", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "roles" + ] + }, + "attributes": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The role name.", + "example": "Custom role", + "nullable": false + }, + "kind": { + "type": "string", + "description": "The kind of role, one of: `custom`, `admin`, `read_only`", + "example": "custom", + "nullable": true + }, + "created_at": { + "type": "string", + "description": "Time at which the resource was created.", + "example": "2018-01-01T12:00:00.000Z", + "nullable": false + }, + "updated_at": { + "type": "string", + "description": "Time at which the resource was last updated.", + "example": "2018-01-01T12:00:00.000Z", + "nullable": false + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE", + "nullable": true + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", + "nullable": true + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + }, + "nullable": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "organization": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organizations" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "permissions": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "permissions" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "memberships": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "memberships" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "api_credentials": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "api_credentials" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "versions": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "versions" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + } + } + } + } + } + } + }, + "roleCreate": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "required": [ + "type", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "roles" + ] + }, + "attributes": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The role name.", + "example": "Custom role" + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE" + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN" + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + } + } + }, + "required": [ + "name" + ] + }, + "relationships": { + "type": "object", + "properties": { + "organization": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organizations" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + } + }, + "required": [ + "organization" + ] + } + } + } + } + }, + "roleUpdate": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "required": [ + "type", + "id", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "roles" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + }, + "attributes": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The role name.", + "example": "Custom role", + "nullable": false + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE", + "nullable": true + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", + "nullable": true + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + }, + "nullable": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + } + } + } + } + } + }, + "roleResponse": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + }, + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "roles" + ] + }, + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + } + } + }, + "attributes": { + "$ref": "#/components/schemas/role/properties/data/properties/attributes" + }, + "relationships": { + "type": "object", + "properties": { + "organization": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organization" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + }, + "permissions": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "permissions" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + }, + "memberships": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "memberships" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + }, + "api_credentials": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "api_credentials" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + }, + "versions": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "versions" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + } + } + } + } + } + } + }, + "roleResponseList": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/roleResponse/properties/data" + } + } + } + }, + "user": { + "type": "object", + "properties": { + "data": { + "type": "object", + "required": [ + "type", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "user" + ] + }, + "attributes": { + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "The user email.", + "example": "user@commercelayer.io", + "nullable": false + }, + "first_name": { + "type": "string", + "description": "The user first name.", + "example": "John", + "nullable": false + }, + "last_name": { + "type": "string", + "description": "The user last name.", + "example": "Doe", + "nullable": false + }, + "time_zone": { + "type": "string", + "description": "The user preferred timezone.", + "example": "UTC", + "nullable": true + }, + "created_at": { + "type": "string", + "description": "Time at which the resource was created.", + "example": "2018-01-01T12:00:00.000Z", + "nullable": false + }, + "updated_at": { + "type": "string", + "description": "Time at which the resource was last updated.", + "example": "2018-01-01T12:00:00.000Z", + "nullable": false + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE", + "nullable": true + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", + "nullable": true + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + }, + "nullable": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + } + } + } + } + } + }, + "userUpdate": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "required": [ + "type", + "id", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "user" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + }, + "attributes": { + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "The user email.", + "example": "user@commercelayer.io", + "nullable": false + }, + "first_name": { + "type": "string", + "description": "The user first name.", + "example": "John", + "nullable": false + }, + "last_name": { + "type": "string", + "description": "The user last name.", + "example": "Doe", + "nullable": false + }, + "time_zone": { + "type": "string", + "description": "The user preferred timezone.", + "example": "UTC", + "nullable": true + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE", + "nullable": true + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", + "nullable": true + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + }, + "nullable": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + } + } + } + } + } + }, + "userResponse": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + }, + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "user" + ] + }, + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + } + } + }, + "attributes": { + "$ref": "#/components/schemas/user/properties/data/properties/attributes" + }, + "relationships": { + "type": "object", + "properties": { + } + } + } + } + } + }, + "userResponseList": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/userResponse/properties/data" + } + } + } + }, + "version": { + "type": "object", + "properties": { + "data": { + "type": "object", + "required": [ + "type", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "versions" + ] + }, + "attributes": { + "type": "object", + "properties": { + "resource_type": { + "type": "string", + "description": "The type of the versioned resource.", + "example": "orders", + "nullable": true + }, + "resource_id": { + "type": "string", + "description": "The versioned resource ID.", + "example": "PzdJhdLdYV", + "nullable": true + }, + "event": { + "type": "string", + "description": "The event which generates the version.", + "example": "update", + "nullable": true + }, + "changes": { + "type": "object", + "description": "The object changes payload.", + "example": { + "status": [ + "draft", + "placed" + ] + }, + "nullable": true + }, + "who": { + "type": "object", + "description": "Information about who triggered the change, only showed when it's from a JWT token.", + "example": { + "application": { + "id": "DNOPYiZYpn", + "kind": "sales_channel", + "public": true + }, + "owner": { + "id": "yQQrBhLBmQ", + "type": "Customer" + } + }, + "nullable": true + }, + "created_at": { + "type": "string", + "description": "Time at which the resource was created.", + "example": "2018-01-01T12:00:00.000Z", + "nullable": false + }, + "updated_at": { + "type": "string", + "description": "Time at which the resource was last updated.", + "example": "2018-01-01T12:00:00.000Z", + "nullable": false + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE", + "nullable": true + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", + "nullable": true + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + }, + "nullable": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + } + } + } + } + } + }, + "versionResponse": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + }, + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "versions" + ] + }, + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + } + } + }, + "attributes": { + "$ref": "#/components/schemas/version/properties/data/properties/attributes" + }, + "relationships": { + "type": "object", + "properties": { + } + } + } + } + } + }, + "versionResponseList": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/versionResponse/properties/data" + } + } + } + } + }, + "securitySchemes": { + "bearerAuth": { + "type": "http", + "scheme": "bearer", + "bearerFormat": "JWT" + } + } + }, + "tags": [ + { + "name": "singleton", + "description": "singleton resource" + }, + { + "name": "api_credentials", + "description": "resource type" + }, + { + "name": "has_one", + "description": "relationship kind" + }, + { + "name": "memberships", + "description": "resource type" + }, + { + "name": "has_many", + "description": "relationship kind" + }, + { + "name": "organizations", + "description": "resource type" + }, + { + "name": "permissions", + "description": "resource type" + }, + { + "name": "roles", + "description": "resource type" + }, + { + "name": "user", + "description": "resource type" + }, + { + "name": "versions", + "description": "resource type" + } + ], + "security": [ + { + "bearerAuth": [ + + ] + } + ] +} \ No newline at end of file diff --git a/gen/schema.ts b/gen/schema.ts new file mode 100644 index 0000000..64cd641 --- /dev/null +++ b/gen/schema.ts @@ -0,0 +1,373 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +/* eslint-disable no-console */ +import { readFileSync, writeFileSync } from 'fs' +import { snakeCase } from 'lodash' +import axios from 'axios' +import { resolve } from 'path' +import { sortObjectFields } from '../src/util' +import { inspect } from 'util' + + +// eslint-disable-next-line @typescript-eslint/no-var-requires +const Inflector = require('inflector-js') + + +const SCHEMA_LOCAL_PATH = resolve('./gen/openapi.json') +const SCHEMA_NAME = 'openapi.json' +const SCHEMA_REMOTE_URL = 'https://data.commercelayer.app/schemas/provisioning/' + SCHEMA_NAME + + +type SchemaInfo = { + remoteUrl?: string; + localPath?: string; + version?: string; +} + + +const downloadSchema = async (url?: string): Promise => { + + const schemaUrl = url || SCHEMA_REMOTE_URL + const schemaOutPath = SCHEMA_LOCAL_PATH + + console.log(`Downloading OpenAPI schema ... [${schemaUrl}]`) + + const response = await axios.get(schemaUrl) + const schema = await response.data + + if (schema) writeFileSync(schemaOutPath, JSON.stringify(schema, null, 4)) + else console.log('OpenAPI schema is empty!') + + const version = schema.info.version + + console.log('OpenAPI schema downloaded: ' + version) + + return { + remoteUrl: schemaUrl, + localPath: schemaOutPath, + version, + } + +} + + +const currentSchema = (): any => { + + const currentSchema = readFileSync(SCHEMA_LOCAL_PATH, { encoding: 'utf-8' }) + const schema = JSON.parse(currentSchema) + + return schema + +} + + +const parseSchema = (path: string): ApiSchema => { + + console.log('Parsing OpenAPI schema ...') + + const apiSchema: any = {} + + const schemaFile = path + const openApi = readFileSync(schemaFile, { encoding: 'utf-8' }) as any + + const schema = JSON.parse(openApi) + + apiSchema.version = schema.info?.version + console.log(`Schema version: ${apiSchema.version}`) + + apiSchema.paths = parsePaths(schema.paths) + apiSchema.components = parseComponents(schema.components.schemas) + + const resources: ResourceMap = {} + const components: ComponentMap = {} + + const specialComponentMatcher = /(Create|Update|ResponseList|ResponseCreated|ResponseUpdated|Response)$/ + + Object.keys(apiSchema.paths).forEach(p => { + const singRes = Inflector.singularize(p) // singularized resource name in snake case format + resources[p] = { + operations: apiSchema.paths[p], + components: {} + } + Object.keys(apiSchema.components).forEach(c => { + if (!specialComponentMatcher.test(c)) components[c] = apiSchema.components[c] + else + if (snakeCase(c.replace(specialComponentMatcher, '')) === singRes) resources[p].components[c] = apiSchema.components[c] + }) + // Sort components + resources[p].components = sortObjectFields(resources[p].components) + }) + + console.log('OpenAPI schema correctly parsed.') + + + return { version: apiSchema.version, resources, components } + +} + + +const operationName = (op: string, id?: string, relationship?: string): string => { + switch (op) { + case 'get': return id ? (relationship || 'retrieve') : 'list' + case 'patch': return 'update' + case 'delete': return 'delete' + case 'post': return 'create' + default: return op + } +} + + +const referenceResource = (ref: { '$ref': string }): string => { + const r = getReference(ref) as string + return Inflector.camelize(r.substring(r.lastIndexOf('/') + 1)) +} + + +const referenceContent = (content: any): string => { + return referenceResource(content["application/vnd.api+json"].schema) +} + + +const parsePaths = (schemaPaths: any[]): PathMap => { + + const paths: PathMap = {} + + for (const p of Object.entries(schemaPaths)) { + + const [pKey, pValue] = p + const relIdx = pKey.indexOf('}/') + 2 + const relationship = (relIdx > 1) ? pKey.substring(relIdx) : undefined + + const id = pKey.substring(pKey.indexOf('{') + 1, pKey.indexOf('}')) + const path = pKey.replace(/\/{.*}/g, '').substring(1) + const slIdx = path.lastIndexOf('/') + const res = (slIdx === -1) ? path : path.substring(0, slIdx) + + const operations: OperationMap = paths[res] || {} + + Object.entries(pValue as object).forEach(o => { + + let skip = false + + const [oKey, oValue] = o + + const singleton = oValue.tags.includes('singleton') + + const op: Operation = { + path: pKey, + type: oKey, + name: operationName(oKey, id, relationship), + singleton, + } + + if (id) op.id = id + if (oValue.requestBody) op.requestType = referenceContent(oValue.requestBody.content) + if (oValue.responses) { + if (oValue.responses['200']?.content) op.responseType = referenceContent(oValue.responses['200'].content) + else + if (oValue.responses['201']?.content) op.responseType = referenceContent(oValue.responses['201'].content) + } + + + if (relationship) { + + const tags = oValue.tags as string[] + const relCard = tags.find(t => t.startsWith('has_')) as string + if (!relCard) console.log(`Relationship without cardinality: ${op.name} [${op.path}]`) + const relType = tags.find(t => !t.startsWith('has_')) as string + if (!relType) console.log(`Relationship without type: ${op.name} [${op.path}]`) + if (!relCard || !relType) skip = true + + if (!skip) { + op.relationship = { + name: relationship || '', + type: relType, + polymorphic: false, + cardinality: (relCard === 'has_many') ? Cardinality.to_many : Cardinality.to_one, + required: false, + deprecated: false + } + op.responseType = Inflector.camelize(Inflector.singularize(op.relationship.type)) + } + } + + + if (skip) console.log(`Operation skipped: ${op.name} [${op.path}]`) + else operations[op.name] = op + + }) + + paths[res] = operations + + } + + + return paths + +} + + +const getReference = (obj: any): string | undefined => { + if (obj) return obj['$ref'] + return undefined +} + + +const resolveReference = (schemaComponents: any[], ref: string): any => { + + const segs = ref.replace('#/components/schemas/', '').split('/') + const key = Inflector.camelize(segs.shift() as string, true) + + let reference: any = schemaComponents[key] + segs.forEach(s => reference = reference[s]) + + return reference + +} + + +const parseComponents = (schemaComponents: any[]): ComponentMap => { + + const components: ComponentMap = {} + + for (const c of Object.entries(schemaComponents)) { + + const [cKey, cValue] = c + + // Check component reference + let cmp = (cValue.properties.data.type === 'array') ? cValue.properties.data.items : cValue.properties.data + const cmpRef = getReference(cmp) + if (cmpRef) cmp = resolveReference(schemaComponents, cmpRef) + + // Check attributes reference + const attributesRef = getReference(cmp.properties.attributes) + const cmpAttributes = attributesRef ? resolveReference(schemaComponents, attributesRef) : cmp.properties.attributes + const cmpRelationships = cmp.properties.relationships + + const attributes: { [key: string]: Attribute } = {} + const requiredAttributes: string[] = cmpAttributes.required || [] + const relationships: { [key: string]: Relationship } = {} + const requiredRelationships: string[] = cmpRelationships.required || [] + + // Attributes + Object.entries(cmpAttributes.properties as object).forEach(a => { + const [aKey, aValue] = a + const fetchable = (aValue.nullable !== undefined) + attributes[aKey] = { + name: aKey, + type: (aValue.type === 'array') ? `${aValue.items.type}[]` : aValue.type, + required: requiredAttributes.includes(aKey) || (fetchable && !aValue.nullable && !cKey.match(/(Create|Update)$/)), + fetchable, + enum: aValue.enum + } + }) + + // Relationships + if (cmpRelationships) { + Object.entries(cmpRelationships.properties as object).forEach(r => { + const [rKey, rValue] = r + const dataObj = rValue.properties.data? rValue.properties.data : rValue + const typeObj = dataObj.items ? dataObj.items.properties : dataObj.properties + const type = typeObj.type.enum[0] // typeObj.type.default || typeObj.type.example + let oneOf = rValue.oneOf + if (oneOf) oneOf = oneOf.map(referenceResource) + relationships[rKey] = { + name: rKey, + type, + required: requiredRelationships.includes(rKey), + cardinality: (Inflector.pluralize(rKey) === rKey) ? Cardinality.to_many : Cardinality.to_one, + deprecated: rValue.deprecated, + oneOf, + polymorphic: (oneOf !== undefined) && oneOf.length + } + }) + } + + components[Inflector.camelize(cKey)] = { + attributes, + relationships + } + + } + + + return components + +} + + +type ApiSchema = { + version: string, + resources: ResourceMap, + components: ComponentMap +} + + +type Resource = { + components: ComponentMap + operations: OperationMap +} + + +type ResourceMap = { + [resource: string]: Resource +} + +type Component = { + attributes: { [key: string]: Attribute }, + relationships: { [key: string]: Relationship } +} + +type ComponentMap = { + [key: string]: Component +} + +type Attribute = { + type: string + name: string + required: boolean + fetchable: boolean + enum: string[] +} + +enum Cardinality { + to_one = 'to_one', + to_many = 'to_many' +} + +type Relationship = { + type: string + name: string + required: boolean + cardinality: Cardinality + deprecated: boolean + oneOf?: Array + polymorphic: boolean +} + +type PathMap = { [key: string]: OperationMap } + +type OperationMap = { [key: string]: Operation } + +type Operation = { + path: string + type: string + id?: string + name: string + requestType?: any + responseType?: any + singleton: boolean + relationship?: Relationship + trigger?: boolean +} + + + +export default { + download: downloadSchema, + parse: parseSchema, + current: currentSchema, + localPath: SCHEMA_LOCAL_PATH, + remoteUrl: SCHEMA_REMOTE_URL, +} + +export { Resource, Operation, Component, ComponentMap, Cardinality, Relationship, ApiSchema, Attribute } \ No newline at end of file diff --git a/gen/templates/create.tpl b/gen/templates/create.tpl new file mode 100644 index 0000000..f6865b6 --- /dev/null +++ b/gen/templates/create.tpl @@ -0,0 +1,3 @@ +async create(resource: ##__RESOURCE_REQUEST_CLASS__##, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise<##__RESOURCE_RESPONSE_CLASS__##> { + return this.resources.create<##__RESOURCE_REQUEST_CLASS__##, ##__RESOURCE_RESPONSE_CLASS__##>({ ...resource, type: ##__RESOURCE_CLASS__##.TYPE }, params, options) +} \ No newline at end of file diff --git a/gen/templates/delete.tpl b/gen/templates/delete.tpl new file mode 100644 index 0000000..0f65508 --- /dev/null +++ b/gen/templates/delete.tpl @@ -0,0 +1,3 @@ +async delete(id: string | ResourceId, options?: ResourcesConfig): Promise { + await this.resources.delete((typeof id === 'string')? { id, type: ##__RESOURCE_CLASS__##.TYPE } : id, options) +} \ No newline at end of file diff --git a/gen/templates/header.tpl b/gen/templates/header.tpl new file mode 100644 index 0000000..beed24b --- /dev/null +++ b/gen/templates/header.tpl @@ -0,0 +1,3 @@ +/** + * ©##__CURRENT_YEAR__## Commerce Layer Inc. + **/ \ No newline at end of file diff --git a/gen/templates/list.tpl b/gen/templates/list.tpl new file mode 100644 index 0000000..666b1c7 --- /dev/null +++ b/gen/templates/list.tpl @@ -0,0 +1,3 @@ +async list(params?: QueryParamsList, options?: ResourcesConfig): Promise> { + return this.resources.list<##__RESOURCE_RESPONSE_CLASS__##>({ type: ##__RESOURCE_CLASS__##.TYPE }, params, options) +} \ No newline at end of file diff --git a/gen/templates/model.tpl b/gen/templates/model.tpl new file mode 100644 index 0000000..5139a1b --- /dev/null +++ b/gen/templates/model.tpl @@ -0,0 +1,4 @@ +interface ##__RESOURCE_MODEL__## extends Resource##__EXTEND_TYPE__## { + ##__RESOURCE_MODEL_FIELDS__## + ##__RESOURCE_MODEL_RELATIONSHIPS__## +} \ No newline at end of file diff --git a/gen/templates/model_empty.tpl b/gen/templates/model_empty.tpl new file mode 100644 index 0000000..0b0b746 --- /dev/null +++ b/gen/templates/model_empty.tpl @@ -0,0 +1 @@ +type ##__RESOURCE_MODEL__## = Resource##__EXTEND_TYPE__## \ No newline at end of file diff --git a/gen/templates/relationship_many.tpl b/gen/templates/relationship_many.tpl new file mode 100644 index 0000000..7423a92 --- /dev/null +++ b/gen/templates/relationship_many.tpl @@ -0,0 +1,4 @@ +async ##__OPERATION_NAME__##(##__RESOURCE_ID__##: string | ##__MODEL_RESOURCE_INTERFACE__##, params?: QueryParamsList, options?: ResourcesConfig): Promise> { + const _##__RESOURCE_ID__## = (##__RESOURCE_ID__## as ##__MODEL_RESOURCE_INTERFACE__##).id || ##__RESOURCE_ID__## as string + return this.resources.fetch<##__RESOURCE_RESPONSE_CLASS__##>({ type: '##__RELATIONSHIP_TYPE__##' }, `##__RELATIONSHIP_PATH__##`, params, options) as unknown as ListResponse<##__RESOURCE_RESPONSE_CLASS__##> +} \ No newline at end of file diff --git a/gen/templates/relationship_one.tpl b/gen/templates/relationship_one.tpl new file mode 100644 index 0000000..a486290 --- /dev/null +++ b/gen/templates/relationship_one.tpl @@ -0,0 +1,4 @@ +async ##__OPERATION_NAME__##(##__RESOURCE_ID__##: string | ##__MODEL_RESOURCE_INTERFACE__##, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise<##__RESOURCE_RESPONSE_CLASS__##> { + const _##__RESOURCE_ID__## = (##__RESOURCE_ID__## as ##__MODEL_RESOURCE_INTERFACE__##).id || ##__RESOURCE_ID__## as string + return this.resources.fetch<##__RESOURCE_RESPONSE_CLASS__##>({ type: '##__RELATIONSHIP_TYPE__##' }, `##__RELATIONSHIP_PATH__##`, params, options) as unknown as ##__RESOURCE_RESPONSE_CLASS__## +} \ No newline at end of file diff --git a/gen/templates/resource.tpl b/gen/templates/resource.tpl new file mode 100644 index 0000000..3d63b72 --- /dev/null +++ b/gen/templates/resource.tpl @@ -0,0 +1,40 @@ +import { ##__RESOURCE_MODEL_TYPE__## } from '../resource' +import type { ##__RESOURCE_INTERFACES__##, ##__IMPORT_RESOURCE_COMMON__##, ResourceRel##__RESPONSE_MODELS__## } from '../resource' +##__IMPORT_QUERY_MODELS__## + +##__IMPORT_RESOURCE_MODELS__## + +type ##__MODEL_RESOURCE_INTERFACE__##Type = '##__RESOURCE_TYPE__##' +type ##__MODEL_RESOURCE_INTERFACE__##Rel = ResourceRel & { type: ##__MODEL_RESOURCE_INTERFACE__##Type } +##__RELATIONSHIP_TYPES__## + +##__MODEL_INTERFACES__## + + +class ##__RESOURCE_CLASS__## extends ##__RESOURCE_MODEL_TYPE__##<##__MODEL_RESOURCE_INTERFACE__##> { + + static readonly TYPE: ##__MODEL_RESOURCE_INTERFACE__##Type = '##__RESOURCE_TYPE__##' as const + + ##__RESOURCE_OPERATIONS__## + + + is##__MODEL_RESOURCE_INTERFACE__##(resource: any): resource is ##__MODEL_RESOURCE_INTERFACE__## { + return resource.type && (resource.type === ##__RESOURCE_CLASS__##.TYPE) + } + + + relationship(id: string | ResourceId | null): ##__MODEL_RESOURCE_INTERFACE__##Rel { + return ((id === null) || (typeof id === 'string')) ? { id, type: ##__RESOURCE_CLASS__##.TYPE } : { id: id.id, type: ##__RESOURCE_CLASS__##.TYPE } + } + + + type(): ##__MODEL_RESOURCE_INTERFACE__##Type { + return ##__RESOURCE_CLASS__##.TYPE + } + +} + + +export default ##__RESOURCE_CLASS__## + +export type { ##__EXPORT_RESOURCE_TYPES__##, ##__MODEL_RESOURCE_INTERFACE__##Type } diff --git a/gen/templates/retrieve.tpl b/gen/templates/retrieve.tpl new file mode 100644 index 0000000..98f6717 --- /dev/null +++ b/gen/templates/retrieve.tpl @@ -0,0 +1,3 @@ +async retrieve(id: string, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise<##__RESOURCE_RESPONSE_CLASS__##> { + return this.resources.retrieve<##__RESOURCE_RESPONSE_CLASS__##>({ type: ##__RESOURCE_CLASS__##.TYPE, id }, params, options) +} \ No newline at end of file diff --git a/gen/templates/singleton.tpl b/gen/templates/singleton.tpl new file mode 100644 index 0000000..c638732 --- /dev/null +++ b/gen/templates/singleton.tpl @@ -0,0 +1,3 @@ +async retrieve(params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise<##__RESOURCE_RESPONSE_CLASS__##> { + return this.resources.singleton<##__RESOURCE_RESPONSE_CLASS__##>({ type: ##__RESOURCE_CLASS__##.TYPE }, params, options) +} \ No newline at end of file diff --git a/gen/templates/spec.tpl b/gen/templates/spec.tpl new file mode 100644 index 0000000..4c4abe0 --- /dev/null +++ b/gen/templates/spec.tpl @@ -0,0 +1,213 @@ +/** + * ©##__CURRENT_YEAR__## Commerce Layer Inc. + * Source code generated automatically by SDK codegen + **/ + +import { CommerceLayerProvisioningClient, ##__RESOURCE_MODEL__## } from '../../src' +import { isEqual } from 'lodash' +// eslint-disable-next-line @typescript-eslint/no-unused-vars +import { getClient, TestData, CommonData, handleError, interceptRequest, checkCommon, checkCommonData, checkCommonParamsList, checkCommonParams, currentAccessToken, randomValue } from '../../test/common' + + + +let clp: CommerceLayerProvisioningClient + + +beforeAll(async () => { clp = await getClient() }) + + +describe('##__RESOURCE_CLASS__## resource', () => { + + const resourceType = '##__RESOURCE_TYPE__##' + + + /* spec.create.start */ + it(resourceType + '.create', async () => { + + const createAttributes = ##__RESOURCE_ATTRIBUTES_CREATE__## + const attributes = { ...createAttributes, reference: TestData.reference } + const params = { fields: { [resourceType]: CommonData.paramsFields } } + const resData = attributes + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('post') + checkCommon(config, resourceType) + checkCommonData(config, resourceType, attributes) + expect(clp[resourceType].is##__RESOURCE_MODEL__##(config.data.data)).toBeTruthy() + return interceptRequest() + }) + + await clp[resourceType].create(resData, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* spec.create.stop */ + + + /* spec.retrieve.start */ + it(resourceType + '.retrieve', async () => { + + const id = TestData.id + const params = { fields: {[resourceType]: CommonData.paramsFields } } + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType, id, currentAccessToken) + checkCommonParams(config, params) + return interceptRequest() + }) + + await clp[resourceType].retrieve(id, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* spec.retrieve.stop */ + + + /* spec.update.start */ + it(resourceType + '.update', async () => { + + const attributes = { reference_origin: TestData.reference_origin, metadata: TestData.metadata } + const params = { fields: { [resourceType]: CommonData.paramsFields } } + const resData = { id: TestData.id, ...attributes} + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('patch') + checkCommon(config, resourceType, resData.id, currentAccessToken) + checkCommonData(config, resourceType, attributes, resData.id) + return interceptRequest() + }) + + await clp[resourceType].update(resData, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* spec.update.stop */ + + + /* spec.delete.start */ + it(resourceType + '.delete', async () => { + + const id = TestData.id + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('delete') + checkCommon(config, resourceType, id, currentAccessToken) + return interceptRequest() + }) + + await clp[resourceType].delete(id, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* spec.delete.stop */ + + + /* spec.list.start */ + it(resourceType + '.list', async () => { + + const params = CommonData.paramsList + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType) + checkCommonParamsList(config, params) + return interceptRequest() + }) + + await clp[resourceType].list(params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* spec.list.stop */ + + + /* spec.singleton.start */ + it(resourceType + '.singleton', async () => { + + const params = { fields: { [resourceType]: CommonData.paramsFields } } + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType) + checkCommonParams(config, params) + return interceptRequest() + }) + + await clp[resourceType].retrieve(params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* spec.singleton.stop */ + + + /* spec.type.start */ + it(resourceType + '.type', async () => { + + const resource = { id: TestData.id, type: resourceType } + expect(clp[resourceType].is##__RESOURCE_MODEL__##(resource)).toBeTruthy() + + const type = clp[resourceType].type() + expect(type).toBe(resourceType) + + }) + /* spec.type.stop */ + + + /* spec.relationship.start */ + it(resourceType + '.relationship', async () => { + + const relId = clp[resourceType].relationship(TestData.id) + expect(isEqual(relId, { id: TestData.id, type: resourceType})) + + const relResId = clp[resourceType].relationship({ id: TestData.id, type: resourceType }) + expect(isEqual(relResId, { id: TestData.id, type: resourceType})) + + }) + /* spec.relationship.stop */ + + + /* spec.parse.start */ + it(resourceType + '.parse', async () => { + + const reference = 'myReferenceId' + + const payload = ` + { + "data": { + "id": "AbcdEfgHiL", + "meta": { + "mode": "test", + "organization_id": "myOrgId" + }, + "type": "${resourceType}", + "links": { + "self": "/api/${resourceType}/AbcdEfgHiL" + }, + "attributes": { + "metadata": {}, + "reference": "${reference}", + "created_at": "2023-10-01T05:53:29.296Z", + "updated_at": "2023-10-10T08:52:13.251Z" + } + } + } + ` + + const res = clp[resourceType].parse(payload) as ##__RESOURCE_MODEL__## + + expect(res.type).toBe(resourceType) + expect(res.reference).toBe(reference) + + }) + /* spec.parse.stop */ + + ##__RELATIONSHIP_SPECS__## + ##__TRIGGER_SPECS__## +}) diff --git a/gen/templates/spec_relationship.tpl b/gen/templates/spec_relationship.tpl new file mode 100644 index 0000000..37be486 --- /dev/null +++ b/gen/templates/spec_relationship.tpl @@ -0,0 +1,19 @@ +/* relationship.##__OPERATION_NAME__## start */ +it(resourceType + '.##__OPERATION_NAME__##', async () => { + + const id = TestData.id + const params = { fields: { ##__RELATIONSHIP_TYPE__##: CommonData.paramsFields } } + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType, id, currentAccessToken, '##__OPERATION_NAME__##') + checkCommonParams(config, params) + return interceptRequest() + }) + + await clp[resourceType].##__OPERATION_NAME__##(id, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + +}) +/* relationship.##__OPERATION_NAME__## stop */ \ No newline at end of file diff --git a/gen/templates/spec_trigger.tpl b/gen/templates/spec_trigger.tpl new file mode 100644 index 0000000..b06ad85 --- /dev/null +++ b/gen/templates/spec_trigger.tpl @@ -0,0 +1,23 @@ +/* trigger.##__OPERATION_NAME__## start */ +it(resourceType + '.##__OPERATION_NAME__##', async () => { + + let triggerAttr = '##__OPERATION_NAME__##' + if (!triggerAttr.startsWith('_')) triggerAttr = `_${triggerAttr}` + + const triggerValue = ##__TRIGGER_VALUE__## + const attributes = { [triggerAttr]: triggerValue } + const id = TestData.id + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('patch') + checkCommon(config, resourceType, id, currentAccessToken) + checkCommonData(config, resourceType, attributes, id) + return interceptRequest() + }) + + await clp[resourceType].##__OPERATION_NAME__##(##__TRIGGER_PARAMS__##, {}, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + +}) +/* trigger.##__OPERATION_NAME__## stop */ \ No newline at end of file diff --git a/gen/templates/trigger.tpl b/gen/templates/trigger.tpl new file mode 100644 index 0000000..e49efcf --- /dev/null +++ b/gen/templates/trigger.tpl @@ -0,0 +1,3 @@ +async ##__OPERATION_NAME__##(id: string | ##__RESOURCE_RESPONSE_CLASS__##,##__TRIGGER_VALUE__## params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise<##__RESOURCE_RESPONSE_CLASS__##> { + return this.resources.update<##__RESOURCE_REQUEST_CLASS__##, ##__RESOURCE_RESPONSE_CLASS__##>({ id: (typeof id === 'string')? id: id.id, type: ##__RESOURCE_CLASS__##.TYPE, ##__OPERATION_NAME__##: ##__TRIGGER_VALUE_TYPE__## }, params, options) +} \ No newline at end of file diff --git a/gen/templates/update.tpl b/gen/templates/update.tpl new file mode 100644 index 0000000..66111db --- /dev/null +++ b/gen/templates/update.tpl @@ -0,0 +1,3 @@ +async update(resource: ##__RESOURCE_REQUEST_CLASS__##, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise<##__RESOURCE_RESPONSE_CLASS__##> { + return this.resources.update<##__RESOURCE_REQUEST_CLASS__##, ##__RESOURCE_RESPONSE_CLASS__##>({ ...resource, type: ##__RESOURCE_CLASS__##.TYPE }, params, options) +} \ No newline at end of file diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000..48d89e2 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,8 @@ +/* global module */ +module.exports = async () => { + return { + verbose: true, + testMatch: ['**/specs/**/*.spec.[jt]s?(x)'], + collectCoverageFrom: ['src/**/{!(ignore-me),}.ts'] + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..e31381c --- /dev/null +++ b/package.json @@ -0,0 +1,69 @@ +{ + "name": "@commercelayer/provisioning-sdk", + "version": "0.0.1", + "main": "lib/cjs/index.js", + "types": "lib/cjs/index.d.ts", + "module": "lib/esm/index.js", + "scripts": { + "clean": "rm -rf ./.nyc_output ./node_modules/.cache ./coverage", + "build": "tsc -b tsconfig.json tsconfig.esm.json --verbose", + "postbuild": "minimize-js -d lib", + "generate": "ts-node gen/generator.ts", + "generate-local": "ts-node gen/generator.ts -- --local", + "lint": "eslint ./src --ext .ts", + "lintspec": "eslint ./specs/resources/ --ext .spec.ts", + "semantic-release": "semantic-release", + "test": "jest", + "test-local": "ts-node test/spot.ts", + "coverage": "jest --coverage" + }, + "keywords": [ + "javascript", + "ecommerce", + "jamstack", + "commercelayer" + ], + "author": "Pierluigi Viti ", + "license": "MIT", + "description": "Commerce Layer Provisioning SDK", + "files": [ + "lib/**/*" + ], + "engines": { + "node": ">=16 || ^14.17" + }, + "dependencies": { + "axios": "1.5.1" + }, + "devDependencies": { + "@babel/preset-env": "^7.23.2", + "@babel/preset-typescript": "^7.23.2", + "@commercelayer/eslint-config-ts": "1.1.0", + "@commercelayer/js-auth": "^4.2.0", + "@semantic-release/changelog": "^6.0.3", + "@semantic-release/git": "^10.0.1", + "@types/debug": "^4.1.10", + "@types/jest": "^29.5.7", + "@types/lodash": "^4.14.200", + "@types/node": "^20.8.10", + "dotenv": "^16.3.1", + "eslint": "^8.52.0", + "inflector-js": "^1.0.1", + "jest": "^29.7.0", + "json-typescript": "^1.1.2", + "jsonapi-typescript": "^0.1.3", + "lodash": "^4.17.21", + "minimize-js": "^1.4.0", + "semantic-release": "^22.0.6", + "ts-node": "^10.9.1", + "typescript": "^5.2.2" + }, + "repository": "github:commercelayer/provisioning-sdk", + "bugs": "https://github.com/commercelayer/provisioning-sdk/issues", + "publishConfig": { + "access": "public" + }, + "resolutions": { + "ansi-regex": "5.0.1" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..8383da9 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,6896 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +overrides: + ansi-regex: 5.0.1 + +dependencies: + axios: + specifier: 1.5.1 + version: 1.5.1 + +devDependencies: + '@babel/preset-env': + specifier: ^7.23.2 + version: 7.23.2(@babel/core@7.23.2) + '@babel/preset-typescript': + specifier: ^7.23.2 + version: 7.23.2(@babel/core@7.23.2) + '@commercelayer/eslint-config-ts': + specifier: 1.1.0 + version: 1.1.0(eslint@8.52.0)(typescript@5.2.2) + '@commercelayer/js-auth': + specifier: ^4.2.0 + version: 4.2.0 + '@semantic-release/changelog': + specifier: ^6.0.3 + version: 6.0.3(semantic-release@22.0.6) + '@semantic-release/git': + specifier: ^10.0.1 + version: 10.0.1(semantic-release@22.0.6) + '@types/debug': + specifier: ^4.1.10 + version: 4.1.10 + '@types/jest': + specifier: ^29.5.7 + version: 29.5.7 + '@types/lodash': + specifier: ^4.14.200 + version: 4.14.200 + '@types/node': + specifier: ^20.8.10 + version: 20.8.10 + dotenv: + specifier: ^16.3.1 + version: 16.3.1 + eslint: + specifier: ^8.52.0 + version: 8.52.0 + inflector-js: + specifier: ^1.0.1 + version: 1.0.1 + jest: + specifier: ^29.7.0 + version: 29.7.0(@types/node@20.8.10)(ts-node@10.9.1) + json-typescript: + specifier: ^1.1.2 + version: 1.1.2 + jsonapi-typescript: + specifier: ^0.1.3 + version: 0.1.3 + lodash: + specifier: ^4.17.21 + version: 4.17.21 + minimize-js: + specifier: ^1.4.0 + version: 1.4.0 + semantic-release: + specifier: ^22.0.6 + version: 22.0.6(typescript@5.2.2) + ts-node: + specifier: ^10.9.1 + version: 10.9.1(@types/node@20.8.10)(typescript@5.2.2) + typescript: + specifier: ^5.2.2 + version: 5.2.2 + +packages: + + /@aashutoshrathi/word-wrap@1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + dev: true + + /@ampproject/remapping@2.2.1: + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.20 + dev: true + + /@babel/code-frame@7.22.13: + resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.22.20 + chalk: 2.4.2 + dev: true + + /@babel/compat-data@7.23.2: + resolution: {integrity: sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/core@7.23.2: + resolution: {integrity: sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.22.13 + '@babel/generator': 7.23.0 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2) + '@babel/helpers': 7.23.2 + '@babel/parser': 7.23.0 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.2 + '@babel/types': 7.23.0 + convert-source-map: 2.0.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/generator@7.23.0: + resolution: {integrity: sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.20 + jsesc: 2.5.2 + dev: true + + /@babel/helper-annotate-as-pure@7.22.5: + resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + dev: true + + /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: + resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + dev: true + + /@babel/helper-compilation-targets@7.22.15: + resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.23.2 + '@babel/helper-validator-option': 7.22.15 + browserslist: 4.22.1 + lru-cache: 5.1.1 + semver: 6.3.1 + dev: true + + /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.23.2): + resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.2) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + semver: 6.3.1 + dev: true + + /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.2): + resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-annotate-as-pure': 7.22.5 + regexpu-core: 5.3.2 + semver: 6.3.1 + dev: true + + /@babel/helper-define-polyfill-provider@0.4.3(@babel/core@7.23.2): + resolution: {integrity: sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + debug: 4.3.4 + lodash.debounce: 4.0.8 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-environment-visitor@7.22.20: + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-function-name@7.23.0: + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.15 + '@babel/types': 7.23.0 + dev: true + + /@babel/helper-hoist-variables@7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + dev: true + + /@babel/helper-member-expression-to-functions@7.23.0: + resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + dev: true + + /@babel/helper-module-imports@7.22.15: + resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + dev: true + + /@babel/helper-module-transforms@7.23.0(@babel/core@7.23.2): + resolution: {integrity: sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + dev: true + + /@babel/helper-optimise-call-expression@7.22.5: + resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + dev: true + + /@babel/helper-plugin-utils@7.22.5: + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.2): + resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-wrap-function': 7.22.20 + dev: true + + /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.2): + resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + dev: true + + /@babel/helper-simple-access@7.22.5: + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + dev: true + + /@babel/helper-skip-transparent-expression-wrappers@7.22.5: + resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + dev: true + + /@babel/helper-split-export-declaration@7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + dev: true + + /@babel/helper-string-parser@7.22.5: + resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-option@7.22.15: + resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-wrap-function@7.22.20: + resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-function-name': 7.23.0 + '@babel/template': 7.22.15 + '@babel/types': 7.23.0 + dev: true + + /@babel/helpers@7.23.2: + resolution: {integrity: sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.2 + '@babel/types': 7.23.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/highlight@7.22.20: + resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + + /@babel/parser@7.23.0: + resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.23.0 + dev: true + + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.15(@babel/core@7.23.2): + resolution: {integrity: sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.15(@babel/core@7.23.2): + resolution: {integrity: sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-transform-optional-chaining': 7.23.0(@babel/core@7.23.2) + dev: true + + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.2): + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + dev: true + + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.2): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.2): + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.2): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.2): + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.2): + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.2): + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.23.2): + resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-import-attributes@7.22.5(@babel/core@7.23.2): + resolution: {integrity: sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.2): + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.2): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.23.2): + resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.2): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.2): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.2): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.2): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.2): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.2): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.2): + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.2): + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.23.2): + resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.2): + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.23.2): + resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-async-generator-functions@7.23.2(@babel/core@7.23.2): + resolution: {integrity: sha512-BBYVGxbDVHfoeXbOwcagAkOQAm9NxoTdMGfTqghu1GrvadSaw6iW3Je6IcL5PNOw8VwjxqBECXy50/iCQSY/lQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.2) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.2) + dev: true + + /@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.23.2): + resolution: {integrity: sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.2) + dev: true + + /@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.23.2): + resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-block-scoping@7.23.0(@babel/core@7.23.2): + resolution: {integrity: sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-class-properties@7.22.5(@babel/core@7.23.2): + resolution: {integrity: sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-class-static-block@7.22.11(@babel/core@7.23.2): + resolution: {integrity: sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.2) + dev: true + + /@babel/plugin-transform-classes@7.22.15(@babel/core@7.23.2): + resolution: {integrity: sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.2) + '@babel/helper-split-export-declaration': 7.22.6 + globals: 11.12.0 + dev: true + + /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.23.2): + resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/template': 7.22.15 + dev: true + + /@babel/plugin-transform-destructuring@7.23.0(@babel/core@7.23.2): + resolution: {integrity: sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.23.2): + resolution: {integrity: sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.23.2): + resolution: {integrity: sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-dynamic-import@7.22.11(@babel/core@7.23.2): + resolution: {integrity: sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.2) + dev: true + + /@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.23.2): + resolution: {integrity: sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-export-namespace-from@7.22.11(@babel/core@7.23.2): + resolution: {integrity: sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.2) + dev: true + + /@babel/plugin-transform-for-of@7.22.15(@babel/core@7.23.2): + resolution: {integrity: sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-function-name@7.22.5(@babel/core@7.23.2): + resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-json-strings@7.22.11(@babel/core@7.23.2): + resolution: {integrity: sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.2) + dev: true + + /@babel/plugin-transform-literals@7.22.5(@babel/core@7.23.2): + resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-logical-assignment-operators@7.22.11(@babel/core@7.23.2): + resolution: {integrity: sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.2) + dev: true + + /@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.23.2): + resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-modules-amd@7.23.0(@babel/core@7.23.2): + resolution: {integrity: sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-modules-commonjs@7.23.0(@babel/core@7.23.2): + resolution: {integrity: sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + dev: true + + /@babel/plugin-transform-modules-systemjs@7.23.0(@babel/core@7.23.2): + resolution: {integrity: sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 + dev: true + + /@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.23.2): + resolution: {integrity: sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.2): + resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-new-target@7.22.5(@babel/core@7.23.2): + resolution: {integrity: sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-nullish-coalescing-operator@7.22.11(@babel/core@7.23.2): + resolution: {integrity: sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.2) + dev: true + + /@babel/plugin-transform-numeric-separator@7.22.11(@babel/core@7.23.2): + resolution: {integrity: sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.2) + dev: true + + /@babel/plugin-transform-object-rest-spread@7.22.15(@babel/core@7.23.2): + resolution: {integrity: sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.23.2 + '@babel/core': 7.23.2 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.2) + '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.23.2) + dev: true + + /@babel/plugin-transform-object-super@7.22.5(@babel/core@7.23.2): + resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.2) + dev: true + + /@babel/plugin-transform-optional-catch-binding@7.22.11(@babel/core@7.23.2): + resolution: {integrity: sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.2) + dev: true + + /@babel/plugin-transform-optional-chaining@7.23.0(@babel/core@7.23.2): + resolution: {integrity: sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.2) + dev: true + + /@babel/plugin-transform-parameters@7.22.15(@babel/core@7.23.2): + resolution: {integrity: sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-private-methods@7.22.5(@babel/core@7.23.2): + resolution: {integrity: sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-private-property-in-object@7.22.11(@babel/core@7.23.2): + resolution: {integrity: sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.2) + dev: true + + /@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.23.2): + resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-regenerator@7.22.10(@babel/core@7.23.2): + resolution: {integrity: sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + regenerator-transform: 0.15.2 + dev: true + + /@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.23.2): + resolution: {integrity: sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.23.2): + resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-spread@7.22.5(@babel/core@7.23.2): + resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + dev: true + + /@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.23.2): + resolution: {integrity: sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.23.2): + resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.23.2): + resolution: {integrity: sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-typescript@7.22.15(@babel/core@7.23.2): + resolution: {integrity: sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.23.2) + dev: true + + /@babel/plugin-transform-unicode-escapes@7.22.10(@babel/core@7.23.2): + resolution: {integrity: sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-unicode-property-regex@7.22.5(@babel/core@7.23.2): + resolution: {integrity: sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.23.2): + resolution: {integrity: sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-unicode-sets-regex@7.22.5(@babel/core@7.23.2): + resolution: {integrity: sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/preset-env@7.23.2(@babel/core@7.23.2): + resolution: {integrity: sha512-BW3gsuDD+rvHL2VO2SjAUNTBe5YrjsTiDyqamPDWY723na3/yPQ65X5oQkFVJZ0o50/2d+svm1rkPoJeR1KxVQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.23.2 + '@babel/core': 7.23.2 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.15 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.15(@babel/core@7.23.2) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.15(@babel/core@7.23.2) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.2) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.2) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.2) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.2) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.2) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.2) + '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-syntax-import-attributes': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.2) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.2) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.2) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.2) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.2) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.2) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.2) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.2) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.2) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.2) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.2) + '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-async-generator-functions': 7.23.2(@babel/core@7.23.2) + '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-block-scoping': 7.23.0(@babel/core@7.23.2) + '@babel/plugin-transform-class-properties': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-class-static-block': 7.22.11(@babel/core@7.23.2) + '@babel/plugin-transform-classes': 7.22.15(@babel/core@7.23.2) + '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-destructuring': 7.23.0(@babel/core@7.23.2) + '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-duplicate-keys': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-dynamic-import': 7.22.11(@babel/core@7.23.2) + '@babel/plugin-transform-exponentiation-operator': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-export-namespace-from': 7.22.11(@babel/core@7.23.2) + '@babel/plugin-transform-for-of': 7.22.15(@babel/core@7.23.2) + '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-json-strings': 7.22.11(@babel/core@7.23.2) + '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-logical-assignment-operators': 7.22.11(@babel/core@7.23.2) + '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-modules-amd': 7.23.0(@babel/core@7.23.2) + '@babel/plugin-transform-modules-commonjs': 7.23.0(@babel/core@7.23.2) + '@babel/plugin-transform-modules-systemjs': 7.23.0(@babel/core@7.23.2) + '@babel/plugin-transform-modules-umd': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-new-target': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-nullish-coalescing-operator': 7.22.11(@babel/core@7.23.2) + '@babel/plugin-transform-numeric-separator': 7.22.11(@babel/core@7.23.2) + '@babel/plugin-transform-object-rest-spread': 7.22.15(@babel/core@7.23.2) + '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-optional-catch-binding': 7.22.11(@babel/core@7.23.2) + '@babel/plugin-transform-optional-chaining': 7.23.0(@babel/core@7.23.2) + '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.23.2) + '@babel/plugin-transform-private-methods': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-private-property-in-object': 7.22.11(@babel/core@7.23.2) + '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-regenerator': 7.22.10(@babel/core@7.23.2) + '@babel/plugin-transform-reserved-words': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-typeof-symbol': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-unicode-escapes': 7.22.10(@babel/core@7.23.2) + '@babel/plugin-transform-unicode-property-regex': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-unicode-sets-regex': 7.22.5(@babel/core@7.23.2) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.2) + '@babel/types': 7.23.0 + babel-plugin-polyfill-corejs2: 0.4.6(@babel/core@7.23.2) + babel-plugin-polyfill-corejs3: 0.8.6(@babel/core@7.23.2) + babel-plugin-polyfill-regenerator: 0.5.3(@babel/core@7.23.2) + core-js-compat: 3.33.2 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.2): + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/types': 7.23.0 + esutils: 2.0.3 + dev: true + + /@babel/preset-typescript@7.23.2(@babel/core@7.23.2): + resolution: {integrity: sha512-u4UJc1XsS1GhIGteM8rnGiIvf9rJpiVgMEeCnwlLA7WJPC+jcXWJAGxYmeqs5hOZD8BbAfnV5ezBOxQbb4OUxA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.15 + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-modules-commonjs': 7.23.0(@babel/core@7.23.2) + '@babel/plugin-transform-typescript': 7.22.15(@babel/core@7.23.2) + dev: true + + /@babel/regjsgen@0.8.0: + resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} + dev: true + + /@babel/runtime@7.23.2: + resolution: {integrity: sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.0 + dev: true + + /@babel/template@7.22.15: + resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.13 + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 + dev: true + + /@babel/traverse@7.23.2: + resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.13 + '@babel/generator': 7.23.0 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/types@7.23.0: + resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + dev: true + + /@bcoe/v8-coverage@0.2.3: + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + dev: true + + /@colors/colors@1.5.0: + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} + requiresBuild: true + dev: true + optional: true + + /@commercelayer/eslint-config-ts@1.1.0(eslint@8.52.0)(typescript@5.2.2): + resolution: {integrity: sha512-OOzV3RPN7JlEZkwNxWVHdRRknjuLboB/CwxeS832/Kd5sMvOHyaYymNVSpG2tiQj7aFsvtfK8m1umM7Lhod6AA==} + peerDependencies: + eslint: '>=8.0' + typescript: '>=5.0' + dependencies: + '@typescript-eslint/eslint-plugin': 6.9.1(@typescript-eslint/parser@6.9.1)(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.9.1(eslint@8.52.0)(typescript@5.2.2) + eslint: 8.52.0 + eslint-config-prettier: 9.0.0(eslint@8.52.0) + eslint-config-standard-with-typescript: 39.1.1(@typescript-eslint/eslint-plugin@6.9.1)(eslint-plugin-import@2.29.0)(eslint-plugin-n@16.2.0)(eslint-plugin-promise@6.1.1)(eslint@8.52.0)(typescript@5.2.2) + eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.9.1)(eslint@8.52.0) + eslint-plugin-n: 16.2.0(eslint@8.52.0) + eslint-plugin-prettier: 5.0.1(eslint-config-prettier@9.0.0)(eslint@8.52.0)(prettier@3.0.3) + eslint-plugin-promise: 6.1.1(eslint@8.52.0) + prettier: 3.0.3 + typescript: 5.2.2 + transitivePeerDependencies: + - '@types/eslint' + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + /@commercelayer/js-auth@4.2.0: + resolution: {integrity: sha512-KVVi3blZDVKHJCo2DWWbAuhfEGiF3a90OtPHVkjtyeW7n8m5/m2+++5CnMhRZKHvKIS7NpW0XPwoQNb7P8hO4Q==} + engines: {node: '>=18.0.0'} + dev: true + + /@cspotcode/source-map-support@0.8.1: + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + dev: true + + /@esbuild/android-arm64@0.18.20: + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.18.20: + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.18.20: + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.18.20: + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.18.20: + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.18.20: + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.18.20: + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.18.20: + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.18.20: + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.18.20: + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.18.20: + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.18.20: + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.18.20: + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.18.20: + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.18.20: + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.18.20: + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.18.20: + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.18.20: + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.18.20: + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.18.20: + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.18.20: + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.18.20: + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@eslint-community/eslint-utils@4.4.0(eslint@8.52.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.52.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@eslint-community/regexpp@4.10.0: + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + + /@eslint/eslintrc@2.1.2: + resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.23.0 + ignore: 5.2.4 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@eslint/js@8.52.0: + resolution: {integrity: sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@humanwhocodes/config-array@0.11.13: + resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 2.0.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/module-importer@1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + dev: true + + /@humanwhocodes/object-schema@2.0.1: + resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} + dev: true + + /@isaacs/cliui@8.0.2: + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + dependencies: + string-width: 5.1.2 + string-width-cjs: /string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: /strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: /wrap-ansi@7.0.0 + dev: true + + /@istanbuljs/load-nyc-config@1.1.0: + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + dev: true + + /@istanbuljs/schema@0.1.3: + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + dev: true + + /@jest/console@29.7.0: + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@types/node': 20.8.10 + chalk: 4.1.2 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + dev: true + + /@jest/core@29.7.0(ts-node@10.9.1): + resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} + 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 + 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': 20.8.10 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@20.8.10)(ts-node@10.9.1) + 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.5 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + dev: true + + /@jest/environment@29.7.0: + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.8.10 + jest-mock: 29.7.0 + dev: true + + /@jest/expect-utils@29.7.0: + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + jest-get-type: 29.6.3 + dev: true + + /@jest/expect@29.7.0: + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + expect: 29.7.0 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@jest/fake-timers@29.7.0: + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@sinonjs/fake-timers': 10.3.0 + '@types/node': 20.8.10 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 + dev: true + + /@jest/globals@29.7.0: + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/types': 29.6.3 + jest-mock: 29.7.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@jest/reporters@29.7.0: + resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} + 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 + 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.20 + '@types/node': 20.8.10 + chalk: 4.1.2 + collect-v8-coverage: 1.0.2 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.0 + istanbul-lib-instrument: 6.0.1 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.6 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + jest-worker: 29.7.0 + slash: 3.0.0 + string-length: 4.0.2 + strip-ansi: 6.0.1 + v8-to-istanbul: 9.1.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@jest/schemas@29.6.3: + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@sinclair/typebox': 0.27.8 + dev: true + + /@jest/source-map@29.6.3: + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jridgewell/trace-mapping': 0.3.20 + callsites: 3.1.0 + graceful-fs: 4.2.11 + dev: true + + /@jest/test-result@29.7.0: + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/console': 29.7.0 + '@jest/types': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.5 + collect-v8-coverage: 1.0.2 + dev: true + + /@jest/test-sequencer@29.7.0: + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/test-result': 29.7.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + slash: 3.0.0 + dev: true + + /@jest/transform@29.7.0: + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/core': 7.23.2 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.20 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + micromatch: 4.0.5 + pirates: 4.0.6 + slash: 3.0.0 + write-file-atomic: 4.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@jest/types@29.6.3: + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.5 + '@types/istanbul-reports': 3.0.3 + '@types/node': 20.8.10 + '@types/yargs': 17.0.29 + chalk: 4.1.2 + dev: true + + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.20 + dev: true + + /@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/set-array@1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + dev: true + + /@jridgewell/trace-mapping@0.3.20: + resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /@jridgewell/trace-mapping@0.3.9: + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: true + + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.15.0 + dev: true + + /@octokit/auth-token@4.0.0: + resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==} + engines: {node: '>= 18'} + dev: true + + /@octokit/core@5.0.1: + resolution: {integrity: sha512-lyeeeZyESFo+ffI801SaBKmCfsvarO+dgV8/0gD8u1d87clbEdWsP5yC+dSj3zLhb2eIf5SJrn6vDz9AheETHw==} + engines: {node: '>= 18'} + dependencies: + '@octokit/auth-token': 4.0.0 + '@octokit/graphql': 7.0.2 + '@octokit/request': 8.1.4 + '@octokit/request-error': 5.0.1 + '@octokit/types': 12.1.1 + before-after-hook: 2.2.3 + universal-user-agent: 6.0.0 + dev: true + + /@octokit/endpoint@9.0.2: + resolution: {integrity: sha512-qhKW8YLIi+Kmc92FQUFGr++DYtkx/1fBv+Thua6baqnjnOsgBYJDCvWZR1YcINuHGOEQt416WOfE+A/oG60NBQ==} + engines: {node: '>= 18'} + dependencies: + '@octokit/types': 12.1.1 + is-plain-object: 5.0.0 + universal-user-agent: 6.0.0 + dev: true + + /@octokit/graphql@7.0.2: + resolution: {integrity: sha512-OJ2iGMtj5Tg3s6RaXH22cJcxXRi7Y3EBqbHTBRq+PQAqfaS8f/236fUrWhfSn8P4jovyzqucxme7/vWSSZBX2Q==} + engines: {node: '>= 18'} + dependencies: + '@octokit/request': 8.1.4 + '@octokit/types': 12.1.1 + universal-user-agent: 6.0.0 + dev: true + + /@octokit/openapi-types@19.0.2: + resolution: {integrity: sha512-8li32fUDUeml/ACRp/njCWTsk5t17cfTM1jp9n08pBrqs5cDFJubtjsSnuz56r5Tad6jdEPJld7LxNp9dNcyjQ==} + dev: true + + /@octokit/plugin-paginate-rest@9.1.2(@octokit/core@5.0.1): + resolution: {integrity: sha512-euDbNV6fxX6btsCDnZoZM4vw3zO1nj1Z7TskHAulO6mZ9lHoFTpwll6farf+wh31mlBabgU81bBYdflp0GLVAQ==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '>=5' + dependencies: + '@octokit/core': 5.0.1 + '@octokit/types': 12.1.1 + dev: true + + /@octokit/plugin-retry@6.0.1(@octokit/core@5.0.1): + resolution: {integrity: sha512-SKs+Tz9oj0g4p28qkZwl/topGcb0k0qPNX/i7vBKmDsjoeqnVfFUquqrE/O9oJY7+oLzdCtkiWSXLpLjvl6uog==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '>=5' + dependencies: + '@octokit/core': 5.0.1 + '@octokit/request-error': 5.0.1 + '@octokit/types': 12.1.1 + bottleneck: 2.19.5 + dev: true + + /@octokit/plugin-throttling@8.1.2(@octokit/core@5.0.1): + resolution: {integrity: sha512-oFba+ioR6HGb0fgqxMta7Kpk/MdffUTuUxNY856l1nXPvh7Qggp8w4AksRx1SDA8SGd+4cbrpkY4k1J/Xz8nZQ==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': ^5.0.0 + dependencies: + '@octokit/core': 5.0.1 + '@octokit/types': 12.1.1 + bottleneck: 2.19.5 + dev: true + + /@octokit/request-error@5.0.1: + resolution: {integrity: sha512-X7pnyTMV7MgtGmiXBwmO6M5kIPrntOXdyKZLigNfQWSEQzVxR4a4vo49vJjTWX70mPndj8KhfT4Dx+2Ng3vnBQ==} + engines: {node: '>= 18'} + dependencies: + '@octokit/types': 12.1.1 + deprecation: 2.3.1 + once: 1.4.0 + dev: true + + /@octokit/request@8.1.4: + resolution: {integrity: sha512-M0aaFfpGPEKrg7XoA/gwgRvc9MSXHRO2Ioki1qrPDbl1e9YhjIwVoHE7HIKmv/m3idzldj//xBujcFNqGX6ENA==} + engines: {node: '>= 18'} + dependencies: + '@octokit/endpoint': 9.0.2 + '@octokit/request-error': 5.0.1 + '@octokit/types': 12.1.1 + is-plain-object: 5.0.0 + universal-user-agent: 6.0.0 + dev: true + + /@octokit/types@12.1.1: + resolution: {integrity: sha512-qnJTldJ1NyGT5MTsCg/Zi+y2IFHZ1Jo5+njNCjJ9FcainV7LjuHgmB697kA0g4MjZeDAJsM3B45iqCVsCLVFZg==} + dependencies: + '@octokit/openapi-types': 19.0.2 + dev: true + + /@pkgjs/parseargs@0.11.0: + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + requiresBuild: true + dev: true + optional: true + + /@pkgr/utils@2.4.2: + resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + dependencies: + cross-spawn: 7.0.3 + fast-glob: 3.3.1 + is-glob: 4.0.3 + open: 9.1.0 + picocolors: 1.0.0 + tslib: 2.6.2 + dev: true + + /@pnpm/config.env-replace@1.1.0: + resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} + engines: {node: '>=12.22.0'} + dev: true + + /@pnpm/network.ca-file@1.0.2: + resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} + engines: {node: '>=12.22.0'} + dependencies: + graceful-fs: 4.2.10 + dev: true + + /@pnpm/npm-conf@2.2.2: + resolution: {integrity: sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==} + engines: {node: '>=12'} + dependencies: + '@pnpm/config.env-replace': 1.1.0 + '@pnpm/network.ca-file': 1.0.2 + config-chain: 1.1.13 + dev: true + + /@semantic-release/changelog@6.0.3(semantic-release@22.0.6): + resolution: {integrity: sha512-dZuR5qByyfe3Y03TpmCvAxCyTnp7r5XwtHRf/8vD9EAn4ZWbavUX8adMtXYzE86EVh0gyLA7lm5yW4IV30XUag==} + engines: {node: '>=14.17'} + peerDependencies: + semantic-release: '>=18.0.0' + dependencies: + '@semantic-release/error': 3.0.0 + aggregate-error: 3.1.0 + fs-extra: 11.1.1 + lodash: 4.17.21 + semantic-release: 22.0.6(typescript@5.2.2) + dev: true + + /@semantic-release/commit-analyzer@11.0.0(semantic-release@22.0.6): + resolution: {integrity: sha512-uEXyf4Z0AWJuxI9TbSQP5kkIYqus1/E1NcmE7pIv6d6/m/5EJcNWAGR4FOo34vrV26FhEaRVkxFfYzp/M7BKIg==} + engines: {node: ^18.17 || >=20.6.1} + peerDependencies: + semantic-release: '>=20.1.0' + dependencies: + conventional-changelog-angular: 7.0.0 + conventional-commits-filter: 4.0.0 + conventional-commits-parser: 5.0.0 + debug: 4.3.4 + import-from: 4.0.0 + lodash-es: 4.17.21 + micromatch: 4.0.5 + semantic-release: 22.0.6(typescript@5.2.2) + transitivePeerDependencies: + - supports-color + dev: true + + /@semantic-release/error@3.0.0: + resolution: {integrity: sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==} + engines: {node: '>=14.17'} + dev: true + + /@semantic-release/error@4.0.0: + resolution: {integrity: sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==} + engines: {node: '>=18'} + dev: true + + /@semantic-release/git@10.0.1(semantic-release@22.0.6): + resolution: {integrity: sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w==} + engines: {node: '>=14.17'} + peerDependencies: + semantic-release: '>=18.0.0' + dependencies: + '@semantic-release/error': 3.0.0 + aggregate-error: 3.1.0 + debug: 4.3.4 + dir-glob: 3.0.1 + execa: 5.1.1 + lodash: 4.17.21 + micromatch: 4.0.5 + p-reduce: 2.1.0 + semantic-release: 22.0.6(typescript@5.2.2) + transitivePeerDependencies: + - supports-color + dev: true + + /@semantic-release/github@9.2.1(semantic-release@22.0.6): + resolution: {integrity: sha512-fEn9uOe6jwWR6ro2Wh6YNBCBuZ5lRi8Myz+1j3KDTSt8OuUGlpVM4lFac/0bDrql2NOKrIEAMGCfWb9WMIdzIg==} + engines: {node: '>=18'} + peerDependencies: + semantic-release: '>=20.1.0' + dependencies: + '@octokit/core': 5.0.1 + '@octokit/plugin-paginate-rest': 9.1.2(@octokit/core@5.0.1) + '@octokit/plugin-retry': 6.0.1(@octokit/core@5.0.1) + '@octokit/plugin-throttling': 8.1.2(@octokit/core@5.0.1) + '@semantic-release/error': 4.0.0 + aggregate-error: 5.0.0 + debug: 4.3.4 + dir-glob: 3.0.1 + globby: 13.2.2 + http-proxy-agent: 7.0.0 + https-proxy-agent: 7.0.2 + issue-parser: 6.0.0 + lodash-es: 4.17.21 + mime: 3.0.0 + p-filter: 3.0.0 + semantic-release: 22.0.6(typescript@5.2.2) + url-join: 5.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@semantic-release/npm@11.0.0(semantic-release@22.0.6): + resolution: {integrity: sha512-ozNCiPUp14Xp2rgeY7j96yFTEhDncLSWOJr0IAUr888+ax6fH5xgYkNVv08vpkV8C5GIXBgnGd9coRiOCD6oqQ==} + engines: {node: ^18.17 || >=20} + peerDependencies: + semantic-release: '>=20.1.0' + dependencies: + '@semantic-release/error': 4.0.0 + aggregate-error: 5.0.0 + execa: 8.0.1 + fs-extra: 11.1.1 + lodash-es: 4.17.21 + nerf-dart: 1.0.0 + normalize-url: 8.0.0 + npm: 10.2.1 + rc: 1.2.8 + read-pkg: 8.1.0 + registry-auth-token: 5.0.2 + semantic-release: 22.0.6(typescript@5.2.2) + semver: 7.5.4 + tempy: 3.1.0 + dev: true + + /@semantic-release/release-notes-generator@12.0.0(semantic-release@22.0.6): + resolution: {integrity: sha512-m7Ds8ComP1KJgA2Lke2xMwE1TOOU40U7AzP4lT8hJ2tUAeicziPz/1GeDFmRkTOkMFlfHvE6kuvMkvU+mIzIDQ==} + engines: {node: ^18.17 || >=20.6.1} + peerDependencies: + semantic-release: '>=20.1.0' + dependencies: + conventional-changelog-angular: 7.0.0 + conventional-changelog-writer: 7.0.1 + conventional-commits-filter: 4.0.0 + conventional-commits-parser: 5.0.0 + debug: 4.3.4 + get-stream: 7.0.1 + import-from: 4.0.0 + into-stream: 7.0.0 + lodash-es: 4.17.21 + read-pkg-up: 10.1.0 + semantic-release: 22.0.6(typescript@5.2.2) + transitivePeerDependencies: + - supports-color + dev: true + + /@sinclair/typebox@0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + dev: true + + /@sindresorhus/is@3.1.2: + resolution: {integrity: sha512-JiX9vxoKMmu8Y3Zr2RVathBL1Cdu4Nt4MuNWemt1Nc06A0RAin9c5FArkhGsyMBWfCu4zj+9b+GxtjAnE4qqLQ==} + engines: {node: '>=10'} + dev: true + + /@sinonjs/commons@3.0.0: + resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} + dependencies: + type-detect: 4.0.8 + dev: true + + /@sinonjs/fake-timers@10.3.0: + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + dependencies: + '@sinonjs/commons': 3.0.0 + dev: true + + /@tsconfig/node10@1.0.9: + resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + dev: true + + /@tsconfig/node12@1.0.11: + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + dev: true + + /@tsconfig/node14@1.0.3: + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + dev: true + + /@tsconfig/node16@1.0.4: + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + dev: true + + /@types/babel__core@7.20.3: + resolution: {integrity: sha512-54fjTSeSHwfan8AyHWrKbfBWiEUrNTZsUwPTDSNaaP1QDQIZbeNUg3a59E9D+375MzUw/x1vx2/0F5LBz+AeYA==} + dependencies: + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 + '@types/babel__generator': 7.6.6 + '@types/babel__template': 7.4.3 + '@types/babel__traverse': 7.20.3 + dev: true + + /@types/babel__generator@7.6.6: + resolution: {integrity: sha512-66BXMKb/sUWbMdBNdMvajU7i/44RkrA3z/Yt1c7R5xejt8qh84iU54yUWCtm0QwGJlDcf/gg4zd/x4mpLAlb/w==} + dependencies: + '@babel/types': 7.23.0 + dev: true + + /@types/babel__template@7.4.3: + resolution: {integrity: sha512-ciwyCLeuRfxboZ4isgdNZi/tkt06m8Tw6uGbBSBgWrnnZGNXiEyM27xc/PjXGQLqlZ6ylbgHMnm7ccF9tCkOeQ==} + dependencies: + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 + dev: true + + /@types/babel__traverse@7.20.3: + resolution: {integrity: sha512-Lsh766rGEFbaxMIDH7Qa+Yha8cMVI3qAK6CHt3OR0YfxOIn5Z54iHiyDRycHrBqeIiqGa20Kpsv1cavfBKkRSw==} + dependencies: + '@babel/types': 7.23.0 + dev: true + + /@types/debug@4.1.10: + resolution: {integrity: sha512-tOSCru6s732pofZ+sMv9o4o3Zc+Sa8l3bxd/tweTQudFn06vAzb13ZX46Zi6m6EJ+RUbRTHvgQJ1gBtSgkaUYA==} + dependencies: + '@types/ms': 0.7.33 + dev: true + + /@types/graceful-fs@4.1.8: + resolution: {integrity: sha512-NhRH7YzWq8WiNKVavKPBmtLYZHxNY19Hh+az28O/phfp68CF45pMFud+ZzJ8ewnxnC5smIdF3dqFeiSUQ5I+pw==} + dependencies: + '@types/node': 20.8.10 + dev: true + + /@types/istanbul-lib-coverage@2.0.5: + resolution: {integrity: sha512-zONci81DZYCZjiLe0r6equvZut0b+dBRPBN5kBDjsONnutYNtJMoWQ9uR2RkL1gLG9NMTzvf+29e5RFfPbeKhQ==} + dev: true + + /@types/istanbul-lib-report@3.0.2: + resolution: {integrity: sha512-8toY6FgdltSdONav1XtUHl4LN1yTmLza+EuDazb/fEmRNCwjyqNVIQWs2IfC74IqjHkREs/nQ2FWq5kZU9IC0w==} + dependencies: + '@types/istanbul-lib-coverage': 2.0.5 + dev: true + + /@types/istanbul-reports@3.0.3: + resolution: {integrity: sha512-1nESsePMBlf0RPRffLZi5ujYh7IH1BWL4y9pr+Bn3cJBdxz+RTP8bUFljLz9HvzhhOSWKdyBZ4DIivdL6rvgZg==} + dependencies: + '@types/istanbul-lib-report': 3.0.2 + dev: true + + /@types/jest@29.5.7: + resolution: {integrity: sha512-HLyetab6KVPSiF+7pFcUyMeLsx25LDNDemw9mGsJBkai/oouwrjTycocSDYopMEwFhN2Y4s9oPyOCZNofgSt2g==} + dependencies: + expect: 29.7.0 + pretty-format: 29.7.0 + dev: true + + /@types/json-schema@7.0.14: + resolution: {integrity: sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==} + dev: true + + /@types/json5@0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + dev: true + + /@types/lodash@4.14.200: + resolution: {integrity: sha512-YI/M/4HRImtNf3pJgbF+W6FrXovqj+T+/HpENLTooK9PnkacBsDpeP3IpHab40CClUfhNmdM2WTNP2sa2dni5Q==} + dev: true + + /@types/ms@0.7.33: + resolution: {integrity: sha512-AuHIyzR5Hea7ij0P9q7vx7xu4z0C28ucwjAZC0ja7JhINyCnOw8/DnvAPQQ9TfOlCtZAmCERKQX9+o1mgQhuOQ==} + dev: true + + /@types/node@20.8.10: + resolution: {integrity: sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w==} + dependencies: + undici-types: 5.26.5 + dev: true + + /@types/normalize-package-data@2.4.3: + resolution: {integrity: sha512-ehPtgRgaULsFG8x0NeYJvmyH1hmlfsNLujHe9dQEia/7MAJYdzMSi19JtchUHjmBA6XC/75dK55mzZH+RyieSg==} + dev: true + + /@types/semver@7.5.4: + resolution: {integrity: sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==} + dev: true + + /@types/stack-utils@2.0.2: + resolution: {integrity: sha512-g7CK9nHdwjK2n0ymT2CW698FuWJRIx+RP6embAzZ2Qi8/ilIrA1Imt2LVSeHUzKvpoi7BhmmQcXz95eS0f2JXw==} + dev: true + + /@types/yargs-parser@21.0.2: + resolution: {integrity: sha512-5qcvofLPbfjmBfKaLfj/+f+Sbd6pN4zl7w7VSVI5uz7m9QZTuB2aZAa2uo1wHFBNN2x6g/SoTkXmd8mQnQF2Cw==} + dev: true + + /@types/yargs@17.0.29: + resolution: {integrity: sha512-nacjqA3ee9zRF/++a3FUY1suHTFKZeHba2n8WeDw9cCVdmzmHpIxyzOJBcpHvvEmS8E9KqWlSnWHUkOrkhWcvA==} + dependencies: + '@types/yargs-parser': 21.0.2 + dev: true + + /@typescript-eslint/eslint-plugin@6.9.1(@typescript-eslint/parser@6.9.1)(eslint@8.52.0)(typescript@5.2.2): + resolution: {integrity: sha512-w0tiiRc9I4S5XSXXrMHOWgHgxbrBn1Ro+PmiYhSg2ZVdxrAJtQgzU5o2m1BfP6UOn7Vxcc6152vFjQfmZR4xEg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 6.9.1(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/scope-manager': 6.9.1 + '@typescript-eslint/type-utils': 6.9.1(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/utils': 6.9.1(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.9.1 + debug: 4.3.4 + eslint: 8.52.0 + graphemer: 1.4.0 + ignore: 5.2.4 + natural-compare: 1.4.0 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.2.2) + typescript: 5.2.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser@6.9.1(eslint@8.52.0)(typescript@5.2.2): + resolution: {integrity: sha512-C7AK2wn43GSaCUZ9do6Ksgi2g3mwFkMO3Cis96kzmgudoVaKyt62yNzJOktP0HDLb/iO2O0n2lBOzJgr6Q/cyg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 6.9.1 + '@typescript-eslint/types': 6.9.1 + '@typescript-eslint/typescript-estree': 6.9.1(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.9.1 + debug: 4.3.4 + eslint: 8.52.0 + typescript: 5.2.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/scope-manager@6.9.1: + resolution: {integrity: sha512-38IxvKB6NAne3g/+MyXMs2Cda/Sz+CEpmm+KLGEM8hx/CvnSRuw51i8ukfwB/B/sESdeTGet1NH1Wj7I0YXswg==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.9.1 + '@typescript-eslint/visitor-keys': 6.9.1 + dev: true + + /@typescript-eslint/type-utils@6.9.1(eslint@8.52.0)(typescript@5.2.2): + resolution: {integrity: sha512-eh2oHaUKCK58qIeYp19F5V5TbpM52680sB4zNSz29VBQPTWIlE/hCj5P5B1AChxECe/fmZlspAWFuRniep1Skg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 6.9.1(typescript@5.2.2) + '@typescript-eslint/utils': 6.9.1(eslint@8.52.0)(typescript@5.2.2) + debug: 4.3.4 + eslint: 8.52.0 + ts-api-utils: 1.0.3(typescript@5.2.2) + typescript: 5.2.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/types@6.9.1: + resolution: {integrity: sha512-BUGslGOb14zUHOUmDB2FfT6SI1CcZEJYfF3qFwBeUrU6srJfzANonwRYHDpLBuzbq3HaoF2XL2hcr01c8f8OaQ==} + engines: {node: ^16.0.0 || >=18.0.0} + dev: true + + /@typescript-eslint/typescript-estree@6.9.1(typescript@5.2.2): + resolution: {integrity: sha512-U+mUylTHfcqeO7mLWVQ5W/tMLXqVpRv61wm9ZtfE5egz7gtnmqVIw9ryh0mgIlkKk9rZLY3UHygsBSdB9/ftyw==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 6.9.1 + '@typescript-eslint/visitor-keys': 6.9.1 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.2.2) + typescript: 5.2.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils@6.9.1(eslint@8.52.0)(typescript@5.2.2): + resolution: {integrity: sha512-L1T0A5nFdQrMVunpZgzqPL6y2wVreSyHhKGZryS6jrEN7bD9NplVAyMryUhXsQ4TWLnZmxc2ekar/lSGIlprCA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) + '@types/json-schema': 7.0.14 + '@types/semver': 7.5.4 + '@typescript-eslint/scope-manager': 6.9.1 + '@typescript-eslint/types': 6.9.1 + '@typescript-eslint/typescript-estree': 6.9.1(typescript@5.2.2) + eslint: 8.52.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/visitor-keys@6.9.1: + resolution: {integrity: sha512-MUaPUe/QRLEffARsmNfmpghuQkW436DvESW+h+M52w0coICHRfD6Np9/K6PdACwnrq1HmuLl+cSPZaJmeVPkSw==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.9.1 + eslint-visitor-keys: 3.4.3 + dev: true + + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: true + + /JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + dev: true + + /acorn-jsx@5.3.2(acorn@8.11.2): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.11.2 + dev: true + + /acorn-walk@8.3.0: + resolution: {integrity: sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==} + engines: {node: '>=0.4.0'} + dev: true + + /acorn@8.11.2: + resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /agent-base@7.1.0: + resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} + engines: {node: '>= 14'} + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + dev: true + + /aggregate-error@4.0.1: + resolution: {integrity: sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==} + engines: {node: '>=12'} + dependencies: + clean-stack: 4.2.0 + indent-string: 5.0.0 + dev: true + + /aggregate-error@5.0.0: + resolution: {integrity: sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==} + engines: {node: '>=18'} + dependencies: + clean-stack: 5.2.0 + indent-string: 5.0.0 + dev: true + + /ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + + /ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.21.3 + dev: true + + /ansi-escapes@6.2.0: + resolution: {integrity: sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==} + engines: {node: '>=14.16'} + dependencies: + type-fest: 3.13.1 + dev: true + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true + + /ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + dev: true + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + dev: true + + /ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + dev: true + + /ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + dev: true + + /ansicolors@0.3.2: + resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} + dev: true + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + + /arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + dev: true + + /argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + dependencies: + sprintf-js: 1.0.3 + dev: true + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true + + /argv-formatter@1.0.0: + resolution: {integrity: sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==} + dev: true + + /array-buffer-byte-length@1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + dependencies: + call-bind: 1.0.5 + is-array-buffer: 3.0.2 + dev: true + + /array-ify@1.0.0: + resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} + dev: true + + /array-includes@3.1.7: + resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + is-string: 1.0.7 + dev: true + + /array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true + + /array.prototype.findlastindex@1.2.3: + resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + get-intrinsic: 1.2.2 + dev: true + + /array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + dev: true + + /arraybuffer.prototype.slice@1.0.2: + resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + is-array-buffer: 3.0.2 + is-shared-array-buffer: 1.0.2 + dev: true + + /asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: false + + /available-typed-arrays@1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + dev: true + + /axios@1.5.1: + resolution: {integrity: sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==} + dependencies: + follow-redirects: 1.15.3 + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + dev: false + + /babel-jest@29.7.0(@babel/core@7.23.2): + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + dependencies: + '@babel/core': 7.23.2 + '@jest/transform': 29.7.0 + '@types/babel__core': 7.20.3 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.6.3(@babel/core@7.23.2) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + dependencies: + '@babel/helper-plugin-utils': 7.22.5 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-jest-hoist@29.6.3: + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/template': 7.22.15 + '@babel/types': 7.23.0 + '@types/babel__core': 7.20.3 + '@types/babel__traverse': 7.20.3 + dev: true + + /babel-plugin-polyfill-corejs2@0.4.6(@babel/core@7.23.2): + resolution: {integrity: sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/compat-data': 7.23.2 + '@babel/core': 7.23.2 + '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.2) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-polyfill-corejs3@0.8.6(@babel/core@7.23.2): + resolution: {integrity: sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.2) + core-js-compat: 3.33.2 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-polyfill-regenerator@0.5.3(@babel/core@7.23.2): + resolution: {integrity: sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.2) + transitivePeerDependencies: + - supports-color + dev: true + + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.2): + resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.2 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.2) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.2) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.2) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.2) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.2) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.2) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.2) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.2) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.2) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.2) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.2) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.2) + dev: true + + /babel-preset-jest@29.6.3(@babel/core@7.23.2): + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.2 + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.2) + dev: true + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /before-after-hook@2.2.3: + resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} + dev: true + + /big-integer@1.6.51: + resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} + engines: {node: '>=0.6'} + dev: true + + /bottleneck@2.19.5: + resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==} + dev: true + + /bplist-parser@0.2.0: + resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} + engines: {node: '>= 5.10.0'} + dependencies: + big-integer: 1.6.51 + dev: true + + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + dev: true + + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: true + + /browserslist@4.22.1: + resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001559 + electron-to-chromium: 1.4.571 + node-releases: 2.0.13 + update-browserslist-db: 1.0.13(browserslist@4.22.1) + dev: true + + /bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + dependencies: + node-int64: 0.4.0 + dev: true + + /buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + dev: true + + /builtins@5.0.1: + resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} + dependencies: + semver: 7.5.4 + dev: true + + /bundle-name@3.0.0: + resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} + engines: {node: '>=12'} + dependencies: + run-applescript: 5.0.0 + dev: true + + /call-bind@1.0.5: + resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + dependencies: + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + set-function-length: 1.1.1 + dev: true + + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + + /camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + dev: true + + /camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + dev: true + + /caniuse-lite@1.0.30001559: + resolution: {integrity: sha512-cPiMKZgqgkg5LY3/ntGeLFUpi6tzddBNS58A4tnTgQw1zON7u2sZMU7SzOeVH4tj20++9ggL+V6FDOFMTaFFYA==} + dev: true + + /cardinal@2.1.1: + resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==} + hasBin: true + dependencies: + ansicolors: 0.3.2 + redeyed: 2.1.1 + dev: true + + /chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: true + + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + + /chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: true + + /char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + dev: true + + /ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + dev: true + + /cjs-module-lexer@1.2.3: + resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} + dev: true + + /clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + dev: true + + /clean-stack@4.2.0: + resolution: {integrity: sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==} + engines: {node: '>=12'} + dependencies: + escape-string-regexp: 5.0.0 + dev: true + + /clean-stack@5.2.0: + resolution: {integrity: sha512-TyUIUJgdFnCISzG5zu3291TAsE77ddchd0bepon1VVQrKLGKFED4iXFEDQ24mIPdPBbyE16PK3F8MYE1CmcBEQ==} + engines: {node: '>=14.16'} + dependencies: + escape-string-regexp: 5.0.0 + dev: true + + /cli-table3@0.6.3: + resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==} + engines: {node: 10.* || >= 12.*} + dependencies: + string-width: 4.2.3 + optionalDependencies: + '@colors/colors': 1.5.0 + dev: true + + /cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + + /co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + dev: true + + /collect-v8-coverage@1.0.2: + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + dev: true + + /color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + dev: true + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + dev: true + + /color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + dev: true + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true + + /combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + dev: false + + /commander@11.1.0: + resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} + engines: {node: '>=16'} + dev: true + + /compare-func@2.0.0: + resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} + dependencies: + array-ify: 1.0.0 + dot-prop: 5.3.0 + dev: true + + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: true + + /config-chain@1.1.13: + resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} + dependencies: + ini: 1.3.8 + proto-list: 1.2.4 + dev: true + + /conventional-changelog-angular@7.0.0: + resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} + engines: {node: '>=16'} + dependencies: + compare-func: 2.0.0 + dev: true + + /conventional-changelog-writer@7.0.1: + resolution: {integrity: sha512-Uo+R9neH3r/foIvQ0MKcsXkX642hdm9odUp7TqgFS7BsalTcjzRlIfWZrZR1gbxOozKucaKt5KAbjW8J8xRSmA==} + engines: {node: '>=16'} + hasBin: true + dependencies: + conventional-commits-filter: 4.0.0 + handlebars: 4.7.8 + json-stringify-safe: 5.0.1 + meow: 12.1.1 + semver: 7.5.4 + split2: 4.2.0 + dev: true + + /conventional-commits-filter@4.0.0: + resolution: {integrity: sha512-rnpnibcSOdFcdclpFwWa+pPlZJhXE7l+XK04zxhbWrhgpR96h33QLz8hITTXbcYICxVr3HZFtbtUAQ+4LdBo9A==} + engines: {node: '>=16'} + dev: true + + /conventional-commits-parser@5.0.0: + resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==} + engines: {node: '>=16'} + hasBin: true + dependencies: + JSONStream: 1.3.5 + is-text-path: 2.0.0 + meow: 12.1.1 + split2: 4.2.0 + dev: true + + /convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + dev: true + + /core-js-compat@3.33.2: + resolution: {integrity: sha512-axfo+wxFVxnqf8RvxTzoAlzW4gRoacrHeoFlc9n0x50+7BEyZL/Rt3hicaED1/CEd7I6tPCPVUYcJwCMO5XUYw==} + dependencies: + browserslist: 4.22.1 + dev: true + + /core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + dev: true + + /cosmiconfig@8.3.6(typescript@5.2.2): + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + path-type: 4.0.0 + typescript: 5.2.2 + dev: true + + /create-jest@29.7.0(@types/node@20.8.10)(ts-node@10.9.1): + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@20.8.10)(ts-node@10.9.1) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + + /create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + dev: true + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + + /crypto-random-string@4.0.0: + resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} + engines: {node: '>=12'} + dependencies: + type-fest: 1.4.0 + dev: true + + /debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + dev: true + + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + + /dedent@1.5.1: + resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + dev: true + + /deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + dev: true + + /deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true + + /deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + dev: true + + /default-browser-id@3.0.0: + resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} + engines: {node: '>=12'} + dependencies: + bplist-parser: 0.2.0 + untildify: 4.0.0 + dev: true + + /default-browser@4.0.0: + resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} + engines: {node: '>=14.16'} + dependencies: + bundle-name: 3.0.0 + default-browser-id: 3.0.0 + execa: 7.2.0 + titleize: 3.0.0 + dev: true + + /define-data-property@1.1.1: + resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + dev: true + + /define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + dev: true + + /define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + has-property-descriptors: 1.0.1 + object-keys: 1.1.1 + dev: true + + /delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: false + + /deprecation@2.3.1: + resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} + dev: true + + /detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + dev: true + + /diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + + /diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + dev: true + + /dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: true + + /doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /dot-prop@5.3.0: + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} + dependencies: + is-obj: 2.0.0 + dev: true + + /dotenv@16.3.1: + resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} + engines: {node: '>=12'} + dev: true + + /dts-minify@0.3.2: + resolution: {integrity: sha512-X7SlplQ8TjJMNWwbPfD6Q0s+y2EZqImsrQDEvZcFc3QYy9vdwdUpZi+jos0BBT6c8EJn33F+uePHuofwkRCToA==} + dev: true + + /duplexer2@0.1.4: + resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} + dependencies: + readable-stream: 2.3.8 + dev: true + + /eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + dev: true + + /electron-to-chromium@1.4.571: + resolution: {integrity: sha512-Sc+VtKwKCDj3f/kLBjdyjMpNzoZsU6WuL/wFb6EH8USmHEcebxRXcRrVpOpayxd52tuey4RUDpUsw5OS5LhJqg==} + dev: true + + /emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} + dev: true + + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true + + /emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + dev: true + + /emojilib@2.4.0: + resolution: {integrity: sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==} + dev: true + + /env-ci@10.0.0: + resolution: {integrity: sha512-U4xcd/utDYFgMh0yWj07R1H6L5fwhVbmxBCpnL0DbVSDZVnsC82HONw0wxtxNkIAcua3KtbomQvIk5xFZGAQJw==} + engines: {node: ^18.17 || >=20.6.1} + dependencies: + execa: 8.0.1 + java-properties: 1.0.2 + dev: true + + /error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 + dev: true + + /es-abstract@1.22.3: + resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + arraybuffer.prototype.slice: 1.0.2 + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 + es-set-tostringtag: 2.0.2 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.2 + get-symbol-description: 1.0.0 + globalthis: 1.0.3 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + has-proto: 1.0.1 + has-symbols: 1.0.3 + hasown: 2.0.0 + internal-slot: 1.0.6 + is-array-buffer: 3.0.2 + is-callable: 1.2.7 + is-negative-zero: 2.0.2 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.2 + is-string: 1.0.7 + is-typed-array: 1.1.12 + is-weakref: 1.0.2 + object-inspect: 1.13.1 + object-keys: 1.1.1 + object.assign: 4.1.4 + regexp.prototype.flags: 1.5.1 + safe-array-concat: 1.0.1 + safe-regex-test: 1.0.0 + string.prototype.trim: 1.2.8 + string.prototype.trimend: 1.0.7 + string.prototype.trimstart: 1.0.7 + typed-array-buffer: 1.0.0 + typed-array-byte-length: 1.0.0 + typed-array-byte-offset: 1.0.0 + typed-array-length: 1.0.4 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.13 + dev: true + + /es-set-tostringtag@2.0.2: + resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + has-tostringtag: 1.0.0 + hasown: 2.0.0 + dev: true + + /es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + dependencies: + hasown: 2.0.0 + dev: true + + /es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + dev: true + + /esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 + dev: true + + /escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: true + + /escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + dev: true + + /escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + dev: true + + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + dev: true + + /escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + dev: true + + /eslint-config-prettier@9.0.0(eslint@8.52.0): + resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + dependencies: + eslint: 8.52.0 + dev: true + + /eslint-config-standard-with-typescript@39.1.1(@typescript-eslint/eslint-plugin@6.9.1)(eslint-plugin-import@2.29.0)(eslint-plugin-n@16.2.0)(eslint-plugin-promise@6.1.1)(eslint@8.52.0)(typescript@5.2.2): + resolution: {integrity: sha512-t6B5Ep8E4I18uuoYeYxINyqcXb2UbC0SOOTxRtBSt2JUs+EzeXbfe2oaiPs71AIdnoWhXDO2fYOHz8df3kV84A==} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^6.4.0 + eslint: ^8.0.1 + eslint-plugin-import: ^2.25.2 + eslint-plugin-n: '^15.0.0 || ^16.0.0 ' + eslint-plugin-promise: ^6.0.0 + typescript: '*' + dependencies: + '@typescript-eslint/eslint-plugin': 6.9.1(@typescript-eslint/parser@6.9.1)(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.9.1(eslint@8.52.0)(typescript@5.2.2) + eslint: 8.52.0 + eslint-config-standard: 17.1.0(eslint-plugin-import@2.29.0)(eslint-plugin-n@16.2.0)(eslint-plugin-promise@6.1.1)(eslint@8.52.0) + eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.9.1)(eslint@8.52.0) + eslint-plugin-n: 16.2.0(eslint@8.52.0) + eslint-plugin-promise: 6.1.1(eslint@8.52.0) + typescript: 5.2.2 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-config-standard@17.1.0(eslint-plugin-import@2.29.0)(eslint-plugin-n@16.2.0)(eslint-plugin-promise@6.1.1)(eslint@8.52.0): + resolution: {integrity: sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==} + engines: {node: '>=12.0.0'} + peerDependencies: + eslint: ^8.0.1 + eslint-plugin-import: ^2.25.2 + eslint-plugin-n: '^15.0.0 || ^16.0.0 ' + eslint-plugin-promise: ^6.0.0 + dependencies: + eslint: 8.52.0 + eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.9.1)(eslint@8.52.0) + eslint-plugin-n: 16.2.0(eslint@8.52.0) + eslint-plugin-promise: 6.1.1(eslint@8.52.0) + dev: true + + /eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + dependencies: + debug: 3.2.7 + is-core-module: 2.13.1 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.9.1)(eslint-import-resolver-node@0.3.9)(eslint@8.52.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 6.9.1(eslint@8.52.0)(typescript@5.2.2) + debug: 3.2.7 + eslint: 8.52.0 + eslint-import-resolver-node: 0.3.9 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-plugin-es-x@7.2.0(eslint@8.52.0): + resolution: {integrity: sha512-9dvv5CcvNjSJPqnS5uZkqb3xmbeqRLnvXKK7iI5+oK/yTusyc46zbBZKENGsOfojm/mKfszyZb+wNqNPAPeGXA==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '>=8' + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) + '@eslint-community/regexpp': 4.10.0 + eslint: 8.52.0 + dev: true + + /eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.9.1)(eslint@8.52.0): + resolution: {integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 6.9.1(eslint@8.52.0)(typescript@5.2.2) + 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: 8.52.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.9.1)(eslint-import-resolver-node@0.3.9)(eslint@8.52.0) + hasown: 2.0.0 + is-core-module: 2.13.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.7 + object.groupby: 1.0.1 + object.values: 1.1.7 + semver: 6.3.1 + tsconfig-paths: 3.14.2 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-plugin-n@16.2.0(eslint@8.52.0): + resolution: {integrity: sha512-AQER2jEyQOt1LG6JkGJCCIFotzmlcCZFur2wdKrp1JX2cNotC7Ae0BcD/4lLv3lUAArM9uNS8z/fsvXTd0L71g==} + engines: {node: '>=16.0.0'} + peerDependencies: + eslint: '>=7.0.0' + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) + builtins: 5.0.1 + eslint: 8.52.0 + eslint-plugin-es-x: 7.2.0(eslint@8.52.0) + get-tsconfig: 4.7.2 + ignore: 5.2.4 + is-core-module: 2.13.1 + minimatch: 3.1.2 + resolve: 1.22.8 + semver: 7.5.4 + dev: true + + /eslint-plugin-prettier@5.0.1(eslint-config-prettier@9.0.0)(eslint@8.52.0)(prettier@3.0.3): + resolution: {integrity: sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '*' + prettier: '>=3.0.0' + peerDependenciesMeta: + '@types/eslint': + optional: true + eslint-config-prettier: + optional: true + dependencies: + eslint: 8.52.0 + eslint-config-prettier: 9.0.0(eslint@8.52.0) + prettier: 3.0.3 + prettier-linter-helpers: 1.0.0 + synckit: 0.8.5 + dev: true + + /eslint-plugin-promise@6.1.1(eslint@8.52.0): + resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + eslint: 8.52.0 + dev: true + + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /eslint@8.52.0: + resolution: {integrity: sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 2.1.2 + '@eslint/js': 8.52.0 + '@humanwhocodes/config-array': 0.11.13 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + 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.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.23.0 + graphemer: 1.4.0 + ignore: 5.2.4 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + 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 + transitivePeerDependencies: + - supports-color + dev: true + + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.11.2 + acorn-jsx: 5.3.2(acorn@8.11.2) + eslint-visitor-keys: 3.4.3 + dev: true + + /esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: true + + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true + + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: true + + /execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + dev: true + + /execa@7.2.0: + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 4.3.1 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.1.0 + onetime: 6.0.0 + signal-exit: 3.0.7 + strip-final-newline: 3.0.0 + dev: true + + /execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.1.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + dev: true + + /exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + dev: true + + /expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + 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 + dev: true + + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true + + /fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + dev: true + + /fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true + + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true + + /fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: true + + /fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + dependencies: + reusify: 1.0.4 + dev: true + + /fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + dependencies: + bser: 2.1.1 + dev: true + + /figures@2.0.0: + resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} + engines: {node: '>=4'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + + /figures@6.0.1: + resolution: {integrity: sha512-0oY/olScYD4IhQ8u//gCPA4F3mlTn2dacYmiDm/mbDQvpmLjV4uH+zhsQ5IyXRyvqkvtUkXkNdGvg5OFJTCsuQ==} + engines: {node: '>=18'} + dependencies: + is-unicode-supported: 2.0.0 + dev: true + + /file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.1.1 + dev: true + + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + + /find-up@2.1.0: + resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} + engines: {node: '>=4'} + dependencies: + locate-path: 2.0.0 + dev: true + + /find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: true + + /find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + + /find-up@6.3.0: + resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + locate-path: 7.2.0 + path-exists: 5.0.0 + dev: true + + /find-versions@5.1.0: + resolution: {integrity: sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==} + engines: {node: '>=12'} + dependencies: + semver-regex: 4.0.5 + dev: true + + /flat-cache@3.1.1: + resolution: {integrity: sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==} + engines: {node: '>=12.0.0'} + dependencies: + flatted: 3.2.9 + keyv: 4.5.4 + rimraf: 3.0.2 + dev: true + + /flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + dev: true + + /follow-redirects@1.15.3: + resolution: {integrity: sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dev: false + + /for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + dev: true + + /foreground-child@3.1.1: + resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + engines: {node: '>=14'} + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + dev: true + + /form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: false + + /from2@2.3.0: + resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==} + dependencies: + inherits: 2.0.4 + readable-stream: 2.3.8 + dev: true + + /fs-extra@11.1.1: + resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} + engines: {node: '>=14.14'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.0 + dev: true + + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true + + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: true + + /function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + functions-have-names: 1.2.3 + dev: true + + /functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: true + + /gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + dev: true + + /get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: true + + /get-intrinsic@1.2.2: + resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + dependencies: + function-bind: 1.1.2 + has-proto: 1.0.1 + has-symbols: 1.0.3 + hasown: 2.0.0 + dev: true + + /get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + dev: true + + /get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + dev: true + + /get-stream@7.0.1: + resolution: {integrity: sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ==} + engines: {node: '>=16'} + dev: true + + /get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + dev: true + + /get-symbol-description@1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + dev: true + + /get-tsconfig@4.7.2: + resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} + dependencies: + resolve-pkg-maps: 1.0.0 + dev: true + + /git-log-parser@1.2.0: + resolution: {integrity: sha512-rnCVNfkTL8tdNryFuaY0fYiBWEBcgF748O6ZI61rslBvr2o7U65c2/6npCRqH40vuAhtgtDiqLTJjBVdrejCzA==} + dependencies: + argv-formatter: 1.0.0 + spawn-error-forwarder: 1.0.0 + split2: 1.0.0 + stream-combiner2: 1.1.1 + through2: 2.0.5 + traverse: 0.6.7 + dev: true + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob@10.3.10: + resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + dependencies: + foreground-child: 3.1.1 + jackspeak: 2.3.6 + minimatch: 9.0.3 + minipass: 7.0.4 + path-scurry: 1.10.1 + dev: true + + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: true + + /globals@13.23.0: + resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + + /globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.1 + dev: true + + /globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.1 + ignore: 5.2.4 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /globby@13.2.2: + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + dir-glob: 3.0.1 + fast-glob: 3.3.1 + ignore: 5.2.4 + merge2: 1.4.1 + slash: 4.0.0 + dev: true + + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.2 + dev: true + + /graceful-fs@4.2.10: + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + dev: true + + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + dev: true + + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: true + + /handlebars@4.7.8: + resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} + engines: {node: '>=0.4.7'} + hasBin: true + dependencies: + minimist: 1.2.8 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + optionalDependencies: + uglify-js: 3.17.4 + dev: true + + /has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: true + + /has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + dev: true + + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + + /has-property-descriptors@1.0.1: + resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} + dependencies: + get-intrinsic: 1.2.2 + dev: true + + /has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + dev: true + + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + dev: true + + /has-tostringtag@1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: true + + /hook-std@3.0.0: + resolution: {integrity: sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /hosted-git-info@7.0.1: + resolution: {integrity: sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==} + engines: {node: ^16.14.0 || >=18.0.0} + dependencies: + lru-cache: 10.0.1 + dev: true + + /html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + dev: true + + /http-proxy-agent@7.0.0: + resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.0 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /https-proxy-agent@7.0.2: + resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.0 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + dev: true + + /human-signals@4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} + dev: true + + /human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + dev: true + + /ignore@5.2.4: + resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + engines: {node: '>= 4'} + dev: true + + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true + + /import-from@4.0.0: + resolution: {integrity: sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==} + engines: {node: '>=12.2'} + dev: true + + /import-local@3.1.0: + resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} + engines: {node: '>=8'} + hasBin: true + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + dev: true + + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: true + + /indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + dev: true + + /indent-string@5.0.0: + resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} + engines: {node: '>=12'} + dev: true + + /inflector-js@1.0.1: + resolution: {integrity: sha512-GYvCqr8mGKPoYH+08e76PV8JoIygIVC9Jxw2jA5QjBm/mK+mJqGdzEcs3L5nugnvP03yHajXpBRMRgHx0e770A==} + dev: true + + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true + + /ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + dev: true + + /internal-slot@1.0.6: + resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + hasown: 2.0.0 + side-channel: 1.0.4 + dev: true + + /into-stream@7.0.0: + resolution: {integrity: sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw==} + engines: {node: '>=12'} + dependencies: + from2: 2.3.0 + p-is-promise: 3.0.0 + dev: true + + /is-array-buffer@3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-typed-array: 1.1.12 + dev: true + + /is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + dev: true + + /is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + dependencies: + has-bigints: 1.0.2 + dev: true + + /is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + has-tostringtag: 1.0.0 + dev: true + + /is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + dev: true + + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + dependencies: + hasown: 2.0.0 + dev: true + + /is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + dev: true + + /is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + dev: true + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true + + /is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + dev: true + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + dependencies: + is-docker: 3.0.0 + dev: true + + /is-negative-zero@2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} + dev: true + + /is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /is-obj@2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + dev: true + + /is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: true + + /is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + dev: true + + /is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + has-tostringtag: 1.0.0 + dev: true + + /is-shared-array-buffer@1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + dependencies: + call-bind: 1.0.5 + dev: true + + /is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + dev: true + + /is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /is-text-path@2.0.0: + resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} + engines: {node: '>=8'} + dependencies: + text-extensions: 2.4.0 + dev: true + + /is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.13 + dev: true + + /is-unicode-supported@2.0.0: + resolution: {integrity: sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==} + engines: {node: '>=18'} + dev: true + + /is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + dependencies: + call-bind: 1.0.5 + dev: true + + /is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + dev: true + + /isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + dev: true + + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: true + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + + /issue-parser@6.0.0: + resolution: {integrity: sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==} + engines: {node: '>=10.13'} + dependencies: + lodash.capitalize: 4.2.1 + lodash.escaperegexp: 4.1.2 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.uniqby: 4.7.0 + dev: true + + /istanbul-lib-coverage@3.2.0: + resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} + engines: {node: '>=8'} + dev: true + + /istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + dependencies: + '@babel/core': 7.23.2 + '@babel/parser': 7.23.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /istanbul-lib-instrument@6.0.1: + resolution: {integrity: sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==} + engines: {node: '>=10'} + dependencies: + '@babel/core': 7.23.2 + '@babel/parser': 7.23.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + dev: true + + /istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + dependencies: + istanbul-lib-coverage: 3.2.0 + make-dir: 4.0.0 + supports-color: 7.2.0 + dev: true + + /istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + dependencies: + debug: 4.3.4 + istanbul-lib-coverage: 3.2.0 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + dev: true + + /istanbul-reports@3.1.6: + resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} + engines: {node: '>=8'} + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + dev: true + + /jackspeak@2.3.6: + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + engines: {node: '>=14'} + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + dev: true + + /java-properties@1.0.2: + resolution: {integrity: sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==} + engines: {node: '>= 0.6.0'} + dev: true + + /jest-changed-files@29.7.0: + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + execa: 5.1.1 + jest-util: 29.7.0 + p-limit: 3.1.0 + dev: true + + /jest-circus@29.7.0: + resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.8.10 + chalk: 4.1.2 + co: 4.6.0 + dedent: 1.5.1 + is-generator-fn: 2.1.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.4 + slash: 3.0.0 + stack-utils: 2.0.6 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + dev: true + + /jest-cli@29.7.0(@types/node@20.8.10)(ts-node@10.9.1): + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.1) + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@20.8.10)(ts-node@10.9.1) + exit: 0.1.2 + import-local: 3.1.0 + jest-config: 29.7.0(@types/node@20.8.10)(ts-node@10.9.1) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + + /jest-config@29.7.0(@types/node@20.8.10)(ts-node@10.9.1): + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} + 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 + dependencies: + '@babel/core': 7.23.2 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.8.10 + babel-jest: 29.7.0(@babel/core@7.23.2) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + 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.5 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + ts-node: 10.9.1(@types/node@20.8.10)(typescript@5.2.2) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + dev: true + + /jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + dev: true + + /jest-docblock@29.7.0: + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + detect-newline: 3.1.0 + dev: true + + /jest-each@29.7.0: + resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + jest-get-type: 29.6.3 + jest-util: 29.7.0 + pretty-format: 29.7.0 + dev: true + + /jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.8.10 + jest-mock: 29.7.0 + jest-util: 29.7.0 + dev: true + + /jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + + /jest-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@types/graceful-fs': 4.1.8 + '@types/node': 20.8.10 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + jest-worker: 29.7.0 + micromatch: 4.0.5 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /jest-leak-detector@29.7.0: + resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + dev: true + + /jest-matcher-utils@29.7.0: + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + dev: true + + /jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/code-frame': 7.22.13 + '@jest/types': 29.6.3 + '@types/stack-utils': 2.0.2 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.5 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.6 + dev: true + + /jest-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@types/node': 20.8.10 + jest-util: 29.7.0 + dev: true + + /jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + dependencies: + jest-resolve: 29.7.0 + dev: true + + /jest-regex-util@29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + + /jest-resolve-dependencies@29.7.0: + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + jest-regex-util: 29.6.3 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-resolve@29.7.0: + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) + jest-util: 29.7.0 + jest-validate: 29.7.0 + resolve: 1.22.8 + resolve.exports: 2.0.2 + slash: 3.0.0 + dev: true + + /jest-runner@29.7.0: + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + 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': 20.8.10 + chalk: 4.1.2 + emittery: 0.13.1 + graceful-fs: 4.2.11 + 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 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-runtime@29.7.0: + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + 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': 20.8.10 + chalk: 4.1.2 + cjs-module-lexer: 1.2.3 + collect-v8-coverage: 1.0.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + 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 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-snapshot@29.7.0: + resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/core': 7.23.2 + '@babel/generator': 7.23.0 + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.23.2) + '@babel/types': 7.23.0 + '@jest/expect-utils': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.2) + chalk: 4.1.2 + expect: 29.7.0 + graceful-fs: 4.2.11 + 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.4 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@types/node': 20.8.10 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + dev: true + + /jest-validate@29.7.0: + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.6.3 + leven: 3.1.0 + pretty-format: 29.7.0 + dev: true + + /jest-watcher@29.7.0: + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.8.10 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.13.1 + jest-util: 29.7.0 + string-length: 4.0.2 + dev: true + + /jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@types/node': 20.8.10 + jest-util: 29.7.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 + dev: true + + /jest@29.7.0(@types/node@20.8.10)(ts-node@10.9.1): + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.1) + '@jest/types': 29.6.3 + import-local: 3.1.0 + jest-cli: 29.7.0(@types/node@20.8.10)(ts-node@10.9.1) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: true + + /js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + dev: true + + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: true + + /jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + dev: true + + /jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: true + + /json-parse-better-errors@1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + dev: true + + /json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: true + + /json-parse-even-better-errors@3.0.0: + resolution: {integrity: sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true + + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true + + /json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true + + /json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + dev: true + + /json-typescript@1.1.2: + resolution: {integrity: sha512-Np07MUsYMKbB0nNlw/MMIRjUK7ehO48LA4FsrzrhCfTUxMKbvOBAo0sc0b4nQ80ge9d32sModCunCgoyUojgUA==} + dev: true + + /json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: true + + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + dev: true + + /jsonapi-typescript@0.1.3: + resolution: {integrity: sha512-uPcPS01GeM+4HIyn18s7l1yD2S3uLZy2TX1UkQffCM0bLb3TMwudXUyVXPHTMZ4vdZT8MqKqN2vjB5PogTAdFQ==} + dependencies: + json-typescript: 1.1.2 + dev: true + + /jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.0 + optionalDependencies: + graceful-fs: 4.2.11 + dev: true + + /jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + dev: true + + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 + dev: true + + /kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + dev: true + + /leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + dev: true + + /levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true + + /lines-and-columns@2.0.3: + resolution: {integrity: sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /load-json-file@4.0.0: + resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} + engines: {node: '>=4'} + dependencies: + graceful-fs: 4.2.11 + parse-json: 4.0.0 + pify: 3.0.0 + strip-bom: 3.0.0 + dev: true + + /locate-path@2.0.0: + resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} + engines: {node: '>=4'} + dependencies: + p-locate: 2.0.0 + path-exists: 3.0.0 + dev: true + + /locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + dependencies: + p-locate: 4.1.0 + dev: true + + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: true + + /locate-path@7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + p-locate: 6.0.0 + dev: true + + /lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + dev: true + + /lodash.capitalize@4.2.1: + resolution: {integrity: sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==} + dev: true + + /lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + dev: true + + /lodash.escaperegexp@4.1.2: + resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==} + dev: true + + /lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + dev: true + + /lodash.isstring@4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + dev: true + + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true + + /lodash.uniqby@4.7.0: + resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==} + dev: true + + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: true + + /lru-cache@10.0.1: + resolution: {integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==} + engines: {node: 14 || >=16.14} + dev: true + + /lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 + dev: true + + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + dev: true + + /make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + dependencies: + semver: 7.5.4 + dev: true + + /make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + dev: true + + /makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + dependencies: + tmpl: 1.0.5 + dev: true + + /marked-terminal@6.0.0(marked@9.1.4): + resolution: {integrity: sha512-6rruICvqRfA4N+Mvdc0UyDbLA0A0nI5omtARIlin3P2F+aNc3EbW91Rd9HTuD0v9qWyHmNIu8Bt40gAnPfldsg==} + engines: {node: '>=16.0.0'} + peerDependencies: + marked: '>=1 <10' + dependencies: + ansi-escapes: 6.2.0 + cardinal: 2.1.1 + chalk: 5.3.0 + cli-table3: 0.6.3 + marked: 9.1.4 + node-emoji: 2.1.0 + supports-hyperlinks: 3.0.0 + dev: true + + /marked@9.1.4: + resolution: {integrity: sha512-Mq83CCaClhXqhf8sLQ57c1unNelHEuFadK36ga+GeXR4FeT/5ssaC5PaCRVqMA74VYorzYRqdAaxxteIanh3Kw==} + engines: {node: '>= 16'} + hasBin: true + dev: true + + /meow@12.1.1: + resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} + engines: {node: '>=16.10'} + dev: true + + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + + /micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: true + + /mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + dev: false + + /mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: false + + /mime@3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} + hasBin: true + dev: true + + /mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + dev: true + + /mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + dev: true + + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: true + + /minimize-js@1.4.0: + resolution: {integrity: sha512-mfbzIryB+Mdrv8sbBbrco/cKDpV+B+RwZ5zu8HBllsZwTIIPA3kdAxZ5133nDIJSLJp3DKb36rKuntgVuDyMgg==} + hasBin: true + dependencies: + commander: 11.1.0 + dts-minify: 0.3.2 + esbuild: 0.18.20 + glob: 10.3.10 + pretty-bytes: 6.1.1 + progress-barjs: 2.2.1 + tslib: 2.6.2 + dev: true + + /minipass@7.0.4: + resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} + engines: {node: '>=16 || 14 >=14.17'} + dev: true + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: true + + /natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true + + /neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + dev: true + + /nerf-dart@1.0.0: + resolution: {integrity: sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==} + dev: true + + /node-emoji@2.1.0: + resolution: {integrity: sha512-tcsBm9C6FmPN5Wo7OjFi9lgMyJjvkAeirmjR/ax8Ttfqy4N8PoFic26uqFTIgayHPNI5FH4ltUvfh9kHzwcK9A==} + dependencies: + '@sindresorhus/is': 3.1.2 + char-regex: 1.0.2 + emojilib: 2.4.0 + skin-tone: 2.0.0 + dev: true + + /node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + dev: true + + /node-releases@2.0.13: + resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + dev: true + + /normalize-package-data@6.0.0: + resolution: {integrity: sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==} + engines: {node: ^16.14.0 || >=18.0.0} + dependencies: + hosted-git-info: 7.0.1 + is-core-module: 2.13.1 + semver: 7.5.4 + validate-npm-package-license: 3.0.4 + dev: true + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + + /normalize-url@8.0.0: + resolution: {integrity: sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==} + engines: {node: '>=14.16'} + dev: true + + /npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + dependencies: + path-key: 3.1.1 + dev: true + + /npm-run-path@5.1.0: + resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + path-key: 4.0.0 + dev: true + + /npm@10.2.1: + resolution: {integrity: sha512-YVh8UDw5lR2bPS6rrS0aPG9ZXKDWeaeO/zMoZMp7g3Thrho9cqEnSrcvg4Pic2QhDAQptAynx5KgrPgCSRscqg==} + engines: {node: ^18.17.0 || >=20.5.0} + hasBin: true + dev: true + bundledDependencies: + - '@isaacs/string-locale-compare' + - '@npmcli/arborist' + - '@npmcli/config' + - '@npmcli/fs' + - '@npmcli/map-workspaces' + - '@npmcli/package-json' + - '@npmcli/promise-spawn' + - '@npmcli/run-script' + - '@sigstore/tuf' + - abbrev + - archy + - cacache + - chalk + - ci-info + - cli-columns + - cli-table3 + - columnify + - fastest-levenshtein + - fs-minipass + - glob + - graceful-fs + - hosted-git-info + - ini + - init-package-json + - is-cidr + - json-parse-even-better-errors + - libnpmaccess + - libnpmdiff + - libnpmexec + - libnpmfund + - libnpmhook + - libnpmorg + - libnpmpack + - libnpmpublish + - libnpmsearch + - libnpmteam + - libnpmversion + - make-fetch-happen + - minimatch + - minipass + - minipass-pipeline + - ms + - node-gyp + - nopt + - normalize-package-data + - npm-audit-report + - npm-install-checks + - npm-package-arg + - npm-pick-manifest + - npm-profile + - npm-registry-fetch + - npm-user-validate + - npmlog + - p-map + - pacote + - parse-conflict-json + - proc-log + - qrcode-terminal + - read + - semver + - spdx-expression-parse + - ssri + - strip-ansi + - supports-color + - tar + - text-table + - tiny-relative-date + - treeverse + - validate-npm-package-name + - which + - write-file-atomic + + /object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + dev: true + + /object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: true + + /object.assign@4.1.4: + resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: true + + /object.fromentries@2.0.7: + resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /object.groupby@1.0.1: + resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + dev: true + + /object.values@1.1.7: + resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: true + + /onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 + dev: true + + /onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + dependencies: + mimic-fn: 4.0.0 + dev: true + + /open@9.1.0: + resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} + engines: {node: '>=14.16'} + dependencies: + default-browser: 4.0.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 2.2.0 + dev: true + + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /p-each-series@3.0.0: + resolution: {integrity: sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==} + engines: {node: '>=12'} + dev: true + + /p-filter@3.0.0: + resolution: {integrity: sha512-QtoWLjXAW++uTX67HZQz1dbTpqBfiidsB6VtQUC9iR85S120+s0T5sO6s+B5MLzFcZkrEd/DGMmCjR+f2Qpxwg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + p-map: 5.5.0 + dev: true + + /p-is-promise@3.0.0: + resolution: {integrity: sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==} + engines: {node: '>=8'} + dev: true + + /p-limit@1.3.0: + resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} + engines: {node: '>=4'} + dependencies: + p-try: 1.0.0 + dev: true + + /p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 + dev: true + + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: true + + /p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + yocto-queue: 1.0.0 + dev: true + + /p-locate@2.0.0: + resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} + engines: {node: '>=4'} + dependencies: + p-limit: 1.3.0 + dev: true + + /p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + dev: true + + /p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: true + + /p-locate@6.0.0: + resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + p-limit: 4.0.0 + dev: true + + /p-map@5.5.0: + resolution: {integrity: sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==} + engines: {node: '>=12'} + dependencies: + aggregate-error: 4.0.1 + dev: true + + /p-reduce@2.1.0: + resolution: {integrity: sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==} + engines: {node: '>=8'} + dev: true + + /p-reduce@3.0.0: + resolution: {integrity: sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==} + engines: {node: '>=12'} + dev: true + + /p-try@1.0.0: + resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} + engines: {node: '>=4'} + dev: true + + /p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: true + + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: true + + /parse-json@4.0.0: + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} + engines: {node: '>=4'} + dependencies: + error-ex: 1.3.2 + json-parse-better-errors: 1.0.2 + dev: true + + /parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': 7.22.13 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + dev: true + + /parse-json@7.1.1: + resolution: {integrity: sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==} + engines: {node: '>=16'} + dependencies: + '@babel/code-frame': 7.22.13 + error-ex: 1.3.2 + json-parse-even-better-errors: 3.0.0 + lines-and-columns: 2.0.3 + type-fest: 3.13.1 + dev: true + + /path-exists@3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + dev: true + + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true + + /path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: true + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + + /path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + dev: true + + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + + /path-scurry@1.10.1: + resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + lru-cache: 10.0.1 + minipass: 7.0.4 + dev: true + + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true + + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true + + /pify@3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} + dev: true + + /pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + dev: true + + /pkg-conf@2.1.0: + resolution: {integrity: sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==} + engines: {node: '>=4'} + dependencies: + find-up: 2.1.0 + load-json-file: 4.0.0 + dev: true + + /pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + dev: true + + /prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: true + + /prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + dependencies: + fast-diff: 1.3.0 + dev: true + + /prettier@3.0.3: + resolution: {integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==} + engines: {node: '>=14'} + hasBin: true + dev: true + + /pretty-bytes@6.1.1: + resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} + engines: {node: ^14.13.1 || >=16.0.0} + dev: true + + /pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.2.0 + dev: true + + /process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + dev: true + + /progress-barjs@2.2.1: + resolution: {integrity: sha512-pgNtlw+gZ/nqQJDYKUbAnyhZPdyiBoxB3gzXcmF7Cl2JhD8I87Z501T3rr97OHoSzx3JFfNcY9ANiAVPF4qPxA==} + dev: true + + /prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + dev: true + + /proto-list@1.2.4: + resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} + dev: true + + /proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + dev: false + + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + dev: true + + /pure-rand@6.0.4: + resolution: {integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==} + dev: true + + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + + /rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + dev: true + + /react-is@18.2.0: + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + dev: true + + /read-pkg-up@10.1.0: + resolution: {integrity: sha512-aNtBq4jR8NawpKJQldrQcSW9y/d+KWH4v24HWkHljOZ7H0av+YTGANBzRh9A5pw7v/bLVsLVPpOhJ7gHNVy8lA==} + engines: {node: '>=16'} + dependencies: + find-up: 6.3.0 + read-pkg: 8.1.0 + type-fest: 4.6.0 + dev: true + + /read-pkg@8.1.0: + resolution: {integrity: sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ==} + engines: {node: '>=16'} + dependencies: + '@types/normalize-package-data': 2.4.3 + normalize-package-data: 6.0.0 + parse-json: 7.1.1 + type-fest: 4.6.0 + dev: true + + /readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + dev: true + + /redeyed@2.1.1: + resolution: {integrity: sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==} + dependencies: + esprima: 4.0.1 + dev: true + + /regenerate-unicode-properties@10.1.1: + resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} + engines: {node: '>=4'} + dependencies: + regenerate: 1.4.2 + dev: true + + /regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + dev: true + + /regenerator-runtime@0.14.0: + resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} + dev: true + + /regenerator-transform@0.15.2: + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + dependencies: + '@babel/runtime': 7.23.2 + dev: true + + /regexp.prototype.flags@1.5.1: + resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + set-function-name: 2.0.1 + dev: true + + /regexpu-core@5.3.2: + resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} + engines: {node: '>=4'} + dependencies: + '@babel/regjsgen': 0.8.0 + regenerate: 1.4.2 + regenerate-unicode-properties: 10.1.1 + regjsparser: 0.9.1 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.1.0 + dev: true + + /registry-auth-token@5.0.2: + resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==} + engines: {node: '>=14'} + dependencies: + '@pnpm/npm-conf': 2.2.2 + dev: true + + /regjsparser@0.9.1: + resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} + hasBin: true + dependencies: + jsesc: 0.5.0 + dev: true + + /require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: true + + /resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + dependencies: + resolve-from: 5.0.0 + dev: true + + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true + + /resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + dev: true + + /resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + dev: true + + /resolve.exports@2.0.2: + resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} + engines: {node: '>=10'} + dev: true + + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + + /run-applescript@5.0.0: + resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} + engines: {node: '>=12'} + dependencies: + execa: 5.1.1 + dev: true + + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true + + /safe-array-concat@1.0.1: + resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + has-symbols: 1.0.3 + isarray: 2.0.5 + dev: true + + /safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + dev: true + + /safe-regex-test@1.0.0: + resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-regex: 1.1.4 + dev: true + + /semantic-release@22.0.6(typescript@5.2.2): + resolution: {integrity: sha512-SxgpGR6b52gaKrb42nnaZWa2h5ig06XlloS3NjUN4W/lRBB8SId4JMaZaxN6Ncb+Ii2Uxd8WO6uvshTSSf8XRg==} + engines: {node: ^18.17 || >=20.6.1} + hasBin: true + dependencies: + '@semantic-release/commit-analyzer': 11.0.0(semantic-release@22.0.6) + '@semantic-release/error': 4.0.0 + '@semantic-release/github': 9.2.1(semantic-release@22.0.6) + '@semantic-release/npm': 11.0.0(semantic-release@22.0.6) + '@semantic-release/release-notes-generator': 12.0.0(semantic-release@22.0.6) + aggregate-error: 5.0.0 + cosmiconfig: 8.3.6(typescript@5.2.2) + debug: 4.3.4 + env-ci: 10.0.0 + execa: 8.0.1 + figures: 6.0.1 + find-versions: 5.1.0 + get-stream: 6.0.1 + git-log-parser: 1.2.0 + hook-std: 3.0.0 + hosted-git-info: 7.0.1 + lodash-es: 4.17.21 + marked: 9.1.4 + marked-terminal: 6.0.0(marked@9.1.4) + micromatch: 4.0.5 + p-each-series: 3.0.0 + p-reduce: 3.0.0 + read-pkg-up: 10.1.0 + resolve-from: 5.0.0 + semver: 7.5.4 + semver-diff: 4.0.0 + signale: 1.4.0 + yargs: 17.7.2 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /semver-diff@4.0.0: + resolution: {integrity: sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==} + engines: {node: '>=12'} + dependencies: + semver: 7.5.4 + dev: true + + /semver-regex@4.0.5: + resolution: {integrity: sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==} + engines: {node: '>=12'} + dev: true + + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + dev: true + + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + + /set-function-length@1.1.1: + resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + dev: true + + /set-function-name@2.0.1: + resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.1 + dev: true + + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + dev: true + + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true + + /side-channel@1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + object-inspect: 1.13.1 + dev: true + + /signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: true + + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + dev: true + + /signale@1.4.0: + resolution: {integrity: sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==} + engines: {node: '>=6'} + dependencies: + chalk: 2.4.2 + figures: 2.0.0 + pkg-conf: 2.1.0 + dev: true + + /sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + dev: true + + /skin-tone@2.0.0: + resolution: {integrity: sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==} + engines: {node: '>=8'} + dependencies: + unicode-emoji-modifier-base: 1.0.0 + dev: true + + /slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: true + + /slash@4.0.0: + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} + dev: true + + /source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: true + + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: true + + /spawn-error-forwarder@1.0.0: + resolution: {integrity: sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==} + dev: true + + /spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.16 + dev: true + + /spdx-exceptions@2.3.0: + resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} + dev: true + + /spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + dependencies: + spdx-exceptions: 2.3.0 + spdx-license-ids: 3.0.16 + dev: true + + /spdx-license-ids@3.0.16: + resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} + dev: true + + /split2@1.0.0: + resolution: {integrity: sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==} + dependencies: + through2: 2.0.5 + dev: true + + /split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + dev: true + + /sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + dev: true + + /stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + dependencies: + escape-string-regexp: 2.0.0 + dev: true + + /stream-combiner2@1.1.1: + resolution: {integrity: sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==} + dependencies: + duplexer2: 0.1.4 + readable-stream: 2.3.8 + dev: true + + /string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + dependencies: + char-regex: 1.0.2 + strip-ansi: 6.0.1 + dev: true + + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: true + + /string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + dev: true + + /string.prototype.trim@1.2.8: + resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /string.prototype.trimend@1.0.7: + resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /string.prototype.trimstart@1.0.7: + resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + dependencies: + safe-buffer: 5.1.2 + dev: true + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + dev: true + + /strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + dependencies: + ansi-regex: 5.0.1 + dev: true + + /strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: true + + /strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + dev: true + + /strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + dev: true + + /strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + dev: true + + /strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + dev: true + + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true + + /supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + dev: true + + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: true + + /supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + dependencies: + has-flag: 4.0.0 + dev: true + + /supports-hyperlinks@3.0.0: + resolution: {integrity: sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==} + engines: {node: '>=14.18'} + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + dev: true + + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + + /synckit@0.8.5: + resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} + engines: {node: ^14.18.0 || >=16.0.0} + dependencies: + '@pkgr/utils': 2.4.2 + tslib: 2.6.2 + dev: true + + /temp-dir@3.0.0: + resolution: {integrity: sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==} + engines: {node: '>=14.16'} + dev: true + + /tempy@3.1.0: + resolution: {integrity: sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==} + engines: {node: '>=14.16'} + dependencies: + is-stream: 3.0.0 + temp-dir: 3.0.0 + type-fest: 2.19.0 + unique-string: 3.0.0 + dev: true + + /test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + dev: true + + /text-extensions@2.4.0: + resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} + engines: {node: '>=8'} + dev: true + + /text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true + + /through2@2.0.5: + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + dependencies: + readable-stream: 2.3.8 + xtend: 4.0.2 + dev: true + + /through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: true + + /titleize@3.0.0: + resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} + engines: {node: '>=12'} + dev: true + + /tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + dev: true + + /to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + dev: true + + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: true + + /traverse@0.6.7: + resolution: {integrity: sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==} + dev: true + + /ts-api-utils@1.0.3(typescript@5.2.2): + resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} + engines: {node: '>=16.13.0'} + peerDependencies: + typescript: '>=4.2.0' + dependencies: + typescript: 5.2.2 + dev: true + + /ts-node@10.9.1(@types/node@20.8.10)(typescript@5.2.2): + resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.8.10 + acorn: 8.11.2 + acorn-walk: 8.3.0 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.2.2 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + dev: true + + /tsconfig-paths@3.14.2: + resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: true + + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + dev: true + + /type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + dev: true + + /type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + dev: true + + /type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: true + + /type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + dev: true + + /type-fest@1.4.0: + resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} + engines: {node: '>=10'} + dev: true + + /type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + dev: true + + /type-fest@3.13.1: + resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} + engines: {node: '>=14.16'} + dev: true + + /type-fest@4.6.0: + resolution: {integrity: sha512-rLjWJzQFOq4xw7MgJrCZ6T1jIOvvYElXT12r+y0CC6u67hegDHaxcPqb2fZHOGlqxugGQPNB1EnTezjBetkwkw==} + engines: {node: '>=16'} + dev: true + + /typed-array-buffer@1.0.0: + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-typed-array: 1.1.12 + dev: true + + /typed-array-byte-length@1.0.0: + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + dev: true + + /typed-array-byte-offset@1.0.0: + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + dev: true + + /typed-array-length@1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + dependencies: + call-bind: 1.0.5 + for-each: 0.3.3 + is-typed-array: 1.1.12 + dev: true + + /typescript@5.2.2: + resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} + engines: {node: '>=14.17'} + hasBin: true + dev: true + + /uglify-js@3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + + /unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + dependencies: + call-bind: 1.0.5 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + dev: true + + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + dev: true + + /unicode-canonical-property-names-ecmascript@2.0.0: + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + engines: {node: '>=4'} + dev: true + + /unicode-emoji-modifier-base@1.0.0: + resolution: {integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==} + engines: {node: '>=4'} + dev: true + + /unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.0 + unicode-property-aliases-ecmascript: 2.1.0 + dev: true + + /unicode-match-property-value-ecmascript@2.1.0: + resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} + engines: {node: '>=4'} + dev: true + + /unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + dev: true + + /unique-string@3.0.0: + resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} + engines: {node: '>=12'} + dependencies: + crypto-random-string: 4.0.0 + dev: true + + /universal-user-agent@6.0.0: + resolution: {integrity: sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==} + dev: true + + /universalify@2.0.0: + resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} + engines: {node: '>= 10.0.0'} + dev: true + + /untildify@4.0.0: + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} + engines: {node: '>=8'} + dev: true + + /update-browserslist-db@1.0.13(browserslist@4.22.1): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.22.1 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: true + + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.1 + dev: true + + /url-join@5.0.0: + resolution: {integrity: sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: true + + /v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + dev: true + + /v8-to-istanbul@9.1.3: + resolution: {integrity: sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==} + engines: {node: '>=10.12.0'} + dependencies: + '@jridgewell/trace-mapping': 0.3.20 + '@types/istanbul-lib-coverage': 2.0.5 + convert-source-map: 2.0.0 + dev: true + + /validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + dev: true + + /walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + dependencies: + makeerror: 1.0.12 + dev: true + + /which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + dev: true + + /which-typed-array@1.1.13: + resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + dev: true + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + dev: true + + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + dev: true + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: true + + /write-file-atomic@4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + imurmurhash: 0.1.4 + signal-exit: 3.0.7 + dev: true + + /xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + dev: true + + /y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: true + + /yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + dev: true + + /yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: true + + /yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + dev: true + + /yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + 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.8 + yargs-parser: 21.1.1 + dev: true + + /yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + dev: true + + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true + + /yocto-queue@1.0.0: + resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + engines: {node: '>=12.20'} + dev: true diff --git a/specs/commercelayer.spec.ts b/specs/commercelayer.spec.ts new file mode 100644 index 0000000..8556170 --- /dev/null +++ b/specs/commercelayer.spec.ts @@ -0,0 +1,56 @@ + +import { CommerceLayerProvisioningClient, CommerceLayerProvisioningStatic } from '../src' +import { getClient } from '../test/common' +import { RawResponseReader } from '../src/interceptor' + + +let clp: CommerceLayerProvisioningClient + + +beforeAll(async () => { clp = await getClient() }) + + +describe('SDK:commercelayer suite', () => { + + it('commercelayer.resources', async () => { + + const resources = CommerceLayerProvisioningStatic.resources() + + expect(resources).not.toBeUndefined() + expect(Array.isArray(resources)).toBeTruthy() + expect(resources.length).toBeGreaterThan(0) + + const resourcesInstance = clp.resources() + expect(resourcesInstance).toStrictEqual(resources) + + }) + + + + it('commercelayer.rawResponse', async () => { + + jest.setTimeout(10000) + const headers = true + + const cli = await getClient(true) + + const reader = cli.addRawResponseReader({ headers }) + expect(reader).not.toBeUndefined() + expect(reader.id).toBeGreaterThanOrEqual(0) + + await cli.roles.list({ pageSize: 1 }) + expect(reader.rawResponse?.data).not.toBeUndefined() + if (headers) expect(reader.headers).not.toBeUndefined() + else expect(reader.headers).toBeUndefined() + + cli.removeRawResponseReader(reader.id as number) + cli.removeRawResponseReader(reader) + cli.removeRawResponseReader(0) + cli.removeRawResponseReader({ id: undefined } as RawResponseReader) + + clp = await getClient() + + }) + + +}) diff --git a/specs/error.spec.ts b/specs/error.spec.ts new file mode 100644 index 0000000..499b9f1 --- /dev/null +++ b/specs/error.spec.ts @@ -0,0 +1,44 @@ + +import { CommerceLayerProvisioningClient } from '../src' +import { Organizations } from '../src/api' +import { ErrorType } from '../src/error' +import { getClient } from '../test/common' + + +let clp: CommerceLayerProvisioningClient + + +beforeAll(async () => { clp = await getClient(true) }) + + +describe('SDK:error suite', () => { + + it('ApiError', async () => { + try { + await clp.roles.retrieve('fake-id') + } catch (error) { + expect(clp.isApiError(error)).toBeTruthy() + expect(error.status).toBe(404) + } + }) + + + it('ApiError.first', async () => { + try { + await clp.roles.create({ name: '', organization: { id: '', type: Organizations.TYPE} }) + } catch (error) { + expect(error.first()).not.toBeUndefined() + } + }) + + + it('ApiError.type', async () => { + try { + clp.config({ domain: 'fake.domain.xx', accessToken: 'fake-access-token' }) + await clp.roles.list({ pageSize: 1}) + } catch (error) { + expect(error.type).toEqual(ErrorType.RESPONSE) + } + }) + +}) diff --git a/specs/headers.spec.ts b/specs/headers.spec.ts new file mode 100644 index 0000000..7e2259f --- /dev/null +++ b/specs/headers.spec.ts @@ -0,0 +1,59 @@ + +import { CommerceLayerProvisioningClient } from '../src' +import { getClient, CommonData, handleError, interceptRequest } from '../test/common' + + + +let clp: CommerceLayerProvisioningClient + + +beforeAll(async () => { clp = await getClient(true) }) + + +describe('Test headers', () => { + + it('Request headers', async () => { + + const testHeaderValue = 'test-value' + const params = { fields: { } } + const options = { + ...CommonData.options, + headers: { + 'test-header': testHeaderValue, + 'Content-Type': 'application/json' + } + } + + const intId = clp.addRequestInterceptor((config) => { + expect(config.headers).toBeDefined() + if (config.headers) { + expect(config.headers['test-header']).toBe(testHeaderValue) + expect(config.headers['Content-Type']).toBe('application/vnd.api+json') + } + return interceptRequest() + }) + + await clp.user.retrieve(params, options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + + + it('Response headers', async () => { + + const params = { fields: { } } + + const reader = clp.addRawResponseReader({ headers: true }) + + await clp.user.retrieve(params, CommonData.options) + + expect(reader.headers).not.toBeUndefined() + expect(reader.headers?.['x-ratelimit-limit']).not.toBeUndefined() + + clp.removeRawResponseReader(reader) + + }) + + +}) diff --git a/specs/jsonapi.spec.ts b/specs/jsonapi.spec.ts new file mode 100644 index 0000000..cadda8a --- /dev/null +++ b/specs/jsonapi.spec.ts @@ -0,0 +1,96 @@ + +import { CommerceLayerProvisioningClient } from '../src' +import { getClient, TestData } from '../test/common' +import { normalize, denormalize } from '../src/jsonapi' +import { ResourceTypeLock } from '../src/api' +import { isEqual } from 'lodash' + + +let clp: CommerceLayerProvisioningClient + + +beforeAll(async () => { clp = await getClient() }) + + +describe('SDK:jsonapi suite', () => { + + it('jsonapi.normalize', async () => { + + const type: ResourceTypeLock = 'memberships' + + const resource = { + id: TestData.id, + type, + reference: TestData.reference, + reference_origin: TestData.reference_origin, + metadata: TestData.metadata, + user_email: 'user@sdk-test.org', + organization: clp.organizations.relationship(TestData.id), + role: clp.roles.relationship(TestData.id) + } + + const expected = { + id: resource.id, + type, + attributes: { + reference: resource.reference, + reference_origin: resource.reference_origin, + metadata: resource.metadata, + user_email: resource.user_email + }, + relationships: { + organization: { + data: resource.organization + }, + role: { + data: resource.role + } + } + } + + const normalized = normalize(resource) + + expect(isEqual(normalized, expected)).toBeTruthy() + + }) + + + it('jsonapi.denormalize', async () => { + + const jsonApi = { + data: { + id: TestData.id + '00', + type: 'users', + attributes: { + user_email: 'user@sdk-test.org', + reference: TestData.reference, + reference_origin: TestData.reference_origin, + metadata: TestData.metadata + }, + relationships: { + organization: { data: { type: 'organizations', id: TestData.id } }, + role: { data: null } + } + }, + included: [{ id: TestData.id, type: 'organizations', attributes: { name: 'Org_Name' } }], + links: { self: 'link' }, + } + + const expected = { + id: TestData.id + '00', + type: 'users', + user_email: 'user@sdk-test.org', + reference: TestData.reference, + reference_origin: TestData.reference_origin, + metadata: TestData.metadata, + organization: { type: 'organizations', id: TestData.id, name: 'Org_Name' }, + role: null + } + + const denormalized = denormalize(jsonApi) + + expect(isEqual(expected, denormalized)).toBeTruthy() + + }) + +}) diff --git a/specs/resource.spec.ts b/specs/resource.spec.ts new file mode 100644 index 0000000..ce08da5 --- /dev/null +++ b/specs/resource.spec.ts @@ -0,0 +1,98 @@ + +import { CommerceLayerProvisioningClient, Membership, Role } from '../src' +import { ListResponse } from '../src/resource' +import { getClient } from '../test/common' + + +let clp: CommerceLayerProvisioningClient +let memberships: ListResponse +let tempId: string + + +beforeAll(async () => { + clp = await getClient(true) + memberships = await clp.memberships.list({ pageSize: 1}) +}) + + +describe('SDK:resource suite', () => { + + it('resource.first', async () => { + const first = memberships.first() + expect(first?.id).not.toBeUndefined() + }) + + + it('resource.last', async () => { + const first = memberships.first() + const last = memberships.last() + expect(last?.id).not.toBeUndefined() + expect(first).toEqual(last) + }) + + + it('resource.get', async () => { + const role = memberships.get(0) + expect(role?.id).not.toBeUndefined() + }) + + + it('resource.retrieve', async () => { + const id = memberships.first()?.id as string + const user = await clp.memberships.retrieve(id) + expect(user.id).toEqual(id) + }) + + + it('resource.update', async () => { + const id = memberships.first()?.id as string + const reference = String(Date.now()) + const role = await clp.memberships.update({ id, reference }) + expect(role.reference).toEqual(reference) + }) + + + it('resource.singleton', async () => { + const user = await clp.user.retrieve() + expect(user.id).not.toBeNull() + expect(user.id).not.toBeUndefined() + }) + + + it('resource.create', async () => { + const user_email = 'spec@sdk-test.org-role' + const org = (await clp.organizations.list()).first() + const role = (await clp.roles.list()).first() + if (!org || !role) return + const ms = await clp.memberships.create({ + user_email, + organization: clp.organizations.relationship(org), + role: clp.roles.relationship(role) + }) + expect(ms.id).not.toBeUndefined() + expect(ms.user_email).toEqual(user_email) + tempId = ms.id + }) + + + it('resource.delete', async () => { + await clp.memberships.delete(tempId) + try { + await clp.memberships.retrieve(tempId) + } catch (error) { + expect(error.code).toEqual("404") + expect(error.status).toEqual(404) + } + }) + + + it('resource.fetch', async () => { + const org = (await clp.organizations.list({ pageSize: 1 })).first() + if (!org) return + const mships = await clp.organizations.memberships(org.id) + expect (mships.length).toBeGreaterThan(0) + const o = await clp.memberships.organization(mships.first()?.id || '') + expect (o.id).toBe(org.id) + }) + +}) diff --git a/specs/resources/api_credentials.spec.ts b/specs/resources/api_credentials.spec.ts new file mode 100644 index 0000000..12ceef8 --- /dev/null +++ b/specs/resources/api_credentials.spec.ts @@ -0,0 +1,241 @@ +/** + * ©2023 Commerce Layer Inc. + * Source code generated automatically by SDK codegen + **/ + +import { CommerceLayerProvisioningClient, ApiCredential } from '../../src' +import { isEqual } from 'lodash' +// eslint-disable-next-line @typescript-eslint/no-unused-vars +import { getClient, TestData, CommonData, handleError, interceptRequest, checkCommon, checkCommonData, checkCommonParamsList, checkCommonParams, currentAccessToken, randomValue } from '../../test/common' + + + +let clp: CommerceLayerProvisioningClient + + +beforeAll(async () => { clp = await getClient() }) + + +describe('ApiCredentials resource', () => { + + const resourceType = 'api_credentials' + + + /* spec.create.start */ + it(resourceType + '.create', async () => { + + const createAttributes = { + name: randomValue('string', 'name'), + kind: randomValue('string', 'kind'), + organization: clp.organizations.relationship(TestData.id), + role: clp.roles.relationship(TestData.id), + } + + const attributes = { ...createAttributes, reference: TestData.reference } + const params = { fields: { [resourceType]: CommonData.paramsFields } } + const resData = attributes + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('post') + checkCommon(config, resourceType) + checkCommonData(config, resourceType, attributes) + expect(clp[resourceType].isApiCredential(config.data.data)).toBeTruthy() + return interceptRequest() + }) + + await clp[resourceType].create(resData, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* spec.create.stop */ + + + /* spec.retrieve.start */ + it(resourceType + '.retrieve', async () => { + + const id = TestData.id + const params = { fields: {[resourceType]: CommonData.paramsFields } } + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType, id, currentAccessToken) + checkCommonParams(config, params) + return interceptRequest() + }) + + await clp[resourceType].retrieve(id, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* spec.retrieve.stop */ + + + /* spec.update.start */ + it(resourceType + '.update', async () => { + + const attributes = { reference_origin: TestData.reference_origin, metadata: TestData.metadata } + const params = { fields: { [resourceType]: CommonData.paramsFields } } + const resData = { id: TestData.id, ...attributes} + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('patch') + checkCommon(config, resourceType, resData.id, currentAccessToken) + checkCommonData(config, resourceType, attributes, resData.id) + return interceptRequest() + }) + + await clp[resourceType].update(resData, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* spec.update.stop */ + + + /* spec.delete.start */ + it(resourceType + '.delete', async () => { + + const id = TestData.id + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('delete') + checkCommon(config, resourceType, id, currentAccessToken) + return interceptRequest() + }) + + await clp[resourceType].delete(id, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* spec.delete.stop */ + + + /* spec.list.start */ + it(resourceType + '.list', async () => { + + const params = CommonData.paramsList + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType) + checkCommonParamsList(config, params) + return interceptRequest() + }) + + await clp[resourceType].list(params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* spec.list.stop */ + + + /* spec.type.start */ + it(resourceType + '.type', async () => { + + const resource = { id: TestData.id, type: resourceType } + expect(clp[resourceType].isApiCredential(resource)).toBeTruthy() + + const type = clp[resourceType].type() + expect(type).toBe(resourceType) + + }) + /* spec.type.stop */ + + + /* spec.relationship.start */ + it(resourceType + '.relationship', async () => { + + const relId = clp[resourceType].relationship(TestData.id) + expect(isEqual(relId, { id: TestData.id, type: resourceType})) + + const relResId = clp[resourceType].relationship({ id: TestData.id, type: resourceType }) + expect(isEqual(relResId, { id: TestData.id, type: resourceType})) + + }) + /* spec.relationship.stop */ + + + /* spec.parse.start */ + it(resourceType + '.parse', async () => { + + const reference = 'myReferenceId' + + const payload = ` + { + "data": { + "id": "AbcdEfgHiL", + "meta": { + "mode": "test", + "organization_id": "myOrgId" + }, + "type": "${resourceType}", + "links": { + "self": "/api/${resourceType}/AbcdEfgHiL" + }, + "attributes": { + "metadata": {}, + "reference": "${reference}", + "created_at": "2023-10-01T05:53:29.296Z", + "updated_at": "2023-10-10T08:52:13.251Z" + } + } + } + ` + + const res = clp[resourceType].parse(payload) as ApiCredential + + expect(res.type).toBe(resourceType) + expect(res.reference).toBe(reference) + + }) + /* spec.parse.stop */ + + + + /* relationship.organization start */ + it(resourceType + '.organization', async () => { + + const id = TestData.id + const params = { fields: { organizations: CommonData.paramsFields } } + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType, id, currentAccessToken, 'organization') + checkCommonParams(config, params) + return interceptRequest() + }) + + await clp[resourceType].organization(id, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* relationship.organization stop */ + + + /* relationship.role start */ + it(resourceType + '.role', async () => { + + const id = TestData.id + const params = { fields: { roles: CommonData.paramsFields } } + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType, id, currentAccessToken, 'role') + checkCommonParams(config, params) + return interceptRequest() + }) + + await clp[resourceType].role(id, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* relationship.role stop */ + + +}) diff --git a/specs/resources/memberships.spec.ts b/specs/resources/memberships.spec.ts new file mode 100644 index 0000000..111a29e --- /dev/null +++ b/specs/resources/memberships.spec.ts @@ -0,0 +1,261 @@ +/** + * ©2023 Commerce Layer Inc. + * Source code generated automatically by SDK codegen + **/ + +import { CommerceLayerProvisioningClient, Membership } from '../../src' +import { isEqual } from 'lodash' +// eslint-disable-next-line @typescript-eslint/no-unused-vars +import { getClient, TestData, CommonData, handleError, interceptRequest, checkCommon, checkCommonData, checkCommonParamsList, checkCommonParams, currentAccessToken, randomValue } from '../../test/common' + + + +let clp: CommerceLayerProvisioningClient + + +beforeAll(async () => { clp = await getClient() }) + + +describe('Memberships resource', () => { + + const resourceType = 'memberships' + + + /* spec.create.start */ + it(resourceType + '.create', async () => { + + const createAttributes = { + user_email: randomValue('string', 'user_email'), + organization: clp.organizations.relationship(TestData.id), + role: clp.roles.relationship(TestData.id), + } + + const attributes = { ...createAttributes, reference: TestData.reference } + const params = { fields: { [resourceType]: CommonData.paramsFields } } + const resData = attributes + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('post') + checkCommon(config, resourceType) + checkCommonData(config, resourceType, attributes) + expect(clp[resourceType].isMembership(config.data.data)).toBeTruthy() + return interceptRequest() + }) + + await clp[resourceType].create(resData, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* spec.create.stop */ + + + /* spec.retrieve.start */ + it(resourceType + '.retrieve', async () => { + + const id = TestData.id + const params = { fields: {[resourceType]: CommonData.paramsFields } } + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType, id, currentAccessToken) + checkCommonParams(config, params) + return interceptRequest() + }) + + await clp[resourceType].retrieve(id, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* spec.retrieve.stop */ + + + /* spec.update.start */ + it(resourceType + '.update', async () => { + + const attributes = { reference_origin: TestData.reference_origin, metadata: TestData.metadata } + const params = { fields: { [resourceType]: CommonData.paramsFields } } + const resData = { id: TestData.id, ...attributes} + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('patch') + checkCommon(config, resourceType, resData.id, currentAccessToken) + checkCommonData(config, resourceType, attributes, resData.id) + return interceptRequest() + }) + + await clp[resourceType].update(resData, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* spec.update.stop */ + + + /* spec.delete.start */ + it(resourceType + '.delete', async () => { + + const id = TestData.id + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('delete') + checkCommon(config, resourceType, id, currentAccessToken) + return interceptRequest() + }) + + await clp[resourceType].delete(id, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* spec.delete.stop */ + + + /* spec.list.start */ + it(resourceType + '.list', async () => { + + const params = CommonData.paramsList + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType) + checkCommonParamsList(config, params) + return interceptRequest() + }) + + await clp[resourceType].list(params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* spec.list.stop */ + + + /* spec.type.start */ + it(resourceType + '.type', async () => { + + const resource = { id: TestData.id, type: resourceType } + expect(clp[resourceType].isMembership(resource)).toBeTruthy() + + const type = clp[resourceType].type() + expect(type).toBe(resourceType) + + }) + /* spec.type.stop */ + + + /* spec.relationship.start */ + it(resourceType + '.relationship', async () => { + + const relId = clp[resourceType].relationship(TestData.id) + expect(isEqual(relId, { id: TestData.id, type: resourceType})) + + const relResId = clp[resourceType].relationship({ id: TestData.id, type: resourceType }) + expect(isEqual(relResId, { id: TestData.id, type: resourceType})) + + }) + /* spec.relationship.stop */ + + + /* spec.parse.start */ + it(resourceType + '.parse', async () => { + + const reference = 'myReferenceId' + + const payload = ` + { + "data": { + "id": "AbcdEfgHiL", + "meta": { + "mode": "test", + "organization_id": "myOrgId" + }, + "type": "${resourceType}", + "links": { + "self": "/api/${resourceType}/AbcdEfgHiL" + }, + "attributes": { + "metadata": {}, + "reference": "${reference}", + "created_at": "2023-10-01T05:53:29.296Z", + "updated_at": "2023-10-10T08:52:13.251Z" + } + } + } + ` + + const res = clp[resourceType].parse(payload) as Membership + + expect(res.type).toBe(resourceType) + expect(res.reference).toBe(reference) + + }) + /* spec.parse.stop */ + + + + /* relationship.organization start */ + it(resourceType + '.organization', async () => { + + const id = TestData.id + const params = { fields: { organizations: CommonData.paramsFields } } + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType, id, currentAccessToken, 'organization') + checkCommonParams(config, params) + return interceptRequest() + }) + + await clp[resourceType].organization(id, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* relationship.organization stop */ + + + /* relationship.role start */ + it(resourceType + '.role', async () => { + + const id = TestData.id + const params = { fields: { roles: CommonData.paramsFields } } + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType, id, currentAccessToken, 'role') + checkCommonParams(config, params) + return interceptRequest() + }) + + await clp[resourceType].role(id, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* relationship.role stop */ + + + /* relationship.versions start */ + it(resourceType + '.versions', async () => { + + const id = TestData.id + const params = { fields: { versions: CommonData.paramsFields } } + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType, id, currentAccessToken, 'versions') + checkCommonParams(config, params) + return interceptRequest() + }) + + await clp[resourceType].versions(id, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* relationship.versions stop */ + + +}) diff --git a/specs/resources/organizations.spec.ts b/specs/resources/organizations.spec.ts new file mode 100644 index 0000000..2cbef62 --- /dev/null +++ b/specs/resources/organizations.spec.ts @@ -0,0 +1,240 @@ +/** + * ©2023 Commerce Layer Inc. + * Source code generated automatically by SDK codegen + **/ + +import { CommerceLayerProvisioningClient, Organization } from '../../src' +import { isEqual } from 'lodash' +// eslint-disable-next-line @typescript-eslint/no-unused-vars +import { getClient, TestData, CommonData, handleError, interceptRequest, checkCommon, checkCommonData, checkCommonParamsList, checkCommonParams, currentAccessToken, randomValue } from '../../test/common' + + + +let clp: CommerceLayerProvisioningClient + + +beforeAll(async () => { clp = await getClient() }) + + +describe('Organizations resource', () => { + + const resourceType = 'organizations' + + + /* spec.create.start */ + it(resourceType + '.create', async () => { + + const createAttributes = { + name: randomValue('string', 'name'), + } + + const attributes = { ...createAttributes, reference: TestData.reference } + const params = { fields: { [resourceType]: CommonData.paramsFields } } + const resData = attributes + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('post') + checkCommon(config, resourceType) + checkCommonData(config, resourceType, attributes) + expect(clp[resourceType].isOrganization(config.data.data)).toBeTruthy() + return interceptRequest() + }) + + await clp[resourceType].create(resData, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* spec.create.stop */ + + + /* spec.retrieve.start */ + it(resourceType + '.retrieve', async () => { + + const id = TestData.id + const params = { fields: {[resourceType]: CommonData.paramsFields } } + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType, id, currentAccessToken) + checkCommonParams(config, params) + return interceptRequest() + }) + + await clp[resourceType].retrieve(id, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* spec.retrieve.stop */ + + + /* spec.update.start */ + it(resourceType + '.update', async () => { + + const attributes = { reference_origin: TestData.reference_origin, metadata: TestData.metadata } + const params = { fields: { [resourceType]: CommonData.paramsFields } } + const resData = { id: TestData.id, ...attributes} + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('patch') + checkCommon(config, resourceType, resData.id, currentAccessToken) + checkCommonData(config, resourceType, attributes, resData.id) + return interceptRequest() + }) + + await clp[resourceType].update(resData, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* spec.update.stop */ + + + /* spec.list.start */ + it(resourceType + '.list', async () => { + + const params = CommonData.paramsList + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType) + checkCommonParamsList(config, params) + return interceptRequest() + }) + + await clp[resourceType].list(params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* spec.list.stop */ + + + /* spec.type.start */ + it(resourceType + '.type', async () => { + + const resource = { id: TestData.id, type: resourceType } + expect(clp[resourceType].isOrganization(resource)).toBeTruthy() + + const type = clp[resourceType].type() + expect(type).toBe(resourceType) + + }) + /* spec.type.stop */ + + + /* spec.relationship.start */ + it(resourceType + '.relationship', async () => { + + const relId = clp[resourceType].relationship(TestData.id) + expect(isEqual(relId, { id: TestData.id, type: resourceType})) + + const relResId = clp[resourceType].relationship({ id: TestData.id, type: resourceType }) + expect(isEqual(relResId, { id: TestData.id, type: resourceType})) + + }) + /* spec.relationship.stop */ + + + /* spec.parse.start */ + it(resourceType + '.parse', async () => { + + const reference = 'myReferenceId' + + const payload = ` + { + "data": { + "id": "AbcdEfgHiL", + "meta": { + "mode": "test", + "organization_id": "myOrgId" + }, + "type": "${resourceType}", + "links": { + "self": "/api/${resourceType}/AbcdEfgHiL" + }, + "attributes": { + "metadata": {}, + "reference": "${reference}", + "created_at": "2023-10-01T05:53:29.296Z", + "updated_at": "2023-10-10T08:52:13.251Z" + } + } + } + ` + + const res = clp[resourceType].parse(payload) as Organization + + expect(res.type).toBe(resourceType) + expect(res.reference).toBe(reference) + + }) + /* spec.parse.stop */ + + + + /* relationship.memberships start */ + it(resourceType + '.memberships', async () => { + + const id = TestData.id + const params = { fields: { memberships: CommonData.paramsFields } } + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType, id, currentAccessToken, 'memberships') + checkCommonParams(config, params) + return interceptRequest() + }) + + await clp[resourceType].memberships(id, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* relationship.memberships stop */ + + + /* relationship.roles start */ + it(resourceType + '.roles', async () => { + + const id = TestData.id + const params = { fields: { roles: CommonData.paramsFields } } + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType, id, currentAccessToken, 'roles') + checkCommonParams(config, params) + return interceptRequest() + }) + + await clp[resourceType].roles(id, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* relationship.roles stop */ + + + /* relationship.permissions start */ + it(resourceType + '.permissions', async () => { + + const id = TestData.id + const params = { fields: { permissions: CommonData.paramsFields } } + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType, id, currentAccessToken, 'permissions') + checkCommonParams(config, params) + return interceptRequest() + }) + + await clp[resourceType].permissions(id, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* relationship.permissions stop */ + + +}) diff --git a/specs/resources/permissions.spec.ts b/specs/resources/permissions.spec.ts new file mode 100644 index 0000000..29c5d82 --- /dev/null +++ b/specs/resources/permissions.spec.ts @@ -0,0 +1,245 @@ +/** + * ©2023 Commerce Layer Inc. + * Source code generated automatically by SDK codegen + **/ + +import { CommerceLayerProvisioningClient, Permission } from '../../src' +import { isEqual } from 'lodash' +// eslint-disable-next-line @typescript-eslint/no-unused-vars +import { getClient, TestData, CommonData, handleError, interceptRequest, checkCommon, checkCommonData, checkCommonParamsList, checkCommonParams, currentAccessToken, randomValue } from '../../test/common' + + + +let clp: CommerceLayerProvisioningClient + + +beforeAll(async () => { clp = await getClient() }) + + +describe('Permissions resource', () => { + + const resourceType = 'permissions' + + + /* spec.create.start */ + it(resourceType + '.create', async () => { + + const createAttributes = { + can_create: randomValue('boolean', 'can_create'), + can_read: randomValue('boolean', 'can_read'), + can_update: randomValue('boolean', 'can_update'), + can_destroy: randomValue('boolean', 'can_destroy'), + subject: randomValue('string', 'subject'), + role: clp.roles.relationship(TestData.id), + } + + const attributes = { ...createAttributes, reference: TestData.reference } + const params = { fields: { [resourceType]: CommonData.paramsFields } } + const resData = attributes + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('post') + checkCommon(config, resourceType) + checkCommonData(config, resourceType, attributes) + expect(clp[resourceType].isPermission(config.data.data)).toBeTruthy() + return interceptRequest() + }) + + await clp[resourceType].create(resData, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* spec.create.stop */ + + + /* spec.retrieve.start */ + it(resourceType + '.retrieve', async () => { + + const id = TestData.id + const params = { fields: {[resourceType]: CommonData.paramsFields } } + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType, id, currentAccessToken) + checkCommonParams(config, params) + return interceptRequest() + }) + + await clp[resourceType].retrieve(id, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* spec.retrieve.stop */ + + + /* spec.update.start */ + it(resourceType + '.update', async () => { + + const attributes = { reference_origin: TestData.reference_origin, metadata: TestData.metadata } + const params = { fields: { [resourceType]: CommonData.paramsFields } } + const resData = { id: TestData.id, ...attributes} + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('patch') + checkCommon(config, resourceType, resData.id, currentAccessToken) + checkCommonData(config, resourceType, attributes, resData.id) + return interceptRequest() + }) + + await clp[resourceType].update(resData, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* spec.update.stop */ + + + /* spec.list.start */ + it(resourceType + '.list', async () => { + + const params = CommonData.paramsList + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType) + checkCommonParamsList(config, params) + return interceptRequest() + }) + + await clp[resourceType].list(params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* spec.list.stop */ + + + /* spec.type.start */ + it(resourceType + '.type', async () => { + + const resource = { id: TestData.id, type: resourceType } + expect(clp[resourceType].isPermission(resource)).toBeTruthy() + + const type = clp[resourceType].type() + expect(type).toBe(resourceType) + + }) + /* spec.type.stop */ + + + /* spec.relationship.start */ + it(resourceType + '.relationship', async () => { + + const relId = clp[resourceType].relationship(TestData.id) + expect(isEqual(relId, { id: TestData.id, type: resourceType})) + + const relResId = clp[resourceType].relationship({ id: TestData.id, type: resourceType }) + expect(isEqual(relResId, { id: TestData.id, type: resourceType})) + + }) + /* spec.relationship.stop */ + + + /* spec.parse.start */ + it(resourceType + '.parse', async () => { + + const reference = 'myReferenceId' + + const payload = ` + { + "data": { + "id": "AbcdEfgHiL", + "meta": { + "mode": "test", + "organization_id": "myOrgId" + }, + "type": "${resourceType}", + "links": { + "self": "/api/${resourceType}/AbcdEfgHiL" + }, + "attributes": { + "metadata": {}, + "reference": "${reference}", + "created_at": "2023-10-01T05:53:29.296Z", + "updated_at": "2023-10-10T08:52:13.251Z" + } + } + } + ` + + const res = clp[resourceType].parse(payload) as Permission + + expect(res.type).toBe(resourceType) + expect(res.reference).toBe(reference) + + }) + /* spec.parse.stop */ + + + + /* relationship.organization start */ + it(resourceType + '.organization', async () => { + + const id = TestData.id + const params = { fields: { organizations: CommonData.paramsFields } } + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType, id, currentAccessToken, 'organization') + checkCommonParams(config, params) + return interceptRequest() + }) + + await clp[resourceType].organization(id, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* relationship.organization stop */ + + + /* relationship.role start */ + it(resourceType + '.role', async () => { + + const id = TestData.id + const params = { fields: { roles: CommonData.paramsFields } } + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType, id, currentAccessToken, 'role') + checkCommonParams(config, params) + return interceptRequest() + }) + + await clp[resourceType].role(id, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* relationship.role stop */ + + + /* relationship.versions start */ + it(resourceType + '.versions', async () => { + + const id = TestData.id + const params = { fields: { versions: CommonData.paramsFields } } + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType, id, currentAccessToken, 'versions') + checkCommonParams(config, params) + return interceptRequest() + }) + + await clp[resourceType].versions(id, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* relationship.versions stop */ + + +}) diff --git a/specs/resources/roles.spec.ts b/specs/resources/roles.spec.ts new file mode 100644 index 0000000..ee640de --- /dev/null +++ b/specs/resources/roles.spec.ts @@ -0,0 +1,283 @@ +/** + * ©2023 Commerce Layer Inc. + * Source code generated automatically by SDK codegen + **/ + +import { CommerceLayerProvisioningClient, Role } from '../../src' +import { isEqual } from 'lodash' +// eslint-disable-next-line @typescript-eslint/no-unused-vars +import { getClient, TestData, CommonData, handleError, interceptRequest, checkCommon, checkCommonData, checkCommonParamsList, checkCommonParams, currentAccessToken, randomValue } from '../../test/common' + + + +let clp: CommerceLayerProvisioningClient + + +beforeAll(async () => { clp = await getClient() }) + + +describe('Roles resource', () => { + + const resourceType = 'roles' + + + /* spec.create.start */ + it(resourceType + '.create', async () => { + + const createAttributes = { + name: randomValue('string', 'name'), + organization: clp.organizations.relationship(TestData.id), + } + + const attributes = { ...createAttributes, reference: TestData.reference } + const params = { fields: { [resourceType]: CommonData.paramsFields } } + const resData = attributes + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('post') + checkCommon(config, resourceType) + checkCommonData(config, resourceType, attributes) + expect(clp[resourceType].isRole(config.data.data)).toBeTruthy() + return interceptRequest() + }) + + await clp[resourceType].create(resData, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* spec.create.stop */ + + + /* spec.retrieve.start */ + it(resourceType + '.retrieve', async () => { + + const id = TestData.id + const params = { fields: {[resourceType]: CommonData.paramsFields } } + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType, id, currentAccessToken) + checkCommonParams(config, params) + return interceptRequest() + }) + + await clp[resourceType].retrieve(id, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* spec.retrieve.stop */ + + + /* spec.update.start */ + it(resourceType + '.update', async () => { + + const attributes = { reference_origin: TestData.reference_origin, metadata: TestData.metadata } + const params = { fields: { [resourceType]: CommonData.paramsFields } } + const resData = { id: TestData.id, ...attributes} + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('patch') + checkCommon(config, resourceType, resData.id, currentAccessToken) + checkCommonData(config, resourceType, attributes, resData.id) + return interceptRequest() + }) + + await clp[resourceType].update(resData, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* spec.update.stop */ + + + /* spec.list.start */ + it(resourceType + '.list', async () => { + + const params = CommonData.paramsList + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType) + checkCommonParamsList(config, params) + return interceptRequest() + }) + + await clp[resourceType].list(params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* spec.list.stop */ + + + /* spec.type.start */ + it(resourceType + '.type', async () => { + + const resource = { id: TestData.id, type: resourceType } + expect(clp[resourceType].isRole(resource)).toBeTruthy() + + const type = clp[resourceType].type() + expect(type).toBe(resourceType) + + }) + /* spec.type.stop */ + + + /* spec.relationship.start */ + it(resourceType + '.relationship', async () => { + + const relId = clp[resourceType].relationship(TestData.id) + expect(isEqual(relId, { id: TestData.id, type: resourceType})) + + const relResId = clp[resourceType].relationship({ id: TestData.id, type: resourceType }) + expect(isEqual(relResId, { id: TestData.id, type: resourceType})) + + }) + /* spec.relationship.stop */ + + + /* spec.parse.start */ + it(resourceType + '.parse', async () => { + + const reference = 'myReferenceId' + + const payload = ` + { + "data": { + "id": "AbcdEfgHiL", + "meta": { + "mode": "test", + "organization_id": "myOrgId" + }, + "type": "${resourceType}", + "links": { + "self": "/api/${resourceType}/AbcdEfgHiL" + }, + "attributes": { + "metadata": {}, + "reference": "${reference}", + "created_at": "2023-10-01T05:53:29.296Z", + "updated_at": "2023-10-10T08:52:13.251Z" + } + } + } + ` + + const res = clp[resourceType].parse(payload) as Role + + expect(res.type).toBe(resourceType) + expect(res.reference).toBe(reference) + + }) + /* spec.parse.stop */ + + + + /* relationship.organization start */ + it(resourceType + '.organization', async () => { + + const id = TestData.id + const params = { fields: { organizations: CommonData.paramsFields } } + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType, id, currentAccessToken, 'organization') + checkCommonParams(config, params) + return interceptRequest() + }) + + await clp[resourceType].organization(id, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* relationship.organization stop */ + + + /* relationship.permissions start */ + it(resourceType + '.permissions', async () => { + + const id = TestData.id + const params = { fields: { permissions: CommonData.paramsFields } } + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType, id, currentAccessToken, 'permissions') + checkCommonParams(config, params) + return interceptRequest() + }) + + await clp[resourceType].permissions(id, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* relationship.permissions stop */ + + + /* relationship.memberships start */ + it(resourceType + '.memberships', async () => { + + const id = TestData.id + const params = { fields: { memberships: CommonData.paramsFields } } + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType, id, currentAccessToken, 'memberships') + checkCommonParams(config, params) + return interceptRequest() + }) + + await clp[resourceType].memberships(id, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* relationship.memberships stop */ + + + /* relationship.api_credentials start */ + it(resourceType + '.api_credentials', async () => { + + const id = TestData.id + const params = { fields: { api_credentials: CommonData.paramsFields } } + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType, id, currentAccessToken, 'api_credentials') + checkCommonParams(config, params) + return interceptRequest() + }) + + await clp[resourceType].api_credentials(id, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* relationship.api_credentials stop */ + + + /* relationship.versions start */ + it(resourceType + '.versions', async () => { + + const id = TestData.id + const params = { fields: { versions: CommonData.paramsFields } } + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType, id, currentAccessToken, 'versions') + checkCommonParams(config, params) + return interceptRequest() + }) + + await clp[resourceType].versions(id, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* relationship.versions stop */ + + +}) diff --git a/specs/resources/user.spec.ts b/specs/resources/user.spec.ts new file mode 100644 index 0000000..c3dbb1d --- /dev/null +++ b/specs/resources/user.spec.ts @@ -0,0 +1,129 @@ +/** + * ©2023 Commerce Layer Inc. + * Source code generated automatically by SDK codegen + **/ + +import { CommerceLayerProvisioningClient, User } from '../../src' +import { isEqual } from 'lodash' +// eslint-disable-next-line @typescript-eslint/no-unused-vars +import { getClient, TestData, CommonData, handleError, interceptRequest, checkCommon, checkCommonData, checkCommonParamsList, checkCommonParams, currentAccessToken, randomValue } from '../../test/common' + + + +let clp: CommerceLayerProvisioningClient + + +beforeAll(async () => { clp = await getClient() }) + + +describe('Users resource', () => { + + const resourceType = 'user' + + + /* spec.update.start */ + it(resourceType + '.update', async () => { + + const attributes = { reference_origin: TestData.reference_origin, metadata: TestData.metadata } + const params = { fields: { [resourceType]: CommonData.paramsFields } } + const resData = { id: TestData.id, ...attributes} + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('patch') + checkCommon(config, resourceType, resData.id, currentAccessToken) + checkCommonData(config, resourceType, attributes, resData.id) + return interceptRequest() + }) + + await clp[resourceType].update(resData, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* spec.update.stop */ + + + /* spec.singleton.start */ + it(resourceType + '.singleton', async () => { + + const params = { fields: { [resourceType]: CommonData.paramsFields } } + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType) + checkCommonParams(config, params) + return interceptRequest() + }) + + await clp[resourceType].retrieve(params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* spec.singleton.stop */ + + + /* spec.type.start */ + it(resourceType + '.type', async () => { + + const resource = { id: TestData.id, type: resourceType } + expect(clp[resourceType].isUser(resource)).toBeTruthy() + + const type = clp[resourceType].type() + expect(type).toBe(resourceType) + + }) + /* spec.type.stop */ + + + /* spec.relationship.start */ + it(resourceType + '.relationship', async () => { + + const relId = clp[resourceType].relationship(TestData.id) + expect(isEqual(relId, { id: TestData.id, type: resourceType})) + + const relResId = clp[resourceType].relationship({ id: TestData.id, type: resourceType }) + expect(isEqual(relResId, { id: TestData.id, type: resourceType})) + + }) + /* spec.relationship.stop */ + + + /* spec.parse.start */ + it(resourceType + '.parse', async () => { + + const reference = 'myReferenceId' + + const payload = ` + { + "data": { + "id": "AbcdEfgHiL", + "meta": { + "mode": "test", + "organization_id": "myOrgId" + }, + "type": "${resourceType}", + "links": { + "self": "/api/${resourceType}/AbcdEfgHiL" + }, + "attributes": { + "metadata": {}, + "reference": "${reference}", + "created_at": "2023-10-01T05:53:29.296Z", + "updated_at": "2023-10-10T08:52:13.251Z" + } + } + } + ` + + const res = clp[resourceType].parse(payload) as User + + expect(res.type).toBe(resourceType) + expect(res.reference).toBe(reference) + + }) + /* spec.parse.stop */ + + + +}) diff --git a/specs/resources/versions.spec.ts b/specs/resources/versions.spec.ts new file mode 100644 index 0000000..9be5c75 --- /dev/null +++ b/specs/resources/versions.spec.ts @@ -0,0 +1,128 @@ +/** + * ©2023 Commerce Layer Inc. + * Source code generated automatically by SDK codegen + **/ + +import { CommerceLayerProvisioningClient, Version } from '../../src' +import { isEqual } from 'lodash' +// eslint-disable-next-line @typescript-eslint/no-unused-vars +import { getClient, TestData, CommonData, handleError, interceptRequest, checkCommon, checkCommonData, checkCommonParamsList, checkCommonParams, currentAccessToken, randomValue } from '../../test/common' + + + +let clp: CommerceLayerProvisioningClient + + +beforeAll(async () => { clp = await getClient() }) + + +describe('Versions resource', () => { + + const resourceType = 'versions' + + + /* spec.retrieve.start */ + it(resourceType + '.retrieve', async () => { + + const id = TestData.id + const params = { fields: {[resourceType]: CommonData.paramsFields } } + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType, id, currentAccessToken) + checkCommonParams(config, params) + return interceptRequest() + }) + + await clp[resourceType].retrieve(id, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* spec.retrieve.stop */ + + + /* spec.list.start */ + it(resourceType + '.list', async () => { + + const params = CommonData.paramsList + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType) + checkCommonParamsList(config, params) + return interceptRequest() + }) + + await clp[resourceType].list(params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* spec.list.stop */ + + + /* spec.type.start */ + it(resourceType + '.type', async () => { + + const resource = { id: TestData.id, type: resourceType } + expect(clp[resourceType].isVersion(resource)).toBeTruthy() + + const type = clp[resourceType].type() + expect(type).toBe(resourceType) + + }) + /* spec.type.stop */ + + + /* spec.relationship.start */ + it(resourceType + '.relationship', async () => { + + const relId = clp[resourceType].relationship(TestData.id) + expect(isEqual(relId, { id: TestData.id, type: resourceType})) + + const relResId = clp[resourceType].relationship({ id: TestData.id, type: resourceType }) + expect(isEqual(relResId, { id: TestData.id, type: resourceType})) + + }) + /* spec.relationship.stop */ + + + /* spec.parse.start */ + it(resourceType + '.parse', async () => { + + const reference = 'myReferenceId' + + const payload = ` + { + "data": { + "id": "AbcdEfgHiL", + "meta": { + "mode": "test", + "organization_id": "myOrgId" + }, + "type": "${resourceType}", + "links": { + "self": "/api/${resourceType}/AbcdEfgHiL" + }, + "attributes": { + "metadata": {}, + "reference": "${reference}", + "created_at": "2023-10-01T05:53:29.296Z", + "updated_at": "2023-10-10T08:52:13.251Z" + } + } + } + ` + + const res = clp[resourceType].parse(payload) as Version + + expect(res.type).toBe(resourceType) + expect(res.reference).toBe(reference) + + }) + /* spec.parse.stop */ + + + +}) diff --git a/specs/sdk.spec.ts b/specs/sdk.spec.ts new file mode 100644 index 0000000..d1d8b97 --- /dev/null +++ b/specs/sdk.spec.ts @@ -0,0 +1,70 @@ + +import { CommerceLayerProvisioningClient, Role } from '../src' +import { sleep, sortObjectFields } from '../src/util' +import { getClient, TestData } from '../test/common' +import { ObjectType, isResourceType } from '../src/common' + + +let clp: CommerceLayerProvisioningClient + + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +beforeAll(async () => { clp = await getClient() }) + + +describe('SDK suite', () => { + + it('util.sleep', async () => { + + const ms = 2000 + + const start = Date.now() + await sleep(ms) + const stop = Date.now() + + const delay = stop - start + + expect(delay).toBeGreaterThanOrEqual(ms - 10) + expect(delay).toBeLessThan(ms + 50) + + }) + + + it('util.sortObjectFields', async () => { + + const obj: ObjectType = { + beta: 'beta', + delta: 'delta', + alfa: 'alfa', + gamma: 'gamma' + } + + const exp: ObjectType = { + alfa: 'alfa', + beta: 'beta', + gamma: 'gamma', + delta: 'delta' + } + + const sorted = sortObjectFields(obj) + + expect(sorted).toEqual(exp) + + }) + + + it('common.type', async () => { + + const customer: Role = { + id: TestData.id, + type: 'roles', + created_at: new Date().toISOString(), + updated_at: new Date().toISOString(), + name: 'Test Role' + } + + expect(isResourceType(customer)).toBeTruthy() + + }) + +}) diff --git a/specs/static.spec.ts b/specs/static.spec.ts new file mode 100644 index 0000000..a075812 --- /dev/null +++ b/specs/static.spec.ts @@ -0,0 +1,43 @@ + +import { CommerceLayerProvisioningClient, CommerceLayerProvisioningStatic } from '../src' +import { OPEN_API_SCHEMA_VERSION } from '../src/commercelayer' +import { getClient } from '../test/common' + + +let clp: CommerceLayerProvisioningClient + + +beforeAll(async () => { clp = await getClient() }) + + +describe('SDK:static suite', () => { + + it('static.SdkError', async () => { + const sdkError = CommerceLayerProvisioningStatic.isSdkError({ message: 'SdkError', name: 'SdkError', type: 'request' }) + expect(sdkError).toBeTruthy() + }) + + + it('static.ApiError', async () => { + const apiError = CommerceLayerProvisioningStatic.isApiError({ message: 'ApiError', name: 'ApiError', type: 'response' }) + expect(apiError).toBeTruthy() + }) + + + it('static.resources', async () => { + const resources = CommerceLayerProvisioningStatic.resources() + expect(Array.isArray(resources)).toBeTruthy() + }) + + + it('static.init', async () => { + const client = CommerceLayerProvisioningStatic.init({ accessToken: 'fake-access-token' }) + expect(client).not.toBeNull() + }) + + it('static.schema', async () => { + const sver = CommerceLayerProvisioningStatic.schemaVersion + expect(sver).toBe(OPEN_API_SCHEMA_VERSION) + }) + +}) diff --git a/src/api.ts b/src/api.ts new file mode 100644 index 0000000..9be1e9b --- /dev/null +++ b/src/api.ts @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + +import type { Resource, ResourceRel } from './resource' +import type { VersionType } from './resources/versions' + +// ##__API_RESOURCES_START__## +// ##__API_RESOURCES_TEMPLATE:: export { default as ##__RESOURCE_CLASS__## } from './resources/##__RESOURCE_TYPE__##' +/** + * ©2023 Commerce Layer Inc. + **/ +export { default as ApiCredentials } from './resources/api_credentials' +export { default as Memberships } from './resources/memberships' +export { default as Organizations } from './resources/organizations' +export { default as Permissions } from './resources/permissions' +export { default as Roles } from './resources/roles' +export { default as Users } from './resources/user' +export { default as Versions } from './resources/versions' +// ##__API_RESOURCES_STOP__## + + +export type ResourceTypeLock = +// ##__API_RESOURCE_TYPES_START__## + 'api_credentials' +| 'memberships' +| 'organizations' +| 'permissions' +| 'roles' +| 'user' +| 'versions' +// ##__API_RESOURCE_TYPES_STOP__## + + +export const resourceList = [ +// ##__API_RESOURCE_LIST_START__## + 'api_credentials', + 'memberships', + 'organizations', + 'permissions', + 'roles', + 'user', + 'versions' +// ##__API_RESOURCE_LIST_STOP__## +] as const + + + +// Retrievable resources +export type RetrievableResourceType = ResourceTypeLock + +export type RetrievableResource = Resource & { + type: RetrievableResourceType +} + + +// Listable resources +export type ListableResourceType = Exclude + +export type ListableResource = Resource & { + type: ListableResourceType +} + + +// Creatable resources +export type CreatableResourceType = + // ##__API_RESOURCE_CREATABLE_START__## + 'api_credentials' +| 'memberships' +| 'organizations' +| 'permissions' +| 'roles' + // ##__API_RESOURCE_CREATABLE_STOP__## + +export type CreatableResource = Resource & { + type: CreatableResourceType +} + + +// Updatable resources +export type UpdatableResourceType = + // ##__API_RESOURCE_UPDATABLE_START__## + 'api_credentials' +| 'memberships' +| 'organizations' +| 'permissions' +| 'roles' + // ##__API_RESOURCE_UPDATABLE_STOP__## + +export type UpdatableResource = Resource & { + type: UpdatableResourceType +} + + +// Deletable resources +export type DeletableResourceType = + // ##__API_RESOURCE_DELETABLE_START__## + 'api_credentials' +| 'memberships' + // ##__API_RESOURCE_DELETABLE_STOP__## + +export type DeletableResource = Resource & { + type: DeletableResourceType +} + + +// Versionable resources +export type VersionableResourceType = + // ##__API_RESOURCE_VERSIONABLE_START__## + 'memberships' +| 'permissions' +| 'roles' + // ##__API_RESOURCE_VERSIONABLE_STOP__## + +export type VersionableResource = Resource & { + type: VersionableResourceType, + versions?: Array | null +} diff --git a/src/client.ts b/src/client.ts new file mode 100644 index 0000000..ba7b3d0 --- /dev/null +++ b/src/client.ts @@ -0,0 +1,179 @@ + +import axios from 'axios' +import type { AxiosAdapter, CreateAxiosDefaults, AxiosInstance, AxiosProxyConfig, Method } from 'axios' +import { SdkError, handleError } from './error' +import type { InterceptorManager } from './interceptor' +import config from './config' +import type { Agent as HttpAgent } from 'http' +import type { Agent as HttpsAgent } from 'https' + +import Debug from './debug' +const debug = Debug('client') + + + +const baseURL = (domain?: string): string => { + return `https://provisioning.${domain || config.default.domain}/api` +} + + +type ProxyConfig = AxiosProxyConfig | false +type Adapter = AxiosAdapter + +type RequestParams = Record +type RequestHeaders = Record + +// Subset of AxiosRequestConfig +type RequestConfig = { + timeout?: number; + params?: RequestParams; + httpAgent?: HttpAgent; + httpsAgent?: HttpsAgent; + proxy?: ProxyConfig; + headers?: RequestHeaders +} + +type ApiConfig = { + domain?: string, + accessToken: string +} + +type ApiClientInitConfig = ApiConfig & RequestConfig & { adapter?: Adapter } +type ApiClientConfig = Partial + + +class ApiClient { + + static create(options: ApiClientInitConfig): ApiClient { + for (const attr of config.client.requiredAttributes) + if (!options || !options[attr as keyof ApiClientInitConfig]) throw new SdkError({ message: `Undefined '${attr}' parameter` }) + return new ApiClient(options) + } + + baseUrl: string + #accessToken: string + readonly #client: AxiosInstance + + public interceptors: InterceptorManager + + private constructor(options: ApiClientInitConfig) { + + debug('new client instance %O', options) + + this.baseUrl = baseURL(options.domain) + this.#accessToken = options.accessToken + + const axiosConfig: RequestConfig = { + timeout: options.timeout || config.client.timeout, + proxy: options.proxy, + httpAgent: options.httpAgent, + httpsAgent: options.httpsAgent, + } + + // Set custom headers + const customHeaders = this.customHeaders(options.headers) + + const axiosOptions: CreateAxiosDefaults = { + baseURL: this.baseUrl, + timeout: config.client.timeout, + headers: { + ...customHeaders, + 'Accept': 'application/vnd.api+json', + 'Content-Type': 'application/vnd.api+json', + 'Authorization': 'Bearer ' + this.#accessToken + }, + ...axiosConfig + } + + if (options.adapter) axiosOptions.adapter = options.adapter + + debug('axios options: %O', axiosOptions) + + this.#client = axios.create(axiosOptions) + + this.interceptors = this.#client.interceptors + + } + + + config(config: ApiClientConfig): ApiClient { + + debug('config %o', config) + + const def = this.#client.defaults + + // Axios config + if (config.timeout) def.timeout = config.timeout + if (config.proxy) def.proxy = config.proxy + if (config.httpAgent) def.httpAgent = config.httpAgent + if (config.httpsAgent) def.httpsAgent = config.httpsAgent + + // API Client config + if (config.accessToken) { + this.#accessToken = config.accessToken + def.headers.common.Authorization = 'Bearer ' + this.#accessToken; + } + if (config.headers) def.headers.common = this.customHeaders(config.headers) + if (config.adapter) this.adapter(config.adapter) + + return this + + } + + + adapter(adapter: Adapter): ApiClient { + if (adapter) this.#client.defaults.adapter = adapter + return this + } + + + async request(method: Method, path: string, body?: any, options?: ApiClientConfig): Promise { + + debug('request %s %s, %O, %O', method, path, body || {}, options || {}) + + const data = body ? { data: body } : undefined + const url = path + + // Runtime request parameters + // const baseUrl = options?.organization ? baseURL(options.organization, options.domain) : undefined + const accessToken = options?.accessToken || this.#accessToken + + const headers = this.customHeaders(options?.headers) + if (accessToken) headers.Authorization = 'Bearer ' + accessToken + + const requestParams = { method, url, data, ...options, headers } + + debug('request params: %O', requestParams) + + // const start = Date.now() + return this.#client.request(requestParams) + .then(response => response.data) + .catch(error => handleError(error)) + // .finally(() => console.log(`<<-- ${method} ${path} ${Date.now() - start}`)) + + } + + + private customHeaders(headers?: RequestHeaders): RequestHeaders { + const customHeaders: RequestHeaders = {} + if (headers) { + for (const [name, value] of Object.entries(headers)) + if (!['accept', 'content-type', 'authorization'].includes(name.toLowerCase())) customHeaders[name] = value + } + return customHeaders + } + + + /* + get currentAccessToken(): string { + return this.#accessToken + } + */ + +} + + + +export default ApiClient + +export type { ApiClientInitConfig, ApiClientConfig, RequestConfig } diff --git a/src/commercelayer.ts b/src/commercelayer.ts new file mode 100644 index 0000000..326cdd2 --- /dev/null +++ b/src/commercelayer.ts @@ -0,0 +1,154 @@ + +import * as api from './api' +import type { ApiError } from './error' +import type { ErrorInterceptor, InterceptorType, RawResponseReader, RequestInterceptor, ResponseInterceptor, ResponseObj, HeadersObj } from './interceptor' +import { CommerceLayerProvisioningStatic } from './static' +import ResourceAdapter, { type ResourcesInitConfig } from './resource' + +import Debug from './debug' +const debug = Debug('commercelayer') + + +// Autogenerated schema version number, do not remove this line +const OPEN_API_SCHEMA_VERSION = '1.0.0' +export { OPEN_API_SCHEMA_VERSION } + + +// SDK local configuration +type SdkConfig = { + // abc?: string +} + +type CommerceLayerInitConfig = SdkConfig & ResourcesInitConfig +type CommerceLayerConfig = Partial + + + +class CommerceLayerProvisioningClient { + + // static get openApiSchemaVersion(): string { return OPEN_API_SCHEMA_VERSION } + readonly openApiSchemaVersion = OPEN_API_SCHEMA_VERSION + + readonly #adapter: ResourceAdapter + // #organization: string + // #environment: ApiMode = sdkConfig.default.environment + + // ##__CL_RESOURCES_DEF_START__## + // ##__CL_RESOURCES_DEF_TEMPLATE:: ##__TAB__####__RESOURCE_TYPE__##: api.##__RESOURCE_CLASS__## + api_credentials: api.ApiCredentials + memberships: api.Memberships + organizations: api.Organizations + permissions: api.Permissions + roles: api.Roles + user: api.Users + versions: api.Versions + // ##__CL_RESOURCES_DEF_STOP__## + + + constructor(config: CommerceLayerInitConfig) { + + debug('new commercelayer provisioning instance %O', config) + + this.#adapter = new ResourceAdapter(config) + // this.#environment = 'test' + + // ##__CL_RESOURCES_INIT_START__## + // ##__CL_RESOURCES_INIT_TEMPLATE:: ##__TAB__####__TAB__##this.##__RESOURCE_TYPE__## = new api.##__RESOURCE_CLASS__##(this.#adapter) + this.api_credentials = new api.ApiCredentials(this.#adapter) + this.memberships = new api.Memberships(this.#adapter) + this.organizations = new api.Organizations(this.#adapter) + this.permissions = new api.Permissions(this.#adapter) + this.roles = new api.Roles(this.#adapter) + this.user = new api.Users(this.#adapter) + this.versions = new api.Versions(this.#adapter) + // ##__CL_RESOURCES_INIT_STOP__## + + } + + // get environment(): ApiMode { return this.#environment } + + + private localConfig(config: SdkConfig/* & { organization?: string } */): void { + + } + + + config(config: CommerceLayerConfig): CommerceLayerProvisioningClient { + + debug('config %o', config) + + // CommerceLayer config + this.localConfig(config) + // ResourceAdapter config + // To rebuild baseUrl in client in case only the domain is defined + // if (!config.organization) config.organization = this.currentOrganization + this.#adapter.config(config) + + return this + + } + + + resources(): readonly string[] { + return CommerceLayerProvisioningStatic.resources() + } + + + // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any + isApiError(error: any): error is ApiError { + return CommerceLayerProvisioningStatic.isApiError(error) + } + + + addRequestInterceptor(onFulfilled?: RequestInterceptor, onRejected?: ErrorInterceptor): number { + return this.#adapter.interceptors.request.use(onFulfilled, onRejected) + } + + addResponseInterceptor(onFulfilled?: ResponseInterceptor, onRejected?: ErrorInterceptor): number { + return this.#adapter.interceptors.response.use(onFulfilled, onRejected) + } + + removeInterceptor(type: InterceptorType, id: number): void { + this.#adapter.interceptors[type].eject(id) + } + + + addRawResponseReader(options?: { headers: boolean }): RawResponseReader { + + const reader: RawResponseReader = { + id: undefined, + rawResponse: undefined, + headers: undefined, + } + + function rawResponseInterceptor(response: ResponseObj): ResponseObj { + reader.rawResponse = response?.data + if (options?.headers) reader.headers = (response.headers as HeadersObj) + return response + } + + const interceptor = this.addResponseInterceptor(rawResponseInterceptor) + reader.id = interceptor + + return reader + + } + + removeRawResponseReader(reader: number | RawResponseReader): void { + const id = (typeof reader === 'number') ? reader : reader?.id + if (id && (id >= 0)) this.removeInterceptor('response', id) + } + +} + + + +const CommerceLayerProvisioning = (config: CommerceLayerInitConfig): CommerceLayerProvisioningClient => { + return new CommerceLayerProvisioningClient(config) +} + + +export default CommerceLayerProvisioning +export { CommerceLayerProvisioning } + +export type { CommerceLayerProvisioningClient, CommerceLayerConfig, CommerceLayerInitConfig } diff --git a/src/common.ts b/src/common.ts new file mode 100644 index 0000000..5f905a2 --- /dev/null +++ b/src/common.ts @@ -0,0 +1,17 @@ + +import { resourceList } from './api' +import type { ResourceId, ResourceType } from './resource' + +const isResourceId = (resource: any): resource is ResourceId => { + return (resource?.type && resource.id) && resourceList.includes(resource.type) +} + +const isResourceType = (resource: any): resource is ResourceType => { + return resource && (typeof resource.type !== 'undefined') && resource.type && resourceList.includes(resource.type) +} + + +export { isResourceId, isResourceType } + + +export type ObjectType = Record diff --git a/src/config.ts b/src/config.ts new file mode 100644 index 0000000..d091abc --- /dev/null +++ b/src/config.ts @@ -0,0 +1,18 @@ +// export type ApiMode = 'test' | 'live' + + +const config = { + default: { + // environment: 'test', + domain: 'commercelayer.io', + pageNumber: 1, + pageSize: 10, + }, + client: { + timeout: 15000, + requiredAttributes: ['accessToken'], + } +} as const + + +export default config diff --git a/src/debug.ts b/src/debug.ts new file mode 100644 index 0000000..75f8e35 --- /dev/null +++ b/src/debug.ts @@ -0,0 +1,51 @@ + +type Debugger = (pattern: string, ...args: any[]) => void + +type DebuggerFactory = (namespace: string) => Debugger + + +/* Nope debugger */ +const debuggerFunction = (_pattern: string, ..._args: any[]): void => { + // console.log(_pattern) +} + +let debuggerFactory: DebuggerFactory = (_namespace: string): Debugger => debuggerFunction + + +/* Try loading 'debug' module */ +try { + const debugModule = require('debug') + if (debugModule && (typeof debugModule === 'function')) debuggerFactory = debugModule +} catch (error) { + // +} + + +const debugPrefix = 'clsdk' + + +/* Retrieve the name of the caller 'module' */ +/* +const caller = (): string => { + + const err = new Error() + + Error.prepareStackTrace = (_, stack) => stack + const stack = err.stack as unknown as NodeJS.CallSite[] + Error.prepareStackTrace = undefined + + const fileName = stack[2].getFileName() || '/' + + return fileName.replace(/^.*[\\/]/, '').replace('.ts', '') + +} +*/ + + +/* Return a debugger for the defined namespace */ +const debug = (namespace: string): Debugger => { + return debuggerFactory(`${debugPrefix}:${namespace}`) +} + + +export default debug diff --git a/src/error.ts b/src/error.ts new file mode 100644 index 0000000..b9b0ec7 --- /dev/null +++ b/src/error.ts @@ -0,0 +1,92 @@ +import axios from 'axios' + +enum ErrorType { + CLIENT = 'client', // Error instantiating the client + REQUEST = 'request', // Error preparing API request + RESPONSE = 'response', // Error response from API + CANCEL = 'cancel', // Forced request abort using interceptor + PARSE = 'parse', // Error parsing API resource + GENERIC = 'generic', // Other not specified errors +} + + +class SdkError extends Error { + + static NAME = 'SdkError' + + static isSdkError(error: any): error is ApiError { + return error && [SdkError.NAME, ApiError.NAME].includes(error.name) && Object.values(ErrorType).includes(error.type) + } + + type: string + code?: string + source?: Error + request?: any + + constructor(error: { message: string, type?: ErrorType }) { + super(error.message) + this.name = SdkError.NAME// this.constructor.name + this.type = error.type || ErrorType.GENERIC + } + +} + +class ApiError extends SdkError { + + static NAME = 'ApiError' + + static isApiError(error: any): error is ApiError { + return SdkError.isSdkError(error) && (error.name === ApiError.NAME) && (error.type === ErrorType.RESPONSE) + } + + errors: any[] = [] + status?: number + statusText?: string + + constructor(error: SdkError) + constructor(error: { message: string }) { + super({ ...error, type: ErrorType.RESPONSE }) + this.name = ApiError.NAME// this.constructor.name + } + + first(): any { + return (this.errors?.length > 0) ? this.errors[0] : undefined + } + +} + + + +const handleError = (error: Error): never => { + + let sdkError = new SdkError({ message: error.message }) + + if (axios.isAxiosError(error)) { + if (error.response) { + // The request was made and the server responded with a status code that falls out of the range of 2xx + const apiError = new ApiError(sdkError) + apiError.type = ErrorType.RESPONSE + apiError.status = error.response.status + apiError.statusText = error.response.statusText + apiError.code = String(apiError.status) + apiError.errors = error.response.data.errors + if (!apiError.message && apiError.statusText) apiError.message = apiError.statusText + sdkError = apiError + } else if (error.request) { + // The request was made but no response was received + // `error.request` is an instance of XMLHttpRequest in the browser and an instance of http.ClientRequest in node.js + sdkError.type = ErrorType.REQUEST + sdkError.request = error.request + } else { + // Something happened in setting up the request that triggered an Error + sdkError.type = ErrorType.CLIENT + } + } else if (axios.isCancel(error)) sdkError.type = ErrorType.CANCEL + else sdkError.source = error + + throw sdkError + +} + + +export { SdkError, ApiError, ErrorType, handleError } diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..f60dcf1 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,21 @@ + +// SDK +export { default, CommerceLayerProvisioning } from './commercelayer' + +// Commerce Layer Provisioning client type +export type { CommerceLayerProvisioningClient } from './commercelayer' + +// Commerce Layer static functions +export { CommerceLayerProvisioningStatic } from './static' + +// Query filter types +export type { QueryParamsRetrieve, QueryParamsList, QueryParams } from './query' + +// Resource model types +export type * from './model' + +// Raw response reader and request/response interceptors +export type { RequestObj, ResponseObj, ErrorObj, HeadersObj } from './interceptor' + +// Error types +export type { SdkError, ApiError, ErrorType } from './error' diff --git a/src/interceptor.ts b/src/interceptor.ts new file mode 100644 index 0000000..2422b53 --- /dev/null +++ b/src/interceptor.ts @@ -0,0 +1,43 @@ + +import type { AxiosError, AxiosInterceptorManager, AxiosRequestConfig, AxiosResponse, AxiosResponseHeaders, RawAxiosResponseHeaders } from 'axios' + + +type InterceptorManager = { + request: AxiosInterceptorManager; + response: AxiosInterceptorManager +} + + +// Request +type RequestObj = AxiosRequestConfig +type RequestInterceptor = (request: RequestObj) => RequestObj | Promise + +// Response +type ResponseObj = AxiosResponse +type ResponseInterceptor = (response: ResponseObj) => ResponseObj + +// Headers +type ApiHeadersList = 'x-ratelimit-limit' | 'x-ratelimit-count' | 'x-ratelimit-period' | 'x-ratelimit-interval' | 'x-ratelimit-remaining' +type ApiHeaders = { [key in ApiHeadersList]: string | number | boolean } +type HeadersObj = (AxiosResponseHeaders | RawAxiosResponseHeaders) & ApiHeaders + + +type ErrorObj = AxiosError +type ErrorInterceptor = (error: ErrorObj) => ErrorObj + +type InterceptorType = 'request' | 'response' + + +export type { InterceptorManager, RequestInterceptor, ResponseInterceptor, ErrorInterceptor, InterceptorType } +export type { RequestObj, ResponseObj, ErrorObj, HeadersObj } + + + +type RawResponseReader = { + id: number | undefined; + rawResponse: ResponseObj | undefined; + headers: HeadersObj | undefined; +} + + +export type { RawResponseReader } diff --git a/src/jsonapi.ts b/src/jsonapi.ts new file mode 100644 index 0000000..c9c1198 --- /dev/null +++ b/src/jsonapi.ts @@ -0,0 +1,111 @@ + +import type { Value as JSONValue } from 'json-typescript' +import type { DocWithData, Included, ResourceIdentifierObject, ResourceObject as JSONAPIObject, AttributesObject, RelationshipsObject } from 'jsonapi-typescript' +import type { ResourceCreate, ResourceUpdate, ResourceId, ResourceType, Resource, ResourceRel } from './resource' +import { isResourceId, isResourceType } from './common' + +import Debug from './debug' +const debug = Debug('jsonapi') + + + +// DENORMALIZATION + +const denormalize = (response: DocWithData): R | R[] => { + + let denormalizedResponse + + if (response.links) delete response.links + + const data = response.data + const included = response.included + + if (!data) denormalizedResponse = data + else { + if (Array.isArray(data)) denormalizedResponse = data.map(res => denormalizeResource(res, included)) + else denormalizedResponse = denormalizeResource(data, included) + } + + return denormalizedResponse + +} + + +const findIncluded = (rel: ResourceIdentifierObject, included: Included = []): JSONAPIObject | undefined => { + const inc = included.find(inc => { + return (rel.id === inc.id) && (rel.type === inc.type) + }) + return inc || rel +} + + +const denormalizeResource = (res: any, included?: Included): T => { + + debug('denormalize resource: %O, %o', res, included || {}) + + if (!res) return res + + const resource = { + id: res.id, + type: res.type, + ...res.attributes, + } + + if (res.relationships) Object.keys(res.relationships).forEach(key => { + const rel = res.relationships[key].data + if (rel) { + if (Array.isArray(rel)) resource[key] = rel.map(r => denormalizeResource(findIncluded(r, included), included)) + else resource[key] = denormalizeResource(findIncluded(rel, included), included) + } else if (rel === null) resource[key] = null + }) + + debug('denormalized resource: %O', resource) + + return resource + +} + + +// NORMALIZATION + +const normalize = (resource: (ResourceCreate & ResourceType) | (ResourceUpdate & ResourceId)): JSONAPIObject => { + + debug('normalize resource: %O', resource) + + const attributes: AttributesObject = {} + const relationships: RelationshipsObject = {} + + for (const field in resource) { + if (['type', 'id'].includes(field)) continue + const value = resource[field as keyof (ResourceCreate | ResourceUpdate)] + if (Array.isArray(value) && (value.length === 1) && isResourceType(value[0]) && ((value[0] as ResourceRel).id === null)) { + relationships[field] = { data: [] } + } + else + if (value && isResourceType(value) && ((value as ResourceRel).id === null)) { + relationships[field] = { data: null } + } + else + if (value && (isResourceId(value) || (Array.isArray(value) && isResourceId(value[0])))) { + relationships[field] = { data: value as ResourceIdentifierObject } + } + else attributes[field] = value as JSONValue + } + + const normalized: JSONAPIObject = { + type: resource.type, + attributes, + relationships + } + + if (isResourceId(resource)) normalized.id = resource.id + + debug('normalized resource: %O', normalized) + + return normalized + +} + + + +export { denormalize, normalize } diff --git a/src/model.ts b/src/model.ts new file mode 100644 index 0000000..156bacb --- /dev/null +++ b/src/model.ts @@ -0,0 +1,14 @@ + +// ##__MODEL_TYPES_START__## +// ##__MODEL_TYPES_TEMPLATE:: export type { ##__RESOURCE_MODELS__## } from './resources/##__RESOURCE_TYPE__##' +/** + * ©2023 Commerce Layer Inc. + **/ +export type { ApiCredential, ApiCredentialCreate, ApiCredentialUpdate } from './resources/api_credentials' +export type { Membership, MembershipCreate, MembershipUpdate } from './resources/memberships' +export type { Organization, OrganizationCreate, OrganizationUpdate } from './resources/organizations' +export type { Permission, PermissionCreate, PermissionUpdate } from './resources/permissions' +export type { Role, RoleCreate, RoleUpdate } from './resources/roles' +export type { User, UserUpdate } from './resources/user' +export type { Version } from './resources/versions' +// ##__MODEL_TYPES_STOP__## \ No newline at end of file diff --git a/src/query.ts b/src/query.ts new file mode 100644 index 0000000..483ee36 --- /dev/null +++ b/src/query.ts @@ -0,0 +1,76 @@ + +import type { ResourceType } from "./resource" + +import Debug from './debug' +const debug = Debug('query') + + +type QueryFilter = Record + + +interface QueryParamsRetrieve { + include?: string[] + fields?: string[] | Record +} + + +interface QueryParamsList extends QueryParamsRetrieve { + sort?: string[] | Record + filters?: QueryFilter + pageNumber?: number + pageSize?: number +} + +type QueryParams = QueryParamsRetrieve | QueryParamsList + +export type { QueryParamsRetrieve, QueryParamsList, QueryParams, QueryFilter } + + + +const isParamsList = (params: any): params is QueryParamsList => { + return params && (params.filters || params.pageNumber || params.pageSize || params.sort) +} + + +const generateQueryStringParams = (params: QueryParamsRetrieve | QueryParamsList | undefined, res: string | ResourceType): Record => { + + debug('generate query string params: %O, %O', params, res) + + const qp: Record = {} + if (!params) return qp + + // Include + if (params.include) qp.include = params.include.join(',') + // Fields + if (params.fields) { + if (Array.isArray(params.fields)) params.fields = { [(res as ResourceType).type || res]: params.fields } + Object.entries(params.fields).forEach(([p, v]) => { + qp[`fields[${p}]`] = v.join(',') + }) + } + + if (isParamsList(params)) { + // Sort + if (params.sort) { + if (Array.isArray(params.sort)) qp.sort = params.sort.join(',') + else qp.sort = Object.entries(params.sort).map(([k, v]) => `${v === 'desc' ? '-' : ''}${k}`).join(',') + } + // Page + if (params.pageNumber) qp['page[number]'] = String(params.pageNumber) + if (params.pageSize) qp['page[size]'] = String(params.pageSize) + // Filters + if (params.filters) { + Object.entries(params.filters).forEach(([p, v]) => { + qp[`filter[q][${p}]`] = String(v) + }) + } + } + + debug('query string params: %O', qp) + + return qp + +} + + +export { generateQueryStringParams, isParamsList } diff --git a/src/resource.ts b/src/resource.ts new file mode 100644 index 0000000..b28a237 --- /dev/null +++ b/src/resource.ts @@ -0,0 +1,326 @@ + +import ApiClient, { type ApiClientInitConfig } from './client' +import { denormalize, normalize } from './jsonapi' +import type { QueryParamsRetrieve, QueryParamsList, QueryFilter, QueryParams } from './query' +import { generateQueryStringParams, isParamsList } from './query' +import type { ResourceTypeLock } from './api' +import config from './config' +import type { InterceptorManager } from './interceptor' + +import Debug from './debug' +import { ErrorType, SdkError } from './error' +const debug = Debug('resource') + + + +type ResourceNull = { id: null } & ResourceType +type ResourceRel = ResourceId | ResourceNull + + +type Metadata = Record + + +interface ResourceType { + readonly type: ResourceTypeLock +} + + +interface ResourceId extends ResourceType { + readonly id: string +} + + +interface ResourceBase { + reference?: string | null + reference_origin?: string | null + metadata?: Metadata +} + + +interface Resource extends ResourceBase, ResourceId { + readonly created_at: string + readonly updated_at: string +} + + +interface ResourceCreate extends ResourceBase { + +} + + +interface ResourceUpdate extends ResourceBase { + readonly id: string +} + + +type ListMeta = { + readonly pageCount: number + readonly recordCount: number + readonly currentPage: number + readonly recordsPerPage: number +} + +class ListResponse extends Array { + + readonly meta: ListMeta + + constructor(meta: ListMeta, data: R[]) { + super(...(data || [])) + this.meta = meta + } + + first(): R | undefined { return this.length ? this[0] : undefined } + last(): R | undefined { return this.length ? this[this.length - 1] : undefined } + get(index: number): R | undefined { return (this.length && (index >= 0)) ? this[index] : undefined } + + hasNextPage(): boolean { return (this.meta.currentPage < this.meta.pageCount) } + hasPrevPage(): boolean { return (this.meta.currentPage > 1) } + + getRecordCount(): number { return this.meta.recordCount } + getPageCount(): number { return this.meta.pageCount } + get recordCount(): number { return this.meta.recordCount } + get pageCount(): number { return this.meta.pageCount } + +} + + + +export type { Metadata, ResourceType, ResourceId, Resource, ResourceCreate, ResourceUpdate, ListResponse, ListMeta, ResourceRel } + + +// Resource adapters local configuration +type ResourceAdapterConfig = { + // xyz?: boolean +} + +type ResourcesInitConfig = ResourceAdapterConfig & ApiClientInitConfig +type ResourcesConfig = Partial + + +class ResourceAdapter { + + readonly #client: ApiClient + + readonly #config: ResourceAdapterConfig = {} + + + constructor(config: ResourcesInitConfig) { + this.#client = ApiClient.create(config) + this.localConfig(config) + } + + + get interceptors(): InterceptorManager { return this.#client.interceptors } + + + private localConfig(config: ResourceAdapterConfig): void { + // if (typeof config.xyz !== 'undefined') this.#config.xyz = config.xyz + } + + + config(config: ResourcesConfig): ResourceAdapter { + + debug('config %o', config) + + // ResourceAdapter config + this.localConfig(config) + // Client config + this.#client.config(config) + + return this + + } + + + /* + get clientInstance(): ApiClient { + return this.#client + } + */ + + + async singleton(resource: ResourceType, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { + + debug('singleton: %o, %O, %O', resource, params || {}, options || {}) + + const queryParams = generateQueryStringParams(params, resource) + if (options?.params) Object.assign(queryParams, options?.params) + + const res = await this.#client.request('get', `${resource.type}`, undefined, { ...options, params: queryParams }) + const r = denormalize(res) as R + + return r + + } + + + async retrieve(resource: ResourceId, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { + + debug('retrieve: %o, %O, %O', resource, params || {}, options || {}) + + const queryParams = generateQueryStringParams(params, resource) + if (options?.params) Object.assign(queryParams, options?.params) + + const res = await this.#client.request('get', `${resource.type}/${resource.id}`, undefined, { ...options, params: queryParams }) + const r = denormalize(res) as R + + return r + + } + + + async list(resource: ResourceType, params?: QueryParamsList, options?: ResourcesConfig): Promise> { + + debug('list: %o, %O, %O', resource, params || {}, options || {}) + + const queryParams = generateQueryStringParams(params, resource) + if (options?.params) Object.assign(queryParams, options?.params) + + const res = await this.#client.request('get', `${resource.type}`, undefined, { ...options, params: queryParams }) + const r = denormalize(res) as R[] + + const meta: ListMeta = { + pageCount: Number(res.meta?.page_count), + recordCount: Number(res.meta?.record_count), + currentPage: params?.pageNumber || config.default.pageNumber, + recordsPerPage: params?.pageSize || config.default.pageSize + } + + return new ListResponse(meta, r) + + } + + + async create(resource: C & ResourceType, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { + + debug('create: %o, %O, %O', resource, params || {}, options || {}) + + const queryParams = generateQueryStringParams(params, resource) + if (options?.params) Object.assign(queryParams, options?.params) + + const data = normalize(resource) + const res = await this.#client.request('post', resource.type, data, { ...options, params: queryParams }) + const r = denormalize(res) as R + + return r + + } + + + async update(resource: U & ResourceId, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { + + debug('update: %o, %O, %O', resource, params || {}, options || {}) + + const queryParams = generateQueryStringParams(params, resource) + if (options?.params) Object.assign(queryParams, options?.params) + + const data = normalize(resource) + const res = await this.#client.request('patch', `${resource.type}/${resource.id}`, data, { ...options, params: queryParams }) + const r = denormalize(res) as R + + return r + + } + + + async delete(resource: ResourceId, options?: ResourcesConfig): Promise { + debug('delete: %o, %O', resource, options || {}) + await this.#client.request('delete', `${resource.type}/${resource.id}`, undefined, options) + } + + + async fetch(resource: string | ResourceType, path: string, params?: QueryParams, options?: ResourcesConfig): Promise> { + + debug('fetch: %o, %O, %O', path, params || {}, options || {}) + + const queryParams = generateQueryStringParams(params, resource) + if (options?.params) Object.assign(queryParams, options?.params) + + const res = await this.#client.request('get', path, undefined, { ...options, params: queryParams }) + const r = denormalize(res) + + if (Array.isArray(r)) { + const p = params as QueryParamsList + const meta: ListMeta = { + pageCount: Number(res.meta?.page_count), + recordCount: Number(res.meta?.record_count), + currentPage: p?.pageNumber || config.default.pageNumber, + recordsPerPage: p?.pageSize || config.default.pageSize + } + return new ListResponse(meta, r) + } + else return r + + } + +} + + + +abstract class ApiResourceBase { + + static readonly TYPE: ResourceTypeLock + protected readonly resources: ResourceAdapter + + constructor(adapter: ResourceAdapter) { + debug('new resource instance: %s', this.type()) + this.resources = adapter + } + + abstract relationship(id: string | ResourceId | null): ResourceRel + + abstract type(): ResourceTypeLock + + parse(resource: any): R | R[] { + try { + const res = JSON.parse(resource) + if (res.data?.type !== this.type()) throw new SdkError({ message: `Invalid resource type [${res.data?.type}]`, type: ErrorType.PARSE }) + return denormalize(res) + } catch (error: any) { + if (SdkError.isSdkError(error)) throw error + else throw new SdkError({ message: `Payload parse error [${error.message}]`, type: ErrorType.PARSE }) + } + } + + + // reference, reference_origin and metadata attributes are always updatable + async update(resource: ResourceUpdate, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { + return this.resources.update({ ...resource, type: this.type() }, params, options) + } + +} + + +abstract class ApiResource extends ApiResourceBase { + + async retrieve(id: string | ResourceId, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { + return this.resources.retrieve((typeof id === 'string') ? { type: this.type(), id } : id, params, options) + } + + async list(params?: QueryParamsList, options?: ResourcesConfig): Promise> { + return this.resources.list({ type: this.type() }, params, options) + } + + async count(filter?: QueryFilter | QueryParamsList, options?: ResourcesConfig): Promise { + const params: QueryParamsList = { filters: isParamsList(filter) ? filter.filters : filter, pageNumber: 1, pageSize: 1 } + const response = await this.list(params, options) + return Promise.resolve(response.meta.recordCount) + } + +} + + +abstract class ApiSingleton extends ApiResourceBase { + + async retrieve(params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { + return this.resources.singleton({ type: this.type() }, params, options) + } + +} + + + +export default ResourceAdapter + +export { ApiResource, ApiSingleton } +export type { ResourcesConfig, ResourcesInitConfig } diff --git a/src/resources/api_credentials.ts b/src/resources/api_credentials.ts new file mode 100644 index 0000000..2f59493 --- /dev/null +++ b/src/resources/api_credentials.ts @@ -0,0 +1,104 @@ +import { ApiResource } from '../resource' +import type { Resource, ResourceCreate, ResourceUpdate, ResourceId, ResourcesConfig, ResourceRel } from '../resource' +import type { QueryParamsRetrieve } from '../query' + +import type { Organization, OrganizationType } from './organizations' +import type { Role, RoleType } from './roles' + + +type ApiCredentialType = 'api_credentials' +type ApiCredentialRel = ResourceRel & { type: ApiCredentialType } +type OrganizationRel = ResourceRel & { type: OrganizationType } +type RoleRel = ResourceRel & { type: RoleType } + + +interface ApiCredential extends Resource { + + readonly type: ApiCredentialType + + name: string + kind: string + confidential?: boolean | null + redirect_uri?: string | null + client_id?: string | null + client_secret?: string | null + scopes?: string | null + expires_in?: number | null + + organization?: Organization | null + role?: Role | null + +} + + +interface ApiCredentialCreate extends ResourceCreate { + + name: string + kind: string + redirect_uri?: string | null + expires_in?: number | null + + organization: OrganizationRel + role?: RoleRel | null + +} + + +interface ApiCredentialUpdate extends ResourceUpdate { + + name?: string | null + redirect_uri?: string | null + expires_in?: number | null + + role?: RoleRel | null + +} + + +class ApiCredentials extends ApiResource { + + static readonly TYPE: ApiCredentialType = 'api_credentials' as const + + async create(resource: ApiCredentialCreate, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { + return this.resources.create({ ...resource, type: ApiCredentials.TYPE }, params, options) + } + + async update(resource: ApiCredentialUpdate, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { + return this.resources.update({ ...resource, type: ApiCredentials.TYPE }, params, options) + } + + async delete(id: string | ResourceId, options?: ResourcesConfig): Promise { + await this.resources.delete((typeof id === 'string')? { id, type: ApiCredentials.TYPE } : id, options) + } + + async organization(apiCredentialId: string | ApiCredential, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { + const _apiCredentialId = (apiCredentialId as ApiCredential).id || apiCredentialId as string + return this.resources.fetch({ type: 'organizations' }, `api_credentials/${_apiCredentialId}/organization`, params, options) as unknown as Organization + } + + async role(apiCredentialId: string | ApiCredential, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { + const _apiCredentialId = (apiCredentialId as ApiCredential).id || apiCredentialId as string + return this.resources.fetch({ type: 'roles' }, `api_credentials/${_apiCredentialId}/role`, params, options) as unknown as Role + } + + + isApiCredential(resource: any): resource is ApiCredential { + return resource.type && (resource.type === ApiCredentials.TYPE) + } + + + relationship(id: string | ResourceId | null): ApiCredentialRel { + return ((id === null) || (typeof id === 'string')) ? { id, type: ApiCredentials.TYPE } : { id: id.id, type: ApiCredentials.TYPE } + } + + + type(): ApiCredentialType { + return ApiCredentials.TYPE + } + +} + + +export default ApiCredentials + +export type { ApiCredential, ApiCredentialCreate, ApiCredentialUpdate, ApiCredentialType } diff --git a/src/resources/memberships.ts b/src/resources/memberships.ts new file mode 100644 index 0000000..d746031 --- /dev/null +++ b/src/resources/memberships.ts @@ -0,0 +1,98 @@ +import { ApiResource } from '../resource' +import type { Resource, ResourceCreate, ResourceUpdate, ResourceId, ResourcesConfig, ResourceRel, ListResponse } from '../resource' +import type { QueryParamsRetrieve, QueryParamsList } from '../query' + +import type { Organization, OrganizationType } from './organizations' +import type { Role, RoleType } from './roles' +import type { Version } from './versions' + + +type MembershipType = 'memberships' +type MembershipRel = ResourceRel & { type: MembershipType } +type OrganizationRel = ResourceRel & { type: OrganizationType } +type RoleRel = ResourceRel & { type: RoleType } + + +interface Membership extends Resource { + + readonly type: MembershipType + + user_email: string + status: 'pending' | 'active' + + organization?: Organization | null + role?: Role | null + versions?: Version[] | null + +} + + +interface MembershipCreate extends ResourceCreate { + + user_email: string + + organization: OrganizationRel + role: RoleRel + +} + + +interface MembershipUpdate extends ResourceUpdate { + + role?: RoleRel | null + +} + + +class Memberships extends ApiResource { + + static readonly TYPE: MembershipType = 'memberships' as const + + async create(resource: MembershipCreate, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { + return this.resources.create({ ...resource, type: Memberships.TYPE }, params, options) + } + + async update(resource: MembershipUpdate, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { + return this.resources.update({ ...resource, type: Memberships.TYPE }, params, options) + } + + async delete(id: string | ResourceId, options?: ResourcesConfig): Promise { + await this.resources.delete((typeof id === 'string')? { id, type: Memberships.TYPE } : id, options) + } + + async organization(membershipId: string | Membership, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { + const _membershipId = (membershipId as Membership).id || membershipId as string + return this.resources.fetch({ type: 'organizations' }, `memberships/${_membershipId}/organization`, params, options) as unknown as Organization + } + + async role(membershipId: string | Membership, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { + const _membershipId = (membershipId as Membership).id || membershipId as string + return this.resources.fetch({ type: 'roles' }, `memberships/${_membershipId}/role`, params, options) as unknown as Role + } + + async versions(membershipId: string | Membership, params?: QueryParamsList, options?: ResourcesConfig): Promise> { + const _membershipId = (membershipId as Membership).id || membershipId as string + return this.resources.fetch({ type: 'versions' }, `memberships/${_membershipId}/versions`, params, options) as unknown as ListResponse + } + + + isMembership(resource: any): resource is Membership { + return resource.type && (resource.type === Memberships.TYPE) + } + + + relationship(id: string | ResourceId | null): MembershipRel { + return ((id === null) || (typeof id === 'string')) ? { id, type: Memberships.TYPE } : { id: id.id, type: Memberships.TYPE } + } + + + type(): MembershipType { + return Memberships.TYPE + } + +} + + +export default Memberships + +export type { Membership, MembershipCreate, MembershipUpdate, MembershipType } diff --git a/src/resources/organizations.ts b/src/resources/organizations.ts new file mode 100644 index 0000000..e4e1f19 --- /dev/null +++ b/src/resources/organizations.ts @@ -0,0 +1,130 @@ +import { ApiResource } from '../resource' +import type { Resource, ResourceCreate, ResourceUpdate, ResourceId, ResourcesConfig, ResourceRel, ListResponse } from '../resource' +import type { QueryParamsRetrieve, QueryParamsList } from '../query' + +import type { Membership } from './memberships' +import type { Role } from './roles' +import type { Permission } from './permissions' +import type { ApiCredential } from './api_credentials' + + +type OrganizationType = 'organizations' +type OrganizationRel = ResourceRel & { type: OrganizationType } + + +interface Organization extends Resource { + + readonly type: OrganizationType + + name: string + slug?: string | null + domain?: string | null + support_phone?: string | null + support_email?: string | null + logo_url?: string | null + favicon_url?: string | null + primary_color?: string | null + contrast_color?: string | null + gtm_id?: string | null + gtm_id_test?: string | null + discount_disabled?: boolean | null + account_disabled?: boolean | null + acceptance_disabled?: boolean | null + max_concurrent_promotions?: number | null + max_concurrent_imports?: number | null + associated_markets?: Record | null + region?: string | null + + memberships?: Membership[] | null + roles?: Role[] | null + permissions?: Permission[] | null + api_credentials?: ApiCredential[] | null + +} + + +interface OrganizationCreate extends ResourceCreate { + + name: string + support_phone?: string | null + support_email?: string | null + logo_url?: string | null + favicon_url?: string | null + primary_color?: string | null + contrast_color?: string | null + gtm_id?: string | null + gtm_id_test?: string | null + discount_disabled?: boolean | null + account_disabled?: boolean | null + acceptance_disabled?: boolean | null + region?: string | null + +} + + +interface OrganizationUpdate extends ResourceUpdate { + + name?: string | null + support_phone?: string | null + support_email?: string | null + logo_url?: string | null + favicon_url?: string | null + primary_color?: string | null + contrast_color?: string | null + gtm_id?: string | null + gtm_id_test?: string | null + discount_disabled?: boolean | null + account_disabled?: boolean | null + acceptance_disabled?: boolean | null + +} + + +class Organizations extends ApiResource { + + static readonly TYPE: OrganizationType = 'organizations' as const + + async create(resource: OrganizationCreate, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { + return this.resources.create({ ...resource, type: Organizations.TYPE }, params, options) + } + + async update(resource: OrganizationUpdate, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { + return this.resources.update({ ...resource, type: Organizations.TYPE }, params, options) + } + + async memberships(organizationId: string | Organization, params?: QueryParamsList, options?: ResourcesConfig): Promise> { + const _organizationId = (organizationId as Organization).id || organizationId as string + return this.resources.fetch({ type: 'memberships' }, `organizations/${_organizationId}/memberships`, params, options) as unknown as ListResponse + } + + async roles(organizationId: string | Organization, params?: QueryParamsList, options?: ResourcesConfig): Promise> { + const _organizationId = (organizationId as Organization).id || organizationId as string + return this.resources.fetch({ type: 'roles' }, `organizations/${_organizationId}/roles`, params, options) as unknown as ListResponse + } + + async permissions(organizationId: string | Organization, params?: QueryParamsList, options?: ResourcesConfig): Promise> { + const _organizationId = (organizationId as Organization).id || organizationId as string + return this.resources.fetch({ type: 'permissions' }, `organizations/${_organizationId}/permissions`, params, options) as unknown as ListResponse + } + + + isOrganization(resource: any): resource is Organization { + return resource.type && (resource.type === Organizations.TYPE) + } + + + relationship(id: string | ResourceId | null): OrganizationRel { + return ((id === null) || (typeof id === 'string')) ? { id, type: Organizations.TYPE } : { id: id.id, type: Organizations.TYPE } + } + + + type(): OrganizationType { + return Organizations.TYPE + } + +} + + +export default Organizations + +export type { Organization, OrganizationCreate, OrganizationUpdate, OrganizationType } diff --git a/src/resources/permissions.ts b/src/resources/permissions.ts new file mode 100644 index 0000000..0c4c074 --- /dev/null +++ b/src/resources/permissions.ts @@ -0,0 +1,103 @@ +import { ApiResource } from '../resource' +import type { Resource, ResourceCreate, ResourceUpdate, ResourceId, ResourcesConfig, ResourceRel, ListResponse } from '../resource' +import type { QueryParamsRetrieve, QueryParamsList } from '../query' + +import type { Organization } from './organizations' +import type { Role, RoleType } from './roles' +import type { Version } from './versions' + + +type PermissionType = 'permissions' +type PermissionRel = ResourceRel & { type: PermissionType } +type RoleRel = ResourceRel & { type: RoleType } + + +interface Permission extends Resource { + + readonly type: PermissionType + + can_create: boolean + can_read: boolean + can_update: boolean + can_destroy: boolean + subject: string + restrictions?: Record | null + + organization?: Organization | null + role?: Role | null + versions?: Version[] | null + +} + + +interface PermissionCreate extends ResourceCreate { + + can_create: boolean + can_read: boolean + can_update: boolean + can_destroy: boolean + subject: string + + role: RoleRel + +} + + +interface PermissionUpdate extends ResourceUpdate { + + can_create?: boolean | null + can_read?: boolean | null + can_update?: boolean | null + can_destroy?: boolean | null + +} + + +class Permissions extends ApiResource { + + static readonly TYPE: PermissionType = 'permissions' as const + + async create(resource: PermissionCreate, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { + return this.resources.create({ ...resource, type: Permissions.TYPE }, params, options) + } + + async update(resource: PermissionUpdate, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { + return this.resources.update({ ...resource, type: Permissions.TYPE }, params, options) + } + + async organization(permissionId: string | Permission, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { + const _permissionId = (permissionId as Permission).id || permissionId as string + return this.resources.fetch({ type: 'organizations' }, `permissions/${_permissionId}/organization`, params, options) as unknown as Organization + } + + async role(permissionId: string | Permission, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { + const _permissionId = (permissionId as Permission).id || permissionId as string + return this.resources.fetch({ type: 'roles' }, `permissions/${_permissionId}/role`, params, options) as unknown as Role + } + + async versions(permissionId: string | Permission, params?: QueryParamsList, options?: ResourcesConfig): Promise> { + const _permissionId = (permissionId as Permission).id || permissionId as string + return this.resources.fetch({ type: 'versions' }, `permissions/${_permissionId}/versions`, params, options) as unknown as ListResponse + } + + + isPermission(resource: any): resource is Permission { + return resource.type && (resource.type === Permissions.TYPE) + } + + + relationship(id: string | ResourceId | null): PermissionRel { + return ((id === null) || (typeof id === 'string')) ? { id, type: Permissions.TYPE } : { id: id.id, type: Permissions.TYPE } + } + + + type(): PermissionType { + return Permissions.TYPE + } + +} + + +export default Permissions + +export type { Permission, PermissionCreate, PermissionUpdate, PermissionType } diff --git a/src/resources/roles.ts b/src/resources/roles.ts new file mode 100644 index 0000000..2a524aa --- /dev/null +++ b/src/resources/roles.ts @@ -0,0 +1,106 @@ +import { ApiResource } from '../resource' +import type { Resource, ResourceCreate, ResourceUpdate, ResourceId, ResourcesConfig, ResourceRel, ListResponse } from '../resource' +import type { QueryParamsRetrieve, QueryParamsList } from '../query' + +import type { Organization, OrganizationType } from './organizations' +import type { Permission } from './permissions' +import type { Membership } from './memberships' +import type { ApiCredential } from './api_credentials' +import type { Version } from './versions' + + +type RoleType = 'roles' +type RoleRel = ResourceRel & { type: RoleType } +type OrganizationRel = ResourceRel & { type: OrganizationType } + + +interface Role extends Resource { + + readonly type: RoleType + + name: string + kind?: string | null + + organization?: Organization | null + permissions?: Permission[] | null + memberships?: Membership[] | null + api_credentials?: ApiCredential[] | null + versions?: Version[] | null + +} + + +interface RoleCreate extends ResourceCreate { + + name: string + + organization: OrganizationRel + +} + + +interface RoleUpdate extends ResourceUpdate { + + name?: string | null + +} + + +class Roles extends ApiResource { + + static readonly TYPE: RoleType = 'roles' as const + + async create(resource: RoleCreate, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { + return this.resources.create({ ...resource, type: Roles.TYPE }, params, options) + } + + async update(resource: RoleUpdate, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { + return this.resources.update({ ...resource, type: Roles.TYPE }, params, options) + } + + async organization(roleId: string | Role, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { + const _roleId = (roleId as Role).id || roleId as string + return this.resources.fetch({ type: 'organizations' }, `roles/${_roleId}/organization`, params, options) as unknown as Organization + } + + async permissions(roleId: string | Role, params?: QueryParamsList, options?: ResourcesConfig): Promise> { + const _roleId = (roleId as Role).id || roleId as string + return this.resources.fetch({ type: 'permissions' }, `roles/${_roleId}/permissions`, params, options) as unknown as ListResponse + } + + async memberships(roleId: string | Role, params?: QueryParamsList, options?: ResourcesConfig): Promise> { + const _roleId = (roleId as Role).id || roleId as string + return this.resources.fetch({ type: 'memberships' }, `roles/${_roleId}/memberships`, params, options) as unknown as ListResponse + } + + async api_credentials(roleId: string | Role, params?: QueryParamsList, options?: ResourcesConfig): Promise> { + const _roleId = (roleId as Role).id || roleId as string + return this.resources.fetch({ type: 'api_credentials' }, `roles/${_roleId}/api_credentials`, params, options) as unknown as ListResponse + } + + async versions(roleId: string | Role, params?: QueryParamsList, options?: ResourcesConfig): Promise> { + const _roleId = (roleId as Role).id || roleId as string + return this.resources.fetch({ type: 'versions' }, `roles/${_roleId}/versions`, params, options) as unknown as ListResponse + } + + + isRole(resource: any): resource is Role { + return resource.type && (resource.type === Roles.TYPE) + } + + + relationship(id: string | ResourceId | null): RoleRel { + return ((id === null) || (typeof id === 'string')) ? { id, type: Roles.TYPE } : { id: id.id, type: Roles.TYPE } + } + + + type(): RoleType { + return Roles.TYPE + } + +} + + +export default Roles + +export type { Role, RoleCreate, RoleUpdate, RoleType } diff --git a/src/resources/user.ts b/src/resources/user.ts new file mode 100644 index 0000000..ea6384e --- /dev/null +++ b/src/resources/user.ts @@ -0,0 +1,61 @@ +import { ApiSingleton } from '../resource' +import type { Resource, ResourceUpdate, ResourceId, ResourcesConfig, ResourceRel } from '../resource' +import type { QueryParamsRetrieve } from '../query' + + + +type UserType = 'user' +type UserRel = ResourceRel & { type: UserType } + + +interface User extends Resource { + + readonly type: UserType + + email: string + first_name: string + last_name: string + time_zone?: string | null + +} + + +interface UserUpdate extends ResourceUpdate { + + email?: string | null + first_name?: string | null + last_name?: string | null + time_zone?: string | null + +} + + +class Users extends ApiSingleton { + + static readonly TYPE: UserType = 'user' as const + + async retrieve(params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { + return this.resources.singleton({ type: Users.TYPE }, params, options) + } + + + isUser(resource: any): resource is User { + return resource.type && (resource.type === Users.TYPE) + } + + + relationship(id: string | ResourceId | null): UserRel { + return ((id === null) || (typeof id === 'string')) ? { id, type: Users.TYPE } : { id: id.id, type: Users.TYPE } + } + + + type(): UserType { + return Users.TYPE + } + +} + + +export default Users + +export type { User, UserUpdate, UserType } diff --git a/src/resources/versions.ts b/src/resources/versions.ts new file mode 100644 index 0000000..5fe44e7 --- /dev/null +++ b/src/resources/versions.ts @@ -0,0 +1,50 @@ +import { ApiResource } from '../resource' +import type { Resource, ResourceId, ResourceRel } from '../resource' + + + + +type VersionType = 'versions' +type VersionRel = ResourceRel & { type: VersionType } + + +interface Version extends Resource { + + readonly type: VersionType + + resource_type?: string | null + resource_id?: string | null + event?: string | null + changes?: Record | null + who?: Record | null + +} + + +class Versions extends ApiResource { + + static readonly TYPE: VersionType = 'versions' as const + + + + + isVersion(resource: any): resource is Version { + return resource.type && (resource.type === Versions.TYPE) + } + + + relationship(id: string | ResourceId | null): VersionRel { + return ((id === null) || (typeof id === 'string')) ? { id, type: Versions.TYPE } : { id: id.id, type: Versions.TYPE } + } + + + type(): VersionType { + return Versions.TYPE + } + +} + + +export default Versions + +export type { Version, VersionType } diff --git a/src/static.ts b/src/static.ts new file mode 100644 index 0000000..5332bb4 --- /dev/null +++ b/src/static.ts @@ -0,0 +1,29 @@ + +import * as api from './api' +import { SdkError, ApiError} from './error' +import CommerceLayerProvisioning, { OPEN_API_SCHEMA_VERSION } from './commercelayer' +import type { CommerceLayerProvisioningClient, CommerceLayerInitConfig } from './commercelayer' + + +/* Static functions */ +export const CommerceLayerProvisioningStatic = { + + resources: (): readonly string[] => { + return api.resourceList + }, + + isSdkError: (error: unknown): error is SdkError => { + return SdkError.isSdkError(error) + }, + + isApiError: (error: unknown): error is ApiError => { + return ApiError.isApiError(error) + }, + + init: (config: CommerceLayerInitConfig): CommerceLayerProvisioningClient => { + return CommerceLayerProvisioning(config) + }, + + get schemaVersion(): string { return OPEN_API_SCHEMA_VERSION } + +} diff --git a/src/util.ts b/src/util.ts new file mode 100644 index 0000000..861f432 --- /dev/null +++ b/src/util.ts @@ -0,0 +1,19 @@ +import type { ObjectType } from "../src/common"; + + + +const sleep = async (ms: number): Promise => { + return new Promise(resolve => setTimeout(resolve, ms)) +} + + +const sortObjectFields = (obj: ObjectType): ObjectType => { + const sorted = Object.keys(obj).sort().reduce((accumulator: ObjectType, key: string) => { + accumulator[key] = obj[key]; + return accumulator; + }, {}) + return sorted +} + + +export { sleep, sortObjectFields } diff --git a/test/common.ts b/test/common.ts new file mode 100644 index 0000000..e584178 --- /dev/null +++ b/test/common.ts @@ -0,0 +1,182 @@ +import getToken from './token' +import CommerceLayer, { CommerceLayerProvisioningClient, QueryParamsList, QueryParamsRetrieve } from '../src' +import dotenv from 'dotenv' +import { inspect } from 'util' +import axios, { AxiosRequestConfig } from 'axios' +import { isEqual } from 'lodash' +import { RequestConfig } from '../src/client' + +dotenv.config() + +const GLOBAL_TIMEOUT = 15000 + +const domain = process.env.CL_SDK_DOMAIN as string + +export { domain } + +const INTERCEPTOR_CANCEL = 'TEST-INTERCEPTED' +const REQUEST_TIMEOUT = 5550 +const REQUEST_OPTIONS: RequestConfig = { + timeout: REQUEST_TIMEOUT, + params: { } +} as const + +export const TestData = { + id: 'testId', + reference: 'sdk-test', + reference_origin: 'cl-sdk', + metadata: { + meta_key_1: 'meta_value_1', + } +} as const + + +const COMMON_PARAMS_FILTERS = { reference_eq: TestData.reference } + +const COMMON_PARAMS_LIST: QueryParamsList = { + filters: COMMON_PARAMS_FILTERS, + pageSize: 25, + pageNumber: 1, + sort: { updated_at: 'desc', created_at: 'asc', reference: 'desc' }, +} as const + +const COMMON_PARAMS_FIELDS = ['id', 'reference', 'reference_origin', 'updated_at', 'metadata'] +const COMMON_PARAMS_RETRIEVE = { + fields: COMMON_PARAMS_FIELDS, +} + + +export const CommonData = { + options: REQUEST_OPTIONS, + paramsRetrieve: COMMON_PARAMS_RETRIEVE, + paramsList: COMMON_PARAMS_LIST, + paramsFields: COMMON_PARAMS_FIELDS, +} as const + + +let currentAccessToken: string + +const initClient = async (): Promise => { + const token = await getToken('user') + if (token === null) throw new Error('Unable to get access token') + const accessToken = token.accessToken + currentAccessToken = accessToken + const client = CommerceLayer({ accessToken, domain }) + client.config({ timeout: GLOBAL_TIMEOUT }) + jest.setTimeout(GLOBAL_TIMEOUT) + return client +} + +const fakeClient = async (): Promise => { + const accessToken = 'fake-access-token' + const client = CommerceLayer({ accessToken, domain }) + currentAccessToken = accessToken + return client +} + +const getClient = (instance?: boolean): Promise => { + return instance ? initClient() : fakeClient() +} + +const printObject = (obj: unknown): string => { + return inspect(obj, false, null, true) +} + + +export { initClient, fakeClient, getClient, printObject, currentAccessToken } + + + +const handleError = (error: any) => { + if (error.message !== INTERCEPTOR_CANCEL) throw error +} + +const interceptRequest = (config?: AxiosRequestConfig): AxiosRequestConfig => { + if (!config) throw new axios.Cancel(INTERCEPTOR_CANCEL) + return config +} + +const randomValue = (type: string, name?: string): any | Array => { + + const numbers = [0, 1, 10, 100, 1000, 10000, 5, 55, 555, 12345, 6666] + const strings = ['alfa', 'beta', 'gamma', 'delta', 'epsilon', 'kappa', 'lambda', 'omega', 'sigma', 'zeta'] + const booleans = [true, false, true, false, true, false, true, false, true, false] + const objects = [{ key11: 'val11' }, { key21: 'val21' }, { key31: 'val31' }, { key41: 'val41' }, { key51: 'val51' }] + + let values: Array + + if (name) { + // type = + } + + if (type.startsWith('boolean')) values = booleans + else + if (type.startsWith('integer') || type.startsWith('number')) values = numbers + else + if (type.startsWith('fload') || type.startsWith('decimal')) values = numbers + else + if (type.startsWith('object')) values = objects + else + if (type.startsWith('string')) values = strings + else values = strings + + let value = values[Math.floor(Math.random() * (values.length - 1))] + + if (type === 'string') value = `${value}_${Math.floor(Math.random() * 100)}` + + if (type.endsWith('[]')) value = [ value ] + + return value + +} + + +export { handleError, interceptRequest, randomValue } + + + +const checkCommon = (config: AxiosRequestConfig, type: string, id?: string, token?: string, relationship?: string) => { + expect(config.url).toBe(type + (id ? `/${id}` : '') + (relationship ? `/${relationship}`: '')) + expect(config.headers?.Authorization).toContain('Bearer ' + (token || '')) + expect(config.timeout).toBe(REQUEST_TIMEOUT) +} + +const checkCommonData = (config: AxiosRequestConfig, type: string, attributes: any, id?: string) => { + if (id) expect(config.data.data.id).toBe(id) + expect(config.data.data.type).toBe(type) + const relationships: { [k: string]: any } = {} + Object.entries(config.data.data.relationships).forEach(([k, v]) => relationships[k] = (v as any)['data']) + const received = { + ...config.data.data.attributes, + ...relationships + } + expect(isEqual(received, attributes)).toBeTruthy() +} + +const checkParam = (params: any, name: string, value: string | number | boolean) => { + expect(params).toHaveProperty([name]) + expect(params[name]).toBe(String(value)) +} + +const checkCommonParamsList = (config: AxiosRequestConfig, params: QueryParamsList) => { + if (params.pageNumber) checkParam(config.params, 'page[number]', params.pageNumber) + if (params.pageSize) checkParam(config.params, 'page[size]', params.pageSize) + if (params.filters?.reference_eq) checkParam(config.params, 'filter[q][reference_eq]', params.filters.reference_eq) + if (params.sort) { + let value: string + if (Array.isArray(params.sort)) value = params.sort.join(',') + else value = Object.entries(params.sort).map(([k, v]) => `${(v === 'desc') ? '-' : ''}${k}`).join(',') + checkParam(config.params, 'sort', value) + } +} + +const checkCommonParams = (config: AxiosRequestConfig, params: QueryParamsRetrieve) => { + if (params.fields) { + Object.entries(params.fields).forEach(([type, fields]) => { + checkParam(config.params, `fields[${type}]`, fields.join(',')) + }) + } +} + + +export { checkCommon, checkCommonData, checkCommonParams, checkCommonParamsList } diff --git a/test/interceptor.ts b/test/interceptor.ts new file mode 100644 index 0000000..d2ff0cf --- /dev/null +++ b/test/interceptor.ts @@ -0,0 +1,49 @@ + +import clProvisioning, { ErrorObj, RequestObj, ResponseObj } from '../src' +import getToken from './token' + + +const requestInterceptor = (request: RequestObj): RequestObj => { + console.log('INSIDE REQUEST INTERCEPTOR') + // console.log(request) + return request +} + +const responseInterceptor = (response: ResponseObj): ResponseObj => { + console.log('INSIDE RESPONSE INTERCEPTOR') + console.log(response) + return response +} + +const errorInterceptor = (error: ErrorObj): ErrorObj => { + console.log('INSIDE RESPONSE INTERCEPTOR') + console.log(error) + return error +} + + + +(async () => { + + const organization = process.env.CL_SDK_ORGANIZATION || '' + const auth = await getToken('user') + const accessToken = auth? auth.accessToken+'x' : '' + + const cl = clProvisioning({ + accessToken, + timeout: 5000, + }) + + const rrr = cl.addRawResponseReader({ headers: true }) + const reqInt = cl.addRequestInterceptor(requestInterceptor) + cl.addResponseInterceptor(responseInterceptor, errorInterceptor) + + const organizations = await cl.organizations.list({ pageSize: 1 }).catch(error => console.log(error.message)) + + cl.removeInterceptor('request', reqInt) + + console.log(organizations) + console.log(rrr.rawResponse) + console.log(rrr.headers) + +})() diff --git a/test/spot.ts b/test/spot.ts new file mode 100644 index 0000000..ecab29b --- /dev/null +++ b/test/spot.ts @@ -0,0 +1,27 @@ + +import clProvisioning from '../src' +import { inspect } from 'util' +import getToken from './token' + + +(async () => { + + const organization = process.env.CL_SDK_ORGANIZATION || '' + const auth = await getToken('user') + const accessToken = auth ? auth.accessToken : '' + + const cl = clProvisioning({ + accessToken, + timeout: 5000, + }) + + try { + + + + } catch (error: any) { + console.log(inspect(error, false, null, true)) + console.log(error.message) + } + +})() diff --git a/test/token.ts b/test/token.ts new file mode 100644 index 0000000..ec17555 --- /dev/null +++ b/test/token.ts @@ -0,0 +1,56 @@ +import { provisioning } from '@commercelayer/js-auth' +import dotenv from 'dotenv' + +dotenv.config() + + +type TokenType = 'user' + +export type AuthScope = string | string[] + +type AuthData = { + clientId: string + clientSecret?: string + domain?: string +} + + +export type AccessToken = { + accessToken: string; + tokenType: 'bearer' | 'Bearer'; + expiresIn: number; + expires: Date; + scope: AuthScope; + createdAt: number; + error?: string; + errorDescription?: string; + } + + +const domain = process.env.CL_SDK_DOMAIN +const clientId = process.env.CL_SDK_CLIENT_ID || '' +const clientSecret = process.env.CL_SDK_CLIENT_SECRET || '' + + +export default async (type: TokenType): Promise => { + switch (type) { + case 'user': + default: return getAccessToken({ clientId, clientSecret, domain }) + } +} + + + + + +const getAccessToken = async (auth: AuthData): Promise => { + + const credentials: any = { + clientId: auth.clientId, + clientSecret: auth.clientSecret, + domain: auth.domain + } + + return provisioning.authentication(credentials) + + } diff --git a/tsconfig.esm.json b/tsconfig.esm.json new file mode 100644 index 0000000..1199ef3 --- /dev/null +++ b/tsconfig.esm.json @@ -0,0 +1,72 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig.json to read more about this file */ + + /* Basic Options */ + "incremental": true /* Enable incremental compilation */, + "target": "ES2018" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */, + "module": "ES6" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */, + // "lib": [], /* Specify library files to be included in the compilation. */ + // "allowJs": true, /* Allow javascript files to be compiled. */ + // "checkJs": true, /* Report errors in .js files. */ + // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', 'react', 'react-jsx' or 'react-jsxdev'. */ + "declaration": true /* Generates corresponding '.d.ts' file. */, + // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ + // "sourceMap": true, /* Generates corresponding '.map' file. */ + // "outFile": "./", /* Concatenate and emit output to single file. */ + "outDir": "lib/esm" /* Redirect output structure to the directory. */, + "rootDir": "./src" /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */, + // "composite": true, /* Enable project compilation */ + // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ + // "removeComments": true, /* Do not emit comments to output. */ + // "noEmit": true, /* Do not emit outputs. */ + // "importHelpers": true, /* Import emit helpers from 'tslib'. */ + // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ + // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ + + /* Strict Type-Checking Options */ + "strict": true /* Enable all strict type-checking options. */, + // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* Enable strict null checks. */ + // "strictFunctionTypes": true, /* Enable strict checking of function types. */ + // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ + // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ + // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + + /* Additional Checks */ + // "noUnusedLocals": true, /* Report errors on unused locals. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ + // "noPropertyAccessFromIndexSignature": true, /* Require undeclared properties from index signatures to use element accesses. */ + + /* Module Resolution Options */ + "moduleResolution": "node" /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */, + // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ + // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ + // "typeRoots": [], /* List of folders to include type definitions from. */ + // "types": [], /* Type declaration files to be included in compilation. */ + // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ + "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, + // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + + /* Source Map Options */ + // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ + // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ + + /* Experimental Options */ + // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + + /* Advanced Options */ + "skipLibCheck": true /* Skip type checking of declaration files. */, + "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ + }, + "include": ["src/**/*"] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..0db07fc --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,72 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig.json to read more about this file */ + + /* Basic Options */ + "incremental": true /* Enable incremental compilation */, + "target": "ES2018" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */, + "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */, + // "lib": [], /* Specify library files to be included in the compilation. */ + // "allowJs": true, /* Allow javascript files to be compiled. */ + // "checkJs": true, /* Report errors in .js files. */ + // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', 'react', 'react-jsx' or 'react-jsxdev'. */ + "declaration": true /* Generates corresponding '.d.ts' file. */, + // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ + // "sourceMap": true, /* Generates corresponding '.map' file. */ + // "outFile": "./", /* Concatenate and emit output to single file. */ + "outDir": "lib/cjs" /* Redirect output structure to the directory. */, + "rootDir": "./src" /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */, + // "composite": true, /* Enable project compilation */ + // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ + // "removeComments": true, /* Do not emit comments to output. */ + // "noEmit": true, /* Do not emit outputs. */ + // "importHelpers": true, /* Import emit helpers from 'tslib'. */ + // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ + // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ + + /* Strict Type-Checking Options */ + "strict": true /* Enable all strict type-checking options. */, + // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* Enable strict null checks. */ + // "strictFunctionTypes": true, /* Enable strict checking of function types. */ + // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ + // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ + // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + + /* Additional Checks */ + // "noUnusedLocals": true, /* Report errors on unused locals. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ + // "noPropertyAccessFromIndexSignature": true, /* Require undeclared properties from index signatures to use element accesses. */ + + /* Module Resolution Options */ + "moduleResolution": "node" /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */, + // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ + // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ + // "typeRoots": [], /* List of folders to include type definitions from. */ + // "types": [], /* Type declaration files to be included in compilation. */ + // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ + "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, + // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + + /* Source Map Options */ + // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ + // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ + + /* Experimental Options */ + // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + + /* Advanced Options */ + "skipLibCheck": true /* Skip type checking of declaration files. */, + "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ + }, + "include": ["src/**/*"] +} From 0966171d01262446c53effbc93320c7febad7a05 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 31 Oct 2023 14:39:51 +0000 Subject: [PATCH 02/30] chore(release): 1.0.0-beta.1 [skip ci] # 1.0.0-beta.1 (2023-10-31) ### Features * first commit of provisioning sdk ([b067f12](https://github.com/commercelayer/provisioning-sdk/commit/b067f123ed9f2e0fce53673306b05fcf479c17f0)) --- CHANGELOG.md | 6 ++++++ package.json | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e69de29..722960b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -0,0 +1,6 @@ +# 1.0.0-beta.1 (2023-10-31) + + +### Features + +* first commit of provisioning sdk ([b067f12](https://github.com/commercelayer/provisioning-sdk/commit/b067f123ed9f2e0fce53673306b05fcf479c17f0)) diff --git a/package.json b/package.json index e31381c..4001956 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@commercelayer/provisioning-sdk", - "version": "0.0.1", + "version": "1.0.0-beta.1", "main": "lib/cjs/index.js", "types": "lib/cjs/index.d.ts", "module": "lib/esm/index.js", From 50bf2b6debd921e1ca4936ac5acc669b191116ac Mon Sep 17 00:00:00 2001 From: Pierluigi Viti Date: Tue, 31 Oct 2023 17:37:38 +0100 Subject: [PATCH 03/30] fix(doc): fix readme --- .github/{release.yaml => release.yml} | 0 README.md | 233 ++++++++++++-------------- 2 files changed, 107 insertions(+), 126 deletions(-) rename .github/{release.yaml => release.yml} (100%) diff --git a/.github/release.yaml b/.github/release.yml similarity index 100% rename from .github/release.yaml rename to .github/release.yml diff --git a/README.md b/README.md index cd31635..a050220 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,14 @@ # Commerce Layer Provisioning SDK -[![Version](https://img.shields.io/npm/v/@commercelayer/sdk.svg)](https://npmjs.org/package/@commercelayer/sdk) -[![Downloads/week](https://img.shields.io/npm/dw/@commercelayer/sdk.svg)](https://npmjs.org/package/@commercelayer/sdk) -[![License](https://img.shields.io/npm/l/@commercelayer/sdk.svg)](https://github.com/commercelayer/commercelayer-sdk/blob/master/package.json) +[![Version](https://img.shields.io/npm/v/@commercelayer/provisioning-sdk.svg)](https://npmjs.org/package/@commercelayer/provisioning-sdk) +[![Downloads/week](https://img.shields.io/npm/dw/@commercelayer/provisioning-sdk.svg)](https://npmjs.org/package/@commercelayer/provisioning-sdk) +[![License](https://img.shields.io/npm/l/@commercelayer/provisioning-sdk.svg)](https://github.com/commercelayer/commercelayer-sdk/blob/master/package.json) [![semantic-release: angular](https://img.shields.io/badge/semantic--release-angular-e10079?logo=semantic-release)](https://github.com/semantic-release/semantic-release) [![Release](https://github.com/commercelayer/commercelayer-sdk/actions/workflows/semantic-release.yml/badge.svg)](https://github.com/commercelayer/commercelayer-sdk/actions/workflows/semantic-release.yml) [![CodeQL](https://github.com/commercelayer/commercelayer-cli/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/commercelayer/commercelayer-cli/actions/workflows/codeql-analysis.yml) [![TypeScript](https://img.shields.io/badge/%3C%2F%3E-TypeScript%205-%230074c1.svg)](https://www.typescriptlang.org/) -A JavaScript Library wrapper that makes it quick and easy to interact with the [Commerce Layer API](https://docs.commercelayer.io/developers). - -## What is Commerce Layer? - -[Commerce Layer](https://commercelayer.io) is a multi-market commerce API and order management system that lets you add global shopping capabilities to any website, mobile app, chatbot, wearable, voice, or IoT device, with ease. Compose your stack with the best-of-breed tools you already mastered and love. Make any experience shoppable, anywhere, through a blazing-fast, enterprise-grade, and secure API. +A JavaScript Library wrapper that makes it quick and easy to interact with the [Commerce Layer Provisioning API](https://docs.commercelayer.io/provisioning). ## Table of contents @@ -31,221 +27,214 @@ A JavaScript Library wrapper that makes it quick and easy to interact with the [ ## Getting started -To get started with Commerce Layer JS SDK you need to install it, get the credentials that will allow you to perform your API calls, and import the SDK into your application's code. The sections below explain how to achieve this. - -> If you want, you can also read [this tutorial](https://commercelayer.io/blog/getting-started-with-commerce-layer-javascript-sdk) from Commerce Layer's blog. +To get started with Commerce Layer Provisioning SDK you need to install it, get the credentials that will allow you to perform your API calls, and import the SDK into your application's code. The sections below explain how to achieve this. ### Installation -Commerce Layer JS SDK is available as an [npm](https://www.npmjs.com/package/@commercelayer/sdk) and [yarn](https://yarnpkg.com/package/@commercelayer/sdk) package that you can install with the command below: +Commerce Layer Provisioning SDK is available as an [npm](https://www.npmjs.com/package/@commercelayer/provisioning-sdk) and [yarn](https://yarnpkg.com/package/@commercelayer/provisioning-sdk) package that you can install with the command below: ```shell -npm install @commercelayer/sdk +npm install @commercelayer/provisioning-sdk // or -yarn add @commercelayer/sdk +yarn add @commercelayer/provisioning-sdk ``` ### Authentication -All requests to Commerce Layer API must be authenticated with an [OAuth2](https://oauth.net/2) bearer token. Hence, before starting to use this SDK you need to get a valid access token. Kindly check [our documentation](https://docs.commercelayer.io/developers/authentication) for more information about the available authorization flows. +All requests to Commerce Layer API must be authenticated with an [OAuth2](https://oauth.net/2) bearer token. Hence, before starting to use this SDK you need to get a valid access token. Kindly check [our documentation](https://docs.commercelayer.io/provisioning/authentication) for more information about the available authorization flows. -> Feel free to use [Commerce Layer JS Auth](https://github.com/commercelayer/commercelayer-js-auth), a JavaScript library that helps you wrap our authentication API. +> Feel free to use [Commerce Layer Provisioning Auth](https://github.com/commercelayer/commercelayer-js-auth), a JavaScript library that helps you wrap our authentication API. ### Import You can use the ES6 default import with the SDK like so: ```javascript -import CommerceLayer from '@commercelayer/sdk' +import CommerceLayerProvisioning from '@commercelayer/provisioning-sdk' -const cl = CommerceLayer({ - organization: 'your-organization-slug', +const clp = CommerceLayerProvisioning({ accessToken: 'your-access-token' }) ``` ## SDK usage -The JavaScript SDK is a wrapper around Commerce Layer API which means you would still be making API requests but with a different syntax. For now, we don't have comprehensive SDK documentation for every single resource our API supports (about 400+ endpoints), hence you will need to rely on our comprehensive [API Reference](https://docs.commercelayer.io/core/v/api-reference) as you go about using this SDK. So for example, if you want to create an order, take a look at the [Order object](https://docs.commercelayer.io/core/v/api-reference/orders/object) or the [Create an order](https://docs.commercelayer.io/core/v/api-reference/orders/create) documentation to see the required attributes and/or relationships. The same goes for every other supported resource. +The JavaScript SDK is a wrapper around Commerce Layer Provisioning API which means you would still be making API requests but with a different syntax. For now, we don't have comprehensive SDK documentation for every single resource our API supports, hence you will need to rely on our comprehensive [Provisioning API Reference](https://docs.commercelayer.io/provisioning/v/api-reference-p) as you go about using this SDK. So for example, if you want to create a role, take a look at the [Role object](https://docs.commercelayer.io/provisioning/v/api-reference-p/role/object) or the [Create a role](https://docs.commercelayer.io/provisioning/v/api-reference-p/roles/create) documentation to see the required attributes and/or relationships. The same goes for every other supported resource. -To show you how things work, we will use the [SKUs](https://docs.commercelayer.io/core/v/api-reference/skus) and [Shipping Categories](https://docs.commercelayer.io/core/v/api-reference/shipping_categories) resource in the following examples. The code snippets below show how to use the SDK when performing the standard CRUD operations provided by our REST API. Kindly check our [API reference](https://docs.commercelayer.io/core/v/api-reference) for the complete list of available **resources** and their **attributes**. +The code snippets below show how to use the SDK when performing the standard CRUD operations provided by our REST API. Kindly check our [Provisioning API reference](https://docs.commercelayer.io/provisioning/v/api-reference-p) for the complete list of available **resources** and their **attributes**. ### Create
-How to create an SKU +How to create a Role
```javascript - // Select the shipping category (it's a required relationship for the SKU resource) - const shippingCategories = await cl.shipping_categories.list({ filters: { name_eq: 'Merchandising' } }) + // Select the organization (it's a required relationship for the SKU resource) + const organizations = await clp.organizations.list({ filters: { name_eq: 'Test Org' } }) const attributes = { - code: 'TSHIRTMM000000FFFFFFXL', - name: 'Black Men T-shirt with White Logo (XL)', - description: "A very beautiful and cozy mens t-shirt", - weight: "500", - unit_of_weight: "gr" - shipping_category: cl.shipping_categories.relationship(shippingCategories[0].id), // assigns the relationship + name: 'Test Role', + organization: clp.organizations.relationship(organizations.first().id), // assigns the relationship } - const newSku = await cl.skus.create(attributes) + const newRole = await clp.roles.create(attributes) ``` -ℹ️ Check our API reference for more information on how to [create an SKU](https://docs.commercelayer.io/developers/v/api-reference/skus/create). +ℹ️ Check our API reference for more information on how to [create a Role](https://docs.commercelayer.io/provisioning/v/api-reference-p/roles/create).
### Retrieve / List
-How to fetch a single SKU +How to fetch a single organization
```javascript - // Fetch the SKU by ID - const sku = await cl.skus.retrieve('BxAkSVqKEn') + // Fetch the organization by ID + const org = await clp.organizations.retrieve('BxAkSVqKEn') - // Fetch all SKUs and filter by code - const sku = await cl.skus.list({ filters: { code_eq: 'TSHIRTMM000000FFFFFFXLXX' } }) + // Fetch all organizations and filter by name + const orgs = await clp.organizations.list({ filters: { name_start: 'TestOrg_' } }) - // Fetch the first SKU of the list - const sku = (await cl.skus.list()).first() + // Fetch the first organization of the list + const org = (await clp.organizations.list()).first() - // Fetch the last SKU of the list - const sku = (await cl.skus.list()).last() + // Fetch the last organization of the list + const org = (await clp.organizations.list()).last() ``` -ℹ️ Check our API reference for more information on how to [retrieve an SKU](https://docs.commercelayer.io/developers/v/api-reference/skus/retrieve). +ℹ️ Check our API reference for more information on how to [retrieve an organization](https://docs.commercelayer.io/provisioning/v/api-reference-p/organizations/retrieve).
-How to fetch a collection of SKUs +How to fetch a collection of organizations
```javascript - // Fetch all the SKUs - const skus = await cl.skus.list() + // Fetch all the organizations + const orgs = await clp.organizations.list() ``` When fetching a collection of resources you can leverage the `meta` attribute to get its `meta` information like so: ```javascript - const skus = await cl.skus.list() - const meta = skus.meta + const orgs = await clp.organizations.list() + const meta = orgs.meta ``` -ℹ️ Check our API reference for more information on how to [list all SKUs](https://docs.commercelayer.io/developers/v/api-reference/skus/list). +ℹ️ Check our API reference for more information on how to [list all SKUs](https://docs.commercelayer.io/provisioning/v/api-reference-p/organizations/list).
-How to fetch a collection of SKUs and sort the results +How to fetch a collection of organizations and sort the results
```javascript // Sort the results by creation date in ascending order (default) - const skus = await cl.skus.list({ sort: { created_at: 'asc' } }) + const orgs = await clp.organizations.list({ sort: { created_at: 'asc' } }) // Sort the results by creation date in descending order - const skus = await cl.skus.list({ sort: { created_at: 'desc' } }) + const orgs = await clp.organizations.list({ sort: { created_at: 'desc' } }) ``` -ℹ️ Check our API reference for more information on how to [sort results](https://docs.commercelayer.io/developers/sorting-results). +ℹ️ Check our API reference for more information on how to [sort results](https://docs.commercelayer.io/provisioning/sorting-results).
-How to fetch a collection of SKUs and include associations +How to fetch a collection of Memberships and include associations
```javascript - // Include an association (prices) - const skus = await cl.skus.list({ include: [ 'prices' ] }) + // Include an association (organization) + const mships = await clp.memberships.list({ include: [ 'organization' ] }) - // Include an association (stock items) - const skus = await cl.skus.list({ include: [ 'stock_items' ] }) + // Include an association (stock role) + const mships = await clp.memberships.list({ include: [ 'role' ] }) ``` -ℹ️ Check our API reference for more information on how to [include associations](https://docs.commercelayer.io/developers/including-associations). +ℹ️ Check our API reference for more information on how to [include associations](https://docs.commercelayer.io/provisioning/including-associations).
-How to fetch a collection of SKUs and return specific fields (sparse fieldsets) +How to fetch a collection of Permissions and return specific fields (sparse fieldsets)
```javascript // Request the API to return only specific fields - const skus = await cl.skus.list({ fields: { skus: [ 'name', 'metadata' ] } }) + const perms = await clp.permissions.list({ fields: { permissions: [ 'can_create', 'can_update' ] } }) // Request the API to return only specific fields of the included resource - const skus = await cl.skus.list({ include: [ 'prices' ], fields: { prices: [ 'currency_code', 'formatted_amount' ] } }) + const mships = await clp.memberships.list({ include: [ 'organization' ], fields: { organizations: [ 'name' ] } }) ``` -ℹ️ Check our API reference for more information on how to [use sparse fieldsets](https://docs.commercelayer.io/developers/sparse-fieldsets). +ℹ️ Check our API reference for more information on how to [use sparse fieldsets](https://docs.commercelayer.io/provisioning/sparse-fieldsets).
-How to fetch a collection of SKUs and filter data +How to fetch a collection of organizations and filter data
```javascript - // Filter all the SKUs fetching only the ones whose code starts with the string "TSHIRT" - const skus = await cl.skus.list({ filters: { code_start: 'TSHIRT' } }) + // Filter all the organizations fetching only the ones whose name starts with the string "ORG" + const orgs = await clp.organizations .list({ filters: { name_start: 'ORG' } }) - // Filter all the SKUs fetching only the ones whose code ends with the string "XLXX" - const skus = await cl.skus.list({ filters: { code_end: 'XLXX' } }) + // Filter all the organizations fetching only the ones whose name ends with the string "Brand" + const orgs = await clp.organizations.list({ filters: { name_end: 'Brand' } }) - // Filter all the SKUs fetching only the ones whose name contains the string "White Logo" - const skus = await cl.skus.list({ filters: { name_cont: 'White Logo' } }) + // Filter all the organizations fetching only the ones whose name contains the string "Test" + const orgs = await clp.organizations.list({ filters: { name_cont: 'Test' } }) - // Filter all the SKUs fetching only the ones created between two specific dates + // Filter all the organizations fetching only the ones created between two specific dates // (filters combined according to the AND logic) - const skus = await cl.skus.list({ filters: { created_at_gt: '2018-01-01', created_at_lt: '2018-01-31'} }) + const orgs = await clp.organizations.list({ filters: { created_at_gt: '2018-01-01', created_at_lt: '2018-01-31'} }) - // Filters all the SKUs fetching only the ones created or updated after a specific date + // Filters all the organizations fetching only the ones created or updated after a specific date // (attributes combined according to the OR logic) - const skus = await cl.skus.list({ filters: { updated_at_or_created_at_gt: '2019-10-10' } }) + const orgs = await clp.organizations.list({ filters: { updated_at_or_created_at_gt: '2019-10-10' } }) - // Filters all the SKUs fetching only the ones whose name contains the string "Black" - // and whose shipping category name starts with the string "MERCH" - const skus = await cl.skus.list({ filters: { name_cont: 'Black', shipping_category_name_start: 'MERCH'} }) + // Filters all the Roles fetching only the ones whose name contains the string "Admin" + // and whose organization name starts with the string "ORG" + const roles = await clp.roles.list({ filters: { name_cont: 'Admin', organization_name_start: 'ORG'} }) ``` -ℹ️ Check our API reference for more information on how to [filter data](https://docs.commercelayer.io/developers/filtering-data). +ℹ️ Check our API reference for more information on how to [filter data](https://docs.commercelayer.io/provisioning/filtering-data).
-How to paginate a collection of SKUs +How to paginate a collection of organizations
When you fetch a collection of resources, you get paginated results. You can request specific pages or items in a page like so: ```javascript - // Fetch the SKUs, setting the page number to 3 and the page size to 5 - const skus = await cl.skus.list({ pageNumber: 3, pageSize: 5 }) + // Fetch the organizations, setting the page number to 3 and the page size to 5 + const skorgsus = await clp.organizations.list({ pageNumber: 3, pageSize: 5 }) - // Get the total number of SKUs in the collection - const skuCount = skus.meta.recordCount + // Get the total number of organizations in the collection + const orgCount = orgs.meta.recordCount // Get the total number of pages - const pageCount = skus.meta.pageCount + const pageCount = orgs.meta.pageCount ``` > PS: the default page number is **1**, the default page size is **10**, and the maximum page size allowed is **25**. -ℹ️ Check our API reference for more information on how [pagination](https://docs.commercelayer.io/developers/pagination) works. +ℹ️ Check our API reference for more information on how [pagination](https://docs.commercelayer.io/provisioning/pagination) works.
-How to iterate through a collection of SKUs +How to iterate through a collection of Organizations
To execute a function for every item of a collection, use the `map()` method like so: ```javascript - // Fetch the whole list of SKUs (1st page) and print their names and codes to console - const skus = await cl.skus.list() - skus.map(p => console.log('Product: ' + p.name + ' - Code: ' + p.code)) + // Fetch the whole list of organizations (1st page) and print their ids and names to console + const orgs = await clp.organizations.list() + orgs.map(o => console.log('ID: ' + o.id + ' - Name: ' + o.name)) ```
@@ -265,19 +254,19 @@ Many resources have relationships with other resources and instead of including ```javascript // Fetch 1-to-1 related resource: billing address of an order -const billingAddress = cl.orders.billing_address('xYZkjABcde') +const org = clp.memberships.organization('xYZkjABcde') // Fetch 1-to-N related resources: orders associated to a customer -const orders = cl.customers.orders('XyzKjAbCDe', { fields: ['status', 'number'] }) +const perms = clp.roles.permissions('XyzKjAbCDe', { fields: ['can_create', 'can_update'] }) ``` In general: -- An API endpoint like `/api/customers` or `/api/customers/` translates to `cl.customers` or `cl.customers('')` with the SDK. -- 1-to-1 relationship API endpoints like `/api/orders//shipping_address` translates to `cl.orders('', { include: ['shipping_address'] }}` with the SDK. -- 1-to-N relationship API endpoints like `/api/customers/?include=orders` or `/api/customers//orders` translates to `cl.customers.retrieve('customerId', { include: ['orders'] })` or `cl.customers.orders('')` with the SDK. +- An API endpoint like `/api/organizations` or `/api/organization/` translates to `clp.organizations` or `clp.organizations('')` with the SDK. +- 1-to-1 relationship API endpoints like `/api/roles//organization` translates to `clp.roles('', { include: ['organization'] }}` with the SDK. +- 1-to-N relationship API endpoints like `/api/roles/?include=versions` or `/api/roles//permissions` translates to `clp.roles.retrieve('', { include: ['versions'] })` or `clp.roles.permissions('')` with the SDK. -ℹ️ Check our API reference for more information on how to [fetch relationships](https://docs.commercelayer.io/core/fetching-relationships). +ℹ️ Check our API reference for more information on how to [fetch relationships](https://docs.commercelayer.io/provisioning/fetching-relationships).
@@ -290,8 +279,8 @@ function passing a filter to get as result the total number of resources. ```javascript -// Get the total number of placed orders -const placedOrders = cl.orders.count({ filters: { status_eq: 'placed' } }) +// Get the total number of sales_channel credentials +const credentials = clp.api_credentials.count({ filters: { kind_eq: 'sales_channel' } }) ``` @@ -300,59 +289,59 @@ const placedOrders = cl.orders.count({ filters: { status_eq: 'placed' } }) ### Update
-How to update an existing SKU +How to update an existing organization
```javascript - const sku = { + const org = { id: 'xYZkjABcde', - description: 'Updated description...', - imageUrl: 'https://img.yourdomain.com/skus/new-image.png' + reference: '', + reference_origin: '' } - cl.skus.update(sku) // updates the SKU on the server + clp.organizations.update(org) // updates the SKU on the server ``` -ℹ️ Check our API reference for more information on how to [update an SKU](https://docs.commercelayer.io/developers/v/api-reference/skus/update). +ℹ️ Check our API reference for more information on how to [update an organization](https://docs.commercelayer.io/provisioning/v/api-reference-p/organizations/update).
### Delete
-How to delete an existing SKU +How to delete an existing membership
```javascript - cl.skus.delete('xYZkjABcde') // persisted deletion + clp.memberships.delete('xYZkjABcde') // persisted deletion ``` -ℹ️ Check our API reference for more information on how to [delete an SKU](https://docs.commercelayer.io/developers/v/api-reference/skus/delete). +ℹ️ Check our API reference for more information on how to [delete a membership](https://docs.commercelayer.io/provisioning/v/api-reference-p/memberships/delete).
## Overriding credentials -If needed, Commerce Layer JS SDK lets you change the client configuration and set it at a request level. To do that, just use the `config()` method or pass the `options` parameter and authenticate the API call with the desired credentials: +If needed, Commerce Layer Provisioning SDK lets you change the client configuration and set it at a request level. To do that, just use the `config()` method or pass the `options` parameter and authenticate the API call with the desired credentials: ```javascript // Permanently change configuration at client level - cl.config({ organization: 'you-organization-slug', accessToken: 'your-access-token' }) - const skus = await cl.skus.list() + clp.config({ accessToken: 'your-access-token' }) + const roles = await clp.roles.list() or // Use configuration at request level - cl.skus.list({}, { organization: 'you-organization-slug', accessToken: 'your-access-token' }) + clp.roles.list({}, { accessToken: 'your-access-token' }) ``` ## Handling validation errors -Commerce Layer API returns specific errors (with extra information) on each attribute of a single resource. You can inspect them to properly handle validation errors (if any). To do that, use the `errors` attribute of the catched error: +Commerce Layer Provisioning API returns specific errors (with extra information) on each attribute of a single resource. You can inspect them to properly handle validation errors (if any). To do that, use the `errors` attribute of the catched error: ```javascript // Log error messages to console: - const attributes = { code: 'TSHIRTMM000000FFFFFFXL', name: '' } + const attributes = { name: '' } - const newSku = await cl.skus.create(attributes).catch(error => console.log(error.errors)) + const newRole = await clp.roles.create(attributes).catch(error => console.log(error.errors)) // Logged errors /* @@ -365,19 +354,11 @@ Commerce Layer API returns specific errors (with extra information) on each attr status: '422', meta: { error: 'blank' } }, - { - title: 'has already been taken', - detail: 'code - has already been taken', - code: 'VALIDATION_ERROR', - source: { pointer: '/data/attributes/code' }, - status: '422', - meta: { error: 'taken', value: 'TSHIRTMM000000FFFFFFXL' } - }, { title: "can't be blank", - detail: "shipping_category - can't be blank", + detail: "organization - can't be blank", code: 'VALIDATION_ERROR', - source: { pointer: '/data/relationships/shipping_category' }, + source: { pointer: '/data/relationships/organization' }, status: '422', meta: { error: 'blank' } } @@ -386,16 +367,16 @@ Commerce Layer API returns specific errors (with extra information) on each attr ``` -ℹ️ Check our API reference for more information about the [errors](https://docs.commercelayer.io/developers/handling-errors) returned by the API. +ℹ️ Check our API reference for more information about the [errors](https://docs.commercelayer.io/provisioning/handling-errors) returned by the API. ## Contributors guide -1. Fork [this repository](https://github.com/commercelayer/commercelayer-sdk) (learn how to do this [here](https://help.github.com/articles/fork-a-repo)). +1. Fork [this repository](https://github.com/commercelayer/provisioning-sdk) (learn how to do this [here](https://help.github.com/articles/fork-a-repo)). 2. Clone the forked repository like so: ```shell - git clone https://github.com//commercelayer-sdk.git && cd commercelayer-sdk + git clone https://github.com//provisioning-sdk.git && cd provisioning-sdk ``` 3. Make your changes and create a pull request ([learn how to do this](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request)). @@ -406,7 +387,7 @@ Commerce Layer API returns specific errors (with extra information) on each attr 1. Join [Commerce Layer's Slack community](https://slack.commercelayer.app). -2. Create an [issue](https://github.com/commercelayer/commercelayer-cli/issues) in this repository. +2. Create an [issue](https://github.com/commercelayer/provisioning-sdk/issues) in this repository. 3. Ping us [on Twitter](https://twitter.com/commercelayer). From 38071fec51ab8d1b1acaa1e3ba7c87692bb87fbd Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 31 Oct 2023 16:40:16 +0000 Subject: [PATCH 04/30] chore(release): 1.0.0-beta.2 [skip ci] # [1.0.0-beta.2](https://github.com/commercelayer/provisioning-sdk/compare/v1.0.0-beta.1...v1.0.0-beta.2) (2023-10-31) ### Bug Fixes * **doc:** fix readme ([50bf2b6](https://github.com/commercelayer/provisioning-sdk/commit/50bf2b6debd921e1ca4936ac5acc669b191116ac)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 722960b..f9d1969 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [1.0.0-beta.2](https://github.com/commercelayer/provisioning-sdk/compare/v1.0.0-beta.1...v1.0.0-beta.2) (2023-10-31) + + +### Bug Fixes + +* **doc:** fix readme ([50bf2b6](https://github.com/commercelayer/provisioning-sdk/commit/50bf2b6debd921e1ca4936ac5acc669b191116ac)) + # 1.0.0-beta.1 (2023-10-31) diff --git a/package.json b/package.json index 4001956..96dd921 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@commercelayer/provisioning-sdk", - "version": "1.0.0-beta.1", + "version": "1.0.0-beta.2", "main": "lib/cjs/index.js", "types": "lib/cjs/index.d.ts", "module": "lib/esm/index.js", From ad11d1878419f8c76bb6869db6265cd46948497d Mon Sep 17 00:00:00 2001 From: Pierluigi Viti Date: Thu, 2 Nov 2023 11:28:24 +0100 Subject: [PATCH 05/30] chore: minor source code changes --- src/commercelayer.ts | 6 +----- src/index.ts | 2 +- src/resource.ts | 2 +- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/commercelayer.ts b/src/commercelayer.ts index 326cdd2..b53de88 100644 --- a/src/commercelayer.ts +++ b/src/commercelayer.ts @@ -30,7 +30,6 @@ class CommerceLayerProvisioningClient { readonly openApiSchemaVersion = OPEN_API_SCHEMA_VERSION readonly #adapter: ResourceAdapter - // #organization: string // #environment: ApiMode = sdkConfig.default.environment // ##__CL_RESOURCES_DEF_START__## @@ -68,7 +67,7 @@ class CommerceLayerProvisioningClient { // get environment(): ApiMode { return this.#environment } - private localConfig(config: SdkConfig/* & { organization?: string } */): void { + private localConfig(config: SdkConfig): void { } @@ -80,8 +79,6 @@ class CommerceLayerProvisioningClient { // CommerceLayer config this.localConfig(config) // ResourceAdapter config - // To rebuild baseUrl in client in case only the domain is defined - // if (!config.organization) config.organization = this.currentOrganization this.#adapter.config(config) return this @@ -94,7 +91,6 @@ class CommerceLayerProvisioningClient { } - // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any isApiError(error: any): error is ApiError { return CommerceLayerProvisioningStatic.isApiError(error) } diff --git a/src/index.ts b/src/index.ts index f60dcf1..ae4bf6f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,7 +5,7 @@ export { default, CommerceLayerProvisioning } from './commercelayer' // Commerce Layer Provisioning client type export type { CommerceLayerProvisioningClient } from './commercelayer' -// Commerce Layer static functions +// Commerce Layer Provisioning static functions export { CommerceLayerProvisioningStatic } from './static' // Query filter types diff --git a/src/resource.ts b/src/resource.ts index b28a237..ba4230a 100644 --- a/src/resource.ts +++ b/src/resource.ts @@ -6,9 +6,9 @@ import { generateQueryStringParams, isParamsList } from './query' import type { ResourceTypeLock } from './api' import config from './config' import type { InterceptorManager } from './interceptor' +import { ErrorType, SdkError } from './error' import Debug from './debug' -import { ErrorType, SdkError } from './error' const debug = Debug('resource') From fe2050d4088adbdce4d8e30d6773ebf3fef28e3e Mon Sep 17 00:00:00 2001 From: Pierluigi Viti Date: Thu, 30 Nov 2023 10:53:36 +0100 Subject: [PATCH 06/30] feat: add custom user agent --- pnpm-lock.yaml | 38 ++++++++++++++++++------------------ src/api.ts | 16 --------------- src/client.ts | 53 +++++++++++++++++++++++++++++++++++++++----------- src/util.ts | 32 ++++++++++++++++++++++++++++-- 4 files changed, 91 insertions(+), 48 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8383da9..ec6bdb8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2143,7 +2143,7 @@ packages: lodash-es: 4.17.21 nerf-dart: 1.0.0 normalize-url: 8.0.0 - npm: 10.2.1 + npm: 10.2.2 rc: 1.2.8 read-pkg: 8.1.0 registry-auth-token: 5.0.2 @@ -2843,7 +2843,7 @@ packages: hasBin: true dependencies: caniuse-lite: 1.0.30001559 - electron-to-chromium: 1.4.571 + electron-to-chromium: 1.4.574 node-releases: 2.0.13 update-browserslist-db: 1.0.13(browserslist@4.22.1) dev: true @@ -3302,8 +3302,8 @@ packages: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true - /electron-to-chromium@1.4.571: - resolution: {integrity: sha512-Sc+VtKwKCDj3f/kLBjdyjMpNzoZsU6WuL/wFb6EH8USmHEcebxRXcRrVpOpayxd52tuey4RUDpUsw5OS5LhJqg==} + /electron-to-chromium@1.4.574: + resolution: {integrity: sha512-bg1m8L0n02xRzx4LsTTMbBPiUd9yIR+74iPtS/Ao65CuXvhVZHP0ym1kSdDG3yHFDXqHQQBKujlN1AQ8qZnyFg==} dev: true /emittery@0.13.1: @@ -3546,8 +3546,8 @@ packages: - supports-color dev: true - /eslint-plugin-es-x@7.2.0(eslint@8.52.0): - resolution: {integrity: sha512-9dvv5CcvNjSJPqnS5uZkqb3xmbeqRLnvXKK7iI5+oK/yTusyc46zbBZKENGsOfojm/mKfszyZb+wNqNPAPeGXA==} + /eslint-plugin-es-x@7.3.0(eslint@8.52.0): + resolution: {integrity: sha512-W9zIs+k00I/I13+Bdkl/zG1MEO07G97XjUSQuH117w620SJ6bHtLUmoMvkGA2oYnI/gNdr+G7BONLyYnFaLLEQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '>=8' @@ -3601,7 +3601,7 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) builtins: 5.0.1 eslint: 8.52.0 - eslint-plugin-es-x: 7.2.0(eslint@8.52.0) + eslint-plugin-es-x: 7.3.0(eslint@8.52.0) get-tsconfig: 4.7.2 ignore: 5.2.4 is-core-module: 2.13.1 @@ -3964,7 +3964,7 @@ packages: dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 - universalify: 2.0.0 + universalify: 2.0.1 dev: true /fs.realpath@1.0.0: @@ -5124,7 +5124,7 @@ packages: /jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} dependencies: - universalify: 2.0.0 + universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 dev: true @@ -5277,7 +5277,7 @@ packages: tmpl: 1.0.5 dev: true - /marked-terminal@6.0.0(marked@9.1.4): + /marked-terminal@6.0.0(marked@9.1.5): resolution: {integrity: sha512-6rruICvqRfA4N+Mvdc0UyDbLA0A0nI5omtARIlin3P2F+aNc3EbW91Rd9HTuD0v9qWyHmNIu8Bt40gAnPfldsg==} engines: {node: '>=16.0.0'} peerDependencies: @@ -5287,13 +5287,13 @@ packages: cardinal: 2.1.1 chalk: 5.3.0 cli-table3: 0.6.3 - marked: 9.1.4 + marked: 9.1.5 node-emoji: 2.1.0 supports-hyperlinks: 3.0.0 dev: true - /marked@9.1.4: - resolution: {integrity: sha512-Mq83CCaClhXqhf8sLQ57c1unNelHEuFadK36ga+GeXR4FeT/5ssaC5PaCRVqMA74VYorzYRqdAaxxteIanh3Kw==} + /marked@9.1.5: + resolution: {integrity: sha512-14QG3shv8Kg/xc0Yh6TNkMj90wXH9mmldi5941I2OevfJ/FQAFLEwtwU2/FfgSAOMlWHrEukWSGQf8MiVYNG2A==} engines: {node: '>= 16'} hasBin: true dev: true @@ -5454,8 +5454,8 @@ packages: path-key: 4.0.0 dev: true - /npm@10.2.1: - resolution: {integrity: sha512-YVh8UDw5lR2bPS6rrS0aPG9ZXKDWeaeO/zMoZMp7g3Thrho9cqEnSrcvg4Pic2QhDAQptAynx5KgrPgCSRscqg==} + /npm@10.2.2: + resolution: {integrity: sha512-VSP/rh88wBQ+b7bz0NOdZQBQCuWLI/etpWfgUWDmNaMy0MuD1xJBMofEzuFojNpJANVaJCkN5U7KgfPdR2V1fg==} engines: {node: ^18.17.0 || >=20.5.0} hasBin: true dev: true @@ -6122,8 +6122,8 @@ packages: hook-std: 3.0.0 hosted-git-info: 7.0.1 lodash-es: 4.17.21 - marked: 9.1.4 - marked-terminal: 6.0.0(marked@9.1.4) + marked: 9.1.5 + marked-terminal: 6.0.0(marked@9.1.5) micromatch: 4.0.5 p-each-series: 3.0.0 p-reduce: 3.0.0 @@ -6719,8 +6719,8 @@ packages: resolution: {integrity: sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==} dev: true - /universalify@2.0.0: - resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} + /universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} dev: true diff --git a/src/api.ts b/src/api.ts index 9be1e9b..9396e7f 100644 --- a/src/api.ts +++ b/src/api.ts @@ -1,19 +1,3 @@ - - - - - - - - - - - - - - - - import type { Resource, ResourceRel } from './resource' import type { VersionType } from './resources/versions' diff --git a/src/client.ts b/src/client.ts index ba7b3d0..7230922 100644 --- a/src/client.ts +++ b/src/client.ts @@ -6,6 +6,7 @@ import type { InterceptorManager } from './interceptor' import config from './config' import type { Agent as HttpAgent } from 'http' import type { Agent as HttpsAgent } from 'https' +// import { packageInfo } from './util' import Debug from './debug' const debug = Debug('client') @@ -25,20 +26,25 @@ type RequestHeaders = Record // Subset of AxiosRequestConfig type RequestConfig = { - timeout?: number; - params?: RequestParams; - httpAgent?: HttpAgent; - httpsAgent?: HttpsAgent; - proxy?: ProxyConfig; + timeout?: number + params?: RequestParams + httpAgent?: HttpAgent + httpsAgent?: HttpsAgent + proxy?: ProxyConfig headers?: RequestHeaders } +type RequestConfigExtra = { + adapter?: Adapter + userAgent?: string +} + type ApiConfig = { domain?: string, accessToken: string } -type ApiClientInitConfig = ApiConfig & RequestConfig & { adapter?: Adapter } +type ApiClientInitConfig = ApiConfig & RequestConfig & RequestConfigExtra type ApiClientConfig = Partial @@ -67,12 +73,17 @@ class ApiClient { timeout: options.timeout || config.client.timeout, proxy: options.proxy, httpAgent: options.httpAgent, - httpsAgent: options.httpsAgent, + httpsAgent: options.httpsAgent } // Set custom headers const customHeaders = this.customHeaders(options.headers) + // Set User-Agent + // const userAgentData = packageInfo(['version', 'dependencies.axios'], { nestedName: true }) + let userAgent = options.userAgent || `SDK-provisioning axios/${axios.VERSION}` + if (!userAgent.includes('axios/')) userAgent += ` axios/${axios.VERSION}` + const axiosOptions: CreateAxiosDefaults = { baseURL: this.baseUrl, timeout: config.client.timeout, @@ -80,7 +91,8 @@ class ApiClient { ...customHeaders, 'Accept': 'application/vnd.api+json', 'Content-Type': 'application/vnd.api+json', - 'Authorization': 'Bearer ' + this.#accessToken + 'Authorization': 'Bearer ' + this.#accessToken, + 'User-Agent': userAgent }, ...axiosConfig } @@ -108,19 +120,35 @@ class ApiClient { if (config.httpAgent) def.httpAgent = config.httpAgent if (config.httpsAgent) def.httpsAgent = config.httpsAgent + if (config.adapter) this.adapter(config.adapter) + if (config.userAgent) this.userAgent(config.userAgent) + + // API Client config if (config.accessToken) { this.#accessToken = config.accessToken def.headers.common.Authorization = 'Bearer ' + this.#accessToken; } if (config.headers) def.headers.common = this.customHeaders(config.headers) - if (config.adapter) this.adapter(config.adapter) return this } + userAgent(userAgent: string): ApiClient { + if (userAgent) { + let ua = userAgent + if (!ua.includes('axios/')) { + // const axiosVer = packageInfo(['dependencies.axios'], { nestedName: true }) + if (axios.VERSION) ua += ` axios/${axios.VERSION}` + } + this.#client.defaults.headers['User-Agent'] = ua + } + return this + } + + adapter(adapter: Adapter): ApiClient { if (adapter) this.#client.defaults.adapter = adapter return this @@ -131,11 +159,14 @@ class ApiClient { debug('request %s %s, %O, %O', method, path, body || {}, options || {}) + // Ignored params alerts (in debug mode) + if (options?.adapter) debug('Adapter ignored in request config') + if (options?.userAgent) debug('User-Agent header ignored in request config') + const data = body ? { data: body } : undefined const url = path // Runtime request parameters - // const baseUrl = options?.organization ? baseURL(options.organization, options.domain) : undefined const accessToken = options?.accessToken || this.#accessToken const headers = this.customHeaders(options?.headers) @@ -158,7 +189,7 @@ class ApiClient { const customHeaders: RequestHeaders = {} if (headers) { for (const [name, value] of Object.entries(headers)) - if (!['accept', 'content-type', 'authorization'].includes(name.toLowerCase())) customHeaders[name] = value + if (!['accept', 'content-type', 'authorization', 'user-agent'].includes(name.toLowerCase())) customHeaders[name] = value } return customHeaders } diff --git a/src/util.ts b/src/util.ts index 861f432..d6a0553 100644 --- a/src/util.ts +++ b/src/util.ts @@ -1,4 +1,5 @@ -import type { ObjectType } from "../src/common"; +import type { ObjectType } from "../src/common" +// import path from 'path' @@ -15,5 +16,32 @@ const sortObjectFields = (obj: ObjectType): ObjectType => { return sorted } +/* +const nestedField = (obj: any, field: string): { key: string, val: any } => { -export { sleep, sortObjectFields } + let fp = field + if (fp.endsWith('.')) fp = fp.substring(0, fp.length-1) + + const dots = field.split(".") + + const key = dots[dots.length-1] + let val = obj + while (dots.length && (val = val[dots.shift() || ''])); + + return { key, val } +} +*/ + +/* +const packageInfo = (fields?: string | string[], options?: any): Record => { + const pjson = require(path.resolve('./', 'package.json')) + return fields? (Array.isArray(fields)? fields : [ fields ]).reduce((info: any, field) => { + const nf = nestedField(pjson, field) + info[options?.nestedName? nf.key : field] = nf.val + return info + }, {}) : pjson +} +*/ + + +export { sleep, sortObjectFields, /* packageInfo */ } From f1406899d6162c8aac2e0e54985f3af04d19caa7 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 30 Nov 2023 09:56:18 +0000 Subject: [PATCH 07/30] chore(release): 1.0.0-beta.3 [skip ci] # [1.0.0-beta.3](https://github.com/commercelayer/provisioning-sdk/compare/v1.0.0-beta.2...v1.0.0-beta.3) (2023-11-30) ### Features * add custom user agent ([fe2050d](https://github.com/commercelayer/provisioning-sdk/commit/fe2050d4088adbdce4d8e30d6773ebf3fef28e3e)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f9d1969..7f6f0f2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [1.0.0-beta.3](https://github.com/commercelayer/provisioning-sdk/compare/v1.0.0-beta.2...v1.0.0-beta.3) (2023-11-30) + + +### Features + +* add custom user agent ([fe2050d](https://github.com/commercelayer/provisioning-sdk/commit/fe2050d4088adbdce4d8e30d6773ebf3fef28e3e)) + # [1.0.0-beta.2](https://github.com/commercelayer/provisioning-sdk/compare/v1.0.0-beta.1...v1.0.0-beta.2) (2023-10-31) diff --git a/package.json b/package.json index 96dd921..d06779c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@commercelayer/provisioning-sdk", - "version": "1.0.0-beta.2", + "version": "1.0.0-beta.3", "main": "lib/cjs/index.js", "types": "lib/cjs/index.d.ts", "module": "lib/esm/index.js", From 006a74784c4f2fe302d4d4b0b96673df0067f8a1 Mon Sep 17 00:00:00 2001 From: Pierluigi Viti Date: Thu, 30 Nov 2023 16:11:20 +0100 Subject: [PATCH 08/30] fix: release script --- .releaserc | 3 +-- src/static.ts | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.releaserc b/.releaserc index 9d11bf3..16bfd7c 100644 --- a/.releaserc +++ b/.releaserc @@ -4,8 +4,7 @@ "branches": [ { "name": "main", "channel": "latest" }, "+([0-9])?(.{+([0-9]),x}).x", - { "name": "beta", "prerelease": true }, - { "name": "sdk2", "channel": "sdk2", "prerelease": "beta" } + { "name": "beta", "prerelease": true } ], "plugins": [ "@semantic-release/commit-analyzer", diff --git a/src/static.ts b/src/static.ts index 5332bb4..d89abe0 100644 --- a/src/static.ts +++ b/src/static.ts @@ -8,8 +8,8 @@ import type { CommerceLayerProvisioningClient, CommerceLayerInitConfig } from '. /* Static functions */ export const CommerceLayerProvisioningStatic = { - resources: (): readonly string[] => { - return api.resourceList + resources: (sort?: boolean): readonly string[] => { + return sort? [ ...api.resourceList ].sort() : api.resourceList }, isSdkError: (error: unknown): error is SdkError => { From 293500fdab3caeba5dec76a8687314242e3bca03 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 30 Nov 2023 15:12:14 +0000 Subject: [PATCH 09/30] chore(release): 1.0.0-beta.4 [skip ci] # [1.0.0-beta.4](https://github.com/commercelayer/provisioning-sdk/compare/v1.0.0-beta.3...v1.0.0-beta.4) (2023-11-30) ### Bug Fixes * release script ([006a747](https://github.com/commercelayer/provisioning-sdk/commit/006a74784c4f2fe302d4d4b0b96673df0067f8a1)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7f6f0f2..728dc0f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [1.0.0-beta.4](https://github.com/commercelayer/provisioning-sdk/compare/v1.0.0-beta.3...v1.0.0-beta.4) (2023-11-30) + + +### Bug Fixes + +* release script ([006a747](https://github.com/commercelayer/provisioning-sdk/commit/006a74784c4f2fe302d4d4b0b96673df0067f8a1)) + # [1.0.0-beta.3](https://github.com/commercelayer/provisioning-sdk/compare/v1.0.0-beta.2...v1.0.0-beta.3) (2023-11-30) diff --git a/package.json b/package.json index d06779c..9a8f21b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@commercelayer/provisioning-sdk", - "version": "1.0.0-beta.3", + "version": "1.0.0-beta.4", "main": "lib/cjs/index.js", "types": "lib/cjs/index.d.ts", "module": "lib/esm/index.js", From 9e569c7484896ea666f5f8079ee0833ed9dc87aa Mon Sep 17 00:00:00 2001 From: Pierluigi Viti Date: Wed, 6 Dec 2023 18:20:32 +0100 Subject: [PATCH 10/30] fix: update schema --- gen/openapi.json | 1226 ++++++++++- package.json | 18 +- pnpm-lock.yaml | 1865 +++++++++-------- .../resources/application_memberships.spec.ts | 305 +++ specs/resources/memberships.spec.ts | 22 + src/api.ts | 7 + src/commercelayer.ts | 2 + src/model.ts | 1 + src/resources/api_credentials.ts | 11 +- src/resources/application_memberships.ts | 114 + src/resources/memberships.ts | 12 + src/resources/organizations.ts | 10 +- src/resources/permissions.ts | 2 +- src/resources/roles.ts | 2 +- src/resources/versions.ts | 10 +- 15 files changed, 2598 insertions(+), 1009 deletions(-) create mode 100644 specs/resources/application_memberships.spec.ts create mode 100644 src/resources/application_memberships.ts diff --git a/gen/openapi.json b/gen/openapi.json index 3c1317e..092506f 100644 --- a/gen/openapi.json +++ b/gen/openapi.json @@ -225,6 +225,291 @@ } } }, + "/application_memberships": { + "get": { + "operationId": "GET/application_memberships", + "summary": "List all application memberships", + "description": "List all application memberships", + "tags": [ + "application_memberships" + ], + "responses": { + "200": { + "description": "A list of application membership objects", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/applicationMembershipResponseList" + } + } + } + } + } + }, + "post": { + "operationId": "POST/application_memberships", + "summary": "Creates an application membership", + "description": "Creates an application membership", + "tags": [ + "application_memberships" + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/applicationMembershipCreate" + } + } + } + }, + "responses": { + "201": { + "description": "The created application membership object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/applicationMembershipResponse" + } + } + } + } + } + } + }, + "/application_memberships/{applicationMembershipId}": { + "get": { + "operationId": "GET/application_memberships/applicationMembershipId", + "summary": "Retrieve an application membership", + "description": "Retrieve an application membership", + "parameters": [ + { + "name": "applicationMembershipId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "tags": [ + "application_memberships" + ], + "responses": { + "200": { + "description": "The application membership object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/applicationMembershipResponse" + } + } + } + } + } + }, + "patch": { + "operationId": "PATCH/application_memberships/applicationMembershipId", + "summary": "Updates an application membership", + "description": "Updates an application membership", + "tags": [ + "application_memberships" + ], + "parameters": [ + { + "name": "applicationMembershipId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/applicationMembershipUpdate" + } + } + } + }, + "responses": { + "200": { + "description": "The updated application membership object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/applicationMembershipResponse" + } + } + } + } + } + }, + "delete": { + "operationId": "DELETE/application_memberships/applicationMembershipId", + "summary": "Delete an application membership", + "description": "Delete an application membership", + "tags": [ + "application_memberships" + ], + "parameters": [ + { + "name": "applicationMembershipId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "204": { + "description": "No content" + } + } + } + }, + "/application_memberships/{applicationMembershipId}/api_credential": { + "get": { + "operationId": "GET/applicationMembershipId/api_credential", + "summary": "Related application membership", + "description": "Related application membership", + "tags": [ + "api_credentials", + "has_one" + ], + "parameters": [ + { + "name": "applicationMembershipId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The api_credential associated to the application membership" + } + } + } + }, + "/application_memberships/{applicationMembershipId}/membership": { + "get": { + "operationId": "GET/applicationMembershipId/membership", + "summary": "Related application membership", + "description": "Related application membership", + "tags": [ + "memberships", + "has_one" + ], + "parameters": [ + { + "name": "applicationMembershipId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The membership associated to the application membership" + } + } + } + }, + "/application_memberships/{applicationMembershipId}/user": { + "get": { + "operationId": "GET/applicationMembershipId/user", + "summary": "Related application membership", + "description": "Related application membership", + "tags": [ + "users", + "has_one" + ], + "parameters": [ + { + "name": "applicationMembershipId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The user associated to the application membership" + } + } + } + }, + "/application_memberships/{applicationMembershipId}/organization": { + "get": { + "operationId": "GET/applicationMembershipId/organization", + "summary": "Related application membership", + "description": "Related application membership", + "tags": [ + "organizations", + "has_one" + ], + "parameters": [ + { + "name": "applicationMembershipId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The organization associated to the application membership" + } + } + } + }, + "/application_memberships/{applicationMembershipId}/role": { + "get": { + "operationId": "GET/applicationMembershipId/role", + "summary": "Related application membership", + "description": "Related application membership", + "tags": [ + "roles", + "has_one" + ], + "parameters": [ + { + "name": "applicationMembershipId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The role associated to the application membership" + } + } + } + }, "/memberships": { "get": { "operationId": "GET/memberships", @@ -429,6 +714,33 @@ } } }, + "/memberships/{membershipId}/application_memberships": { + "get": { + "operationId": "GET/membershipId/application_memberships", + "summary": "Related membership", + "description": "Related membership", + "tags": [ + "application_memberships", + "has_many" + ], + "parameters": [ + { + "name": "membershipId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The application_memberships associated to the membership" + } + } + } + }, "/memberships/{membershipId}/versions": { "get": { "operationId": "GET/membershipId/versions", @@ -1303,15 +1615,15 @@ }, "kind": { "type": "string", - "description": "The API credential kind, can be one of: `sales_channel`, `integration` and `webapp`.", - "example": "sales-channel", + "description": "The API credential kind, can be one of: `webapp`, `sales_channel`, `integration` or the kind of app you want to fork (e.g. `orders`, `imports`, etc.).", + "example": "sales_channel", "nullable": false }, "confidential": { "type": "boolean", "description": "Indicates if the API credential it's confidential.", "example": true, - "nullable": true + "nullable": false }, "redirect_uri": { "type": "string", @@ -1323,19 +1635,19 @@ "type": "string", "description": "The API credential unique ID.", "example": "xxxx-yyyy-zzzz", - "nullable": true + "nullable": false }, "client_secret": { "type": "string", "description": "The API credential unique secret.", "example": "xxxx-yyyy-zzzz", - "nullable": true + "nullable": false }, "scopes": { "type": "string", "description": "The API credential scopes.", "example": "market:all market:9 market:122 market:6 stock_location:6 stock_location:33", - "nullable": true + "nullable": false }, "expires_in": { "type": "integer", @@ -1343,15 +1655,27 @@ "example": 7200, "nullable": true }, - "created_at": { + "mode": { "type": "string", - "description": "Time at which the resource was created.", - "example": "2018-01-01T12:00:00.000Z", + "description": "Indicates the environment the resource belongs to (one of `test` or `live`).", + "example": "test", "nullable": false }, - "updated_at": { - "type": "string", - "description": "Time at which the resource was last updated.", + "custom": { + "type": "boolean", + "description": "Indicates if the API credential is used to create a custom app (e.g. fork a hosted app).", + "example": false, + "nullable": true + }, + "created_at": { + "type": "string", + "description": "Time at which the resource was created.", + "example": "2018-01-01T12:00:00.000Z", + "nullable": false + }, + "updated_at": { + "type": "string", + "description": "Time at which the resource was last updated.", "example": "2018-01-01T12:00:00.000Z", "nullable": false }, @@ -1460,8 +1784,8 @@ }, "kind": { "type": "string", - "description": "The API credential kind, can be one of: `sales_channel`, `integration` and `webapp`.", - "example": "sales-channel" + "description": "The API credential kind, can be one of: `webapp`, `sales_channel`, `integration` or the kind of app you want to fork (e.g. `orders`, `imports`, etc.).", + "example": "sales_channel" }, "redirect_uri": { "type": "string", @@ -1473,6 +1797,11 @@ "description": "The lifetime of the access token in seconds (min. `7200`, max. `31536000`. Default is `14400` for Sales channels and `7200` for other client types).", "example": 7200 }, + "custom": { + "type": "boolean", + "description": "Indicates if the API credential is used to create a custom app (e.g. fork a hosted app).", + "example": false + }, "reference": { "type": "string", "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", @@ -1576,7 +1905,584 @@ "type": "string", "description": "The resource's type", "enum": [ - "api_credentials" + "api_credentials" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + }, + "attributes": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The API credential internal name.", + "example": "My app", + "nullable": false + }, + "redirect_uri": { + "type": "string", + "description": "The API credential redirect URI.", + "example": "https://bluebrand.com/img/logo.svg", + "nullable": true + }, + "expires_in": { + "type": "integer", + "description": "The lifetime of the access token in seconds (min. `7200`, max. `31536000`. Default is `14400` for Sales channels and `7200` for other client types).", + "example": 7200, + "nullable": true + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE", + "nullable": true + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", + "nullable": true + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + }, + "nullable": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "role": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "roles" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + } + } + } + } + } + } + }, + "apiCredentialResponse": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + }, + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "api_credentials" + ] + }, + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + } + } + }, + "attributes": { + "$ref": "#/components/schemas/apiCredential/properties/data/properties/attributes" + }, + "relationships": { + "type": "object", + "properties": { + "organization": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organization" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + }, + "role": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "role" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + } + } + } + } + } + } + }, + "apiCredentialResponseList": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/apiCredentialResponse/properties/data" + } + } + } + }, + "applicationMembership": { + "type": "object", + "properties": { + "data": { + "type": "object", + "required": [ + "type", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "application_memberships" + ] + }, + "attributes": { + "type": "object", + "properties": { + "created_at": { + "type": "string", + "description": "Time at which the resource was created.", + "example": "2018-01-01T12:00:00.000Z", + "nullable": false + }, + "updated_at": { + "type": "string", + "description": "Time at which the resource was last updated.", + "example": "2018-01-01T12:00:00.000Z", + "nullable": false + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE", + "nullable": true + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", + "nullable": true + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + }, + "nullable": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "api_credential": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "api_credentials" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "membership": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "memberships" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "user": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "users" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "organization": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organizations" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "role": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "roles" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + } + } + } + } + } + } + }, + "applicationMembershipCreate": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "required": [ + "type", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "application_memberships" + ] + }, + "attributes": { + "type": "object", + "properties": { + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE" + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN" + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + } + } + } + }, + "relationships": { + "type": "object", + "properties": { + "api_credential": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "api_credentials" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "membership": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "memberships" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "user": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "users" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "organization": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organizations" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "role": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "roles" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + } + }, + "required": [ + "api_credential", + "membership", + "user", + "organization", + "role" + ] + } + } + } + } + }, + "applicationMembershipUpdate": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "required": [ + "type", + "id", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "application_memberships" ] }, "id": { @@ -1587,24 +2493,6 @@ "attributes": { "type": "object", "properties": { - "name": { - "type": "string", - "description": "The API credential internal name.", - "example": "My app", - "nullable": false - }, - "redirect_uri": { - "type": "string", - "description": "The API credential redirect URI.", - "example": "https://bluebrand.com/img/logo.svg", - "nullable": true - }, - "expires_in": { - "type": "integer", - "description": "The lifetime of the access token in seconds (min. `7200`, max. `31536000`. Default is `14400` for Sales channels and `7200` for other client types).", - "example": 7200, - "nullable": true - }, "reference": { "type": "string", "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", @@ -1661,7 +2549,7 @@ } } }, - "apiCredentialResponse": { + "applicationMembershipResponse": { "type": "object", "properties": { "data": { @@ -1676,7 +2564,7 @@ "type": "string", "description": "The resource's type", "enum": [ - "api_credentials" + "application_memberships" ] }, "links": { @@ -1689,11 +2577,113 @@ } }, "attributes": { - "$ref": "#/components/schemas/apiCredential/properties/data/properties/attributes" + "$ref": "#/components/schemas/applicationMembership/properties/data/properties/attributes" }, "relationships": { "type": "object", "properties": { + "api_credential": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "api_credential" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + }, + "membership": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "membership" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + }, + "user": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "user" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + }, "organization": { "type": "object", "properties": { @@ -1768,13 +2758,13 @@ } } }, - "apiCredentialResponseList": { + "applicationMembershipResponseList": { "type": "object", "properties": { "data": { "type": "array", "items": { - "$ref": "#/components/schemas/apiCredentialResponse/properties/data" + "$ref": "#/components/schemas/applicationMembershipResponse/properties/data" } } } @@ -1805,6 +2795,18 @@ "example": "commercelayer@commercelayer.io", "nullable": false }, + "user_first_name": { + "type": "string", + "description": "The user first name.", + "example": "John", + "nullable": false + }, + "user_last_name": { + "type": "string", + "description": "The user last name.", + "example": "Doe", + "nullable": false + }, "status": { "type": "string", "description": "The memberships status. One of `pending` (default), `active`.", @@ -1896,6 +2898,28 @@ } } }, + "application_memberships": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "application_memberships" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, "versions": { "type": "object", "properties": { @@ -2026,6 +3050,31 @@ } } } + }, + "application_memberships": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "application_memberships" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } } }, "required": [ @@ -2115,6 +3164,31 @@ } } } + }, + "application_memberships": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "application_memberships" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } } } } @@ -2223,6 +3297,40 @@ } } }, + "application_memberships": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "application_memberships" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + }, "versions": { "type": "object", "properties": { @@ -2304,13 +3412,13 @@ "type": "string", "description": "The organization's slug name.", "example": "the-blue-brand", - "nullable": true + "nullable": false }, "domain": { "type": "string", "description": "The organization's domain.", "example": "the-blue-brand.commercelayer.io", - "nullable": true + "nullable": false }, "support_phone": { "type": "string", @@ -2382,13 +3490,13 @@ "type": "integer", "description": "The maximum number of active concurrent promotions allowed for your organization.", "example": 10, - "nullable": true + "nullable": false }, "max_concurrent_imports": { "type": "integer", "description": "The maximum number of concurrent imports allowed for your organization.", "example": 30, - "nullable": true + "nullable": false }, "associated_markets": { "type": "object", @@ -2396,7 +3504,7 @@ "example": { "foo": "bar" }, - "nullable": true + "nullable": false }, "region": { "type": "string", @@ -3028,7 +4136,7 @@ "example": { "foo": "bar" }, - "nullable": true + "nullable": false }, "created_at": { "type": "string", @@ -3516,7 +4624,7 @@ "type": "string", "description": "The kind of role, one of: `custom`, `admin`, `read_only`", "example": "custom", - "nullable": true + "nullable": false }, "created_at": { "type": "string", @@ -4288,31 +5396,31 @@ "resource_type": { "type": "string", "description": "The type of the versioned resource.", - "example": "orders", - "nullable": true + "example": "roles", + "nullable": false }, "resource_id": { "type": "string", "description": "The versioned resource ID.", "example": "PzdJhdLdYV", - "nullable": true + "nullable": false }, "event": { "type": "string", "description": "The event which generates the version.", "example": "update", - "nullable": true + "nullable": false }, "changes": { "type": "object", "description": "The object changes payload.", "example": { - "status": [ - "draft", - "placed" + "name": [ + "previous", + "new" ] }, - "nullable": true + "nullable": false }, "who": { "type": "object", @@ -4320,15 +5428,11 @@ "example": { "application": { "id": "DNOPYiZYpn", - "kind": "sales_channel", + "kind": "integration", "public": true - }, - "owner": { - "id": "yQQrBhLBmQ", - "type": "Customer" } }, - "nullable": true + "nullable": false }, "created_at": { "type": "string", @@ -4445,6 +5549,10 @@ "name": "has_one", "description": "relationship kind" }, + { + "name": "application_memberships", + "description": "resource type" + }, { "name": "memberships", "description": "resource type" diff --git a/package.json b/package.json index 9a8f21b..45a8410 100644 --- a/package.json +++ b/package.json @@ -36,27 +36,27 @@ "axios": "1.5.1" }, "devDependencies": { - "@babel/preset-env": "^7.23.2", - "@babel/preset-typescript": "^7.23.2", + "@babel/preset-env": "^7.23.5", + "@babel/preset-typescript": "^7.23.3", "@commercelayer/eslint-config-ts": "1.1.0", "@commercelayer/js-auth": "^4.2.0", "@semantic-release/changelog": "^6.0.3", "@semantic-release/git": "^10.0.1", - "@types/debug": "^4.1.10", - "@types/jest": "^29.5.7", - "@types/lodash": "^4.14.200", - "@types/node": "^20.8.10", + "@types/debug": "^4.1.12", + "@types/jest": "^29.5.11", + "@types/lodash": "^4.14.202", + "@types/node": "^20.10.3", "dotenv": "^16.3.1", - "eslint": "^8.52.0", + "eslint": "^8.55.0", "inflector-js": "^1.0.1", "jest": "^29.7.0", "json-typescript": "^1.1.2", "jsonapi-typescript": "^0.1.3", "lodash": "^4.17.21", "minimize-js": "^1.4.0", - "semantic-release": "^22.0.6", + "semantic-release": "^22.0.10", "ts-node": "^10.9.1", - "typescript": "^5.2.2" + "typescript": "^5.3.2" }, "repository": "github:commercelayer/provisioning-sdk", "bugs": "https://github.com/commercelayer/provisioning-sdk/issues", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ec6bdb8..0f08410 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,47 +14,47 @@ dependencies: devDependencies: '@babel/preset-env': - specifier: ^7.23.2 - version: 7.23.2(@babel/core@7.23.2) + specifier: ^7.23.5 + version: 7.23.5(@babel/core@7.23.5) '@babel/preset-typescript': - specifier: ^7.23.2 - version: 7.23.2(@babel/core@7.23.2) + specifier: ^7.23.3 + version: 7.23.3(@babel/core@7.23.5) '@commercelayer/eslint-config-ts': specifier: 1.1.0 - version: 1.1.0(eslint@8.52.0)(typescript@5.2.2) + version: 1.1.0(eslint@8.55.0)(typescript@5.3.2) '@commercelayer/js-auth': specifier: ^4.2.0 version: 4.2.0 '@semantic-release/changelog': specifier: ^6.0.3 - version: 6.0.3(semantic-release@22.0.6) + version: 6.0.3(semantic-release@22.0.10) '@semantic-release/git': specifier: ^10.0.1 - version: 10.0.1(semantic-release@22.0.6) + version: 10.0.1(semantic-release@22.0.10) '@types/debug': - specifier: ^4.1.10 - version: 4.1.10 + specifier: ^4.1.12 + version: 4.1.12 '@types/jest': - specifier: ^29.5.7 - version: 29.5.7 + specifier: ^29.5.11 + version: 29.5.11 '@types/lodash': - specifier: ^4.14.200 - version: 4.14.200 + specifier: ^4.14.202 + version: 4.14.202 '@types/node': - specifier: ^20.8.10 - version: 20.8.10 + specifier: ^20.10.3 + version: 20.10.3 dotenv: specifier: ^16.3.1 version: 16.3.1 eslint: - specifier: ^8.52.0 - version: 8.52.0 + specifier: ^8.55.0 + version: 8.55.0 inflector-js: specifier: ^1.0.1 version: 1.0.1 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.8.10)(ts-node@10.9.1) + version: 29.7.0(@types/node@20.10.3)(ts-node@10.9.1) json-typescript: specifier: ^1.1.2 version: 1.1.2 @@ -68,14 +68,14 @@ devDependencies: specifier: ^1.4.0 version: 1.4.0 semantic-release: - specifier: ^22.0.6 - version: 22.0.6(typescript@5.2.2) + specifier: ^22.0.10 + version: 22.0.10(typescript@5.3.2) ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@20.8.10)(typescript@5.2.2) + version: 10.9.1(@types/node@20.10.3)(typescript@5.3.2) typescript: - specifier: ^5.2.2 - version: 5.2.2 + specifier: ^5.3.2 + version: 5.3.2 packages: @@ -92,33 +92,33 @@ packages: '@jridgewell/trace-mapping': 0.3.20 dev: true - /@babel/code-frame@7.22.13: - resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} + /@babel/code-frame@7.23.5: + resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.22.20 + '@babel/highlight': 7.23.4 chalk: 2.4.2 dev: true - /@babel/compat-data@7.23.2: - resolution: {integrity: sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==} + /@babel/compat-data@7.23.5: + resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} engines: {node: '>=6.9.0'} dev: true - /@babel/core@7.23.2: - resolution: {integrity: sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==} + /@babel/core@7.23.5: + resolution: {integrity: sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.22.13 - '@babel/generator': 7.23.0 + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.5 '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2) - '@babel/helpers': 7.23.2 - '@babel/parser': 7.23.0 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) + '@babel/helpers': 7.23.5 + '@babel/parser': 7.23.5 '@babel/template': 7.22.15 - '@babel/traverse': 7.23.2 - '@babel/types': 7.23.0 + '@babel/traverse': 7.23.5 + '@babel/types': 7.23.5 convert-source-map: 2.0.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -128,11 +128,11 @@ packages: - supports-color dev: true - /@babel/generator@7.23.0: - resolution: {integrity: sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==} + /@babel/generator@7.23.5: + resolution: {integrity: sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.0 + '@babel/types': 7.23.5 '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.20 jsesc: 2.5.2 @@ -142,63 +142,63 @@ packages: resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.0 + '@babel/types': 7.23.5 dev: true /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.0 + '@babel/types': 7.23.5 dev: true /@babel/helper-compilation-targets@7.22.15: resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/compat-data': 7.23.2 - '@babel/helper-validator-option': 7.22.15 - browserslist: 4.22.1 + '@babel/compat-data': 7.23.5 + '@babel/helper-validator-option': 7.23.5 + browserslist: 4.22.2 lru-cache: 5.1.1 semver: 6.3.1 dev: true - /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.23.2): - resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==} + /@babel/helper-create-class-features-plugin@7.23.5(@babel/core@7.23.5): + resolution: {integrity: sha512-QELlRWxSpgdwdJzSJn4WAhKC+hvw/AtHbbrIoncKHkhKKR/luAlKkgBDcri1EzWAo8f8VvYVryEHN4tax/V67A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.2) + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.5) '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 semver: 6.3.1 dev: true - /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.2): + /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.5): resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-annotate-as-pure': 7.22.5 regexpu-core: 5.3.2 semver: 6.3.1 dev: true - /@babel/helper-define-polyfill-provider@0.4.3(@babel/core@7.23.2): + /@babel/helper-define-polyfill-provider@0.4.3(@babel/core@7.23.5): resolution: {integrity: sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-compilation-targets': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 debug: 4.3.4 @@ -218,37 +218,37 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.22.15 - '@babel/types': 7.23.0 + '@babel/types': 7.23.5 dev: true /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.0 + '@babel/types': 7.23.5 dev: true /@babel/helper-member-expression-to-functions@7.23.0: resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.0 + '@babel/types': 7.23.5 dev: true /@babel/helper-module-imports@7.22.15: resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.0 + '@babel/types': 7.23.5 dev: true - /@babel/helper-module-transforms@7.23.0(@babel/core@7.23.2): - resolution: {integrity: sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==} + /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-module-imports': 7.22.15 '@babel/helper-simple-access': 7.22.5 @@ -260,7 +260,7 @@ packages: resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.0 + '@babel/types': 7.23.5 dev: true /@babel/helper-plugin-utils@7.22.5: @@ -268,25 +268,25 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.2): + /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.5): resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-wrap-function': 7.22.20 dev: true - /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.2): + /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.5): resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 @@ -296,25 +296,25 @@ packages: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.0 + '@babel/types': 7.23.5 dev: true /@babel/helper-skip-transparent-expression-wrappers@7.22.5: resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.0 + '@babel/types': 7.23.5 dev: true /@babel/helper-split-export-declaration@7.22.6: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.0 + '@babel/types': 7.23.5 dev: true - /@babel/helper-string-parser@7.22.5: - resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + /@babel/helper-string-parser@7.23.4: + resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} engines: {node: '>=6.9.0'} dev: true @@ -323,8 +323,8 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-option@7.22.15: - resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} + /@babel/helper-validator-option@7.23.5: + resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} engines: {node: '>=6.9.0'} dev: true @@ -334,22 +334,22 @@ packages: dependencies: '@babel/helper-function-name': 7.23.0 '@babel/template': 7.22.15 - '@babel/types': 7.23.0 + '@babel/types': 7.23.5 dev: true - /@babel/helpers@7.23.2: - resolution: {integrity: sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==} + /@babel/helpers@7.23.5: + resolution: {integrity: sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.22.15 - '@babel/traverse': 7.23.2 - '@babel/types': 7.23.0 + '@babel/traverse': 7.23.5 + '@babel/types': 7.23.5 transitivePeerDependencies: - supports-color dev: true - /@babel/highlight@7.22.20: - resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} + /@babel/highlight@7.23.4: + resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-validator-identifier': 7.22.20 @@ -357,910 +357,921 @@ packages: js-tokens: 4.0.0 dev: true - /@babel/parser@7.23.0: - resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==} + /@babel/parser@7.23.5: + resolution: {integrity: sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.23.0 + '@babel/types': 7.23.5 dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.15(@babel/core@7.23.2): - resolution: {integrity: sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==} + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.15(@babel/core@7.23.2): - resolution: {integrity: sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==} + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.23.0(@babel/core@7.23.2) + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.5) dev: true - /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.2): + /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.5): resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 dev: true - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.2): + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.5): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.2): + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.5): resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.2): + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.5): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.2): + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.5): resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.2): + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.5): resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.2): + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.5): resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==} + /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-import-attributes@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==} + /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.2): + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.5): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.2): + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.5): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} + /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.2): + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.5): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.2): + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.5): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.2): + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.5): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.2): + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.5): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.2): + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.5): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.2): + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.5): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.2): + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.5): resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.2): + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.5): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} + /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.2): + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.5): resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/core': 7.23.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==} + /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-async-generator-functions@7.23.2(@babel/core@7.23.2): - resolution: {integrity: sha512-BBYVGxbDVHfoeXbOwcagAkOQAm9NxoTdMGfTqghu1GrvadSaw6iW3Je6IcL5PNOw8VwjxqBECXy50/iCQSY/lQ==} + /@babel/plugin-transform-async-generator-functions@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.2) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.2) + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.5) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==} + /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-module-imports': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.2) + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==} + /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-block-scoping@7.23.0(@babel/core@7.23.2): - resolution: {integrity: sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==} + /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-class-properties@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==} + /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/core': 7.23.5 + '@babel/helper-create-class-features-plugin': 7.23.5(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-class-static-block@7.22.11(@babel/core@7.23.2): - resolution: {integrity: sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==} + /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/core': 7.23.5 + '@babel/helper-create-class-features-plugin': 7.23.5(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.2) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-classes@7.22.15(@babel/core@7.23.2): - resolution: {integrity: sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==} + /@babel/plugin-transform-classes@7.23.5(@babel/core@7.23.5): + resolution: {integrity: sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-compilation-targets': 7.22.15 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.2) + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.5) '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 dev: true - /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==} + /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/template': 7.22.15 dev: true - /@babel/plugin-transform-destructuring@7.23.0(@babel/core@7.23.2): - resolution: {integrity: sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==} + /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==} + /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/core': 7.23.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==} + /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-dynamic-import@7.22.11(@babel/core@7.23.2): - resolution: {integrity: sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==} + /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.2) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==} + /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-export-namespace-from@7.22.11(@babel/core@7.23.2): - resolution: {integrity: sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==} + /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.2) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-for-of@7.22.15(@babel/core@7.23.2): - resolution: {integrity: sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==} + /@babel/plugin-transform-for-of@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-function-name@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==} + /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-compilation-targets': 7.22.15 '@babel/helper-function-name': 7.23.0 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-json-strings@7.22.11(@babel/core@7.23.2): - resolution: {integrity: sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==} + /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.2) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-literals@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==} + /@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-logical-assignment-operators@7.22.11(@babel/core@7.23.2): - resolution: {integrity: sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==} + /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.2) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==} + /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-modules-amd@7.23.0(@babel/core@7.23.2): - resolution: {integrity: sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==} + /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2) + '@babel/core': 7.23.5 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-modules-commonjs@7.23.0(@babel/core@7.23.2): - resolution: {integrity: sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==} + /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2) + '@babel/core': 7.23.5 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-simple-access': 7.22.5 dev: true - /@babel/plugin-transform-modules-systemjs@7.23.0(@babel/core@7.23.2): - resolution: {integrity: sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==} + /@babel/plugin-transform-modules-systemjs@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2) + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-identifier': 7.22.20 dev: true - /@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==} + /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2) + '@babel/core': 7.23.5 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.2): + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.5): resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/core': 7.23.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-new-target@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==} + /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-nullish-coalescing-operator@7.22.11(@babel/core@7.23.2): - resolution: {integrity: sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==} + /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.2) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-numeric-separator@7.22.11(@babel/core@7.23.2): - resolution: {integrity: sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==} + /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.2) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-object-rest-spread@7.22.15(@babel/core@7.23.2): - resolution: {integrity: sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==} + /@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.23.2 - '@babel/core': 7.23.2 + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.5 '@babel/helper-compilation-targets': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.23.2) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-object-super@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==} + /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.2) + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-optional-catch-binding@7.22.11(@babel/core@7.23.2): - resolution: {integrity: sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==} + /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.2) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-optional-chaining@7.23.0(@babel/core@7.23.2): - resolution: {integrity: sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==} + /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.2) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-parameters@7.22.15(@babel/core@7.23.2): - resolution: {integrity: sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==} + /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-private-methods@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==} + /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/core': 7.23.5 + '@babel/helper-create-class-features-plugin': 7.23.5(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-private-property-in-object@7.22.11(@babel/core@7.23.2): - resolution: {integrity: sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==} + /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.23.5): + resolution: {integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/helper-create-class-features-plugin': 7.23.5(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.2) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==} + /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-regenerator@7.22.10(@babel/core@7.23.2): - resolution: {integrity: sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==} + /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 regenerator-transform: 0.15.2 dev: true - /@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==} + /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==} + /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-spread@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==} + /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: true - /@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==} + /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==} + /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==} + /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-typescript@7.22.15(@babel/core@7.23.2): - resolution: {integrity: sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==} + /@babel/plugin-transform-typescript@7.23.5(@babel/core@7.23.5): + resolution: {integrity: sha512-2fMkXEJkrmwgu2Bsv1Saxgj30IXZdJ+84lQcKKI7sm719oXs0BBw2ZENKdJdR1PjWndgLCEBNXJOri0fk7RYQA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/helper-create-class-features-plugin': 7.23.5(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.5) dev: true - /@babel/plugin-transform-unicode-escapes@7.22.10(@babel/core@7.23.2): - resolution: {integrity: sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==} + /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-property-regex@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==} + /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/core': 7.23.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==} + /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/core': 7.23.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-sets-regex@7.22.5(@babel/core@7.23.2): - resolution: {integrity: sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==} + /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/core': 7.23.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/preset-env@7.23.2(@babel/core@7.23.2): - resolution: {integrity: sha512-BW3gsuDD+rvHL2VO2SjAUNTBe5YrjsTiDyqamPDWY723na3/yPQ65X5oQkFVJZ0o50/2d+svm1rkPoJeR1KxVQ==} + /@babel/preset-env@7.23.5(@babel/core@7.23.5): + resolution: {integrity: sha512-0d/uxVD6tFGWXGDSfyMD1p2otoaKmu6+GD+NfAx0tMaH+dxORnp7T9TaVQ6mKyya7iBtCIVxHjWT7MuzzM9z+A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.23.2 - '@babel/core': 7.23.2 + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.5 '@babel/helper-compilation-targets': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.22.15 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.15(@babel/core@7.23.2) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.15(@babel/core@7.23.2) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.2) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.2) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.2) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.2) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-syntax-import-attributes': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.2) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.2) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.2) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.2) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.2) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.2) - '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-async-generator-functions': 7.23.2(@babel/core@7.23.2) - '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-block-scoping': 7.23.0(@babel/core@7.23.2) - '@babel/plugin-transform-class-properties': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-class-static-block': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-classes': 7.22.15(@babel/core@7.23.2) - '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-destructuring': 7.23.0(@babel/core@7.23.2) - '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-duplicate-keys': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-dynamic-import': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-exponentiation-operator': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-export-namespace-from': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-for-of': 7.22.15(@babel/core@7.23.2) - '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-json-strings': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-logical-assignment-operators': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-modules-amd': 7.23.0(@babel/core@7.23.2) - '@babel/plugin-transform-modules-commonjs': 7.23.0(@babel/core@7.23.2) - '@babel/plugin-transform-modules-systemjs': 7.23.0(@babel/core@7.23.2) - '@babel/plugin-transform-modules-umd': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-new-target': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-nullish-coalescing-operator': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-numeric-separator': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-object-rest-spread': 7.22.15(@babel/core@7.23.2) - '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-optional-catch-binding': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-optional-chaining': 7.23.0(@babel/core@7.23.2) - '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.23.2) - '@babel/plugin-transform-private-methods': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-private-property-in-object': 7.22.11(@babel/core@7.23.2) - '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-regenerator': 7.22.10(@babel/core@7.23.2) - '@babel/plugin-transform-reserved-words': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-typeof-symbol': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-unicode-escapes': 7.22.10(@babel/core@7.23.2) - '@babel/plugin-transform-unicode-property-regex': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-unicode-sets-regex': 7.22.5(@babel/core@7.23.2) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.2) - '@babel/types': 7.23.0 - babel-plugin-polyfill-corejs2: 0.4.6(@babel/core@7.23.2) - babel-plugin-polyfill-corejs3: 0.8.6(@babel/core@7.23.2) - babel-plugin-polyfill-regenerator: 0.5.3(@babel/core@7.23.2) - core-js-compat: 3.33.2 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.5) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.5) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.5) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.5) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.5) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.5) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.5) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.5) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.5) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-async-generator-functions': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-classes': 7.23.5(@babel/core@7.23.5) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-for-of': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-modules-systemjs': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.5) + '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.5) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.5) + babel-plugin-polyfill-corejs2: 0.4.6(@babel/core@7.23.5) + babel-plugin-polyfill-corejs3: 0.8.6(@babel/core@7.23.5) + babel-plugin-polyfill-regenerator: 0.5.3(@babel/core@7.23.5) + core-js-compat: 3.34.0 semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true - /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.2): + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.5): resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/types': 7.23.0 + '@babel/types': 7.23.5 esutils: 2.0.3 dev: true - /@babel/preset-typescript@7.23.2(@babel/core@7.23.2): - resolution: {integrity: sha512-u4UJc1XsS1GhIGteM8rnGiIvf9rJpiVgMEeCnwlLA7WJPC+jcXWJAGxYmeqs5hOZD8BbAfnV5ezBOxQbb4OUxA==} + /@babel/preset-typescript@7.23.3(@babel/core@7.23.5): + resolution: {integrity: sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.22.15 - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-modules-commonjs': 7.23.0(@babel/core@7.23.2) - '@babel/plugin-transform-typescript': 7.22.15(@babel/core@7.23.2) + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-transform-typescript': 7.23.5(@babel/core@7.23.5) dev: true /@babel/regjsgen@0.8.0: resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} dev: true - /@babel/runtime@7.23.2: - resolution: {integrity: sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==} + /@babel/runtime@7.23.5: + resolution: {integrity: sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.0 @@ -1270,34 +1281,34 @@ packages: resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.22.13 - '@babel/parser': 7.23.0 - '@babel/types': 7.23.0 + '@babel/code-frame': 7.23.5 + '@babel/parser': 7.23.5 + '@babel/types': 7.23.5 dev: true - /@babel/traverse@7.23.2: - resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==} + /@babel/traverse@7.23.5: + resolution: {integrity: sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.22.13 - '@babel/generator': 7.23.0 + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.0 - '@babel/types': 7.23.0 + '@babel/parser': 7.23.5 + '@babel/types': 7.23.5 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color dev: true - /@babel/types@7.23.0: - resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} + /@babel/types@7.23.5: + resolution: {integrity: sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.22.5 + '@babel/helper-string-parser': 7.23.4 '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 dev: true @@ -1313,23 +1324,23 @@ packages: dev: true optional: true - /@commercelayer/eslint-config-ts@1.1.0(eslint@8.52.0)(typescript@5.2.2): + /@commercelayer/eslint-config-ts@1.1.0(eslint@8.55.0)(typescript@5.3.2): resolution: {integrity: sha512-OOzV3RPN7JlEZkwNxWVHdRRknjuLboB/CwxeS832/Kd5sMvOHyaYymNVSpG2tiQj7aFsvtfK8m1umM7Lhod6AA==} peerDependencies: eslint: '>=8.0' typescript: '>=5.0' dependencies: - '@typescript-eslint/eslint-plugin': 6.9.1(@typescript-eslint/parser@6.9.1)(eslint@8.52.0)(typescript@5.2.2) - '@typescript-eslint/parser': 6.9.1(eslint@8.52.0)(typescript@5.2.2) - eslint: 8.52.0 - eslint-config-prettier: 9.0.0(eslint@8.52.0) - eslint-config-standard-with-typescript: 39.1.1(@typescript-eslint/eslint-plugin@6.9.1)(eslint-plugin-import@2.29.0)(eslint-plugin-n@16.2.0)(eslint-plugin-promise@6.1.1)(eslint@8.52.0)(typescript@5.2.2) - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.9.1)(eslint@8.52.0) - eslint-plugin-n: 16.2.0(eslint@8.52.0) - eslint-plugin-prettier: 5.0.1(eslint-config-prettier@9.0.0)(eslint@8.52.0)(prettier@3.0.3) - eslint-plugin-promise: 6.1.1(eslint@8.52.0) - prettier: 3.0.3 - typescript: 5.2.2 + '@typescript-eslint/eslint-plugin': 6.13.2(@typescript-eslint/parser@6.13.2)(eslint@8.55.0)(typescript@5.3.2) + '@typescript-eslint/parser': 6.13.2(eslint@8.55.0)(typescript@5.3.2) + eslint: 8.55.0 + eslint-config-prettier: 9.1.0(eslint@8.55.0) + eslint-config-standard-with-typescript: 39.1.1(@typescript-eslint/eslint-plugin@6.13.2)(eslint-plugin-import@2.29.0)(eslint-plugin-n@16.3.1)(eslint-plugin-promise@6.1.1)(eslint@8.55.0)(typescript@5.3.2) + eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.13.2)(eslint@8.55.0) + eslint-plugin-n: 16.3.1(eslint@8.55.0) + eslint-plugin-prettier: 5.0.1(eslint-config-prettier@9.1.0)(eslint@8.55.0)(prettier@3.1.0) + eslint-plugin-promise: 6.1.1(eslint@8.55.0) + prettier: 3.1.0 + typescript: 5.3.2 transitivePeerDependencies: - '@types/eslint' - eslint-import-resolver-typescript @@ -1547,13 +1558,13 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.52.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.55.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.52.0 + eslint: 8.55.0 eslint-visitor-keys: 3.4.3 dev: true @@ -1562,15 +1573,15 @@ packages: engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /@eslint/eslintrc@2.1.2: - resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} + /@eslint/eslintrc@2.1.4: + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 debug: 4.3.4 espree: 9.6.1 globals: 13.23.0 - ignore: 5.2.4 + ignore: 5.3.0 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -1579,8 +1590,8 @@ packages: - supports-color dev: true - /@eslint/js@8.52.0: - resolution: {integrity: sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==} + /@eslint/js@8.55.0: + resolution: {integrity: sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -1637,7 +1648,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.8.10 + '@types/node': 20.10.3 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -1658,14 +1669,14 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.10 + '@types/node': 20.10.3 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.8.10)(ts-node@10.9.1) + jest-config: 29.7.0(@types/node@20.10.3)(ts-node@10.9.1) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -1693,7 +1704,7 @@ packages: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.10 + '@types/node': 20.10.3 jest-mock: 29.7.0 dev: true @@ -1720,7 +1731,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.8.10 + '@types/node': 20.10.3 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -1753,13 +1764,13 @@ packages: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.20 - '@types/node': 20.8.10 + '@types/node': 20.10.3 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 glob: 7.2.3 graceful-fs: 4.2.11 - istanbul-lib-coverage: 3.2.0 + istanbul-lib-coverage: 3.2.2 istanbul-lib-instrument: 6.0.1 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 @@ -1770,7 +1781,7 @@ packages: slash: 3.0.0 string-length: 4.0.2 strip-ansi: 6.0.1 - v8-to-istanbul: 9.1.3 + v8-to-istanbul: 9.2.0 transitivePeerDependencies: - supports-color dev: true @@ -1797,7 +1808,7 @@ packages: dependencies: '@jest/console': 29.7.0 '@jest/types': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.5 + '@types/istanbul-lib-coverage': 2.0.6 collect-v8-coverage: 1.0.2 dev: true @@ -1815,7 +1826,7 @@ packages: resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.20 babel-plugin-istanbul: 6.1.1 @@ -1839,10 +1850,10 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/schemas': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.5 - '@types/istanbul-reports': 3.0.3 - '@types/node': 20.8.10 - '@types/yargs': 17.0.29 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 20.10.3 + '@types/yargs': 17.0.32 chalk: 4.1.2 dev: true @@ -1909,71 +1920,70 @@ packages: engines: {node: '>= 18'} dev: true - /@octokit/core@5.0.1: - resolution: {integrity: sha512-lyeeeZyESFo+ffI801SaBKmCfsvarO+dgV8/0gD8u1d87clbEdWsP5yC+dSj3zLhb2eIf5SJrn6vDz9AheETHw==} + /@octokit/core@5.0.2: + resolution: {integrity: sha512-cZUy1gUvd4vttMic7C0lwPed8IYXWYp8kHIMatyhY8t8n3Cpw2ILczkV5pGMPqef7v0bLo0pOHrEHarsau2Ydg==} engines: {node: '>= 18'} dependencies: '@octokit/auth-token': 4.0.0 '@octokit/graphql': 7.0.2 - '@octokit/request': 8.1.4 + '@octokit/request': 8.1.6 '@octokit/request-error': 5.0.1 - '@octokit/types': 12.1.1 + '@octokit/types': 12.4.0 before-after-hook: 2.2.3 - universal-user-agent: 6.0.0 + universal-user-agent: 6.0.1 dev: true - /@octokit/endpoint@9.0.2: - resolution: {integrity: sha512-qhKW8YLIi+Kmc92FQUFGr++DYtkx/1fBv+Thua6baqnjnOsgBYJDCvWZR1YcINuHGOEQt416WOfE+A/oG60NBQ==} + /@octokit/endpoint@9.0.4: + resolution: {integrity: sha512-DWPLtr1Kz3tv8L0UvXTDP1fNwM0S+z6EJpRcvH66orY6Eld4XBMCSYsaWp4xIm61jTWxK68BrR7ibO+vSDnZqw==} engines: {node: '>= 18'} dependencies: - '@octokit/types': 12.1.1 - is-plain-object: 5.0.0 - universal-user-agent: 6.0.0 + '@octokit/types': 12.4.0 + universal-user-agent: 6.0.1 dev: true /@octokit/graphql@7.0.2: resolution: {integrity: sha512-OJ2iGMtj5Tg3s6RaXH22cJcxXRi7Y3EBqbHTBRq+PQAqfaS8f/236fUrWhfSn8P4jovyzqucxme7/vWSSZBX2Q==} engines: {node: '>= 18'} dependencies: - '@octokit/request': 8.1.4 - '@octokit/types': 12.1.1 - universal-user-agent: 6.0.0 + '@octokit/request': 8.1.6 + '@octokit/types': 12.4.0 + universal-user-agent: 6.0.1 dev: true - /@octokit/openapi-types@19.0.2: - resolution: {integrity: sha512-8li32fUDUeml/ACRp/njCWTsk5t17cfTM1jp9n08pBrqs5cDFJubtjsSnuz56r5Tad6jdEPJld7LxNp9dNcyjQ==} + /@octokit/openapi-types@19.1.0: + resolution: {integrity: sha512-6G+ywGClliGQwRsjvqVYpklIfa7oRPA0vyhPQG/1Feh+B+wU0vGH1JiJ5T25d3g1JZYBHzR2qefLi9x8Gt+cpw==} dev: true - /@octokit/plugin-paginate-rest@9.1.2(@octokit/core@5.0.1): - resolution: {integrity: sha512-euDbNV6fxX6btsCDnZoZM4vw3zO1nj1Z7TskHAulO6mZ9lHoFTpwll6farf+wh31mlBabgU81bBYdflp0GLVAQ==} + /@octokit/plugin-paginate-rest@9.1.5(@octokit/core@5.0.2): + resolution: {integrity: sha512-WKTQXxK+bu49qzwv4qKbMMRXej1DU2gq017euWyKVudA6MldaSSQuxtz+vGbhxV4CjxpUxjZu6rM2wfc1FiWVg==} engines: {node: '>= 18'} peerDependencies: '@octokit/core': '>=5' dependencies: - '@octokit/core': 5.0.1 - '@octokit/types': 12.1.1 + '@octokit/core': 5.0.2 + '@octokit/types': 12.4.0 dev: true - /@octokit/plugin-retry@6.0.1(@octokit/core@5.0.1): + /@octokit/plugin-retry@6.0.1(@octokit/core@5.0.2): resolution: {integrity: sha512-SKs+Tz9oj0g4p28qkZwl/topGcb0k0qPNX/i7vBKmDsjoeqnVfFUquqrE/O9oJY7+oLzdCtkiWSXLpLjvl6uog==} engines: {node: '>= 18'} peerDependencies: '@octokit/core': '>=5' dependencies: - '@octokit/core': 5.0.1 + '@octokit/core': 5.0.2 '@octokit/request-error': 5.0.1 - '@octokit/types': 12.1.1 + '@octokit/types': 12.4.0 bottleneck: 2.19.5 dev: true - /@octokit/plugin-throttling@8.1.2(@octokit/core@5.0.1): - resolution: {integrity: sha512-oFba+ioR6HGb0fgqxMta7Kpk/MdffUTuUxNY856l1nXPvh7Qggp8w4AksRx1SDA8SGd+4cbrpkY4k1J/Xz8nZQ==} + /@octokit/plugin-throttling@8.1.3(@octokit/core@5.0.2): + resolution: {integrity: sha512-pfyqaqpc0EXh5Cn4HX9lWYsZ4gGbjnSmUILeu4u2gnuM50K/wIk9s1Pxt3lVeVwekmITgN/nJdoh43Ka+vye8A==} engines: {node: '>= 18'} peerDependencies: '@octokit/core': ^5.0.0 dependencies: - '@octokit/core': 5.0.1 - '@octokit/types': 12.1.1 + '@octokit/core': 5.0.2 + '@octokit/types': 12.4.0 bottleneck: 2.19.5 dev: true @@ -1981,26 +1991,25 @@ packages: resolution: {integrity: sha512-X7pnyTMV7MgtGmiXBwmO6M5kIPrntOXdyKZLigNfQWSEQzVxR4a4vo49vJjTWX70mPndj8KhfT4Dx+2Ng3vnBQ==} engines: {node: '>= 18'} dependencies: - '@octokit/types': 12.1.1 + '@octokit/types': 12.4.0 deprecation: 2.3.1 once: 1.4.0 dev: true - /@octokit/request@8.1.4: - resolution: {integrity: sha512-M0aaFfpGPEKrg7XoA/gwgRvc9MSXHRO2Ioki1qrPDbl1e9YhjIwVoHE7HIKmv/m3idzldj//xBujcFNqGX6ENA==} + /@octokit/request@8.1.6: + resolution: {integrity: sha512-YhPaGml3ncZC1NfXpP3WZ7iliL1ap6tLkAp6MvbK2fTTPytzVUyUesBBogcdMm86uRYO5rHaM1xIWxigWZ17MQ==} engines: {node: '>= 18'} dependencies: - '@octokit/endpoint': 9.0.2 + '@octokit/endpoint': 9.0.4 '@octokit/request-error': 5.0.1 - '@octokit/types': 12.1.1 - is-plain-object: 5.0.0 - universal-user-agent: 6.0.0 + '@octokit/types': 12.4.0 + universal-user-agent: 6.0.1 dev: true - /@octokit/types@12.1.1: - resolution: {integrity: sha512-qnJTldJ1NyGT5MTsCg/Zi+y2IFHZ1Jo5+njNCjJ9FcainV7LjuHgmB697kA0g4MjZeDAJsM3B45iqCVsCLVFZg==} + /@octokit/types@12.4.0: + resolution: {integrity: sha512-FLWs/AvZllw/AGVs+nJ+ELCDZZJk+kY0zMen118xhL2zD0s1etIUHm1odgjP7epxYU1ln7SZxEUWYop5bhsdgQ==} dependencies: - '@octokit/openapi-types': 19.0.2 + '@octokit/openapi-types': 19.1.0 dev: true /@pkgjs/parseargs@0.11.0: @@ -2015,7 +2024,7 @@ packages: engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} dependencies: cross-spawn: 7.0.3 - fast-glob: 3.3.1 + fast-glob: 3.3.2 is-glob: 4.0.3 open: 9.1.0 picocolors: 1.0.0 @@ -2043,7 +2052,7 @@ packages: config-chain: 1.1.13 dev: true - /@semantic-release/changelog@6.0.3(semantic-release@22.0.6): + /@semantic-release/changelog@6.0.3(semantic-release@22.0.10): resolution: {integrity: sha512-dZuR5qByyfe3Y03TpmCvAxCyTnp7r5XwtHRf/8vD9EAn4ZWbavUX8adMtXYzE86EVh0gyLA7lm5yW4IV30XUag==} engines: {node: '>=14.17'} peerDependencies: @@ -2051,13 +2060,13 @@ packages: dependencies: '@semantic-release/error': 3.0.0 aggregate-error: 3.1.0 - fs-extra: 11.1.1 + fs-extra: 11.2.0 lodash: 4.17.21 - semantic-release: 22.0.6(typescript@5.2.2) + semantic-release: 22.0.10(typescript@5.3.2) dev: true - /@semantic-release/commit-analyzer@11.0.0(semantic-release@22.0.6): - resolution: {integrity: sha512-uEXyf4Z0AWJuxI9TbSQP5kkIYqus1/E1NcmE7pIv6d6/m/5EJcNWAGR4FOo34vrV26FhEaRVkxFfYzp/M7BKIg==} + /@semantic-release/commit-analyzer@11.1.0(semantic-release@22.0.10): + resolution: {integrity: sha512-cXNTbv3nXR2hlzHjAMgbuiQVtvWHTlwwISt60B+4NZv01y/QRY7p2HcJm8Eh2StzcTJoNnflvKjHH/cjFS7d5g==} engines: {node: ^18.17 || >=20.6.1} peerDependencies: semantic-release: '>=20.1.0' @@ -2066,10 +2075,10 @@ packages: conventional-commits-filter: 4.0.0 conventional-commits-parser: 5.0.0 debug: 4.3.4 - import-from: 4.0.0 + import-from-esm: 1.3.3 lodash-es: 4.17.21 micromatch: 4.0.5 - semantic-release: 22.0.6(typescript@5.2.2) + semantic-release: 22.0.10(typescript@5.3.2) transitivePeerDependencies: - supports-color dev: true @@ -2084,7 +2093,7 @@ packages: engines: {node: '>=18'} dev: true - /@semantic-release/git@10.0.1(semantic-release@22.0.6): + /@semantic-release/git@10.0.1(semantic-release@22.0.10): resolution: {integrity: sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w==} engines: {node: '>=14.17'} peerDependencies: @@ -2098,40 +2107,40 @@ packages: lodash: 4.17.21 micromatch: 4.0.5 p-reduce: 2.1.0 - semantic-release: 22.0.6(typescript@5.2.2) + semantic-release: 22.0.10(typescript@5.3.2) transitivePeerDependencies: - supports-color dev: true - /@semantic-release/github@9.2.1(semantic-release@22.0.6): - resolution: {integrity: sha512-fEn9uOe6jwWR6ro2Wh6YNBCBuZ5lRi8Myz+1j3KDTSt8OuUGlpVM4lFac/0bDrql2NOKrIEAMGCfWb9WMIdzIg==} + /@semantic-release/github@9.2.4(semantic-release@22.0.10): + resolution: {integrity: sha512-VMzqiuSLhHc0/1Q8M/FmWnOaclh5aXL2pQWceldWBYSWLNzQu8GOR4bkGl57ciUtvm+MCMi4FaStZxSDJGEfUg==} engines: {node: '>=18'} peerDependencies: semantic-release: '>=20.1.0' dependencies: - '@octokit/core': 5.0.1 - '@octokit/plugin-paginate-rest': 9.1.2(@octokit/core@5.0.1) - '@octokit/plugin-retry': 6.0.1(@octokit/core@5.0.1) - '@octokit/plugin-throttling': 8.1.2(@octokit/core@5.0.1) + '@octokit/core': 5.0.2 + '@octokit/plugin-paginate-rest': 9.1.5(@octokit/core@5.0.2) + '@octokit/plugin-retry': 6.0.1(@octokit/core@5.0.2) + '@octokit/plugin-throttling': 8.1.3(@octokit/core@5.0.2) '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 debug: 4.3.4 dir-glob: 3.0.1 - globby: 13.2.2 + globby: 14.0.0 http-proxy-agent: 7.0.0 https-proxy-agent: 7.0.2 issue-parser: 6.0.0 lodash-es: 4.17.21 - mime: 3.0.0 + mime: 4.0.0 p-filter: 3.0.0 - semantic-release: 22.0.6(typescript@5.2.2) + semantic-release: 22.0.10(typescript@5.3.2) url-join: 5.0.0 transitivePeerDependencies: - supports-color dev: true - /@semantic-release/npm@11.0.0(semantic-release@22.0.6): - resolution: {integrity: sha512-ozNCiPUp14Xp2rgeY7j96yFTEhDncLSWOJr0IAUr888+ax6fH5xgYkNVv08vpkV8C5GIXBgnGd9coRiOCD6oqQ==} + /@semantic-release/npm@11.0.1(semantic-release@22.0.10): + resolution: {integrity: sha512-nFcT0pgVwpXsPkzjqP3ObH+pILeN1AbYscCDuYwgZEPZukL+RsGhrtdT4HA1Gjb/y1bVbE90JNtMIcgRi5z/Fg==} engines: {node: ^18.17 || >=20} peerDependencies: semantic-release: '>=20.1.0' @@ -2139,21 +2148,21 @@ packages: '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 execa: 8.0.1 - fs-extra: 11.1.1 + fs-extra: 11.2.0 lodash-es: 4.17.21 nerf-dart: 1.0.0 normalize-url: 8.0.0 - npm: 10.2.2 + npm: 10.2.4 rc: 1.2.8 - read-pkg: 8.1.0 + read-pkg: 9.0.1 registry-auth-token: 5.0.2 - semantic-release: 22.0.6(typescript@5.2.2) + semantic-release: 22.0.10(typescript@5.3.2) semver: 7.5.4 tempy: 3.1.0 dev: true - /@semantic-release/release-notes-generator@12.0.0(semantic-release@22.0.6): - resolution: {integrity: sha512-m7Ds8ComP1KJgA2Lke2xMwE1TOOU40U7AzP4lT8hJ2tUAeicziPz/1GeDFmRkTOkMFlfHvE6kuvMkvU+mIzIDQ==} + /@semantic-release/release-notes-generator@12.1.0(semantic-release@22.0.10): + resolution: {integrity: sha512-g6M9AjUKAZUZnxaJZnouNBeDNTCUrJ5Ltj+VJ60gJeDaRRahcHsry9HW8yKrnKkKNkx5lbWiEP1FPMqVNQz8Kg==} engines: {node: ^18.17 || >=20.6.1} peerDependencies: semantic-release: '>=20.1.0' @@ -2164,11 +2173,11 @@ packages: conventional-commits-parser: 5.0.0 debug: 4.3.4 get-stream: 7.0.1 - import-from: 4.0.0 + import-from-esm: 1.3.3 into-stream: 7.0.0 lodash-es: 4.17.21 - read-pkg-up: 10.1.0 - semantic-release: 22.0.6(typescript@5.2.2) + read-pkg-up: 11.0.0 + semantic-release: 22.0.10(typescript@5.3.2) transitivePeerDependencies: - supports-color dev: true @@ -2177,11 +2186,16 @@ packages: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: true - /@sindresorhus/is@3.1.2: - resolution: {integrity: sha512-JiX9vxoKMmu8Y3Zr2RVathBL1Cdu4Nt4MuNWemt1Nc06A0RAin9c5FArkhGsyMBWfCu4zj+9b+GxtjAnE4qqLQ==} + /@sindresorhus/is@4.6.0: + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} dev: true + /@sindresorhus/merge-streams@1.0.0: + resolution: {integrity: sha512-rUV5WyJrJLoloD4NDN1V1+LDMDWOa4OTsT4yYJwQNpTU6FWxkxHpL7eu4w+DmiH8x/EAM1otkPE1+LaspIbplw==} + engines: {node: '>=18'} + dev: true + /@sinonjs/commons@3.0.0: resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} dependencies: @@ -2210,116 +2224,116 @@ packages: resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} dev: true - /@types/babel__core@7.20.3: - resolution: {integrity: sha512-54fjTSeSHwfan8AyHWrKbfBWiEUrNTZsUwPTDSNaaP1QDQIZbeNUg3a59E9D+375MzUw/x1vx2/0F5LBz+AeYA==} + /@types/babel__core@7.20.5: + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: - '@babel/parser': 7.23.0 - '@babel/types': 7.23.0 - '@types/babel__generator': 7.6.6 - '@types/babel__template': 7.4.3 - '@types/babel__traverse': 7.20.3 + '@babel/parser': 7.23.5 + '@babel/types': 7.23.5 + '@types/babel__generator': 7.6.7 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.4 dev: true - /@types/babel__generator@7.6.6: - resolution: {integrity: sha512-66BXMKb/sUWbMdBNdMvajU7i/44RkrA3z/Yt1c7R5xejt8qh84iU54yUWCtm0QwGJlDcf/gg4zd/x4mpLAlb/w==} + /@types/babel__generator@7.6.7: + resolution: {integrity: sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==} dependencies: - '@babel/types': 7.23.0 + '@babel/types': 7.23.5 dev: true - /@types/babel__template@7.4.3: - resolution: {integrity: sha512-ciwyCLeuRfxboZ4isgdNZi/tkt06m8Tw6uGbBSBgWrnnZGNXiEyM27xc/PjXGQLqlZ6ylbgHMnm7ccF9tCkOeQ==} + /@types/babel__template@7.4.4: + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} dependencies: - '@babel/parser': 7.23.0 - '@babel/types': 7.23.0 + '@babel/parser': 7.23.5 + '@babel/types': 7.23.5 dev: true - /@types/babel__traverse@7.20.3: - resolution: {integrity: sha512-Lsh766rGEFbaxMIDH7Qa+Yha8cMVI3qAK6CHt3OR0YfxOIn5Z54iHiyDRycHrBqeIiqGa20Kpsv1cavfBKkRSw==} + /@types/babel__traverse@7.20.4: + resolution: {integrity: sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==} dependencies: - '@babel/types': 7.23.0 + '@babel/types': 7.23.5 dev: true - /@types/debug@4.1.10: - resolution: {integrity: sha512-tOSCru6s732pofZ+sMv9o4o3Zc+Sa8l3bxd/tweTQudFn06vAzb13ZX46Zi6m6EJ+RUbRTHvgQJ1gBtSgkaUYA==} + /@types/debug@4.1.12: + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} dependencies: - '@types/ms': 0.7.33 + '@types/ms': 0.7.34 dev: true - /@types/graceful-fs@4.1.8: - resolution: {integrity: sha512-NhRH7YzWq8WiNKVavKPBmtLYZHxNY19Hh+az28O/phfp68CF45pMFud+ZzJ8ewnxnC5smIdF3dqFeiSUQ5I+pw==} + /@types/graceful-fs@4.1.9: + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} dependencies: - '@types/node': 20.8.10 + '@types/node': 20.10.3 dev: true - /@types/istanbul-lib-coverage@2.0.5: - resolution: {integrity: sha512-zONci81DZYCZjiLe0r6equvZut0b+dBRPBN5kBDjsONnutYNtJMoWQ9uR2RkL1gLG9NMTzvf+29e5RFfPbeKhQ==} + /@types/istanbul-lib-coverage@2.0.6: + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} dev: true - /@types/istanbul-lib-report@3.0.2: - resolution: {integrity: sha512-8toY6FgdltSdONav1XtUHl4LN1yTmLza+EuDazb/fEmRNCwjyqNVIQWs2IfC74IqjHkREs/nQ2FWq5kZU9IC0w==} + /@types/istanbul-lib-report@3.0.3: + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} dependencies: - '@types/istanbul-lib-coverage': 2.0.5 + '@types/istanbul-lib-coverage': 2.0.6 dev: true - /@types/istanbul-reports@3.0.3: - resolution: {integrity: sha512-1nESsePMBlf0RPRffLZi5ujYh7IH1BWL4y9pr+Bn3cJBdxz+RTP8bUFljLz9HvzhhOSWKdyBZ4DIivdL6rvgZg==} + /@types/istanbul-reports@3.0.4: + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} dependencies: - '@types/istanbul-lib-report': 3.0.2 + '@types/istanbul-lib-report': 3.0.3 dev: true - /@types/jest@29.5.7: - resolution: {integrity: sha512-HLyetab6KVPSiF+7pFcUyMeLsx25LDNDemw9mGsJBkai/oouwrjTycocSDYopMEwFhN2Y4s9oPyOCZNofgSt2g==} + /@types/jest@29.5.11: + resolution: {integrity: sha512-S2mHmYIVe13vrm6q4kN6fLYYAka15ALQki/vgDC3mIukEOx8WJlv0kQPM+d4w8Gp6u0uSdKND04IlTXBv0rwnQ==} dependencies: expect: 29.7.0 pretty-format: 29.7.0 dev: true - /@types/json-schema@7.0.14: - resolution: {integrity: sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==} + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} dev: true /@types/json5@0.0.29: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: true - /@types/lodash@4.14.200: - resolution: {integrity: sha512-YI/M/4HRImtNf3pJgbF+W6FrXovqj+T+/HpENLTooK9PnkacBsDpeP3IpHab40CClUfhNmdM2WTNP2sa2dni5Q==} + /@types/lodash@4.14.202: + resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==} dev: true - /@types/ms@0.7.33: - resolution: {integrity: sha512-AuHIyzR5Hea7ij0P9q7vx7xu4z0C28ucwjAZC0ja7JhINyCnOw8/DnvAPQQ9TfOlCtZAmCERKQX9+o1mgQhuOQ==} + /@types/ms@0.7.34: + resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} dev: true - /@types/node@20.8.10: - resolution: {integrity: sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w==} + /@types/node@20.10.3: + resolution: {integrity: sha512-XJavIpZqiXID5Yxnxv3RUDKTN5b81ddNC3ecsA0SoFXz/QU8OGBwZGMomiq0zw+uuqbL/krztv/DINAQ/EV4gg==} dependencies: undici-types: 5.26.5 dev: true - /@types/normalize-package-data@2.4.3: - resolution: {integrity: sha512-ehPtgRgaULsFG8x0NeYJvmyH1hmlfsNLujHe9dQEia/7MAJYdzMSi19JtchUHjmBA6XC/75dK55mzZH+RyieSg==} + /@types/normalize-package-data@2.4.4: + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} dev: true - /@types/semver@7.5.4: - resolution: {integrity: sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==} + /@types/semver@7.5.6: + resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} dev: true - /@types/stack-utils@2.0.2: - resolution: {integrity: sha512-g7CK9nHdwjK2n0ymT2CW698FuWJRIx+RP6embAzZ2Qi8/ilIrA1Imt2LVSeHUzKvpoi7BhmmQcXz95eS0f2JXw==} + /@types/stack-utils@2.0.3: + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} dev: true - /@types/yargs-parser@21.0.2: - resolution: {integrity: sha512-5qcvofLPbfjmBfKaLfj/+f+Sbd6pN4zl7w7VSVI5uz7m9QZTuB2aZAa2uo1wHFBNN2x6g/SoTkXmd8mQnQF2Cw==} + /@types/yargs-parser@21.0.3: + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} dev: true - /@types/yargs@17.0.29: - resolution: {integrity: sha512-nacjqA3ee9zRF/++a3FUY1suHTFKZeHba2n8WeDw9cCVdmzmHpIxyzOJBcpHvvEmS8E9KqWlSnWHUkOrkhWcvA==} + /@types/yargs@17.0.32: + resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} dependencies: - '@types/yargs-parser': 21.0.2 + '@types/yargs-parser': 21.0.3 dev: true - /@typescript-eslint/eslint-plugin@6.9.1(@typescript-eslint/parser@6.9.1)(eslint@8.52.0)(typescript@5.2.2): - resolution: {integrity: sha512-w0tiiRc9I4S5XSXXrMHOWgHgxbrBn1Ro+PmiYhSg2ZVdxrAJtQgzU5o2m1BfP6UOn7Vxcc6152vFjQfmZR4xEg==} + /@typescript-eslint/eslint-plugin@6.13.2(@typescript-eslint/parser@6.13.2)(eslint@8.55.0)(typescript@5.3.2): + resolution: {integrity: sha512-3+9OGAWHhk4O1LlcwLBONbdXsAhLjyCFogJY/cWy2lxdVJ2JrcTF2pTGMaLl2AE7U1l31n8Py4a8bx5DLf/0dQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -2330,25 +2344,25 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.9.1(eslint@8.52.0)(typescript@5.2.2) - '@typescript-eslint/scope-manager': 6.9.1 - '@typescript-eslint/type-utils': 6.9.1(eslint@8.52.0)(typescript@5.2.2) - '@typescript-eslint/utils': 6.9.1(eslint@8.52.0)(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 6.9.1 + '@typescript-eslint/parser': 6.13.2(eslint@8.55.0)(typescript@5.3.2) + '@typescript-eslint/scope-manager': 6.13.2 + '@typescript-eslint/type-utils': 6.13.2(eslint@8.55.0)(typescript@5.3.2) + '@typescript-eslint/utils': 6.13.2(eslint@8.55.0)(typescript@5.3.2) + '@typescript-eslint/visitor-keys': 6.13.2 debug: 4.3.4 - eslint: 8.52.0 + eslint: 8.55.0 graphemer: 1.4.0 - ignore: 5.2.4 + ignore: 5.3.0 natural-compare: 1.4.0 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.2.2) - typescript: 5.2.2 + ts-api-utils: 1.0.3(typescript@5.3.2) + typescript: 5.3.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.9.1(eslint@8.52.0)(typescript@5.2.2): - resolution: {integrity: sha512-C7AK2wn43GSaCUZ9do6Ksgi2g3mwFkMO3Cis96kzmgudoVaKyt62yNzJOktP0HDLb/iO2O0n2lBOzJgr6Q/cyg==} + /@typescript-eslint/parser@6.13.2(eslint@8.55.0)(typescript@5.3.2): + resolution: {integrity: sha512-MUkcC+7Wt/QOGeVlM8aGGJZy1XV5YKjTpq9jK6r6/iLsGXhBVaGP5N0UYvFsu9BFlSpwY9kMretzdBH01rkRXg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2357,27 +2371,27 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.9.1 - '@typescript-eslint/types': 6.9.1 - '@typescript-eslint/typescript-estree': 6.9.1(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 6.9.1 + '@typescript-eslint/scope-manager': 6.13.2 + '@typescript-eslint/types': 6.13.2 + '@typescript-eslint/typescript-estree': 6.13.2(typescript@5.3.2) + '@typescript-eslint/visitor-keys': 6.13.2 debug: 4.3.4 - eslint: 8.52.0 - typescript: 5.2.2 + eslint: 8.55.0 + typescript: 5.3.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@6.9.1: - resolution: {integrity: sha512-38IxvKB6NAne3g/+MyXMs2Cda/Sz+CEpmm+KLGEM8hx/CvnSRuw51i8ukfwB/B/sESdeTGet1NH1Wj7I0YXswg==} + /@typescript-eslint/scope-manager@6.13.2: + resolution: {integrity: sha512-CXQA0xo7z6x13FeDYCgBkjWzNqzBn8RXaE3QVQVIUm74fWJLkJkaHmHdKStrxQllGh6Q4eUGyNpMe0b1hMkXFA==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.9.1 - '@typescript-eslint/visitor-keys': 6.9.1 + '@typescript-eslint/types': 6.13.2 + '@typescript-eslint/visitor-keys': 6.13.2 dev: true - /@typescript-eslint/type-utils@6.9.1(eslint@8.52.0)(typescript@5.2.2): - resolution: {integrity: sha512-eh2oHaUKCK58qIeYp19F5V5TbpM52680sB4zNSz29VBQPTWIlE/hCj5P5B1AChxECe/fmZlspAWFuRniep1Skg==} + /@typescript-eslint/type-utils@6.13.2(eslint@8.55.0)(typescript@5.3.2): + resolution: {integrity: sha512-Qr6ssS1GFongzH2qfnWKkAQmMUyZSyOr0W54nZNU1MDfo+U4Mv3XveeLZzadc/yq8iYhQZHYT+eoXJqnACM1tw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2386,23 +2400,23 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.9.1(typescript@5.2.2) - '@typescript-eslint/utils': 6.9.1(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/typescript-estree': 6.13.2(typescript@5.3.2) + '@typescript-eslint/utils': 6.13.2(eslint@8.55.0)(typescript@5.3.2) debug: 4.3.4 - eslint: 8.52.0 - ts-api-utils: 1.0.3(typescript@5.2.2) - typescript: 5.2.2 + eslint: 8.55.0 + ts-api-utils: 1.0.3(typescript@5.3.2) + typescript: 5.3.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@6.9.1: - resolution: {integrity: sha512-BUGslGOb14zUHOUmDB2FfT6SI1CcZEJYfF3qFwBeUrU6srJfzANonwRYHDpLBuzbq3HaoF2XL2hcr01c8f8OaQ==} + /@typescript-eslint/types@6.13.2: + resolution: {integrity: sha512-7sxbQ+EMRubQc3wTfTsycgYpSujyVbI1xw+3UMRUcrhSy+pN09y/lWzeKDbvhoqcRbHdc+APLs/PWYi/cisLPg==} engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@6.9.1(typescript@5.2.2): - resolution: {integrity: sha512-U+mUylTHfcqeO7mLWVQ5W/tMLXqVpRv61wm9ZtfE5egz7gtnmqVIw9ryh0mgIlkKk9rZLY3UHygsBSdB9/ftyw==} + /@typescript-eslint/typescript-estree@6.13.2(typescript@5.3.2): + resolution: {integrity: sha512-SuD8YLQv6WHnOEtKv8D6HZUzOub855cfPnPMKvdM/Bh1plv1f7Q/0iFUDLKKlxHcEstQnaUU4QZskgQq74t+3w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -2410,42 +2424,42 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.9.1 - '@typescript-eslint/visitor-keys': 6.9.1 + '@typescript-eslint/types': 6.13.2 + '@typescript-eslint/visitor-keys': 6.13.2 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.2.2) - typescript: 5.2.2 + ts-api-utils: 1.0.3(typescript@5.3.2) + typescript: 5.3.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@6.9.1(eslint@8.52.0)(typescript@5.2.2): - resolution: {integrity: sha512-L1T0A5nFdQrMVunpZgzqPL6y2wVreSyHhKGZryS6jrEN7bD9NplVAyMryUhXsQ4TWLnZmxc2ekar/lSGIlprCA==} + /@typescript-eslint/utils@6.13.2(eslint@8.55.0)(typescript@5.3.2): + resolution: {integrity: sha512-b9Ptq4eAZUym4idijCRzl61oPCwwREcfDI8xGk751Vhzig5fFZR9CyzDz4Sp/nxSLBYxUPyh4QdIDqWykFhNmQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) - '@types/json-schema': 7.0.14 - '@types/semver': 7.5.4 - '@typescript-eslint/scope-manager': 6.9.1 - '@typescript-eslint/types': 6.9.1 - '@typescript-eslint/typescript-estree': 6.9.1(typescript@5.2.2) - eslint: 8.52.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.6 + '@typescript-eslint/scope-manager': 6.13.2 + '@typescript-eslint/types': 6.13.2 + '@typescript-eslint/typescript-estree': 6.13.2(typescript@5.3.2) + eslint: 8.55.0 semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys@6.9.1: - resolution: {integrity: sha512-MUaPUe/QRLEffARsmNfmpghuQkW436DvESW+h+M52w0coICHRfD6Np9/K6PdACwnrq1HmuLl+cSPZaJmeVPkSw==} + /@typescript-eslint/visitor-keys@6.13.2: + resolution: {integrity: sha512-OGznFs0eAQXJsp+xSd6k/O1UbFi/K/L7WjqeRoFE7vadjAF9y0uppXhYNQNEqygjou782maGClOoZwPqF0Drlw==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.9.1 + '@typescript-eslint/types': 6.13.2 eslint-visitor-keys: 3.4.3 dev: true @@ -2469,8 +2483,8 @@ packages: acorn: 8.11.2 dev: true - /acorn-walk@8.3.0: - resolution: {integrity: sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==} + /acorn-walk@8.3.1: + resolution: {integrity: sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==} engines: {node: '>=0.4.0'} dev: true @@ -2685,17 +2699,17 @@ packages: - debug dev: false - /babel-jest@29.7.0(@babel/core@7.23.2): + /babel-jest@29.7.0(@babel/core@7.23.5): resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@jest/transform': 29.7.0 - '@types/babel__core': 7.20.3 + '@types/babel__core': 7.20.5 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.23.2) + babel-preset-jest: 29.6.3(@babel/core@7.23.5) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -2721,76 +2735,76 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/template': 7.22.15 - '@babel/types': 7.23.0 - '@types/babel__core': 7.20.3 - '@types/babel__traverse': 7.20.3 + '@babel/types': 7.23.5 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.4 dev: true - /babel-plugin-polyfill-corejs2@0.4.6(@babel/core@7.23.2): + /babel-plugin-polyfill-corejs2@0.4.6(@babel/core@7.23.5): resolution: {integrity: sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/compat-data': 7.23.2 - '@babel/core': 7.23.2 - '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.2) + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.5 + '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.5) semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-corejs3@0.8.6(@babel/core@7.23.2): + /babel-plugin-polyfill-corejs3@0.8.6(@babel/core@7.23.5): resolution: {integrity: sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.2) - core-js-compat: 3.33.2 + '@babel/core': 7.23.5 + '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.5) + core-js-compat: 3.34.0 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-regenerator@0.5.3(@babel/core@7.23.2): + /babel-plugin-polyfill-regenerator@0.5.3(@babel/core@7.23.5): resolution: {integrity: sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.2 - '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.2) + '@babel/core': 7.23.5 + '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.5) transitivePeerDependencies: - supports-color dev: true - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.2): + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.5): resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.2 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.2) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.2) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.2) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.2) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.2) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.2) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.2) - dev: true - - /babel-preset-jest@29.6.3(@babel/core@7.23.2): + '@babel/core': 7.23.5 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.5) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.5) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.5) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.5) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.5) + dev: true + + /babel-preset-jest@29.6.3(@babel/core@7.23.5): resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.2) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.5) dev: true /balanced-match@1.0.2: @@ -2801,8 +2815,8 @@ packages: resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} dev: true - /big-integer@1.6.51: - resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} + /big-integer@1.6.52: + resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} engines: {node: '>=0.6'} dev: true @@ -2814,7 +2828,7 @@ packages: resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} engines: {node: '>= 5.10.0'} dependencies: - big-integer: 1.6.51 + big-integer: 1.6.52 dev: true /brace-expansion@1.1.11: @@ -2837,15 +2851,15 @@ packages: fill-range: 7.0.1 dev: true - /browserslist@4.22.1: - resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} + /browserslist@4.22.2: + resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001559 - electron-to-chromium: 1.4.574 - node-releases: 2.0.13 - update-browserslist-db: 1.0.13(browserslist@4.22.1) + caniuse-lite: 1.0.30001566 + electron-to-chromium: 1.4.605 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.22.2) dev: true /bser@2.1.1: @@ -2858,6 +2872,11 @@ packages: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true + /builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + dev: true + /builtins@5.0.1: resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} dependencies: @@ -2894,8 +2913,8 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite@1.0.30001559: - resolution: {integrity: sha512-cPiMKZgqgkg5LY3/ntGeLFUpi6tzddBNS58A4tnTgQw1zON7u2sZMU7SzOeVH4tj20++9ggL+V6FDOFMTaFFYA==} + /caniuse-lite@1.0.30001566: + resolution: {integrity: sha512-ggIhCsTxmITBAMmK8yZjEhCO5/47jKXPu6Dha/wuCS4JePVL+3uiDEBuhu2aIoT+bqTOR8L76Ip1ARL9xYsEJA==} dev: true /cardinal@2.1.1: @@ -3079,17 +3098,17 @@ packages: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} dev: true - /core-js-compat@3.33.2: - resolution: {integrity: sha512-axfo+wxFVxnqf8RvxTzoAlzW4gRoacrHeoFlc9n0x50+7BEyZL/Rt3hicaED1/CEd7I6tPCPVUYcJwCMO5XUYw==} + /core-js-compat@3.34.0: + resolution: {integrity: sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA==} dependencies: - browserslist: 4.22.1 + browserslist: 4.22.2 dev: true /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true - /cosmiconfig@8.3.6(typescript@5.2.2): + /cosmiconfig@8.3.6(typescript@5.3.2): resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} peerDependencies: @@ -3102,10 +3121,10 @@ packages: js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 - typescript: 5.2.2 + typescript: 5.3.2 dev: true - /create-jest@29.7.0(@types/node@20.8.10)(ts-node@10.9.1): + /create-jest@29.7.0(@types/node@20.10.3)(ts-node@10.9.1): resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -3114,7 +3133,7 @@ packages: chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.8.10)(ts-node@10.9.1) + jest-config: 29.7.0(@types/node@20.10.3)(ts-node@10.9.1) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -3302,8 +3321,8 @@ packages: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true - /electron-to-chromium@1.4.574: - resolution: {integrity: sha512-bg1m8L0n02xRzx4LsTTMbBPiUd9yIR+74iPtS/Ao65CuXvhVZHP0ym1kSdDG3yHFDXqHQQBKujlN1AQ8qZnyFg==} + /electron-to-chromium@1.4.605: + resolution: {integrity: sha512-V52j+P5z6cdRqTjPR/bYNxx7ETCHIkm5VIGuyCy3CMrfSnbEpIlLnk5oHmZo7gYvDfh2TfHeanB6rawyQ23ktg==} dev: true /emittery@0.13.1: @@ -3367,7 +3386,7 @@ packages: is-weakref: 1.0.2 object-inspect: 1.13.1 object-keys: 1.1.1 - object.assign: 4.1.4 + object.assign: 4.1.5 regexp.prototype.flags: 1.5.1 safe-array-concat: 1.0.1 safe-regex-test: 1.0.0 @@ -3461,16 +3480,25 @@ packages: engines: {node: '>=12'} dev: true - /eslint-config-prettier@9.0.0(eslint@8.52.0): - resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} + /eslint-compat-utils@0.1.2(eslint@8.55.0): + resolution: {integrity: sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==} + engines: {node: '>=12'} + peerDependencies: + eslint: '>=6.0.0' + dependencies: + eslint: 8.55.0 + dev: true + + /eslint-config-prettier@9.1.0(eslint@8.55.0): + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.52.0 + eslint: 8.55.0 dev: true - /eslint-config-standard-with-typescript@39.1.1(@typescript-eslint/eslint-plugin@6.9.1)(eslint-plugin-import@2.29.0)(eslint-plugin-n@16.2.0)(eslint-plugin-promise@6.1.1)(eslint@8.52.0)(typescript@5.2.2): + /eslint-config-standard-with-typescript@39.1.1(@typescript-eslint/eslint-plugin@6.13.2)(eslint-plugin-import@2.29.0)(eslint-plugin-n@16.3.1)(eslint-plugin-promise@6.1.1)(eslint@8.55.0)(typescript@5.3.2): resolution: {integrity: sha512-t6B5Ep8E4I18uuoYeYxINyqcXb2UbC0SOOTxRtBSt2JUs+EzeXbfe2oaiPs71AIdnoWhXDO2fYOHz8df3kV84A==} peerDependencies: '@typescript-eslint/eslint-plugin': ^6.4.0 @@ -3480,19 +3508,19 @@ packages: eslint-plugin-promise: ^6.0.0 typescript: '*' dependencies: - '@typescript-eslint/eslint-plugin': 6.9.1(@typescript-eslint/parser@6.9.1)(eslint@8.52.0)(typescript@5.2.2) - '@typescript-eslint/parser': 6.9.1(eslint@8.52.0)(typescript@5.2.2) - eslint: 8.52.0 - eslint-config-standard: 17.1.0(eslint-plugin-import@2.29.0)(eslint-plugin-n@16.2.0)(eslint-plugin-promise@6.1.1)(eslint@8.52.0) - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.9.1)(eslint@8.52.0) - eslint-plugin-n: 16.2.0(eslint@8.52.0) - eslint-plugin-promise: 6.1.1(eslint@8.52.0) - typescript: 5.2.2 + '@typescript-eslint/eslint-plugin': 6.13.2(@typescript-eslint/parser@6.13.2)(eslint@8.55.0)(typescript@5.3.2) + '@typescript-eslint/parser': 6.13.2(eslint@8.55.0)(typescript@5.3.2) + eslint: 8.55.0 + eslint-config-standard: 17.1.0(eslint-plugin-import@2.29.0)(eslint-plugin-n@16.3.1)(eslint-plugin-promise@6.1.1)(eslint@8.55.0) + eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.13.2)(eslint@8.55.0) + eslint-plugin-n: 16.3.1(eslint@8.55.0) + eslint-plugin-promise: 6.1.1(eslint@8.55.0) + typescript: 5.3.2 transitivePeerDependencies: - supports-color dev: true - /eslint-config-standard@17.1.0(eslint-plugin-import@2.29.0)(eslint-plugin-n@16.2.0)(eslint-plugin-promise@6.1.1)(eslint@8.52.0): + /eslint-config-standard@17.1.0(eslint-plugin-import@2.29.0)(eslint-plugin-n@16.3.1)(eslint-plugin-promise@6.1.1)(eslint@8.55.0): resolution: {integrity: sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==} engines: {node: '>=12.0.0'} peerDependencies: @@ -3501,10 +3529,10 @@ packages: eslint-plugin-n: '^15.0.0 || ^16.0.0 ' eslint-plugin-promise: ^6.0.0 dependencies: - eslint: 8.52.0 - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.9.1)(eslint@8.52.0) - eslint-plugin-n: 16.2.0(eslint@8.52.0) - eslint-plugin-promise: 6.1.1(eslint@8.52.0) + eslint: 8.55.0 + eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.13.2)(eslint@8.55.0) + eslint-plugin-n: 16.3.1(eslint@8.55.0) + eslint-plugin-promise: 6.1.1(eslint@8.55.0) dev: true /eslint-import-resolver-node@0.3.9: @@ -3517,7 +3545,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.9.1)(eslint-import-resolver-node@0.3.9)(eslint@8.52.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.13.2)(eslint-import-resolver-node@0.3.9)(eslint@8.55.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -3538,26 +3566,27 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.9.1(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.13.2(eslint@8.55.0)(typescript@5.3.2) debug: 3.2.7 - eslint: 8.52.0 + eslint: 8.55.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-es-x@7.3.0(eslint@8.52.0): - resolution: {integrity: sha512-W9zIs+k00I/I13+Bdkl/zG1MEO07G97XjUSQuH117w620SJ6bHtLUmoMvkGA2oYnI/gNdr+G7BONLyYnFaLLEQ==} + /eslint-plugin-es-x@7.5.0(eslint@8.55.0): + resolution: {integrity: sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '>=8' dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) '@eslint-community/regexpp': 4.10.0 - eslint: 8.52.0 + eslint: 8.55.0 + eslint-compat-utils: 0.1.2(eslint@8.55.0) dev: true - /eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.9.1)(eslint@8.52.0): + /eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.13.2)(eslint@8.55.0): resolution: {integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==} engines: {node: '>=4'} peerDependencies: @@ -3567,16 +3596,16 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.9.1(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.13.2(eslint@8.55.0)(typescript@5.3.2) 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: 8.52.0 + eslint: 8.55.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.9.1)(eslint-import-resolver-node@0.3.9)(eslint@8.52.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.13.2)(eslint-import-resolver-node@0.3.9)(eslint@8.55.0) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -3592,25 +3621,26 @@ packages: - supports-color dev: true - /eslint-plugin-n@16.2.0(eslint@8.52.0): - resolution: {integrity: sha512-AQER2jEyQOt1LG6JkGJCCIFotzmlcCZFur2wdKrp1JX2cNotC7Ae0BcD/4lLv3lUAArM9uNS8z/fsvXTd0L71g==} + /eslint-plugin-n@16.3.1(eslint@8.55.0): + resolution: {integrity: sha512-w46eDIkxQ2FaTHcey7G40eD+FhTXOdKudDXPUO2n9WNcslze/i/HT2qJ3GXjHngYSGDISIgPNhwGtgoix4zeOw==} engines: {node: '>=16.0.0'} peerDependencies: eslint: '>=7.0.0' dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) builtins: 5.0.1 - eslint: 8.52.0 - eslint-plugin-es-x: 7.3.0(eslint@8.52.0) + eslint: 8.55.0 + eslint-plugin-es-x: 7.5.0(eslint@8.55.0) get-tsconfig: 4.7.2 - ignore: 5.2.4 + ignore: 5.3.0 + is-builtin-module: 3.2.1 is-core-module: 2.13.1 minimatch: 3.1.2 resolve: 1.22.8 semver: 7.5.4 dev: true - /eslint-plugin-prettier@5.0.1(eslint-config-prettier@9.0.0)(eslint@8.52.0)(prettier@3.0.3): + /eslint-plugin-prettier@5.0.1(eslint-config-prettier@9.1.0)(eslint@8.55.0)(prettier@3.1.0): resolution: {integrity: sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -3624,20 +3654,20 @@ packages: eslint-config-prettier: optional: true dependencies: - eslint: 8.52.0 - eslint-config-prettier: 9.0.0(eslint@8.52.0) - prettier: 3.0.3 + eslint: 8.55.0 + eslint-config-prettier: 9.1.0(eslint@8.55.0) + prettier: 3.1.0 prettier-linter-helpers: 1.0.0 - synckit: 0.8.5 + synckit: 0.8.6 dev: true - /eslint-plugin-promise@6.1.1(eslint@8.52.0): + /eslint-plugin-promise@6.1.1(eslint@8.55.0): resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - eslint: 8.52.0 + eslint: 8.55.0 dev: true /eslint-scope@7.2.2: @@ -3653,15 +3683,15 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.52.0: - resolution: {integrity: sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==} + /eslint@8.55.0: + resolution: {integrity: sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) '@eslint-community/regexpp': 4.10.0 - '@eslint/eslintrc': 2.1.2 - '@eslint/js': 8.52.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.55.0 '@humanwhocodes/config-array': 0.11.13 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 @@ -3683,7 +3713,7 @@ packages: glob-parent: 6.0.2 globals: 13.23.0 graphemer: 1.4.0 - ignore: 5.2.4 + ignore: 5.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -3808,8 +3838,8 @@ packages: resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} dev: true - /fast-glob@3.3.1: - resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} dependencies: '@nodelib/fs.stat': 2.0.5 @@ -3857,7 +3887,7 @@ packages: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flat-cache: 3.1.1 + flat-cache: 3.2.0 dev: true /fill-range@7.0.1: @@ -3867,6 +3897,11 @@ packages: to-regex-range: 5.0.1 dev: true + /find-up-simple@1.0.0: + resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==} + engines: {node: '>=18'} + dev: true + /find-up@2.1.0: resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} engines: {node: '>=4'} @@ -3890,14 +3925,6 @@ packages: path-exists: 4.0.0 dev: true - /find-up@6.3.0: - resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - locate-path: 7.2.0 - path-exists: 5.0.0 - dev: true - /find-versions@5.1.0: resolution: {integrity: sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==} engines: {node: '>=12'} @@ -3905,9 +3932,9 @@ packages: semver-regex: 4.0.5 dev: true - /flat-cache@3.1.1: - resolution: {integrity: sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==} - engines: {node: '>=12.0.0'} + /flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: flatted: 3.2.9 keyv: 4.5.4 @@ -3958,8 +3985,8 @@ packages: readable-stream: 2.3.8 dev: true - /fs-extra@11.1.1: - resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} + /fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} engines: {node: '>=14.14'} dependencies: graceful-fs: 4.2.11 @@ -4123,21 +4150,22 @@ packages: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.3.1 - ignore: 5.2.4 + fast-glob: 3.3.2 + ignore: 5.3.0 merge2: 1.4.1 slash: 3.0.0 dev: true - /globby@13.2.2: - resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + /globby@14.0.0: + resolution: {integrity: sha512-/1WM/LNHRAOH9lZta77uGbq0dAEQM+XjNesWwhlERDVenqothRbnzTrL3/LrIoEPPjeUHC3vrS6TwoyxeHs7MQ==} + engines: {node: '>=18'} dependencies: - dir-glob: 3.0.1 - fast-glob: 3.3.1 - ignore: 5.2.4 - merge2: 1.4.1 - slash: 4.0.0 + '@sindresorhus/merge-streams': 1.0.0 + fast-glob: 3.3.2 + ignore: 5.3.0 + path-type: 5.0.0 + slash: 5.1.0 + unicorn-magic: 0.1.0 dev: true /gopd@1.0.1: @@ -4224,7 +4252,7 @@ packages: resolution: {integrity: sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==} engines: {node: ^16.14.0 || >=18.0.0} dependencies: - lru-cache: 10.0.1 + lru-cache: 10.1.0 dev: true /html-escaper@2.0.2: @@ -4266,8 +4294,8 @@ packages: engines: {node: '>=16.17.0'} dev: true - /ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + /ignore@5.3.0: + resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} engines: {node: '>= 4'} dev: true @@ -4279,9 +4307,14 @@ packages: resolve-from: 4.0.0 dev: true - /import-from@4.0.0: - resolution: {integrity: sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==} - engines: {node: '>=12.2'} + /import-from-esm@1.3.3: + resolution: {integrity: sha512-U3Qt/CyfFpTUv6LOP2jRTLYjphH6zg3okMfHbyqRa/W2w6hr8OsJWVggNlR4jxuojQy81TgTJTxgSkyoteRGMQ==} + engines: {node: '>=16.20'} + dependencies: + debug: 4.3.4 + import-meta-resolve: 4.0.0 + transitivePeerDependencies: + - supports-color dev: true /import-local@3.1.0: @@ -4293,6 +4326,10 @@ packages: resolve-cwd: 3.0.0 dev: true + /import-meta-resolve@4.0.0: + resolution: {integrity: sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==} + dev: true + /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -4308,6 +4345,11 @@ packages: engines: {node: '>=12'} dev: true + /index-to-position@0.1.2: + resolution: {integrity: sha512-MWDKS3AS1bGCHLBA2VLImJz42f7bJh8wQsTGCzI3j519/CASStoDONUBVz2I/VID0MpiX3SGSnbOD2xUalbE5g==} + engines: {node: '>=18'} + dev: true + /inflector-js@1.0.1: resolution: {integrity: sha512-GYvCqr8mGKPoYH+08e76PV8JoIygIVC9Jxw2jA5QjBm/mK+mJqGdzEcs3L5nugnvP03yHajXpBRMRgHx0e770A==} dev: true @@ -4370,6 +4412,13 @@ packages: has-tostringtag: 1.0.0 dev: true + /is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + dependencies: + builtin-modules: 3.3.0 + dev: true + /is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} @@ -4457,11 +4506,6 @@ packages: engines: {node: '>=8'} dev: true - /is-plain-object@5.0.0: - resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} - engines: {node: '>=0.10.0'} - dev: true - /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} @@ -4555,8 +4599,8 @@ packages: lodash.uniqby: 4.7.0 dev: true - /istanbul-lib-coverage@3.2.0: - resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} + /istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} dev: true @@ -4564,10 +4608,10 @@ packages: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.23.2 - '@babel/parser': 7.23.0 + '@babel/core': 7.23.5 + '@babel/parser': 7.23.5 '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.0 + istanbul-lib-coverage: 3.2.2 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -4577,10 +4621,10 @@ packages: resolution: {integrity: sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==} engines: {node: '>=10'} dependencies: - '@babel/core': 7.23.2 - '@babel/parser': 7.23.0 + '@babel/core': 7.23.5 + '@babel/parser': 7.23.5 '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.0 + istanbul-lib-coverage: 3.2.2 semver: 7.5.4 transitivePeerDependencies: - supports-color @@ -4590,7 +4634,7 @@ packages: resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} engines: {node: '>=10'} dependencies: - istanbul-lib-coverage: 3.2.0 + istanbul-lib-coverage: 3.2.2 make-dir: 4.0.0 supports-color: 7.2.0 dev: true @@ -4600,7 +4644,7 @@ packages: engines: {node: '>=10'} dependencies: debug: 4.3.4 - istanbul-lib-coverage: 3.2.0 + istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: - supports-color @@ -4645,7 +4689,7 @@ packages: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.10 + '@types/node': 20.10.3 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.1 @@ -4666,7 +4710,7 @@ packages: - supports-color dev: true - /jest-cli@29.7.0(@types/node@20.8.10)(ts-node@10.9.1): + /jest-cli@29.7.0(@types/node@20.10.3)(ts-node@10.9.1): resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -4680,10 +4724,10 @@ packages: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.8.10)(ts-node@10.9.1) + create-jest: 29.7.0(@types/node@20.10.3)(ts-node@10.9.1) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.8.10)(ts-node@10.9.1) + jest-config: 29.7.0(@types/node@20.10.3)(ts-node@10.9.1) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -4694,7 +4738,7 @@ packages: - ts-node dev: true - /jest-config@29.7.0(@types/node@20.8.10)(ts-node@10.9.1): + /jest-config@29.7.0(@types/node@20.10.3)(ts-node@10.9.1): resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -4706,11 +4750,11 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.23.5 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.10 - babel-jest: 29.7.0(@babel/core@7.23.2) + '@types/node': 20.10.3 + babel-jest: 29.7.0(@babel/core@7.23.5) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 @@ -4729,7 +4773,7 @@ packages: pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@types/node@20.8.10)(typescript@5.2.2) + ts-node: 10.9.1(@types/node@20.10.3)(typescript@5.3.2) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -4770,7 +4814,7 @@ packages: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.10 + '@types/node': 20.10.3 jest-mock: 29.7.0 jest-util: 29.7.0 dev: true @@ -4785,8 +4829,8 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/graceful-fs': 4.1.8 - '@types/node': 20.8.10 + '@types/graceful-fs': 4.1.9 + '@types/node': 20.10.3 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -4821,9 +4865,9 @@ packages: resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/code-frame': 7.22.13 + '@babel/code-frame': 7.23.5 '@jest/types': 29.6.3 - '@types/stack-utils': 2.0.2 + '@types/stack-utils': 2.0.3 chalk: 4.1.2 graceful-fs: 4.2.11 micromatch: 4.0.5 @@ -4837,7 +4881,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.8.10 + '@types/node': 20.10.3 jest-util: 29.7.0 dev: true @@ -4892,7 +4936,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.10 + '@types/node': 20.10.3 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -4923,7 +4967,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.10 + '@types/node': 20.10.3 chalk: 4.1.2 cjs-module-lexer: 1.2.3 collect-v8-coverage: 1.0.2 @@ -4946,15 +4990,15 @@ packages: resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.23.2 - '@babel/generator': 7.23.0 - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.23.2) - '@babel/types': 7.23.0 + '@babel/core': 7.23.5 + '@babel/generator': 7.23.5 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.5) + '@babel/types': 7.23.5 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.2) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.5) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -4975,7 +5019,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.8.10 + '@types/node': 20.10.3 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -5000,7 +5044,7 @@ packages: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.10 + '@types/node': 20.10.3 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -5012,13 +5056,13 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 20.8.10 + '@types/node': 20.10.3 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest@29.7.0(@types/node@20.8.10)(ts-node@10.9.1): + /jest@29.7.0(@types/node@20.10.3)(ts-node@10.9.1): resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -5031,7 +5075,7 @@ packages: '@jest/core': 29.7.0(ts-node@10.9.1) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.8.10)(ts-node@10.9.1) + jest-cli: 29.7.0(@types/node@20.10.3)(ts-node@10.9.1) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -5081,11 +5125,6 @@ packages: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: true - /json-parse-even-better-errors@3.0.0: - resolution: {integrity: sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true - /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true @@ -5162,11 +5201,6 @@ packages: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true - /lines-and-columns@2.0.3: - resolution: {integrity: sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true - /load-json-file@4.0.0: resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} engines: {node: '>=4'} @@ -5199,13 +5233,6 @@ packages: p-locate: 5.0.0 dev: true - /locate-path@7.2.0: - resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - p-locate: 6.0.0 - dev: true - /lodash-es@4.17.21: resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} dev: true @@ -5242,8 +5269,8 @@ packages: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: true - /lru-cache@10.0.1: - resolution: {integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==} + /lru-cache@10.1.0: + resolution: {integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==} engines: {node: 14 || >=16.14} dev: true @@ -5277,23 +5304,23 @@ packages: tmpl: 1.0.5 dev: true - /marked-terminal@6.0.0(marked@9.1.5): - resolution: {integrity: sha512-6rruICvqRfA4N+Mvdc0UyDbLA0A0nI5omtARIlin3P2F+aNc3EbW91Rd9HTuD0v9qWyHmNIu8Bt40gAnPfldsg==} + /marked-terminal@6.1.0(marked@9.1.6): + resolution: {integrity: sha512-QaCSF6NV82oo6K0szEnmc65ooDeW0T/Adcyf0fcW+Hto2GT1VADFg8dn1zaeHqzj65fqDH1hMNChGNRaC/lbkA==} engines: {node: '>=16.0.0'} peerDependencies: - marked: '>=1 <10' + marked: '>=1 <11' dependencies: ansi-escapes: 6.2.0 cardinal: 2.1.1 chalk: 5.3.0 cli-table3: 0.6.3 - marked: 9.1.5 - node-emoji: 2.1.0 + marked: 9.1.6 + node-emoji: 2.1.3 supports-hyperlinks: 3.0.0 dev: true - /marked@9.1.5: - resolution: {integrity: sha512-14QG3shv8Kg/xc0Yh6TNkMj90wXH9mmldi5941I2OevfJ/FQAFLEwtwU2/FfgSAOMlWHrEukWSGQf8MiVYNG2A==} + /marked@9.1.6: + resolution: {integrity: sha512-jcByLnIFkd5gSXZmjNvS1TlmRhCXZjIzHYlaGkPlLIekG55JDR2Z4va9tZwCiP+/RDERiNhMOFu01xd6O5ct1Q==} engines: {node: '>= 16'} hasBin: true dev: true @@ -5332,9 +5359,9 @@ packages: mime-db: 1.52.0 dev: false - /mime@3.0.0: - resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} - engines: {node: '>=10.0.0'} + /mime@4.0.0: + resolution: {integrity: sha512-pzhgdeqU5pJ9t5WK9m4RT4GgGWqYJylxUf62Yb9datXRwdcw5MjiD1BYI5evF8AgTXN9gtKX3CFLvCUL5fAhEA==} + engines: {node: '>=16'} hasBin: true dev: true @@ -5403,10 +5430,11 @@ packages: resolution: {integrity: sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==} dev: true - /node-emoji@2.1.0: - resolution: {integrity: sha512-tcsBm9C6FmPN5Wo7OjFi9lgMyJjvkAeirmjR/ax8Ttfqy4N8PoFic26uqFTIgayHPNI5FH4ltUvfh9kHzwcK9A==} + /node-emoji@2.1.3: + resolution: {integrity: sha512-E2WEOVsgs7O16zsURJ/eH8BqhF029wGpEOnv7Urwdo2wmQanOACwJQh0devF9D9RhoZru0+9JXIS0dBXIAz+lA==} + engines: {node: '>=18'} dependencies: - '@sindresorhus/is': 3.1.2 + '@sindresorhus/is': 4.6.0 char-regex: 1.0.2 emojilib: 2.4.0 skin-tone: 2.0.0 @@ -5416,8 +5444,8 @@ packages: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: true - /node-releases@2.0.13: - resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} dev: true /normalize-package-data@6.0.0: @@ -5454,8 +5482,8 @@ packages: path-key: 4.0.0 dev: true - /npm@10.2.2: - resolution: {integrity: sha512-VSP/rh88wBQ+b7bz0NOdZQBQCuWLI/etpWfgUWDmNaMy0MuD1xJBMofEzuFojNpJANVaJCkN5U7KgfPdR2V1fg==} + /npm@10.2.4: + resolution: {integrity: sha512-umEuYneVEYO9KoEEI8n2sSGmNQeqco/3BSeacRlqIkCzw4E7XGtYSWMeJobxzr6hZ2n9cM+u5TsMTcC5bAgoWA==} engines: {node: ^18.17.0 || >=20.5.0} hasBin: true dev: true @@ -5541,8 +5569,8 @@ packages: engines: {node: '>= 0.4'} dev: true - /object.assign@4.1.4: - resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} + /object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 @@ -5658,13 +5686,6 @@ packages: yocto-queue: 0.1.0 dev: true - /p-limit@4.0.0: - resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - yocto-queue: 1.0.0 - dev: true - /p-locate@2.0.0: resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} engines: {node: '>=4'} @@ -5686,13 +5707,6 @@ packages: p-limit: 3.1.0 dev: true - /p-locate@6.0.0: - resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - p-limit: 4.0.0 - dev: true - /p-map@5.5.0: resolution: {integrity: sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==} engines: {node: '>=12'} @@ -5739,21 +5753,19 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.22.13 + '@babel/code-frame': 7.23.5 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 dev: true - /parse-json@7.1.1: - resolution: {integrity: sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==} - engines: {node: '>=16'} + /parse-json@8.1.0: + resolution: {integrity: sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==} + engines: {node: '>=18'} dependencies: - '@babel/code-frame': 7.22.13 - error-ex: 1.3.2 - json-parse-even-better-errors: 3.0.0 - lines-and-columns: 2.0.3 - type-fest: 3.13.1 + '@babel/code-frame': 7.23.5 + index-to-position: 0.1.2 + type-fest: 4.8.3 dev: true /path-exists@3.0.0: @@ -5766,11 +5778,6 @@ packages: engines: {node: '>=8'} dev: true - /path-exists@5.0.0: - resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true - /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} @@ -5794,7 +5801,7 @@ packages: resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} engines: {node: '>=16 || 14 >=14.17'} dependencies: - lru-cache: 10.0.1 + lru-cache: 10.1.0 minipass: 7.0.4 dev: true @@ -5803,6 +5810,11 @@ packages: engines: {node: '>=8'} dev: true + /path-type@5.0.0: + resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} + engines: {node: '>=12'} + dev: true + /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} dev: true @@ -5849,8 +5861,8 @@ packages: fast-diff: 1.3.0 dev: true - /prettier@3.0.3: - resolution: {integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==} + /prettier@3.1.0: + resolution: {integrity: sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==} engines: {node: '>=14'} hasBin: true dev: true @@ -5920,23 +5932,25 @@ packages: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} dev: true - /read-pkg-up@10.1.0: - resolution: {integrity: sha512-aNtBq4jR8NawpKJQldrQcSW9y/d+KWH4v24HWkHljOZ7H0av+YTGANBzRh9A5pw7v/bLVsLVPpOhJ7gHNVy8lA==} - engines: {node: '>=16'} + /read-pkg-up@11.0.0: + resolution: {integrity: sha512-LOVbvF1Q0SZdjClSefZ0Nz5z8u+tIE7mV5NibzmE9VYmDe9CaBbAVtz1veOSZbofrdsilxuDAYnFenukZVp8/Q==} + engines: {node: '>=18'} + deprecated: Renamed to read-package-up dependencies: - find-up: 6.3.0 - read-pkg: 8.1.0 - type-fest: 4.6.0 + find-up-simple: 1.0.0 + read-pkg: 9.0.1 + type-fest: 4.8.3 dev: true - /read-pkg@8.1.0: - resolution: {integrity: sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ==} - engines: {node: '>=16'} + /read-pkg@9.0.1: + resolution: {integrity: sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==} + engines: {node: '>=18'} dependencies: - '@types/normalize-package-data': 2.4.3 + '@types/normalize-package-data': 2.4.4 normalize-package-data: 6.0.0 - parse-json: 7.1.1 - type-fest: 4.6.0 + parse-json: 8.1.0 + type-fest: 4.8.3 + unicorn-magic: 0.1.0 dev: true /readable-stream@2.3.8: @@ -5975,7 +5989,7 @@ packages: /regenerator-transform@0.15.2: resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} dependencies: - '@babel/runtime': 7.23.2 + '@babel/runtime': 7.23.5 dev: true /regexp.prototype.flags@1.5.1: @@ -6100,18 +6114,18 @@ packages: is-regex: 1.1.4 dev: true - /semantic-release@22.0.6(typescript@5.2.2): - resolution: {integrity: sha512-SxgpGR6b52gaKrb42nnaZWa2h5ig06XlloS3NjUN4W/lRBB8SId4JMaZaxN6Ncb+Ii2Uxd8WO6uvshTSSf8XRg==} + /semantic-release@22.0.10(typescript@5.3.2): + resolution: {integrity: sha512-4ahPaOX+0UYpYlosjc/tfCzB/cqlnjN0/xSKGryEC4bOpuYSkoK+QHw7xDPmAuiMNBBvkFD+m3aVMENUr++CIg==} engines: {node: ^18.17 || >=20.6.1} hasBin: true dependencies: - '@semantic-release/commit-analyzer': 11.0.0(semantic-release@22.0.6) + '@semantic-release/commit-analyzer': 11.1.0(semantic-release@22.0.10) '@semantic-release/error': 4.0.0 - '@semantic-release/github': 9.2.1(semantic-release@22.0.6) - '@semantic-release/npm': 11.0.0(semantic-release@22.0.6) - '@semantic-release/release-notes-generator': 12.0.0(semantic-release@22.0.6) + '@semantic-release/github': 9.2.4(semantic-release@22.0.10) + '@semantic-release/npm': 11.0.1(semantic-release@22.0.10) + '@semantic-release/release-notes-generator': 12.1.0(semantic-release@22.0.10) aggregate-error: 5.0.0 - cosmiconfig: 8.3.6(typescript@5.2.2) + cosmiconfig: 8.3.6(typescript@5.3.2) debug: 4.3.4 env-ci: 10.0.0 execa: 8.0.1 @@ -6121,13 +6135,14 @@ packages: git-log-parser: 1.2.0 hook-std: 3.0.0 hosted-git-info: 7.0.1 + import-from-esm: 1.3.3 lodash-es: 4.17.21 - marked: 9.1.5 - marked-terminal: 6.0.0(marked@9.1.5) + marked: 9.1.6 + marked-terminal: 6.1.0(marked@9.1.6) micromatch: 4.0.5 p-each-series: 3.0.0 p-reduce: 3.0.0 - read-pkg-up: 10.1.0 + read-pkg-up: 11.0.0 resolve-from: 5.0.0 semver: 7.5.4 semver-diff: 4.0.0 @@ -6236,9 +6251,9 @@ packages: engines: {node: '>=8'} dev: true - /slash@4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} + /slash@5.1.0: + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} + engines: {node: '>=14.16'} dev: true /source-map-support@0.5.13: @@ -6443,8 +6458,8 @@ packages: engines: {node: '>= 0.4'} dev: true - /synckit@0.8.5: - resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} + /synckit@0.8.6: + resolution: {integrity: sha512-laHF2savN6sMeHCjLRkheIU4wo3Zg9Ln5YOjOo7sZ5dVQW8yF5pPE5SIw1dsPhq3TRp1jisKRCdPhfs/1WMqDA==} engines: {node: ^14.18.0 || >=16.0.0} dependencies: '@pkgr/utils': 2.4.2 @@ -6520,16 +6535,16 @@ packages: resolution: {integrity: sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==} dev: true - /ts-api-utils@1.0.3(typescript@5.2.2): + /ts-api-utils@1.0.3(typescript@5.3.2): resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} engines: {node: '>=16.13.0'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.2.2 + typescript: 5.3.2 dev: true - /ts-node@10.9.1(@types/node@20.8.10)(typescript@5.2.2): + /ts-node@10.9.1(@types/node@20.10.3)(typescript@5.3.2): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -6548,14 +6563,14 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.8.10 + '@types/node': 20.10.3 acorn: 8.11.2 - acorn-walk: 8.3.0 + acorn-walk: 8.3.1 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.2.2 + typescript: 5.3.2 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: true @@ -6610,8 +6625,8 @@ packages: engines: {node: '>=14.16'} dev: true - /type-fest@4.6.0: - resolution: {integrity: sha512-rLjWJzQFOq4xw7MgJrCZ6T1jIOvvYElXT12r+y0CC6u67hegDHaxcPqb2fZHOGlqxugGQPNB1EnTezjBetkwkw==} + /type-fest@4.8.3: + resolution: {integrity: sha512-//BaTm14Q/gHBn09xlnKNqfI8t6bmdzx2DXYfPBNofN0WUybCEUDcbCWcTa0oF09lzLjZgPphXAsvRiMK0V6Bw==} engines: {node: '>=16'} dev: true @@ -6653,8 +6668,8 @@ packages: is-typed-array: 1.1.12 dev: true - /typescript@5.2.2: - resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} + /typescript@5.3.2: + resolution: {integrity: sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==} engines: {node: '>=14.17'} hasBin: true dev: true @@ -6708,6 +6723,11 @@ packages: engines: {node: '>=4'} dev: true + /unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + dev: true + /unique-string@3.0.0: resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} engines: {node: '>=12'} @@ -6715,8 +6735,8 @@ packages: crypto-random-string: 4.0.0 dev: true - /universal-user-agent@6.0.0: - resolution: {integrity: sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==} + /universal-user-agent@6.0.1: + resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} dev: true /universalify@2.0.1: @@ -6729,13 +6749,13 @@ packages: engines: {node: '>=8'} dev: true - /update-browserslist-db@1.0.13(browserslist@4.22.1): + /update-browserslist-db@1.0.13(browserslist@4.22.2): resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.22.1 + browserslist: 4.22.2 escalade: 3.1.1 picocolors: 1.0.0 dev: true @@ -6759,12 +6779,12 @@ packages: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true - /v8-to-istanbul@9.1.3: - resolution: {integrity: sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==} + /v8-to-istanbul@9.2.0: + resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} engines: {node: '>=10.12.0'} dependencies: '@jridgewell/trace-mapping': 0.3.20 - '@types/istanbul-lib-coverage': 2.0.5 + '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 dev: true @@ -6889,8 +6909,3 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} dev: true - - /yocto-queue@1.0.0: - resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} - engines: {node: '>=12.20'} - dev: true diff --git a/specs/resources/application_memberships.spec.ts b/specs/resources/application_memberships.spec.ts new file mode 100644 index 0000000..827fba7 --- /dev/null +++ b/specs/resources/application_memberships.spec.ts @@ -0,0 +1,305 @@ +/** + * ©2023 Commerce Layer Inc. + * Source code generated automatically by SDK codegen + **/ + +import { CommerceLayerProvisioningClient, ApplicationMembership } from '../../src' +import { isEqual } from 'lodash' +// eslint-disable-next-line @typescript-eslint/no-unused-vars +import { getClient, TestData, CommonData, handleError, interceptRequest, checkCommon, checkCommonData, checkCommonParamsList, checkCommonParams, currentAccessToken, randomValue } from '../../test/common' + + + +let clp: CommerceLayerProvisioningClient + + +beforeAll(async () => { clp = await getClient() }) + + +describe('ApplicationMemberships resource', () => { + + const resourceType = 'application_memberships' + + + /* spec.create.start */ + it(resourceType + '.create', async () => { + + const createAttributes = { + api_credential: clp.api_credentials.relationship(TestData.id), + membership: clp.memberships.relationship(TestData.id), + user: clp.users.relationship(TestData.id), + organization: clp.organizations.relationship(TestData.id), + role: clp.roles.relationship(TestData.id), + } + + const attributes = { ...createAttributes, reference: TestData.reference } + const params = { fields: { [resourceType]: CommonData.paramsFields } } + const resData = attributes + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('post') + checkCommon(config, resourceType) + checkCommonData(config, resourceType, attributes) + expect(clp[resourceType].isApplicationMembership(config.data.data)).toBeTruthy() + return interceptRequest() + }) + + await clp[resourceType].create(resData, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* spec.create.stop */ + + + /* spec.retrieve.start */ + it(resourceType + '.retrieve', async () => { + + const id = TestData.id + const params = { fields: {[resourceType]: CommonData.paramsFields } } + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType, id, currentAccessToken) + checkCommonParams(config, params) + return interceptRequest() + }) + + await clp[resourceType].retrieve(id, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* spec.retrieve.stop */ + + + /* spec.update.start */ + it(resourceType + '.update', async () => { + + const attributes = { reference_origin: TestData.reference_origin, metadata: TestData.metadata } + const params = { fields: { [resourceType]: CommonData.paramsFields } } + const resData = { id: TestData.id, ...attributes} + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('patch') + checkCommon(config, resourceType, resData.id, currentAccessToken) + checkCommonData(config, resourceType, attributes, resData.id) + return interceptRequest() + }) + + await clp[resourceType].update(resData, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* spec.update.stop */ + + + /* spec.delete.start */ + it(resourceType + '.delete', async () => { + + const id = TestData.id + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('delete') + checkCommon(config, resourceType, id, currentAccessToken) + return interceptRequest() + }) + + await clp[resourceType].delete(id, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* spec.delete.stop */ + + + /* spec.list.start */ + it(resourceType + '.list', async () => { + + const params = CommonData.paramsList + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType) + checkCommonParamsList(config, params) + return interceptRequest() + }) + + await clp[resourceType].list(params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* spec.list.stop */ + + + /* spec.type.start */ + it(resourceType + '.type', async () => { + + const resource = { id: TestData.id, type: resourceType } + expect(clp[resourceType].isApplicationMembership(resource)).toBeTruthy() + + const type = clp[resourceType].type() + expect(type).toBe(resourceType) + + }) + /* spec.type.stop */ + + + /* spec.relationship.start */ + it(resourceType + '.relationship', async () => { + + const relId = clp[resourceType].relationship(TestData.id) + expect(isEqual(relId, { id: TestData.id, type: resourceType})) + + const relResId = clp[resourceType].relationship({ id: TestData.id, type: resourceType }) + expect(isEqual(relResId, { id: TestData.id, type: resourceType})) + + }) + /* spec.relationship.stop */ + + + /* spec.parse.start */ + it(resourceType + '.parse', async () => { + + const reference = 'myReferenceId' + + const payload = ` + { + "data": { + "id": "AbcdEfgHiL", + "meta": { + "mode": "test", + "organization_id": "myOrgId" + }, + "type": "${resourceType}", + "links": { + "self": "/api/${resourceType}/AbcdEfgHiL" + }, + "attributes": { + "metadata": {}, + "reference": "${reference}", + "created_at": "2023-10-01T05:53:29.296Z", + "updated_at": "2023-10-10T08:52:13.251Z" + } + } + } + ` + + const res = clp[resourceType].parse(payload) as ApplicationMembership + + expect(res.type).toBe(resourceType) + expect(res.reference).toBe(reference) + + }) + /* spec.parse.stop */ + + + + /* relationship.api_credential start */ + it(resourceType + '.api_credential', async () => { + + const id = TestData.id + const params = { fields: { api_credentials: CommonData.paramsFields } } + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType, id, currentAccessToken, 'api_credential') + checkCommonParams(config, params) + return interceptRequest() + }) + + await clp[resourceType].api_credential(id, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* relationship.api_credential stop */ + + + /* relationship.membership start */ + it(resourceType + '.membership', async () => { + + const id = TestData.id + const params = { fields: { memberships: CommonData.paramsFields } } + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType, id, currentAccessToken, 'membership') + checkCommonParams(config, params) + return interceptRequest() + }) + + await clp[resourceType].membership(id, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* relationship.membership stop */ + + + /* relationship.user start */ + it(resourceType + '.user', async () => { + + const id = TestData.id + const params = { fields: { users: CommonData.paramsFields } } + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType, id, currentAccessToken, 'user') + checkCommonParams(config, params) + return interceptRequest() + }) + + await clp[resourceType].user(id, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* relationship.user stop */ + + + /* relationship.organization start */ + it(resourceType + '.organization', async () => { + + const id = TestData.id + const params = { fields: { organizations: CommonData.paramsFields } } + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType, id, currentAccessToken, 'organization') + checkCommonParams(config, params) + return interceptRequest() + }) + + await clp[resourceType].organization(id, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* relationship.organization stop */ + + + /* relationship.role start */ + it(resourceType + '.role', async () => { + + const id = TestData.id + const params = { fields: { roles: CommonData.paramsFields } } + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType, id, currentAccessToken, 'role') + checkCommonParams(config, params) + return interceptRequest() + }) + + await clp[resourceType].role(id, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* relationship.role stop */ + + +}) diff --git a/specs/resources/memberships.spec.ts b/specs/resources/memberships.spec.ts index 111a29e..038226f 100644 --- a/specs/resources/memberships.spec.ts +++ b/specs/resources/memberships.spec.ts @@ -28,6 +28,7 @@ describe('Memberships resource', () => { user_email: randomValue('string', 'user_email'), organization: clp.organizations.relationship(TestData.id), role: clp.roles.relationship(TestData.id), + application_memberships: [ clp.application_memberships.relationship(TestData.id) ], } const attributes = { ...createAttributes, reference: TestData.reference } @@ -237,6 +238,27 @@ describe('Memberships resource', () => { /* relationship.role stop */ + /* relationship.application_memberships start */ + it(resourceType + '.application_memberships', async () => { + + const id = TestData.id + const params = { fields: { application_memberships: CommonData.paramsFields } } + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType, id, currentAccessToken, 'application_memberships') + checkCommonParams(config, params) + return interceptRequest() + }) + + await clp[resourceType].application_memberships(id, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* relationship.application_memberships stop */ + + /* relationship.versions start */ it(resourceType + '.versions', async () => { diff --git a/src/api.ts b/src/api.ts index 9396e7f..4dc119e 100644 --- a/src/api.ts +++ b/src/api.ts @@ -1,3 +1,4 @@ + import type { Resource, ResourceRel } from './resource' import type { VersionType } from './resources/versions' @@ -7,6 +8,7 @@ import type { VersionType } from './resources/versions' * ©2023 Commerce Layer Inc. **/ export { default as ApiCredentials } from './resources/api_credentials' +export { default as ApplicationMemberships } from './resources/application_memberships' export { default as Memberships } from './resources/memberships' export { default as Organizations } from './resources/organizations' export { default as Permissions } from './resources/permissions' @@ -19,6 +21,7 @@ export { default as Versions } from './resources/versions' export type ResourceTypeLock = // ##__API_RESOURCE_TYPES_START__## 'api_credentials' +| 'application_memberships' | 'memberships' | 'organizations' | 'permissions' @@ -31,6 +34,7 @@ export type ResourceTypeLock = export const resourceList = [ // ##__API_RESOURCE_LIST_START__## 'api_credentials', + 'application_memberships', 'memberships', 'organizations', 'permissions', @@ -66,6 +70,7 @@ export type ListableResource = Resource & { export type CreatableResourceType = // ##__API_RESOURCE_CREATABLE_START__## 'api_credentials' +| 'application_memberships' | 'memberships' | 'organizations' | 'permissions' @@ -81,6 +86,7 @@ export type CreatableResource = Resource & { export type UpdatableResourceType = // ##__API_RESOURCE_UPDATABLE_START__## 'api_credentials' +| 'application_memberships' | 'memberships' | 'organizations' | 'permissions' @@ -96,6 +102,7 @@ export type UpdatableResource = Resource & { export type DeletableResourceType = // ##__API_RESOURCE_DELETABLE_START__## 'api_credentials' +| 'application_memberships' | 'memberships' // ##__API_RESOURCE_DELETABLE_STOP__## diff --git a/src/commercelayer.ts b/src/commercelayer.ts index b53de88..badb4e5 100644 --- a/src/commercelayer.ts +++ b/src/commercelayer.ts @@ -35,6 +35,7 @@ class CommerceLayerProvisioningClient { // ##__CL_RESOURCES_DEF_START__## // ##__CL_RESOURCES_DEF_TEMPLATE:: ##__TAB__####__RESOURCE_TYPE__##: api.##__RESOURCE_CLASS__## api_credentials: api.ApiCredentials + application_memberships: api.ApplicationMemberships memberships: api.Memberships organizations: api.Organizations permissions: api.Permissions @@ -54,6 +55,7 @@ class CommerceLayerProvisioningClient { // ##__CL_RESOURCES_INIT_START__## // ##__CL_RESOURCES_INIT_TEMPLATE:: ##__TAB__####__TAB__##this.##__RESOURCE_TYPE__## = new api.##__RESOURCE_CLASS__##(this.#adapter) this.api_credentials = new api.ApiCredentials(this.#adapter) + this.application_memberships = new api.ApplicationMemberships(this.#adapter) this.memberships = new api.Memberships(this.#adapter) this.organizations = new api.Organizations(this.#adapter) this.permissions = new api.Permissions(this.#adapter) diff --git a/src/model.ts b/src/model.ts index 156bacb..59a9219 100644 --- a/src/model.ts +++ b/src/model.ts @@ -5,6 +5,7 @@ * ©2023 Commerce Layer Inc. **/ export type { ApiCredential, ApiCredentialCreate, ApiCredentialUpdate } from './resources/api_credentials' +export type { ApplicationMembership, ApplicationMembershipCreate, ApplicationMembershipUpdate } from './resources/application_memberships' export type { Membership, MembershipCreate, MembershipUpdate } from './resources/memberships' export type { Organization, OrganizationCreate, OrganizationUpdate } from './resources/organizations' export type { Permission, PermissionCreate, PermissionUpdate } from './resources/permissions' diff --git a/src/resources/api_credentials.ts b/src/resources/api_credentials.ts index 2f59493..c3c42f3 100644 --- a/src/resources/api_credentials.ts +++ b/src/resources/api_credentials.ts @@ -18,12 +18,14 @@ interface ApiCredential extends Resource { name: string kind: string - confidential?: boolean | null + confidential: boolean redirect_uri?: string | null - client_id?: string | null - client_secret?: string | null - scopes?: string | null + client_id: string + client_secret: string + scopes: string expires_in?: number | null + mode: string + custom?: boolean | null organization?: Organization | null role?: Role | null @@ -37,6 +39,7 @@ interface ApiCredentialCreate extends ResourceCreate { kind: string redirect_uri?: string | null expires_in?: number | null + custom?: boolean | null organization: OrganizationRel role?: RoleRel | null diff --git a/src/resources/application_memberships.ts b/src/resources/application_memberships.ts new file mode 100644 index 0000000..376e4ff --- /dev/null +++ b/src/resources/application_memberships.ts @@ -0,0 +1,114 @@ +import { ApiResource } from '../resource' +import type { Resource, ResourceCreate, ResourceUpdate, ResourceId, ResourcesConfig, ResourceRel } from '../resource' +import type { QueryParamsRetrieve } from '../query' + +import type { ApiCredential, ApiCredentialType } from './api_credentials' +import type { Membership, MembershipType } from './memberships' +import type { User, UserType } from './users' +import type { Organization, OrganizationType } from './organizations' +import type { Role, RoleType } from './roles' + + +type ApplicationMembershipType = 'application_memberships' +type ApplicationMembershipRel = ResourceRel & { type: ApplicationMembershipType } +type ApiCredentialRel = ResourceRel & { type: ApiCredentialType } +type MembershipRel = ResourceRel & { type: MembershipType } +type UserRel = ResourceRel & { type: UserType } +type OrganizationRel = ResourceRel & { type: OrganizationType } +type RoleRel = ResourceRel & { type: RoleType } + + +interface ApplicationMembership extends Resource { + + readonly type: ApplicationMembershipType + + + api_credential?: ApiCredential | null + membership?: Membership | null + user?: User | null + organization?: Organization | null + role?: Role | null + +} + + +interface ApplicationMembershipCreate extends ResourceCreate { + + api_credential: ApiCredentialRel + membership: MembershipRel + user: UserRel + organization: OrganizationRel + role: RoleRel + +} + + +interface ApplicationMembershipUpdate extends ResourceUpdate { + + role?: RoleRel | null + +} + + +class ApplicationMemberships extends ApiResource { + + static readonly TYPE: ApplicationMembershipType = 'application_memberships' as const + + async create(resource: ApplicationMembershipCreate, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { + return this.resources.create({ ...resource, type: ApplicationMemberships.TYPE }, params, options) + } + + async update(resource: ApplicationMembershipUpdate, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { + return this.resources.update({ ...resource, type: ApplicationMemberships.TYPE }, params, options) + } + + async delete(id: string | ResourceId, options?: ResourcesConfig): Promise { + await this.resources.delete((typeof id === 'string')? { id, type: ApplicationMemberships.TYPE } : id, options) + } + + async api_credential(applicationMembershipId: string | ApplicationMembership, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { + const _applicationMembershipId = (applicationMembershipId as ApplicationMembership).id || applicationMembershipId as string + return this.resources.fetch({ type: 'api_credentials' }, `application_memberships/${_applicationMembershipId}/api_credential`, params, options) as unknown as ApiCredential + } + + async membership(applicationMembershipId: string | ApplicationMembership, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { + const _applicationMembershipId = (applicationMembershipId as ApplicationMembership).id || applicationMembershipId as string + return this.resources.fetch({ type: 'memberships' }, `application_memberships/${_applicationMembershipId}/membership`, params, options) as unknown as Membership + } + + async user(applicationMembershipId: string | ApplicationMembership, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { + const _applicationMembershipId = (applicationMembershipId as ApplicationMembership).id || applicationMembershipId as string + return this.resources.fetch({ type: 'users' }, `application_memberships/${_applicationMembershipId}/user`, params, options) as unknown as User + } + + async organization(applicationMembershipId: string | ApplicationMembership, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { + const _applicationMembershipId = (applicationMembershipId as ApplicationMembership).id || applicationMembershipId as string + return this.resources.fetch({ type: 'organizations' }, `application_memberships/${_applicationMembershipId}/organization`, params, options) as unknown as Organization + } + + async role(applicationMembershipId: string | ApplicationMembership, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { + const _applicationMembershipId = (applicationMembershipId as ApplicationMembership).id || applicationMembershipId as string + return this.resources.fetch({ type: 'roles' }, `application_memberships/${_applicationMembershipId}/role`, params, options) as unknown as Role + } + + + isApplicationMembership(resource: any): resource is ApplicationMembership { + return resource.type && (resource.type === ApplicationMemberships.TYPE) + } + + + relationship(id: string | ResourceId | null): ApplicationMembershipRel { + return ((id === null) || (typeof id === 'string')) ? { id, type: ApplicationMemberships.TYPE } : { id: id.id, type: ApplicationMemberships.TYPE } + } + + + type(): ApplicationMembershipType { + return ApplicationMemberships.TYPE + } + +} + + +export default ApplicationMemberships + +export type { ApplicationMembership, ApplicationMembershipCreate, ApplicationMembershipUpdate, ApplicationMembershipType } diff --git a/src/resources/memberships.ts b/src/resources/memberships.ts index d746031..7836ffa 100644 --- a/src/resources/memberships.ts +++ b/src/resources/memberships.ts @@ -4,6 +4,7 @@ import type { QueryParamsRetrieve, QueryParamsList } from '../query' import type { Organization, OrganizationType } from './organizations' import type { Role, RoleType } from './roles' +import type { ApplicationMembership, ApplicationMembershipType } from './application_memberships' import type { Version } from './versions' @@ -11,6 +12,7 @@ type MembershipType = 'memberships' type MembershipRel = ResourceRel & { type: MembershipType } type OrganizationRel = ResourceRel & { type: OrganizationType } type RoleRel = ResourceRel & { type: RoleType } +type ApplicationMembershipRel = ResourceRel & { type: ApplicationMembershipType } interface Membership extends Resource { @@ -18,10 +20,13 @@ interface Membership extends Resource { readonly type: MembershipType user_email: string + user_first_name: string + user_last_name: string status: 'pending' | 'active' organization?: Organization | null role?: Role | null + application_memberships?: ApplicationMembership[] | null versions?: Version[] | null } @@ -33,6 +38,7 @@ interface MembershipCreate extends ResourceCreate { organization: OrganizationRel role: RoleRel + application_memberships?: ApplicationMembershipRel[] | null } @@ -40,6 +46,7 @@ interface MembershipCreate extends ResourceCreate { interface MembershipUpdate extends ResourceUpdate { role?: RoleRel | null + application_memberships?: ApplicationMembershipRel[] | null } @@ -70,6 +77,11 @@ class Memberships extends ApiResource { return this.resources.fetch({ type: 'roles' }, `memberships/${_membershipId}/role`, params, options) as unknown as Role } + async application_memberships(membershipId: string | Membership, params?: QueryParamsList, options?: ResourcesConfig): Promise> { + const _membershipId = (membershipId as Membership).id || membershipId as string + return this.resources.fetch({ type: 'application_memberships' }, `memberships/${_membershipId}/application_memberships`, params, options) as unknown as ListResponse + } + async versions(membershipId: string | Membership, params?: QueryParamsList, options?: ResourcesConfig): Promise> { const _membershipId = (membershipId as Membership).id || membershipId as string return this.resources.fetch({ type: 'versions' }, `memberships/${_membershipId}/versions`, params, options) as unknown as ListResponse diff --git a/src/resources/organizations.ts b/src/resources/organizations.ts index e4e1f19..74e3b40 100644 --- a/src/resources/organizations.ts +++ b/src/resources/organizations.ts @@ -17,8 +17,8 @@ interface Organization extends Resource { readonly type: OrganizationType name: string - slug?: string | null - domain?: string | null + slug: string + domain: string support_phone?: string | null support_email?: string | null logo_url?: string | null @@ -30,9 +30,9 @@ interface Organization extends Resource { discount_disabled?: boolean | null account_disabled?: boolean | null acceptance_disabled?: boolean | null - max_concurrent_promotions?: number | null - max_concurrent_imports?: number | null - associated_markets?: Record | null + max_concurrent_promotions: number + max_concurrent_imports: number + associated_markets: Record region?: string | null memberships?: Membership[] | null diff --git a/src/resources/permissions.ts b/src/resources/permissions.ts index 0c4c074..48e9349 100644 --- a/src/resources/permissions.ts +++ b/src/resources/permissions.ts @@ -21,7 +21,7 @@ interface Permission extends Resource { can_update: boolean can_destroy: boolean subject: string - restrictions?: Record | null + restrictions: Record organization?: Organization | null role?: Role | null diff --git a/src/resources/roles.ts b/src/resources/roles.ts index 2a524aa..a2f8652 100644 --- a/src/resources/roles.ts +++ b/src/resources/roles.ts @@ -19,7 +19,7 @@ interface Role extends Resource { readonly type: RoleType name: string - kind?: string | null + kind: string organization?: Organization | null permissions?: Permission[] | null diff --git a/src/resources/versions.ts b/src/resources/versions.ts index 5fe44e7..e343af2 100644 --- a/src/resources/versions.ts +++ b/src/resources/versions.ts @@ -12,11 +12,11 @@ interface Version extends Resource { readonly type: VersionType - resource_type?: string | null - resource_id?: string | null - event?: string | null - changes?: Record | null - who?: Record | null + resource_type: string + resource_id: string + event: string + changes: Record + who: Record } From 9578382b671629d4891e77f39658ab66828eb357 Mon Sep 17 00:00:00 2001 From: Pierluigi Viti Date: Thu, 7 Dec 2023 14:46:13 +0100 Subject: [PATCH 11/30] fix: singleton import --- gen/generator.ts | 16 +- gen/openapi.json | 117 +++++++++++- gen/schema.ts | 40 +++- package.json | 4 +- pnpm-lock.yaml | 180 +++++++++--------- .../resources/application_memberships.spec.ts | 4 +- src/api.ts | 30 +++ src/resources/application_memberships.ts | 4 +- 8 files changed, 284 insertions(+), 111 deletions(-) diff --git a/gen/generator.ts b/gen/generator.ts index f04d669..4f5c863 100644 --- a/gen/generator.ts +++ b/gen/generator.ts @@ -34,7 +34,8 @@ const templates: { [key: string]: string } = {} const global: { version?: string -} = {} + singletons: Record +} = { singletons: {} } @@ -103,6 +104,13 @@ const generate = async (localSchema?: boolean) => { if (existsSync(testDir)) rmSync(testDir, { recursive: true }) mkdirSync(testDir, { recursive: true }) + + // Check singletons + Object.entries(schema.resources).forEach(([type, res]) => { + if (Object.values(res.operations).some(op => op.singleton)) { + global.singletons[type] = Object.keys(res.components)[0] + } + }) const resources: { [key: string]: ApiRes } = {} @@ -624,7 +632,10 @@ const generateResource = (type: string, name: string, resource: Resource): strin // Resources import const impResMod: string[] = Array.from(declaredImportsModels) .filter(i => !typesArray.includes(i)) // exludes resource self reference - .map(i => `import type { ${i}${relationshipTypes.has(i)? `, ${i}Type` : ''} } from './${snakeCase(Inflector.pluralize(i))}'`) + .map(i => { + const resFileName = snakeCase(Object.values(global.singletons).includes(i)? i : Inflector.pluralize(i)) + return `import type { ${i}${relationshipTypes.has(i)? `, ${i}Type` : ''} } from './${resFileName}'` + }) const importStr = impResMod.join('\n') + (impResMod.length ? '\n' : '') res = res.replace(/##__IMPORT_RESOURCE_MODELS__##/g, importStr) @@ -753,6 +764,7 @@ const templatedComponent = (res: string, name: string, cmp: Component): { compon let resName = r.type if (resName !== 'object') { + const relStr = cudModel ? 'Rel' : '' if (r.polymorphic && r.oneOf) { resName = r.oneOf.map(o => `${o}${relStr}`).join(' | ') diff --git a/gen/openapi.json b/gen/openapi.json index 092506f..47f85b7 100644 --- a/gen/openapi.json +++ b/gen/openapi.json @@ -435,7 +435,7 @@ "summary": "Related application membership", "description": "Related application membership", "tags": [ - "users", + "user", "has_one" ], "parameters": [ @@ -660,6 +660,41 @@ } } }, + "/memberships/{membershipId}/resend": { + "post": { + "operationId": "POST/memberships/membershipId/resend", + "summary": "Resend invitation", + "description": "Resend invitation for the given membership", + "tags": [ + "memberships" + ], + "parameters": [ + { + "name": "membershipId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + } + } + }, + "responses": { + "202": { + "description": "Confirmation that the invitation has been sent", + "content": { + } + } + } + } + }, "/memberships/{membershipId}/organization": { "get": { "operationId": "GET/membershipId/organization", @@ -894,6 +929,82 @@ } } }, + "/organizations/{organizationId}/transfer_ownership": { + "patch": { + "operationId": "PATCH/organizations/organizationId/transfer_ownership", + "summary": "Transfer ownership of an organization", + "description": "Transfers the ownership of an organization to a new owner", + "tags": [ + "organizations" + ], + "parameters": [ + { + "name": "organizationId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "required": [ + "type", + "id", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organizations" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + }, + "attributes": { + "type": "object", + "properties": { + "new_owner_email": { + "type": "string", + "description": "The user email of the new owner of the organization.", + "example": "test@commercelayer.io", + "nullable": false + } + } + } + } + } + } + } + } + } + }, + "responses": { + "202": { + "description": "The confirmation of the transfer ownership", + "content": { + } + } + } + } + }, "/organizations/{organizationId}/memberships": { "get": { "operationId": "GET/organizationId/memberships", @@ -2219,7 +2330,7 @@ "type": "string", "description": "The resource's type", "enum": [ - "users" + "user" ] }, "id": { @@ -2389,7 +2500,7 @@ "type": "string", "description": "The resource's type", "enum": [ - "users" + "user" ] }, "id": { diff --git a/gen/schema.ts b/gen/schema.ts index 64cd641..f03fb3f 100644 --- a/gen/schema.ts +++ b/gen/schema.ts @@ -116,16 +116,33 @@ const operationName = (op: string, id?: string, relationship?: string): string = } -const referenceResource = (ref: { '$ref': string }): string => { +const referenceResource = (ref: { '$ref': string }): string | undefined => { const r = getReference(ref) as string - return Inflector.camelize(r.substring(r.lastIndexOf('/') + 1)) + return r? Inflector.camelize(r.substring(r.lastIndexOf('/') + 1)) : undefined } -const referenceContent = (content: any): string => { - return referenceResource(content["application/vnd.api+json"].schema) +const referenceContent = (content: any): string | undefined => { + // No content or no response codes + if (!content || ! Object.keys(content).length) return undefined + const schema = content["application/vnd.api+json"]?.schema + return schema? referenceResource(schema) : undefined } +/* +const checkSingletonTags = (tags: string[]): boolean => { + console.log(tags) + let singleton = false + if (tags.includes('singleton')) singleton = true + else { + const type = tags.find(t => !t.startsWith('has_')) + singleton = type? (type === Inflector.singularize(type)) : false + } + console.log(singleton) + return singleton +} +*/ + const parsePaths = (schemaPaths: any[]): PathMap => { @@ -150,7 +167,7 @@ const parsePaths = (schemaPaths: any[]): PathMap => { const [oKey, oValue] = o - const singleton = oValue.tags.includes('singleton') + const singleton = /* checkSingletonTags(oValue.tags) */ oValue.tags.includes('singleton') const op: Operation = { path: pKey, @@ -162,9 +179,8 @@ const parsePaths = (schemaPaths: any[]): PathMap => { if (id) op.id = id if (oValue.requestBody) op.requestType = referenceContent(oValue.requestBody.content) if (oValue.responses) { - if (oValue.responses['200']?.content) op.responseType = referenceContent(oValue.responses['200'].content) - else - if (oValue.responses['201']?.content) op.responseType = referenceContent(oValue.responses['201'].content) + const responses = Object.values(oValue.responses) as any[] + if (responses.length > 0) op.responseType = referenceContent(responses[0].content) } @@ -238,6 +254,9 @@ const parseComponents = (schemaComponents: any[]): ComponentMap => { const cmpRef = getReference(cmp) if (cmpRef) cmp = resolveReference(schemaComponents, cmpRef) + // Component type + // const cmpType = cmp.properties.type.enum[0] + // Check attributes reference const attributesRef = getReference(cmp.properties.attributes) const cmpAttributes = attributesRef ? resolveReference(schemaComponents, attributesRef) : cmp.properties.attributes @@ -283,6 +302,7 @@ const parseComponents = (schemaComponents: any[]): ComponentMap => { } components[Inflector.camelize(cKey)] = { + // type: cmpType, attributes, relationships } @@ -307,13 +327,13 @@ type Resource = { operations: OperationMap } - type ResourceMap = { [resource: string]: Resource } type Component = { - attributes: { [key: string]: Attribute }, + // type: string + attributes: { [key: string]: Attribute } relationships: { [key: string]: Relationship } } diff --git a/package.json b/package.json index 45a8410..20ee32c 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "@types/debug": "^4.1.12", "@types/jest": "^29.5.11", "@types/lodash": "^4.14.202", - "@types/node": "^20.10.3", + "@types/node": "^20.10.4", "dotenv": "^16.3.1", "eslint": "^8.55.0", "inflector-js": "^1.0.1", @@ -56,7 +56,7 @@ "minimize-js": "^1.4.0", "semantic-release": "^22.0.10", "ts-node": "^10.9.1", - "typescript": "^5.3.2" + "typescript": "^5.3.3" }, "repository": "github:commercelayer/provisioning-sdk", "bugs": "https://github.com/commercelayer/provisioning-sdk/issues", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0f08410..b86a2f3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -21,7 +21,7 @@ devDependencies: version: 7.23.3(@babel/core@7.23.5) '@commercelayer/eslint-config-ts': specifier: 1.1.0 - version: 1.1.0(eslint@8.55.0)(typescript@5.3.2) + version: 1.1.0(eslint@8.55.0)(typescript@5.3.3) '@commercelayer/js-auth': specifier: ^4.2.0 version: 4.2.0 @@ -41,8 +41,8 @@ devDependencies: specifier: ^4.14.202 version: 4.14.202 '@types/node': - specifier: ^20.10.3 - version: 20.10.3 + specifier: ^20.10.4 + version: 20.10.4 dotenv: specifier: ^16.3.1 version: 16.3.1 @@ -54,7 +54,7 @@ devDependencies: version: 1.0.1 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.10.3)(ts-node@10.9.1) + version: 29.7.0(@types/node@20.10.4)(ts-node@10.9.1) json-typescript: specifier: ^1.1.2 version: 1.1.2 @@ -69,13 +69,13 @@ devDependencies: version: 1.4.0 semantic-release: specifier: ^22.0.10 - version: 22.0.10(typescript@5.3.2) + version: 22.0.10(typescript@5.3.3) ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@20.10.3)(typescript@5.3.2) + version: 10.9.1(@types/node@20.10.4)(typescript@5.3.3) typescript: - specifier: ^5.3.2 - version: 5.3.2 + specifier: ^5.3.3 + version: 5.3.3 packages: @@ -1324,23 +1324,23 @@ packages: dev: true optional: true - /@commercelayer/eslint-config-ts@1.1.0(eslint@8.55.0)(typescript@5.3.2): + /@commercelayer/eslint-config-ts@1.1.0(eslint@8.55.0)(typescript@5.3.3): resolution: {integrity: sha512-OOzV3RPN7JlEZkwNxWVHdRRknjuLboB/CwxeS832/Kd5sMvOHyaYymNVSpG2tiQj7aFsvtfK8m1umM7Lhod6AA==} peerDependencies: eslint: '>=8.0' typescript: '>=5.0' dependencies: - '@typescript-eslint/eslint-plugin': 6.13.2(@typescript-eslint/parser@6.13.2)(eslint@8.55.0)(typescript@5.3.2) - '@typescript-eslint/parser': 6.13.2(eslint@8.55.0)(typescript@5.3.2) + '@typescript-eslint/eslint-plugin': 6.13.2(@typescript-eslint/parser@6.13.2)(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.13.2(eslint@8.55.0)(typescript@5.3.3) eslint: 8.55.0 eslint-config-prettier: 9.1.0(eslint@8.55.0) - eslint-config-standard-with-typescript: 39.1.1(@typescript-eslint/eslint-plugin@6.13.2)(eslint-plugin-import@2.29.0)(eslint-plugin-n@16.3.1)(eslint-plugin-promise@6.1.1)(eslint@8.55.0)(typescript@5.3.2) + eslint-config-standard-with-typescript: 39.1.1(@typescript-eslint/eslint-plugin@6.13.2)(eslint-plugin-import@2.29.0)(eslint-plugin-n@16.3.1)(eslint-plugin-promise@6.1.1)(eslint@8.55.0)(typescript@5.3.3) eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.13.2)(eslint@8.55.0) eslint-plugin-n: 16.3.1(eslint@8.55.0) eslint-plugin-prettier: 5.0.1(eslint-config-prettier@9.1.0)(eslint@8.55.0)(prettier@3.1.0) eslint-plugin-promise: 6.1.1(eslint@8.55.0) prettier: 3.1.0 - typescript: 5.3.2 + typescript: 5.3.3 transitivePeerDependencies: - '@types/eslint' - eslint-import-resolver-typescript @@ -1648,7 +1648,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.10.3 + '@types/node': 20.10.4 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -1669,14 +1669,14 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.3 + '@types/node': 20.10.4 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.10.3)(ts-node@10.9.1) + jest-config: 29.7.0(@types/node@20.10.4)(ts-node@10.9.1) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -1704,7 +1704,7 @@ packages: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.3 + '@types/node': 20.10.4 jest-mock: 29.7.0 dev: true @@ -1731,7 +1731,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.10.3 + '@types/node': 20.10.4 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -1764,7 +1764,7 @@ packages: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.20 - '@types/node': 20.10.3 + '@types/node': 20.10.4 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -1852,7 +1852,7 @@ packages: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.10.3 + '@types/node': 20.10.4 '@types/yargs': 17.0.32 chalk: 4.1.2 dev: true @@ -2062,7 +2062,7 @@ packages: aggregate-error: 3.1.0 fs-extra: 11.2.0 lodash: 4.17.21 - semantic-release: 22.0.10(typescript@5.3.2) + semantic-release: 22.0.10(typescript@5.3.3) dev: true /@semantic-release/commit-analyzer@11.1.0(semantic-release@22.0.10): @@ -2078,7 +2078,7 @@ packages: import-from-esm: 1.3.3 lodash-es: 4.17.21 micromatch: 4.0.5 - semantic-release: 22.0.10(typescript@5.3.2) + semantic-release: 22.0.10(typescript@5.3.3) transitivePeerDependencies: - supports-color dev: true @@ -2107,7 +2107,7 @@ packages: lodash: 4.17.21 micromatch: 4.0.5 p-reduce: 2.1.0 - semantic-release: 22.0.10(typescript@5.3.2) + semantic-release: 22.0.10(typescript@5.3.3) transitivePeerDependencies: - supports-color dev: true @@ -2133,7 +2133,7 @@ packages: lodash-es: 4.17.21 mime: 4.0.0 p-filter: 3.0.0 - semantic-release: 22.0.10(typescript@5.3.2) + semantic-release: 22.0.10(typescript@5.3.3) url-join: 5.0.0 transitivePeerDependencies: - supports-color @@ -2152,11 +2152,11 @@ packages: lodash-es: 4.17.21 nerf-dart: 1.0.0 normalize-url: 8.0.0 - npm: 10.2.4 + npm: 10.2.5 rc: 1.2.8 read-pkg: 9.0.1 registry-auth-token: 5.0.2 - semantic-release: 22.0.10(typescript@5.3.2) + semantic-release: 22.0.10(typescript@5.3.3) semver: 7.5.4 tempy: 3.1.0 dev: true @@ -2177,7 +2177,7 @@ packages: into-stream: 7.0.0 lodash-es: 4.17.21 read-pkg-up: 11.0.0 - semantic-release: 22.0.10(typescript@5.3.2) + semantic-release: 22.0.10(typescript@5.3.3) transitivePeerDependencies: - supports-color dev: true @@ -2262,7 +2262,7 @@ packages: /@types/graceful-fs@4.1.9: resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} dependencies: - '@types/node': 20.10.3 + '@types/node': 20.10.4 dev: true /@types/istanbul-lib-coverage@2.0.6: @@ -2304,8 +2304,8 @@ packages: resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} dev: true - /@types/node@20.10.3: - resolution: {integrity: sha512-XJavIpZqiXID5Yxnxv3RUDKTN5b81ddNC3ecsA0SoFXz/QU8OGBwZGMomiq0zw+uuqbL/krztv/DINAQ/EV4gg==} + /@types/node@20.10.4: + resolution: {integrity: sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==} dependencies: undici-types: 5.26.5 dev: true @@ -2332,7 +2332,7 @@ packages: '@types/yargs-parser': 21.0.3 dev: true - /@typescript-eslint/eslint-plugin@6.13.2(@typescript-eslint/parser@6.13.2)(eslint@8.55.0)(typescript@5.3.2): + /@typescript-eslint/eslint-plugin@6.13.2(@typescript-eslint/parser@6.13.2)(eslint@8.55.0)(typescript@5.3.3): resolution: {integrity: sha512-3+9OGAWHhk4O1LlcwLBONbdXsAhLjyCFogJY/cWy2lxdVJ2JrcTF2pTGMaLl2AE7U1l31n8Py4a8bx5DLf/0dQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2344,10 +2344,10 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.13.2(eslint@8.55.0)(typescript@5.3.2) + '@typescript-eslint/parser': 6.13.2(eslint@8.55.0)(typescript@5.3.3) '@typescript-eslint/scope-manager': 6.13.2 - '@typescript-eslint/type-utils': 6.13.2(eslint@8.55.0)(typescript@5.3.2) - '@typescript-eslint/utils': 6.13.2(eslint@8.55.0)(typescript@5.3.2) + '@typescript-eslint/type-utils': 6.13.2(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/utils': 6.13.2(eslint@8.55.0)(typescript@5.3.3) '@typescript-eslint/visitor-keys': 6.13.2 debug: 4.3.4 eslint: 8.55.0 @@ -2355,13 +2355,13 @@ packages: ignore: 5.3.0 natural-compare: 1.4.0 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.2) - typescript: 5.3.2 + ts-api-utils: 1.0.3(typescript@5.3.3) + typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.13.2(eslint@8.55.0)(typescript@5.3.2): + /@typescript-eslint/parser@6.13.2(eslint@8.55.0)(typescript@5.3.3): resolution: {integrity: sha512-MUkcC+7Wt/QOGeVlM8aGGJZy1XV5YKjTpq9jK6r6/iLsGXhBVaGP5N0UYvFsu9BFlSpwY9kMretzdBH01rkRXg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2373,11 +2373,11 @@ packages: dependencies: '@typescript-eslint/scope-manager': 6.13.2 '@typescript-eslint/types': 6.13.2 - '@typescript-eslint/typescript-estree': 6.13.2(typescript@5.3.2) + '@typescript-eslint/typescript-estree': 6.13.2(typescript@5.3.3) '@typescript-eslint/visitor-keys': 6.13.2 debug: 4.3.4 eslint: 8.55.0 - typescript: 5.3.2 + typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true @@ -2390,7 +2390,7 @@ packages: '@typescript-eslint/visitor-keys': 6.13.2 dev: true - /@typescript-eslint/type-utils@6.13.2(eslint@8.55.0)(typescript@5.3.2): + /@typescript-eslint/type-utils@6.13.2(eslint@8.55.0)(typescript@5.3.3): resolution: {integrity: sha512-Qr6ssS1GFongzH2qfnWKkAQmMUyZSyOr0W54nZNU1MDfo+U4Mv3XveeLZzadc/yq8iYhQZHYT+eoXJqnACM1tw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2400,12 +2400,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.13.2(typescript@5.3.2) - '@typescript-eslint/utils': 6.13.2(eslint@8.55.0)(typescript@5.3.2) + '@typescript-eslint/typescript-estree': 6.13.2(typescript@5.3.3) + '@typescript-eslint/utils': 6.13.2(eslint@8.55.0)(typescript@5.3.3) debug: 4.3.4 eslint: 8.55.0 - ts-api-utils: 1.0.3(typescript@5.3.2) - typescript: 5.3.2 + ts-api-utils: 1.0.3(typescript@5.3.3) + typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true @@ -2415,7 +2415,7 @@ packages: engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@6.13.2(typescript@5.3.2): + /@typescript-eslint/typescript-estree@6.13.2(typescript@5.3.3): resolution: {integrity: sha512-SuD8YLQv6WHnOEtKv8D6HZUzOub855cfPnPMKvdM/Bh1plv1f7Q/0iFUDLKKlxHcEstQnaUU4QZskgQq74t+3w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2430,13 +2430,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.2) - typescript: 5.3.2 + ts-api-utils: 1.0.3(typescript@5.3.3) + typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@6.13.2(eslint@8.55.0)(typescript@5.3.2): + /@typescript-eslint/utils@6.13.2(eslint@8.55.0)(typescript@5.3.3): resolution: {integrity: sha512-b9Ptq4eAZUym4idijCRzl61oPCwwREcfDI8xGk751Vhzig5fFZR9CyzDz4Sp/nxSLBYxUPyh4QdIDqWykFhNmQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2447,7 +2447,7 @@ packages: '@types/semver': 7.5.6 '@typescript-eslint/scope-manager': 6.13.2 '@typescript-eslint/types': 6.13.2 - '@typescript-eslint/typescript-estree': 6.13.2(typescript@5.3.2) + '@typescript-eslint/typescript-estree': 6.13.2(typescript@5.3.3) eslint: 8.55.0 semver: 7.5.4 transitivePeerDependencies: @@ -2857,7 +2857,7 @@ packages: hasBin: true dependencies: caniuse-lite: 1.0.30001566 - electron-to-chromium: 1.4.605 + electron-to-chromium: 1.4.607 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.22.2) dev: true @@ -3108,7 +3108,7 @@ packages: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true - /cosmiconfig@8.3.6(typescript@5.3.2): + /cosmiconfig@8.3.6(typescript@5.3.3): resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} peerDependencies: @@ -3121,10 +3121,10 @@ packages: js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 - typescript: 5.3.2 + typescript: 5.3.3 dev: true - /create-jest@29.7.0(@types/node@20.10.3)(ts-node@10.9.1): + /create-jest@29.7.0(@types/node@20.10.4)(ts-node@10.9.1): resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -3133,7 +3133,7 @@ packages: chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.10.3)(ts-node@10.9.1) + jest-config: 29.7.0(@types/node@20.10.4)(ts-node@10.9.1) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -3321,8 +3321,8 @@ packages: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true - /electron-to-chromium@1.4.605: - resolution: {integrity: sha512-V52j+P5z6cdRqTjPR/bYNxx7ETCHIkm5VIGuyCy3CMrfSnbEpIlLnk5oHmZo7gYvDfh2TfHeanB6rawyQ23ktg==} + /electron-to-chromium@1.4.607: + resolution: {integrity: sha512-YUlnPwE6eYxzwBnFmawA8LiLRfm70R2aJRIUv0n03uHt/cUzzYACOogmvk8M2+hVzt/kB80KJXx7d5f5JofPvQ==} dev: true /emittery@0.13.1: @@ -3498,7 +3498,7 @@ packages: eslint: 8.55.0 dev: true - /eslint-config-standard-with-typescript@39.1.1(@typescript-eslint/eslint-plugin@6.13.2)(eslint-plugin-import@2.29.0)(eslint-plugin-n@16.3.1)(eslint-plugin-promise@6.1.1)(eslint@8.55.0)(typescript@5.3.2): + /eslint-config-standard-with-typescript@39.1.1(@typescript-eslint/eslint-plugin@6.13.2)(eslint-plugin-import@2.29.0)(eslint-plugin-n@16.3.1)(eslint-plugin-promise@6.1.1)(eslint@8.55.0)(typescript@5.3.3): resolution: {integrity: sha512-t6B5Ep8E4I18uuoYeYxINyqcXb2UbC0SOOTxRtBSt2JUs+EzeXbfe2oaiPs71AIdnoWhXDO2fYOHz8df3kV84A==} peerDependencies: '@typescript-eslint/eslint-plugin': ^6.4.0 @@ -3508,14 +3508,14 @@ packages: eslint-plugin-promise: ^6.0.0 typescript: '*' dependencies: - '@typescript-eslint/eslint-plugin': 6.13.2(@typescript-eslint/parser@6.13.2)(eslint@8.55.0)(typescript@5.3.2) - '@typescript-eslint/parser': 6.13.2(eslint@8.55.0)(typescript@5.3.2) + '@typescript-eslint/eslint-plugin': 6.13.2(@typescript-eslint/parser@6.13.2)(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.13.2(eslint@8.55.0)(typescript@5.3.3) eslint: 8.55.0 eslint-config-standard: 17.1.0(eslint-plugin-import@2.29.0)(eslint-plugin-n@16.3.1)(eslint-plugin-promise@6.1.1)(eslint@8.55.0) eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.13.2)(eslint@8.55.0) eslint-plugin-n: 16.3.1(eslint@8.55.0) eslint-plugin-promise: 6.1.1(eslint@8.55.0) - typescript: 5.3.2 + typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true @@ -3566,7 +3566,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.13.2(eslint@8.55.0)(typescript@5.3.2) + '@typescript-eslint/parser': 6.13.2(eslint@8.55.0)(typescript@5.3.3) debug: 3.2.7 eslint: 8.55.0 eslint-import-resolver-node: 0.3.9 @@ -3596,7 +3596,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.13.2(eslint@8.55.0)(typescript@5.3.2) + '@typescript-eslint/parser': 6.13.2(eslint@8.55.0)(typescript@5.3.3) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -4689,7 +4689,7 @@ packages: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.3 + '@types/node': 20.10.4 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.1 @@ -4710,7 +4710,7 @@ packages: - supports-color dev: true - /jest-cli@29.7.0(@types/node@20.10.3)(ts-node@10.9.1): + /jest-cli@29.7.0(@types/node@20.10.4)(ts-node@10.9.1): resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -4724,10 +4724,10 @@ packages: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.10.3)(ts-node@10.9.1) + create-jest: 29.7.0(@types/node@20.10.4)(ts-node@10.9.1) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.10.3)(ts-node@10.9.1) + jest-config: 29.7.0(@types/node@20.10.4)(ts-node@10.9.1) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -4738,7 +4738,7 @@ packages: - ts-node dev: true - /jest-config@29.7.0(@types/node@20.10.3)(ts-node@10.9.1): + /jest-config@29.7.0(@types/node@20.10.4)(ts-node@10.9.1): resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -4753,7 +4753,7 @@ packages: '@babel/core': 7.23.5 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.3 + '@types/node': 20.10.4 babel-jest: 29.7.0(@babel/core@7.23.5) chalk: 4.1.2 ci-info: 3.9.0 @@ -4773,7 +4773,7 @@ packages: pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@types/node@20.10.3)(typescript@5.3.2) + ts-node: 10.9.1(@types/node@20.10.4)(typescript@5.3.3) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -4814,7 +4814,7 @@ packages: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.3 + '@types/node': 20.10.4 jest-mock: 29.7.0 jest-util: 29.7.0 dev: true @@ -4830,7 +4830,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 20.10.3 + '@types/node': 20.10.4 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -4881,7 +4881,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.10.3 + '@types/node': 20.10.4 jest-util: 29.7.0 dev: true @@ -4936,7 +4936,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.3 + '@types/node': 20.10.4 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -4967,7 +4967,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.3 + '@types/node': 20.10.4 chalk: 4.1.2 cjs-module-lexer: 1.2.3 collect-v8-coverage: 1.0.2 @@ -5019,7 +5019,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.10.3 + '@types/node': 20.10.4 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -5044,7 +5044,7 @@ packages: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.3 + '@types/node': 20.10.4 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -5056,13 +5056,13 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 20.10.3 + '@types/node': 20.10.4 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest@29.7.0(@types/node@20.10.3)(ts-node@10.9.1): + /jest@29.7.0(@types/node@20.10.4)(ts-node@10.9.1): resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -5075,7 +5075,7 @@ packages: '@jest/core': 29.7.0(ts-node@10.9.1) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.10.3)(ts-node@10.9.1) + jest-cli: 29.7.0(@types/node@20.10.4)(ts-node@10.9.1) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -5482,8 +5482,8 @@ packages: path-key: 4.0.0 dev: true - /npm@10.2.4: - resolution: {integrity: sha512-umEuYneVEYO9KoEEI8n2sSGmNQeqco/3BSeacRlqIkCzw4E7XGtYSWMeJobxzr6hZ2n9cM+u5TsMTcC5bAgoWA==} + /npm@10.2.5: + resolution: {integrity: sha512-lXdZ7titEN8CH5YJk9C/aYRU9JeDxQ4d8rwIIDsvH3SMjLjHTukB2CFstMiB30zXs4vCrPN2WH6cDq1yHBeJAw==} engines: {node: ^18.17.0 || >=20.5.0} hasBin: true dev: true @@ -6114,7 +6114,7 @@ packages: is-regex: 1.1.4 dev: true - /semantic-release@22.0.10(typescript@5.3.2): + /semantic-release@22.0.10(typescript@5.3.3): resolution: {integrity: sha512-4ahPaOX+0UYpYlosjc/tfCzB/cqlnjN0/xSKGryEC4bOpuYSkoK+QHw7xDPmAuiMNBBvkFD+m3aVMENUr++CIg==} engines: {node: ^18.17 || >=20.6.1} hasBin: true @@ -6125,7 +6125,7 @@ packages: '@semantic-release/npm': 11.0.1(semantic-release@22.0.10) '@semantic-release/release-notes-generator': 12.1.0(semantic-release@22.0.10) aggregate-error: 5.0.0 - cosmiconfig: 8.3.6(typescript@5.3.2) + cosmiconfig: 8.3.6(typescript@5.3.3) debug: 4.3.4 env-ci: 10.0.0 execa: 8.0.1 @@ -6535,16 +6535,16 @@ packages: resolution: {integrity: sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==} dev: true - /ts-api-utils@1.0.3(typescript@5.3.2): + /ts-api-utils@1.0.3(typescript@5.3.3): resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} engines: {node: '>=16.13.0'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.3.2 + typescript: 5.3.3 dev: true - /ts-node@10.9.1(@types/node@20.10.3)(typescript@5.3.2): + /ts-node@10.9.1(@types/node@20.10.4)(typescript@5.3.3): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -6563,14 +6563,14 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.10.3 + '@types/node': 20.10.4 acorn: 8.11.2 acorn-walk: 8.3.1 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.3.2 + typescript: 5.3.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: true @@ -6668,8 +6668,8 @@ packages: is-typed-array: 1.1.12 dev: true - /typescript@5.3.2: - resolution: {integrity: sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==} + /typescript@5.3.3: + resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} engines: {node: '>=14.17'} hasBin: true dev: true diff --git a/specs/resources/application_memberships.spec.ts b/specs/resources/application_memberships.spec.ts index 827fba7..93e7675 100644 --- a/specs/resources/application_memberships.spec.ts +++ b/specs/resources/application_memberships.spec.ts @@ -27,7 +27,7 @@ describe('ApplicationMemberships resource', () => { const createAttributes = { api_credential: clp.api_credentials.relationship(TestData.id), membership: clp.memberships.relationship(TestData.id), - user: clp.users.relationship(TestData.id), + user: clp.user.relationship(TestData.id), organization: clp.organizations.relationship(TestData.id), role: clp.roles.relationship(TestData.id), } @@ -243,7 +243,7 @@ describe('ApplicationMemberships resource', () => { it(resourceType + '.user', async () => { const id = TestData.id - const params = { fields: { users: CommonData.paramsFields } } + const params = { fields: { user: CommonData.paramsFields } } const intId = clp.addRequestInterceptor((config) => { expect(config.method).toBe('get') diff --git a/src/api.ts b/src/api.ts index 4dc119e..149d1bf 100644 --- a/src/api.ts +++ b/src/api.ts @@ -1,4 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + import type { Resource, ResourceRel } from './resource' import type { VersionType } from './resources/versions' diff --git a/src/resources/application_memberships.ts b/src/resources/application_memberships.ts index 376e4ff..e739c74 100644 --- a/src/resources/application_memberships.ts +++ b/src/resources/application_memberships.ts @@ -4,7 +4,7 @@ import type { QueryParamsRetrieve } from '../query' import type { ApiCredential, ApiCredentialType } from './api_credentials' import type { Membership, MembershipType } from './memberships' -import type { User, UserType } from './users' +import type { User, UserType } from './user' import type { Organization, OrganizationType } from './organizations' import type { Role, RoleType } from './roles' @@ -78,7 +78,7 @@ class ApplicationMemberships extends ApiResource { async user(applicationMembershipId: string | ApplicationMembership, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { const _applicationMembershipId = (applicationMembershipId as ApplicationMembership).id || applicationMembershipId as string - return this.resources.fetch({ type: 'users' }, `application_memberships/${_applicationMembershipId}/user`, params, options) as unknown as User + return this.resources.fetch({ type: 'user' }, `application_memberships/${_applicationMembershipId}/user`, params, options) as unknown as User } async organization(applicationMembershipId: string | ApplicationMembership, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { From 6a9d525f31da0f23f9dac6dd49010c75433f1aa7 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 7 Dec 2023 13:47:04 +0000 Subject: [PATCH 12/30] chore(release): 1.0.0-beta.5 [skip ci] # [1.0.0-beta.5](https://github.com/commercelayer/provisioning-sdk/compare/v1.0.0-beta.4...v1.0.0-beta.5) (2023-12-07) ### Bug Fixes * singleton import ([9578382](https://github.com/commercelayer/provisioning-sdk/commit/9578382b671629d4891e77f39658ab66828eb357)) * update schema ([9e569c7](https://github.com/commercelayer/provisioning-sdk/commit/9e569c7484896ea666f5f8079ee0833ed9dc87aa)) --- CHANGELOG.md | 8 ++++++++ package.json | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 728dc0f..3e96613 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +# [1.0.0-beta.5](https://github.com/commercelayer/provisioning-sdk/compare/v1.0.0-beta.4...v1.0.0-beta.5) (2023-12-07) + + +### Bug Fixes + +* singleton import ([9578382](https://github.com/commercelayer/provisioning-sdk/commit/9578382b671629d4891e77f39658ab66828eb357)) +* update schema ([9e569c7](https://github.com/commercelayer/provisioning-sdk/commit/9e569c7484896ea666f5f8079ee0833ed9dc87aa)) + # [1.0.0-beta.4](https://github.com/commercelayer/provisioning-sdk/compare/v1.0.0-beta.3...v1.0.0-beta.4) (2023-11-30) diff --git a/package.json b/package.json index 20ee32c..df81753 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@commercelayer/provisioning-sdk", - "version": "1.0.0-beta.4", + "version": "1.0.0-beta.5", "main": "lib/cjs/index.js", "types": "lib/cjs/index.d.ts", "module": "lib/esm/index.js", From 75f5f97e3dade5dd43905deba81f6c4ed46ca21b Mon Sep 17 00:00:00 2001 From: Pierluigi Viti Date: Tue, 12 Dec 2023 13:38:04 +0100 Subject: [PATCH 13/30] fix: fix custom user agent option --- src/client.ts | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/client.ts b/src/client.ts index 7230922..a9a7c58 100644 --- a/src/client.ts +++ b/src/client.ts @@ -79,21 +79,25 @@ class ApiClient { // Set custom headers const customHeaders = this.customHeaders(options.headers) + // Set headers + const headers: any = { + ...customHeaders, + 'Accept': 'application/vnd.api+json', + 'Content-Type': 'application/vnd.api+json', + 'Authorization': 'Bearer ' + this.#accessToken + } + // Set User-Agent - // const userAgentData = packageInfo(['version', 'dependencies.axios'], { nestedName: true }) - let userAgent = options.userAgent || `SDK-provisioning axios/${axios.VERSION}` - if (!userAgent.includes('axios/')) userAgent += ` axios/${axios.VERSION}` + let userAgent = options.userAgent // || `SDK-provisioning axios/${axios.VERSION}` + if (userAgent) { + if (!userAgent.includes('axios/')) userAgent += ` axios/${axios.VERSION}` + headers['User-Agent'] = userAgent + } const axiosOptions: CreateAxiosDefaults = { baseURL: this.baseUrl, timeout: config.client.timeout, - headers: { - ...customHeaders, - 'Accept': 'application/vnd.api+json', - 'Content-Type': 'application/vnd.api+json', - 'Authorization': 'Bearer ' + this.#accessToken, - 'User-Agent': userAgent - }, + headers, ...axiosConfig } From e080a2899afd64c0c91fa1e13900fc668d87e812 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 12 Dec 2023 12:39:07 +0000 Subject: [PATCH 14/30] chore(release): 1.0.0-beta.6 [skip ci] # [1.0.0-beta.6](https://github.com/commercelayer/provisioning-sdk/compare/v1.0.0-beta.5...v1.0.0-beta.6) (2023-12-12) ### Bug Fixes * fix custom user agent option ([75f5f97](https://github.com/commercelayer/provisioning-sdk/commit/75f5f97e3dade5dd43905deba81f6c4ed46ca21b)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3e96613..cfd8c7e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [1.0.0-beta.6](https://github.com/commercelayer/provisioning-sdk/compare/v1.0.0-beta.5...v1.0.0-beta.6) (2023-12-12) + + +### Bug Fixes + +* fix custom user agent option ([75f5f97](https://github.com/commercelayer/provisioning-sdk/commit/75f5f97e3dade5dd43905deba81f6c4ed46ca21b)) + # [1.0.0-beta.5](https://github.com/commercelayer/provisioning-sdk/compare/v1.0.0-beta.4...v1.0.0-beta.5) (2023-12-07) diff --git a/package.json b/package.json index df81753..79ecefd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@commercelayer/provisioning-sdk", - "version": "1.0.0-beta.5", + "version": "1.0.0-beta.6", "main": "lib/cjs/index.js", "types": "lib/cjs/index.d.ts", "module": "lib/esm/index.js", From 08cd9ffdae53c80d7b52f841c2da319488a9ee85 Mon Sep 17 00:00:00 2001 From: Pierluigi Viti Date: Wed, 13 Dec 2023 09:18:03 +0100 Subject: [PATCH 15/30] feat: add auto generation of special actions --- gen/generator.ts | 38 +- gen/openapi.json | 1 + gen/schema.ts | 98 ++- gen/templates/action.tpl | 4 + gen/templates/resource.tpl | 1 + package.json | 6 +- pnpm-lock.yaml | 1017 +++++++++++++------------ specs/resources/organizations.spec.ts | 21 + src/api.ts | 77 ++ src/resource.ts | 12 + src/resources/memberships.ts | 5 + src/resources/organizations.ts | 11 + test/spot.ts | 6 +- 13 files changed, 736 insertions(+), 561 deletions(-) create mode 100644 gen/templates/action.tpl diff --git a/gen/generator.ts b/gen/generator.ts index 4f5c863..a7f7c31 100644 --- a/gen/generator.ts +++ b/gen/generator.ts @@ -1,5 +1,5 @@ -import apiSchema, { Resource, Operation, Component, Cardinality, Attribute } from './schema' +import apiSchema, { Resource, Operation, Component, Cardinality, Attribute, isObjectType } from './schema' import { readFileSync, writeFileSync, existsSync, mkdirSync, readdirSync, rmSync } from 'fs' import { basename } from 'path' import { snakeCase } from 'lodash' @@ -9,7 +9,8 @@ import fixSchema from './fixer' /**** SDK source code generator settings ****/ const CONFIG = { RELATIONSHIP_FUNCTIONS: true, - TRIGGER_FUNCTIONS: true + TRIGGER_FUNCTIONS: true, + ACTION_FUNCTIONS: true } /**** **** **** **** **** **** **** **** ****/ @@ -536,6 +537,7 @@ const generateResource = (type: string, name: string, resource: Resource): strin let resModelType = 'ApiResource' const declaredTypes: Set = new Set([resModelInterface]) + const declaredTypesDef: string[] = [] // const declaredEnums: ComponentEnums = {} const declaredImportsModels: Set = new Set() const declaredImportsCommon: Set = new Set(['ResourceId']) @@ -576,7 +578,15 @@ const generateResource = (type: string, name: string, resource: Resource): strin resMod.add('ListResponse') } operations.push(tplrOp.operation) - } else console.log('Unknown operation: ' + opName) + } + else + if (op.action && CONFIG.ACTION_FUNCTIONS) { + const tpla = templates['action'] + const tplaOp = templatedOperation(resName, opName, op, tpla) + operations.push(tplaOp.operation) + tplaOp.typesDef.forEach(t => { declaredTypesDef.push(t) }) + } + else console.log('Unknown operation: ' + opName) } }) @@ -607,6 +617,8 @@ const generateResource = (type: string, name: string, resource: Resource): strin // Interfaces export const typesArray = Array.from(declaredTypes) res = res.replace(/##__EXPORT_RESOURCE_TYPES__##/g, typesArray.join(', ')) + const typesDefArray = Array.from(declaredTypesDef) + res = res.replace(/##__EXPORT_RESOURCE_TYPES_DEF__##/g, (typesDefArray.length > 0)? `${typesDefArray.join('\n')}\n` : '') // Interfaces and types definition const modelInterfaces: string[] = [] @@ -647,10 +659,11 @@ const generateResource = (type: string, name: string, resource: Resource): strin } -const templatedOperation = (res: string, name: string, op: Operation, tpl: string, placeholders?: Record): { operation: string, types: string[] } => { +const templatedOperation = (res: string, name: string, op: Operation, tpl: string, placeholders?: Record): { operation: string, types: string[], typesDef: string[] } => { let operation = tpl const types: string[] = [] + const typesDef: string[] = [] operation = operation.replace(/##__OPERATION_NAME__##/g, name) operation = operation.replace(/##__RESOURCE_CLASS__##/g, res) @@ -658,7 +671,11 @@ const templatedOperation = (res: string, name: string, op: Operation, tpl: strin if (op.requestType) { const requestType = op.requestType operation = operation.replace(/##__RESOURCE_REQUEST_CLASS__##/g, requestType) - if (!types.includes(requestType)) types.push(requestType) + if (isObjectType(requestType)) { + const typeDef = `export type ${Inflector.camelize(op.name)}DataType = { ${Object.entries(op.requestTypeDef).map(([k, v]: [string, any]) => `${k}${v.nullable? '?' : ''}: ${v.type}`).join(', ')} }` + typesDef.push(typeDef) + } + else if (!types.includes(requestType)) types.push(requestType) } if (op.responseType) { const responseType = op.responseType @@ -680,6 +697,15 @@ const templatedOperation = (res: string, name: string, op: Operation, tpl: strin operation = operation.replace(/##__TRIGGER_VALUE__##/, placeholders?.trigger_value? ` triggerValue: ${ placeholders.trigger_value},` : '') operation = operation.replace(/##__TRIGGER_VALUE_TYPE__##/, placeholders?.trigger_value? 'triggerValue' : 'true') } + else + if (op.action) { // Action + operation = operation.replace(/##__ACTION_PATH__##/g, op.path.substring(1).replace('{' + op.id, '${_' + opIdVar)) + operation = operation.replace(/##__RESOURCE_ID__##/g, opIdVar) + operation = operation.replace(/##__MODEL_RESOURCE_INTERFACE__##/g, Inflector.singularize(res)) + operation = operation.replace(/##__ACTION_PAYLOAD_PARAM__##/g, isObjectType(op.requestType)? ` payload: ${Inflector.camelize(op.name)}DataType,` : '') + operation = operation.replace(/##__ACTION_PAYLOAD__##/g, isObjectType(op.requestType)? ' ...payload ' : '') + operation = operation.replace(/##__ACTION_COMMAND__##/g, op.type) + } if (placeholders) Object.entries(placeholders).forEach(([key, val]) => { const plh = (key.startsWith('##__') && key.endsWith('__##'))? key : `##__${key.toUpperCase()}__##` @@ -689,7 +715,7 @@ const templatedOperation = (res: string, name: string, op: Operation, tpl: strin operation = operation.replace(/\n/g, '\n\t') - return { operation, types } + return { operation, types, typesDef } } diff --git a/gen/openapi.json b/gen/openapi.json index 47f85b7..f256caf 100644 --- a/gen/openapi.json +++ b/gen/openapi.json @@ -1092,6 +1092,7 @@ "summary": "Related organization", "description": "Related organization", "tags": [ + "api_credentials", "has_many" ], "parameters": [ diff --git a/gen/schema.ts b/gen/schema.ts index f03fb3f..24f73e2 100644 --- a/gen/schema.ts +++ b/gen/schema.ts @@ -105,12 +105,12 @@ const parseSchema = (path: string): ApiSchema => { } -const operationName = (op: string, id?: string, relationship?: string): string => { +const operationName = (op: string, id?: string, relOrCmd?: string): string => { switch (op) { - case 'get': return id ? (relationship || 'retrieve') : 'list' - case 'patch': return 'update' + case 'get': return id ? (relOrCmd || 'retrieve') : 'list' + case 'patch': return id ? (relOrCmd || 'update') : 'update' case 'delete': return 'delete' - case 'post': return 'create' + case 'post': return id ? (relOrCmd || 'create') : 'create' default: return op } } @@ -121,27 +121,29 @@ const referenceResource = (ref: { '$ref': string }): string | undefined => { return r? Inflector.camelize(r.substring(r.lastIndexOf('/') + 1)) : undefined } +const contentSchema = (content: any): any => { + return content["application/vnd.api+json"]?.schema +} const referenceContent = (content: any): string | undefined => { // No content or no response codes if (!content || ! Object.keys(content).length) return undefined - const schema = content["application/vnd.api+json"]?.schema + const schema = contentSchema(content) return schema? referenceResource(schema) : undefined } -/* -const checkSingletonTags = (tags: string[]): boolean => { - console.log(tags) - let singleton = false - if (tags.includes('singleton')) singleton = true - else { - const type = tags.find(t => !t.startsWith('has_')) - singleton = type? (type === Inflector.singularize(type)) : false - } - console.log(singleton) - return singleton + +const contentType = (content?: any): string | undefined => { + if (!content) return undefined + const schema = contentSchema(content) + if (!schema) return undefined + return isReference(schema)? referenceContent(content) : 'object' +} + + +export const isObjectType = (type?: string): boolean => { + return (type !== undefined) && ['object', 'any'].includes(type) } -*/ const parsePaths = (schemaPaths: any[]): PathMap => { @@ -152,7 +154,7 @@ const parsePaths = (schemaPaths: any[]): PathMap => { const [pKey, pValue] = p const relIdx = pKey.indexOf('}/') + 2 - const relationship = (relIdx > 1) ? pKey.substring(relIdx) : undefined + const relOrCmd = (relIdx > 1) ? pKey.substring(relIdx) : undefined const id = pKey.substring(pKey.indexOf('{') + 1, pKey.indexOf('}')) const path = pKey.replace(/\/{.*}/g, '').substring(1) @@ -167,45 +169,50 @@ const parsePaths = (schemaPaths: any[]): PathMap => { const [oKey, oValue] = o - const singleton = /* checkSingletonTags(oValue.tags) */ oValue.tags.includes('singleton') - const op: Operation = { path: pKey, type: oKey, - name: operationName(oKey, id, relationship), - singleton, + name: operationName(oKey, id, relOrCmd), + singleton: oValue.tags.includes('singleton'), } if (id) op.id = id - if (oValue.requestBody) op.requestType = referenceContent(oValue.requestBody.content) + if (oValue.requestBody) { + op.requestType = contentType(oValue.requestBody.content) + if (isObjectType(op.requestType)) op.requestTypeDef = contentSchema(oValue.requestBody.content).properties.data.properties.attributes.properties + } if (oValue.responses) { const responses = Object.values(oValue.responses) as any[] - if (responses.length > 0) op.responseType = referenceContent(responses[0].content) + if (responses.length > 0) op.responseType = contentType(responses[0].content) } - if (relationship) { + if (relOrCmd) { const tags = oValue.tags as string[] const relCard = tags.find(t => t.startsWith('has_')) as string if (!relCard) console.log(`Relationship without cardinality: ${op.name} [${op.path}]`) const relType = tags.find(t => !t.startsWith('has_')) as string if (!relType) console.log(`Relationship without type: ${op.name} [${op.path}]`) - if (!relCard || !relType) skip = true - - if (!skip) { - op.relationship = { - name: relationship || '', - type: relType, - polymorphic: false, - cardinality: (relCard === 'has_many') ? Cardinality.to_many : Cardinality.to_one, - required: false, - deprecated: false + + if (relType) { + if (relCard) { + op.relationship = { + name: relOrCmd || '', + type: relType, + polymorphic: false, + cardinality: (relCard === 'has_many') ? Cardinality.to_many : Cardinality.to_one, + required: false, + deprecated: false, + } + op.responseType = Inflector.camelize(Inflector.singularize(op.relationship.type)) + } else { + op.function = operationName(oKey, id,), + op.action = true } - op.responseType = Inflector.camelize(Inflector.singularize(op.relationship.type)) - } - } + } else skip = true + } if (skip) console.log(`Operation skipped: ${op.name} [${op.path}]`) else operations[op.name] = op @@ -222,6 +229,11 @@ const parsePaths = (schemaPaths: any[]): PathMap => { } +const isReference = (obj: any): boolean => { + return (obj.$ref !== undefined) +} + + const getReference = (obj: any): string | undefined => { if (obj) return obj['$ref'] return undefined @@ -373,11 +385,15 @@ type Operation = { type: string id?: string name: string - requestType?: any - responseType?: any + function?: string + requestType?: string + requestTypeDef?: any + responseType?: string + responseTypeDef?: any singleton: boolean relationship?: Relationship - trigger?: boolean + trigger?: boolean, + action?: boolean } diff --git a/gen/templates/action.tpl b/gen/templates/action.tpl new file mode 100644 index 0000000..fe1281d --- /dev/null +++ b/gen/templates/action.tpl @@ -0,0 +1,4 @@ +async ##__OPERATION_NAME__##(##__RESOURCE_ID__##: string | ##__MODEL_RESOURCE_INTERFACE__##,##__ACTION_PAYLOAD_PARAM__## options?: ResourcesConfig): Promise { + const _##__RESOURCE_ID__## = (##__RESOURCE_ID__## as ##__MODEL_RESOURCE_INTERFACE__##).id || ##__RESOURCE_ID__## as string + await this.resources.action('##__ACTION_COMMAND__##', `##__ACTION_PATH__##`, {##__ACTION_PAYLOAD__##}, options) +} \ No newline at end of file diff --git a/gen/templates/resource.tpl b/gen/templates/resource.tpl index 3d63b72..1627ccf 100644 --- a/gen/templates/resource.tpl +++ b/gen/templates/resource.tpl @@ -38,3 +38,4 @@ class ##__RESOURCE_CLASS__## extends ##__RESOURCE_MODEL_TYPE__##<##__MODEL_RESOU export default ##__RESOURCE_CLASS__## export type { ##__EXPORT_RESOURCE_TYPES__##, ##__MODEL_RESOURCE_INTERFACE__##Type } +##__EXPORT_RESOURCE_TYPES_DEF__## \ No newline at end of file diff --git a/package.json b/package.json index df81753..f8d27b1 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "axios": "1.5.1" }, "devDependencies": { - "@babel/preset-env": "^7.23.5", + "@babel/preset-env": "^7.23.6", "@babel/preset-typescript": "^7.23.3", "@commercelayer/eslint-config-ts": "1.1.0", "@commercelayer/js-auth": "^4.2.0", @@ -54,8 +54,8 @@ "jsonapi-typescript": "^0.1.3", "lodash": "^4.17.21", "minimize-js": "^1.4.0", - "semantic-release": "^22.0.10", - "ts-node": "^10.9.1", + "semantic-release": "^22.0.12", + "ts-node": "^10.9.2", "typescript": "^5.3.3" }, "repository": "github:commercelayer/provisioning-sdk", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b86a2f3..9b0e985 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,11 +14,11 @@ dependencies: devDependencies: '@babel/preset-env': - specifier: ^7.23.5 - version: 7.23.5(@babel/core@7.23.5) + specifier: ^7.23.6 + version: 7.23.6(@babel/core@7.23.6) '@babel/preset-typescript': specifier: ^7.23.3 - version: 7.23.3(@babel/core@7.23.5) + version: 7.23.3(@babel/core@7.23.6) '@commercelayer/eslint-config-ts': specifier: 1.1.0 version: 1.1.0(eslint@8.55.0)(typescript@5.3.3) @@ -27,10 +27,10 @@ devDependencies: version: 4.2.0 '@semantic-release/changelog': specifier: ^6.0.3 - version: 6.0.3(semantic-release@22.0.10) + version: 6.0.3(semantic-release@22.0.12) '@semantic-release/git': specifier: ^10.0.1 - version: 10.0.1(semantic-release@22.0.10) + version: 10.0.1(semantic-release@22.0.12) '@types/debug': specifier: ^4.1.12 version: 4.1.12 @@ -54,7 +54,7 @@ devDependencies: version: 1.0.1 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.10.4)(ts-node@10.9.1) + version: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2) json-typescript: specifier: ^1.1.2 version: 1.1.2 @@ -68,11 +68,11 @@ devDependencies: specifier: ^1.4.0 version: 1.4.0 semantic-release: - specifier: ^22.0.10 - version: 22.0.10(typescript@5.3.3) + specifier: ^22.0.12 + version: 22.0.12(typescript@5.3.3) ts-node: - specifier: ^10.9.1 - version: 10.9.1(@types/node@20.10.4)(typescript@5.3.3) + specifier: ^10.9.2 + version: 10.9.2(@types/node@20.10.4)(typescript@5.3.3) typescript: specifier: ^5.3.3 version: 5.3.3 @@ -105,20 +105,20 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/core@7.23.5: - resolution: {integrity: sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g==} + /@babel/core@7.23.6: + resolution: {integrity: sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.1 '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.5 - '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) - '@babel/helpers': 7.23.5 - '@babel/parser': 7.23.5 + '@babel/generator': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) + '@babel/helpers': 7.23.6 + '@babel/parser': 7.23.6 '@babel/template': 7.22.15 - '@babel/traverse': 7.23.5 - '@babel/types': 7.23.5 + '@babel/traverse': 7.23.6 + '@babel/types': 7.23.6 convert-source-map: 2.0.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -128,11 +128,11 @@ packages: - supports-color dev: true - /@babel/generator@7.23.5: - resolution: {integrity: sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==} + /@babel/generator@7.23.6: + resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.5 + '@babel/types': 7.23.6 '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.20 jsesc: 2.5.2 @@ -142,18 +142,18 @@ packages: resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.5 + '@babel/types': 7.23.6 dev: true /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.5 + '@babel/types': 7.23.6 dev: true - /@babel/helper-compilation-targets@7.22.15: - resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} + /@babel/helper-compilation-targets@7.23.6: + resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/compat-data': 7.23.5 @@ -163,43 +163,43 @@ packages: semver: 6.3.1 dev: true - /@babel/helper-create-class-features-plugin@7.23.5(@babel/core@7.23.5): - resolution: {integrity: sha512-QELlRWxSpgdwdJzSJn4WAhKC+hvw/AtHbbrIoncKHkhKKR/luAlKkgBDcri1EzWAo8f8VvYVryEHN4tax/V67A==} + /@babel/helper-create-class-features-plugin@7.23.6(@babel/core@7.23.6): + resolution: {integrity: sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.5) + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.6) '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 semver: 6.3.1 dev: true - /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.5): + /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.6): resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-annotate-as-pure': 7.22.5 regexpu-core: 5.3.2 semver: 6.3.1 dev: true - /@babel/helper-define-polyfill-provider@0.4.3(@babel/core@7.23.5): - resolution: {integrity: sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==} + /@babel/helper-define-polyfill-provider@0.4.4(@babel/core@7.23.6): + resolution: {integrity: sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.5 - '@babel/helper-compilation-targets': 7.22.15 + '@babel/core': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 debug: 4.3.4 lodash.debounce: 4.0.8 @@ -218,37 +218,37 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.22.15 - '@babel/types': 7.23.5 + '@babel/types': 7.23.6 dev: true /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.5 + '@babel/types': 7.23.6 dev: true /@babel/helper-member-expression-to-functions@7.23.0: resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.5 + '@babel/types': 7.23.6 dev: true /@babel/helper-module-imports@7.22.15: resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.5 + '@babel/types': 7.23.6 dev: true - /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.5): + /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-module-imports': 7.22.15 '@babel/helper-simple-access': 7.22.5 @@ -260,7 +260,7 @@ packages: resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.5 + '@babel/types': 7.23.6 dev: true /@babel/helper-plugin-utils@7.22.5: @@ -268,25 +268,25 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.5): + /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.6): resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-wrap-function': 7.22.20 dev: true - /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.5): + /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.6): resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 @@ -296,21 +296,21 @@ packages: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.5 + '@babel/types': 7.23.6 dev: true /@babel/helper-skip-transparent-expression-wrappers@7.22.5: resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.5 + '@babel/types': 7.23.6 dev: true /@babel/helper-split-export-declaration@7.22.6: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.5 + '@babel/types': 7.23.6 dev: true /@babel/helper-string-parser@7.23.4: @@ -334,16 +334,16 @@ packages: dependencies: '@babel/helper-function-name': 7.23.0 '@babel/template': 7.22.15 - '@babel/types': 7.23.5 + '@babel/types': 7.23.6 dev: true - /@babel/helpers@7.23.5: - resolution: {integrity: sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg==} + /@babel/helpers@7.23.6: + resolution: {integrity: sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.22.15 - '@babel/traverse': 7.23.5 - '@babel/types': 7.23.5 + '@babel/traverse': 7.23.6 + '@babel/types': 7.23.6 transitivePeerDependencies: - supports-color dev: true @@ -357,921 +357,922 @@ packages: js-tokens: 4.0.0 dev: true - /@babel/parser@7.23.5: - resolution: {integrity: sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==} + /@babel/parser@7.23.6: + resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.23.5 + '@babel/types': 7.23.6 dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.5): + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.5): + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.5) + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.6) dev: true - /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.3(@babel/core@7.23.5): + /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.5): + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.6): resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 dev: true - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.5): + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.6): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.5): + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.6): resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.5): + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.6): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.5): + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.6): resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.5): + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.6): resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.5): + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.6): resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.5): + /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.5): + /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.5): + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.6): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.5): + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.6): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.5): + /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.5): + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.6): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.5): + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.6): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.5): + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.6): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.5): + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.6): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.5): + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.6): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.5): + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.6): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.5): + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.6): resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.5): + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.6): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.5): + /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.5): + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.6): resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) + '@babel/core': 7.23.6 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-async-generator-functions@7.23.4(@babel/core@7.23.5): + /@babel/plugin-transform-async-generator-functions@7.23.4(@babel/core@7.23.6): resolution: {integrity: sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.5) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.5) + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.6) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.6) dev: true - /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-module-imports': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.5) + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.6) dev: true - /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.23.5): + /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.23.6): resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 - '@babel/helper-create-class-features-plugin': 7.23.5(@babel/core@7.23.5) + '@babel/core': 7.23.6 + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.23.5): + /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.23.6): resolution: {integrity: sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: - '@babel/core': 7.23.5 - '@babel/helper-create-class-features-plugin': 7.23.5(@babel/core@7.23.5) + '@babel/core': 7.23.6 + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.5) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.6) dev: true - /@babel/plugin-transform-classes@7.23.5(@babel/core@7.23.5): + /@babel/plugin-transform-classes@7.23.5(@babel/core@7.23.6): resolution: {integrity: sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.5) + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.6) '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 dev: true - /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 '@babel/template': 7.22.15 dev: true - /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) + '@babel/core': 7.23.6 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.23.5): + /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.23.6): resolution: {integrity: sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.6) dev: true - /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.23.5): + /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.23.6): resolution: {integrity: sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.6) dev: true - /@babel/plugin-transform-for-of@7.23.3(@babel/core@7.23.5): - resolution: {integrity: sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw==} + /@babel/plugin-transform-for-of@7.23.6(@babel/core@7.23.6): + resolution: {integrity: sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: true - /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 - '@babel/helper-compilation-targets': 7.22.15 + '@babel/core': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-function-name': 7.23.0 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.23.5): + /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.23.6): resolution: {integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.6) dev: true - /@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.23.5): + /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.23.6): resolution: {integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.5) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.6) dev: true - /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) + '@babel/core': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) + '@babel/core': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-simple-access': 7.22.5 dev: true - /@babel/plugin-transform-modules-systemjs@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-modules-systemjs@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-identifier': 7.22.20 dev: true - /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) + '@babel/core': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.5): + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.6): resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) + '@babel/core': 7.23.6 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.23.5): + /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.23.6): resolution: {integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) dev: true - /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.23.5): + /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.23.6): resolution: {integrity: sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.5) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) dev: true - /@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.23.5): + /@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.23.6): resolution: {integrity: sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.5 - '@babel/helper-compilation-targets': 7.22.15 + '@babel/core': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.6) dev: true - /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.5) + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.6) dev: true - /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.23.5): + /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.23.6): resolution: {integrity: sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.6) dev: true - /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.23.5): + /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.23.6): resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.5) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) dev: true - /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 - '@babel/helper-create-class-features-plugin': 7.23.5(@babel/core@7.23.5) + '@babel/core': 7.23.6 + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.23.5): + /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.23.6): resolution: {integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.23.5(@babel/core@7.23.5) + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.5) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.6) dev: true - /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 regenerator-transform: 0.15.2 dev: true - /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: true - /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-typescript@7.23.5(@babel/core@7.23.5): - resolution: {integrity: sha512-2fMkXEJkrmwgu2Bsv1Saxgj30IXZdJ+84lQcKKI7sm719oXs0BBw2ZENKdJdR1PjWndgLCEBNXJOri0fk7RYQA==} + /@babel/plugin-transform-typescript@7.23.6(@babel/core@7.23.6): + resolution: {integrity: sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.23.5(@babel/core@7.23.5) + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.5) + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.6) dev: true - /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) + '@babel/core': 7.23.6 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) + '@babel/core': 7.23.6 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.5): + /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) + '@babel/core': 7.23.6 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/preset-env@7.23.5(@babel/core@7.23.5): - resolution: {integrity: sha512-0d/uxVD6tFGWXGDSfyMD1p2otoaKmu6+GD+NfAx0tMaH+dxORnp7T9TaVQ6mKyya7iBtCIVxHjWT7MuzzM9z+A==} + /@babel/preset-env@7.23.6(@babel/core@7.23.6): + resolution: {integrity: sha512-2XPn/BqKkZCpzYhUUNZ1ssXw7DcXfKQEjv/uXZUXgaebCMYmkEsfZ2yY+vv+xtXv50WmL5SGhyB6/xsWxIvvOQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.5 - '@babel/helper-compilation-targets': 7.22.15 + '@babel/core': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.5) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.5) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.5) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.5) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.5) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.5) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.5) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.5) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.5) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.5) - '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-async-generator-functions': 7.23.4(@babel/core@7.23.5) - '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.5) - '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.23.5) - '@babel/plugin-transform-classes': 7.23.5(@babel/core@7.23.5) - '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.23.5) - '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.23.5) - '@babel/plugin-transform-for-of': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.23.5) - '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.23.5) - '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-modules-systemjs': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.5) - '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.5) - '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.23.5) - '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.23.5) - '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.23.5) - '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.5) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.5) - '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.5) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.5) - babel-plugin-polyfill-corejs2: 0.4.6(@babel/core@7.23.5) - babel-plugin-polyfill-corejs3: 0.8.6(@babel/core@7.23.5) - babel-plugin-polyfill-regenerator: 0.5.3(@babel/core@7.23.5) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.6) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.6) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.6) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.6) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.6) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.6) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.6) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.6) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.6) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-async-generator-functions': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-classes': 7.23.5(@babel/core@7.23.6) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.23.6) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-modules-systemjs': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.6) + '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.6) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.6) + babel-plugin-polyfill-corejs2: 0.4.7(@babel/core@7.23.6) + babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.23.6) + babel-plugin-polyfill-regenerator: 0.5.4(@babel/core@7.23.6) core-js-compat: 3.34.0 semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true - /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.5): + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.6): resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 - '@babel/types': 7.23.5 + '@babel/types': 7.23.6 esutils: 2.0.3 dev: true - /@babel/preset-typescript@7.23.3(@babel/core@7.23.5): + /@babel/preset-typescript@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-typescript': 7.23.5(@babel/core@7.23.5) + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.23.6) dev: true /@babel/regjsgen@0.8.0: resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} dev: true - /@babel/runtime@7.23.5: - resolution: {integrity: sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w==} + /@babel/runtime@7.23.6: + resolution: {integrity: sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.0 @@ -1282,30 +1283,30 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.23.5 - '@babel/parser': 7.23.5 - '@babel/types': 7.23.5 + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 dev: true - /@babel/traverse@7.23.5: - resolution: {integrity: sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==} + /@babel/traverse@7.23.6: + resolution: {integrity: sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.5 + '@babel/generator': 7.23.6 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.5 - '@babel/types': 7.23.5 + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color dev: true - /@babel/types@7.23.5: - resolution: {integrity: sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==} + /@babel/types@7.23.6: + resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.23.4 @@ -1330,16 +1331,16 @@ packages: eslint: '>=8.0' typescript: '>=5.0' dependencies: - '@typescript-eslint/eslint-plugin': 6.13.2(@typescript-eslint/parser@6.13.2)(eslint@8.55.0)(typescript@5.3.3) - '@typescript-eslint/parser': 6.13.2(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.14.0(eslint@8.55.0)(typescript@5.3.3) eslint: 8.55.0 eslint-config-prettier: 9.1.0(eslint@8.55.0) - eslint-config-standard-with-typescript: 39.1.1(@typescript-eslint/eslint-plugin@6.13.2)(eslint-plugin-import@2.29.0)(eslint-plugin-n@16.3.1)(eslint-plugin-promise@6.1.1)(eslint@8.55.0)(typescript@5.3.3) - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.13.2)(eslint@8.55.0) - eslint-plugin-n: 16.3.1(eslint@8.55.0) - eslint-plugin-prettier: 5.0.1(eslint-config-prettier@9.1.0)(eslint@8.55.0)(prettier@3.1.0) + eslint-config-standard-with-typescript: 39.1.1(@typescript-eslint/eslint-plugin@6.14.0)(eslint-plugin-import@2.29.0)(eslint-plugin-n@16.4.0)(eslint-plugin-promise@6.1.1)(eslint@8.55.0)(typescript@5.3.3) + eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0) + eslint-plugin-n: 16.4.0(eslint@8.55.0) + eslint-plugin-prettier: 5.0.1(eslint-config-prettier@9.1.0)(eslint@8.55.0)(prettier@3.1.1) eslint-plugin-promise: 6.1.1(eslint@8.55.0) - prettier: 3.1.0 + prettier: 3.1.1 typescript: 5.3.3 transitivePeerDependencies: - '@types/eslint' @@ -1580,7 +1581,7 @@ packages: ajv: 6.12.6 debug: 4.3.4 espree: 9.6.1 - globals: 13.23.0 + globals: 13.24.0 ignore: 5.3.0 import-fresh: 3.3.0 js-yaml: 4.1.0 @@ -1655,7 +1656,7 @@ packages: slash: 3.0.0 dev: true - /@jest/core@29.7.0(ts-node@10.9.1): + /@jest/core@29.7.0(ts-node@10.9.2): resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -1676,7 +1677,7 @@ packages: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.10.4)(ts-node@10.9.1) + jest-config: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -1826,7 +1827,7 @@ packages: resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.20 babel-plugin-istanbul: 6.1.1 @@ -2052,7 +2053,7 @@ packages: config-chain: 1.1.13 dev: true - /@semantic-release/changelog@6.0.3(semantic-release@22.0.10): + /@semantic-release/changelog@6.0.3(semantic-release@22.0.12): resolution: {integrity: sha512-dZuR5qByyfe3Y03TpmCvAxCyTnp7r5XwtHRf/8vD9EAn4ZWbavUX8adMtXYzE86EVh0gyLA7lm5yW4IV30XUag==} engines: {node: '>=14.17'} peerDependencies: @@ -2062,10 +2063,10 @@ packages: aggregate-error: 3.1.0 fs-extra: 11.2.0 lodash: 4.17.21 - semantic-release: 22.0.10(typescript@5.3.3) + semantic-release: 22.0.12(typescript@5.3.3) dev: true - /@semantic-release/commit-analyzer@11.1.0(semantic-release@22.0.10): + /@semantic-release/commit-analyzer@11.1.0(semantic-release@22.0.12): resolution: {integrity: sha512-cXNTbv3nXR2hlzHjAMgbuiQVtvWHTlwwISt60B+4NZv01y/QRY7p2HcJm8Eh2StzcTJoNnflvKjHH/cjFS7d5g==} engines: {node: ^18.17 || >=20.6.1} peerDependencies: @@ -2078,7 +2079,7 @@ packages: import-from-esm: 1.3.3 lodash-es: 4.17.21 micromatch: 4.0.5 - semantic-release: 22.0.10(typescript@5.3.3) + semantic-release: 22.0.12(typescript@5.3.3) transitivePeerDependencies: - supports-color dev: true @@ -2093,7 +2094,7 @@ packages: engines: {node: '>=18'} dev: true - /@semantic-release/git@10.0.1(semantic-release@22.0.10): + /@semantic-release/git@10.0.1(semantic-release@22.0.12): resolution: {integrity: sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w==} engines: {node: '>=14.17'} peerDependencies: @@ -2107,13 +2108,13 @@ packages: lodash: 4.17.21 micromatch: 4.0.5 p-reduce: 2.1.0 - semantic-release: 22.0.10(typescript@5.3.3) + semantic-release: 22.0.12(typescript@5.3.3) transitivePeerDependencies: - supports-color dev: true - /@semantic-release/github@9.2.4(semantic-release@22.0.10): - resolution: {integrity: sha512-VMzqiuSLhHc0/1Q8M/FmWnOaclh5aXL2pQWceldWBYSWLNzQu8GOR4bkGl57ciUtvm+MCMi4FaStZxSDJGEfUg==} + /@semantic-release/github@9.2.5(semantic-release@22.0.12): + resolution: {integrity: sha512-XWumFEOHiWllekymZjeVgkQCJ4YnD8020ZspAHYIIBNX8O4d/1ldeU5iNXu6NGkKlOCokyXh13KwVP0UEMm5kw==} engines: {node: '>=18'} peerDependencies: semantic-release: '>=20.1.0' @@ -2133,14 +2134,14 @@ packages: lodash-es: 4.17.21 mime: 4.0.0 p-filter: 3.0.0 - semantic-release: 22.0.10(typescript@5.3.3) + semantic-release: 22.0.12(typescript@5.3.3) url-join: 5.0.0 transitivePeerDependencies: - supports-color dev: true - /@semantic-release/npm@11.0.1(semantic-release@22.0.10): - resolution: {integrity: sha512-nFcT0pgVwpXsPkzjqP3ObH+pILeN1AbYscCDuYwgZEPZukL+RsGhrtdT4HA1Gjb/y1bVbE90JNtMIcgRi5z/Fg==} + /@semantic-release/npm@11.0.2(semantic-release@22.0.12): + resolution: {integrity: sha512-owtf3RjyPvRE63iUKZ5/xO4uqjRpVQDUB9+nnXj0xwfIeM9pRl+cG+zGDzdftR4m3f2s4Wyf3SexW+kF5DFtWA==} engines: {node: ^18.17 || >=20} peerDependencies: semantic-release: '>=20.1.0' @@ -2156,12 +2157,12 @@ packages: rc: 1.2.8 read-pkg: 9.0.1 registry-auth-token: 5.0.2 - semantic-release: 22.0.10(typescript@5.3.3) + semantic-release: 22.0.12(typescript@5.3.3) semver: 7.5.4 tempy: 3.1.0 dev: true - /@semantic-release/release-notes-generator@12.1.0(semantic-release@22.0.10): + /@semantic-release/release-notes-generator@12.1.0(semantic-release@22.0.12): resolution: {integrity: sha512-g6M9AjUKAZUZnxaJZnouNBeDNTCUrJ5Ltj+VJ60gJeDaRRahcHsry9HW8yKrnKkKNkx5lbWiEP1FPMqVNQz8Kg==} engines: {node: ^18.17 || >=20.6.1} peerDependencies: @@ -2177,7 +2178,7 @@ packages: into-stream: 7.0.0 lodash-es: 4.17.21 read-pkg-up: 11.0.0 - semantic-release: 22.0.10(typescript@5.3.3) + semantic-release: 22.0.12(typescript@5.3.3) transitivePeerDependencies: - supports-color dev: true @@ -2227,8 +2228,8 @@ packages: /@types/babel__core@7.20.5: resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: - '@babel/parser': 7.23.5 - '@babel/types': 7.23.5 + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 '@types/babel__generator': 7.6.7 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.4 @@ -2237,20 +2238,20 @@ packages: /@types/babel__generator@7.6.7: resolution: {integrity: sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==} dependencies: - '@babel/types': 7.23.5 + '@babel/types': 7.23.6 dev: true /@types/babel__template@7.4.4: resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} dependencies: - '@babel/parser': 7.23.5 - '@babel/types': 7.23.5 + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 dev: true /@types/babel__traverse@7.20.4: resolution: {integrity: sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==} dependencies: - '@babel/types': 7.23.5 + '@babel/types': 7.23.6 dev: true /@types/debug@4.1.12: @@ -2332,8 +2333,8 @@ packages: '@types/yargs-parser': 21.0.3 dev: true - /@typescript-eslint/eslint-plugin@6.13.2(@typescript-eslint/parser@6.13.2)(eslint@8.55.0)(typescript@5.3.3): - resolution: {integrity: sha512-3+9OGAWHhk4O1LlcwLBONbdXsAhLjyCFogJY/cWy2lxdVJ2JrcTF2pTGMaLl2AE7U1l31n8Py4a8bx5DLf/0dQ==} + /@typescript-eslint/eslint-plugin@6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0)(typescript@5.3.3): + resolution: {integrity: sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -2344,11 +2345,11 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.13.2(eslint@8.55.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 6.13.2 - '@typescript-eslint/type-utils': 6.13.2(eslint@8.55.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.13.2(eslint@8.55.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.13.2 + '@typescript-eslint/parser': 6.14.0(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.14.0 + '@typescript-eslint/type-utils': 6.14.0(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/utils': 6.14.0(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.14.0 debug: 4.3.4 eslint: 8.55.0 graphemer: 1.4.0 @@ -2361,8 +2362,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@6.13.2(eslint@8.55.0)(typescript@5.3.3): - resolution: {integrity: sha512-MUkcC+7Wt/QOGeVlM8aGGJZy1XV5YKjTpq9jK6r6/iLsGXhBVaGP5N0UYvFsu9BFlSpwY9kMretzdBH01rkRXg==} + /@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3): + resolution: {integrity: sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2371,10 +2372,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.13.2 - '@typescript-eslint/types': 6.13.2 - '@typescript-eslint/typescript-estree': 6.13.2(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.13.2 + '@typescript-eslint/scope-manager': 6.14.0 + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.14.0 debug: 4.3.4 eslint: 8.55.0 typescript: 5.3.3 @@ -2382,16 +2383,16 @@ packages: - supports-color dev: true - /@typescript-eslint/scope-manager@6.13.2: - resolution: {integrity: sha512-CXQA0xo7z6x13FeDYCgBkjWzNqzBn8RXaE3QVQVIUm74fWJLkJkaHmHdKStrxQllGh6Q4eUGyNpMe0b1hMkXFA==} + /@typescript-eslint/scope-manager@6.14.0: + resolution: {integrity: sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.13.2 - '@typescript-eslint/visitor-keys': 6.13.2 + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/visitor-keys': 6.14.0 dev: true - /@typescript-eslint/type-utils@6.13.2(eslint@8.55.0)(typescript@5.3.3): - resolution: {integrity: sha512-Qr6ssS1GFongzH2qfnWKkAQmMUyZSyOr0W54nZNU1MDfo+U4Mv3XveeLZzadc/yq8iYhQZHYT+eoXJqnACM1tw==} + /@typescript-eslint/type-utils@6.14.0(eslint@8.55.0)(typescript@5.3.3): + resolution: {integrity: sha512-x6OC9Q7HfYKqjnuNu5a7kffIYs3No30isapRBJl1iCHLitD8O0lFbRcVGiOcuyN837fqXzPZ1NS10maQzZMKqw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2400,8 +2401,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.13.2(typescript@5.3.3) - '@typescript-eslint/utils': 6.13.2(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) + '@typescript-eslint/utils': 6.14.0(eslint@8.55.0)(typescript@5.3.3) debug: 4.3.4 eslint: 8.55.0 ts-api-utils: 1.0.3(typescript@5.3.3) @@ -2410,13 +2411,13 @@ packages: - supports-color dev: true - /@typescript-eslint/types@6.13.2: - resolution: {integrity: sha512-7sxbQ+EMRubQc3wTfTsycgYpSujyVbI1xw+3UMRUcrhSy+pN09y/lWzeKDbvhoqcRbHdc+APLs/PWYi/cisLPg==} + /@typescript-eslint/types@6.14.0: + resolution: {integrity: sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==} engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@6.13.2(typescript@5.3.3): - resolution: {integrity: sha512-SuD8YLQv6WHnOEtKv8D6HZUzOub855cfPnPMKvdM/Bh1plv1f7Q/0iFUDLKKlxHcEstQnaUU4QZskgQq74t+3w==} + /@typescript-eslint/typescript-estree@6.14.0(typescript@5.3.3): + resolution: {integrity: sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -2424,8 +2425,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.13.2 - '@typescript-eslint/visitor-keys': 6.13.2 + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/visitor-keys': 6.14.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -2436,8 +2437,8 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@6.13.2(eslint@8.55.0)(typescript@5.3.3): - resolution: {integrity: sha512-b9Ptq4eAZUym4idijCRzl61oPCwwREcfDI8xGk751Vhzig5fFZR9CyzDz4Sp/nxSLBYxUPyh4QdIDqWykFhNmQ==} + /@typescript-eslint/utils@6.14.0(eslint@8.55.0)(typescript@5.3.3): + resolution: {integrity: sha512-XwRTnbvRr7Ey9a1NT6jqdKX8y/atWG+8fAIu3z73HSP8h06i3r/ClMhmaF/RGWGW1tHJEwij1uEg2GbEmPYvYg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2445,9 +2446,9 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 6.13.2 - '@typescript-eslint/types': 6.13.2 - '@typescript-eslint/typescript-estree': 6.13.2(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.14.0 + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) eslint: 8.55.0 semver: 7.5.4 transitivePeerDependencies: @@ -2455,11 +2456,11 @@ packages: - typescript dev: true - /@typescript-eslint/visitor-keys@6.13.2: - resolution: {integrity: sha512-OGznFs0eAQXJsp+xSd6k/O1UbFi/K/L7WjqeRoFE7vadjAF9y0uppXhYNQNEqygjou782maGClOoZwPqF0Drlw==} + /@typescript-eslint/visitor-keys@6.14.0: + resolution: {integrity: sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.13.2 + '@typescript-eslint/types': 6.14.0 eslint-visitor-keys: 3.4.3 dev: true @@ -2699,17 +2700,17 @@ packages: - debug dev: false - /babel-jest@29.7.0(@babel/core@7.23.5): + /babel-jest@29.7.0(@babel/core@7.23.6): resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@jest/transform': 29.7.0 '@types/babel__core': 7.20.5 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.23.5) + babel-preset-jest: 29.6.3(@babel/core@7.23.6) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -2735,76 +2736,76 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/template': 7.22.15 - '@babel/types': 7.23.5 + '@babel/types': 7.23.6 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.4 dev: true - /babel-plugin-polyfill-corejs2@0.4.6(@babel/core@7.23.5): - resolution: {integrity: sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==} + /babel-plugin-polyfill-corejs2@0.4.7(@babel/core@7.23.6): + resolution: {integrity: sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.5 - '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.5) + '@babel/core': 7.23.6 + '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.6) semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-corejs3@0.8.6(@babel/core@7.23.5): - resolution: {integrity: sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==} + /babel-plugin-polyfill-corejs3@0.8.7(@babel/core@7.23.6): + resolution: {integrity: sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.5 - '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.5) + '@babel/core': 7.23.6 + '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.6) core-js-compat: 3.34.0 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-regenerator@0.5.3(@babel/core@7.23.5): - resolution: {integrity: sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==} + /babel-plugin-polyfill-regenerator@0.5.4(@babel/core@7.23.6): + resolution: {integrity: sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.5 - '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.5) + '@babel/core': 7.23.6 + '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.6) transitivePeerDependencies: - supports-color dev: true - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.5): + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.6): resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.5 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.5) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.5) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.5) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.5) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.5) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.5) - dev: true - - /babel-preset-jest@29.6.3(@babel/core@7.23.5): + '@babel/core': 7.23.6 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.6) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.6) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.6) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.6) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.6) + dev: true + + /babel-preset-jest@29.6.3(@babel/core@7.23.6): resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.5) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.6) dev: true /balanced-match@1.0.2: @@ -2856,8 +2857,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001566 - electron-to-chromium: 1.4.607 + caniuse-lite: 1.0.30001570 + electron-to-chromium: 1.4.611 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.22.2) dev: true @@ -2913,8 +2914,8 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite@1.0.30001566: - resolution: {integrity: sha512-ggIhCsTxmITBAMmK8yZjEhCO5/47jKXPu6Dha/wuCS4JePVL+3uiDEBuhu2aIoT+bqTOR8L76Ip1ARL9xYsEJA==} + /caniuse-lite@1.0.30001570: + resolution: {integrity: sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==} dev: true /cardinal@2.1.1: @@ -3124,7 +3125,7 @@ packages: typescript: 5.3.3 dev: true - /create-jest@29.7.0(@types/node@20.10.4)(ts-node@10.9.1): + /create-jest@29.7.0(@types/node@20.10.4)(ts-node@10.9.2): resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -3133,7 +3134,7 @@ packages: chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.10.4)(ts-node@10.9.1) + jest-config: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -3321,8 +3322,8 @@ packages: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true - /electron-to-chromium@1.4.607: - resolution: {integrity: sha512-YUlnPwE6eYxzwBnFmawA8LiLRfm70R2aJRIUv0n03uHt/cUzzYACOogmvk8M2+hVzt/kB80KJXx7d5f5JofPvQ==} + /electron-to-chromium@1.4.611: + resolution: {integrity: sha512-ZtRpDxrjHapOwxtv+nuth5ByB8clyn8crVynmRNGO3wG3LOp8RTcyZDqwaI6Ng6y8FCK2hVZmJoqwCskKbNMaw==} dev: true /emittery@0.13.1: @@ -3498,7 +3499,7 @@ packages: eslint: 8.55.0 dev: true - /eslint-config-standard-with-typescript@39.1.1(@typescript-eslint/eslint-plugin@6.13.2)(eslint-plugin-import@2.29.0)(eslint-plugin-n@16.3.1)(eslint-plugin-promise@6.1.1)(eslint@8.55.0)(typescript@5.3.3): + /eslint-config-standard-with-typescript@39.1.1(@typescript-eslint/eslint-plugin@6.14.0)(eslint-plugin-import@2.29.0)(eslint-plugin-n@16.4.0)(eslint-plugin-promise@6.1.1)(eslint@8.55.0)(typescript@5.3.3): resolution: {integrity: sha512-t6B5Ep8E4I18uuoYeYxINyqcXb2UbC0SOOTxRtBSt2JUs+EzeXbfe2oaiPs71AIdnoWhXDO2fYOHz8df3kV84A==} peerDependencies: '@typescript-eslint/eslint-plugin': ^6.4.0 @@ -3508,19 +3509,19 @@ packages: eslint-plugin-promise: ^6.0.0 typescript: '*' dependencies: - '@typescript-eslint/eslint-plugin': 6.13.2(@typescript-eslint/parser@6.13.2)(eslint@8.55.0)(typescript@5.3.3) - '@typescript-eslint/parser': 6.13.2(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.14.0(eslint@8.55.0)(typescript@5.3.3) eslint: 8.55.0 - eslint-config-standard: 17.1.0(eslint-plugin-import@2.29.0)(eslint-plugin-n@16.3.1)(eslint-plugin-promise@6.1.1)(eslint@8.55.0) - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.13.2)(eslint@8.55.0) - eslint-plugin-n: 16.3.1(eslint@8.55.0) + eslint-config-standard: 17.1.0(eslint-plugin-import@2.29.0)(eslint-plugin-n@16.4.0)(eslint-plugin-promise@6.1.1)(eslint@8.55.0) + eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0) + eslint-plugin-n: 16.4.0(eslint@8.55.0) eslint-plugin-promise: 6.1.1(eslint@8.55.0) typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /eslint-config-standard@17.1.0(eslint-plugin-import@2.29.0)(eslint-plugin-n@16.3.1)(eslint-plugin-promise@6.1.1)(eslint@8.55.0): + /eslint-config-standard@17.1.0(eslint-plugin-import@2.29.0)(eslint-plugin-n@16.4.0)(eslint-plugin-promise@6.1.1)(eslint@8.55.0): resolution: {integrity: sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==} engines: {node: '>=12.0.0'} peerDependencies: @@ -3530,8 +3531,8 @@ packages: eslint-plugin-promise: ^6.0.0 dependencies: eslint: 8.55.0 - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.13.2)(eslint@8.55.0) - eslint-plugin-n: 16.3.1(eslint@8.55.0) + eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0) + eslint-plugin-n: 16.4.0(eslint@8.55.0) eslint-plugin-promise: 6.1.1(eslint@8.55.0) dev: true @@ -3545,7 +3546,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.13.2)(eslint-import-resolver-node@0.3.9)(eslint@8.55.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint@8.55.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -3566,7 +3567,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.13.2(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.14.0(eslint@8.55.0)(typescript@5.3.3) debug: 3.2.7 eslint: 8.55.0 eslint-import-resolver-node: 0.3.9 @@ -3586,7 +3587,7 @@ packages: eslint-compat-utils: 0.1.2(eslint@8.55.0) dev: true - /eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.13.2)(eslint@8.55.0): + /eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0): resolution: {integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==} engines: {node: '>=4'} peerDependencies: @@ -3596,7 +3597,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.13.2(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.14.0(eslint@8.55.0)(typescript@5.3.3) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -3605,7 +3606,7 @@ packages: doctrine: 2.1.0 eslint: 8.55.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.13.2)(eslint-import-resolver-node@0.3.9)(eslint@8.55.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint@8.55.0) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -3621,8 +3622,8 @@ packages: - supports-color dev: true - /eslint-plugin-n@16.3.1(eslint@8.55.0): - resolution: {integrity: sha512-w46eDIkxQ2FaTHcey7G40eD+FhTXOdKudDXPUO2n9WNcslze/i/HT2qJ3GXjHngYSGDISIgPNhwGtgoix4zeOw==} + /eslint-plugin-n@16.4.0(eslint@8.55.0): + resolution: {integrity: sha512-IkqJjGoWYGskVaJA7WQuN8PINIxc0N/Pk/jLeYT4ees6Fo5lAhpwGsYek6gS9tCUxgDC4zJ+OwY2bY/6/9OMKQ==} engines: {node: '>=16.0.0'} peerDependencies: eslint: '>=7.0.0' @@ -3640,7 +3641,7 @@ packages: semver: 7.5.4 dev: true - /eslint-plugin-prettier@5.0.1(eslint-config-prettier@9.1.0)(eslint@8.55.0)(prettier@3.1.0): + /eslint-plugin-prettier@5.0.1(eslint-config-prettier@9.1.0)(eslint@8.55.0)(prettier@3.1.1): resolution: {integrity: sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -3656,7 +3657,7 @@ packages: dependencies: eslint: 8.55.0 eslint-config-prettier: 9.1.0(eslint@8.55.0) - prettier: 3.1.0 + prettier: 3.1.1 prettier-linter-helpers: 1.0.0 synckit: 0.8.6 dev: true @@ -3711,7 +3712,7 @@ packages: file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.23.0 + globals: 13.24.0 graphemer: 1.4.0 ignore: 5.3.0 imurmurhash: 0.1.4 @@ -4130,8 +4131,8 @@ packages: engines: {node: '>=4'} dev: true - /globals@13.23.0: - resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} + /globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 @@ -4608,8 +4609,8 @@ packages: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.23.5 - '@babel/parser': 7.23.5 + '@babel/core': 7.23.6 + '@babel/parser': 7.23.6 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -4621,8 +4622,8 @@ packages: resolution: {integrity: sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==} engines: {node: '>=10'} dependencies: - '@babel/core': 7.23.5 - '@babel/parser': 7.23.5 + '@babel/core': 7.23.6 + '@babel/parser': 7.23.6 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.5.4 @@ -4710,7 +4711,7 @@ packages: - supports-color dev: true - /jest-cli@29.7.0(@types/node@20.10.4)(ts-node@10.9.1): + /jest-cli@29.7.0(@types/node@20.10.4)(ts-node@10.9.2): resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -4720,14 +4721,14 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.7.0(ts-node@10.9.1) + '@jest/core': 29.7.0(ts-node@10.9.2) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.10.4)(ts-node@10.9.1) + create-jest: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.10.4)(ts-node@10.9.1) + jest-config: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -4738,7 +4739,7 @@ packages: - ts-node dev: true - /jest-config@29.7.0(@types/node@20.10.4)(ts-node@10.9.1): + /jest-config@29.7.0(@types/node@20.10.4)(ts-node@10.9.2): resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -4750,11 +4751,11 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.23.5 + '@babel/core': 7.23.6 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 '@types/node': 20.10.4 - babel-jest: 29.7.0(@babel/core@7.23.5) + babel-jest: 29.7.0(@babel/core@7.23.6) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 @@ -4773,7 +4774,7 @@ packages: pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@types/node@20.10.4)(typescript@5.3.3) + ts-node: 10.9.2(@types/node@20.10.4)(typescript@5.3.3) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -4990,15 +4991,15 @@ packages: resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.23.5 - '@babel/generator': 7.23.5 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.5) - '@babel/types': 7.23.5 + '@babel/core': 7.23.6 + '@babel/generator': 7.23.6 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.6) + '@babel/types': 7.23.6 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.5) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.6) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -5062,7 +5063,7 @@ packages: supports-color: 8.1.1 dev: true - /jest@29.7.0(@types/node@20.10.4)(ts-node@10.9.1): + /jest@29.7.0(@types/node@20.10.4)(ts-node@10.9.2): resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -5072,10 +5073,10 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.7.0(ts-node@10.9.1) + '@jest/core': 29.7.0(ts-node@10.9.2) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.10.4)(ts-node@10.9.1) + jest-cli: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -5304,11 +5305,11 @@ packages: tmpl: 1.0.5 dev: true - /marked-terminal@6.1.0(marked@9.1.6): - resolution: {integrity: sha512-QaCSF6NV82oo6K0szEnmc65ooDeW0T/Adcyf0fcW+Hto2GT1VADFg8dn1zaeHqzj65fqDH1hMNChGNRaC/lbkA==} + /marked-terminal@6.2.0(marked@9.1.6): + resolution: {integrity: sha512-ubWhwcBFHnXsjYNsu+Wndpg0zhY4CahSpPlA70PlO0rR9r2sZpkyU+rkCsOWH+KMEkx847UpALON+HWgxowFtw==} engines: {node: '>=16.0.0'} peerDependencies: - marked: '>=1 <11' + marked: '>=1 <12' dependencies: ansi-escapes: 6.2.0 cardinal: 2.1.1 @@ -5861,8 +5862,8 @@ packages: fast-diff: 1.3.0 dev: true - /prettier@3.1.0: - resolution: {integrity: sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==} + /prettier@3.1.1: + resolution: {integrity: sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==} engines: {node: '>=14'} hasBin: true dev: true @@ -5989,7 +5990,7 @@ packages: /regenerator-transform@0.15.2: resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} dependencies: - '@babel/runtime': 7.23.5 + '@babel/runtime': 7.23.6 dev: true /regexp.prototype.flags@1.5.1: @@ -6114,16 +6115,16 @@ packages: is-regex: 1.1.4 dev: true - /semantic-release@22.0.10(typescript@5.3.3): - resolution: {integrity: sha512-4ahPaOX+0UYpYlosjc/tfCzB/cqlnjN0/xSKGryEC4bOpuYSkoK+QHw7xDPmAuiMNBBvkFD+m3aVMENUr++CIg==} + /semantic-release@22.0.12(typescript@5.3.3): + resolution: {integrity: sha512-0mhiCR/4sZb00RVFJIUlMuiBkW3NMpVIW2Gse7noqEMoFGkvfPPAImEQbkBV8xga4KOPP4FdTRYuLLy32R1fPw==} engines: {node: ^18.17 || >=20.6.1} hasBin: true dependencies: - '@semantic-release/commit-analyzer': 11.1.0(semantic-release@22.0.10) + '@semantic-release/commit-analyzer': 11.1.0(semantic-release@22.0.12) '@semantic-release/error': 4.0.0 - '@semantic-release/github': 9.2.4(semantic-release@22.0.10) - '@semantic-release/npm': 11.0.1(semantic-release@22.0.10) - '@semantic-release/release-notes-generator': 12.1.0(semantic-release@22.0.10) + '@semantic-release/github': 9.2.5(semantic-release@22.0.12) + '@semantic-release/npm': 11.0.2(semantic-release@22.0.12) + '@semantic-release/release-notes-generator': 12.1.0(semantic-release@22.0.12) aggregate-error: 5.0.0 cosmiconfig: 8.3.6(typescript@5.3.3) debug: 4.3.4 @@ -6138,7 +6139,7 @@ packages: import-from-esm: 1.3.3 lodash-es: 4.17.21 marked: 9.1.6 - marked-terminal: 6.1.0(marked@9.1.6) + marked-terminal: 6.2.0(marked@9.1.6) micromatch: 4.0.5 p-each-series: 3.0.0 p-reduce: 3.0.0 @@ -6544,8 +6545,8 @@ packages: typescript: 5.3.3 dev: true - /ts-node@10.9.1(@types/node@20.10.4)(typescript@5.3.3): - resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + /ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3): + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: '@swc/core': '>=1.2.50' diff --git a/specs/resources/organizations.spec.ts b/specs/resources/organizations.spec.ts index 2cbef62..0e26b61 100644 --- a/specs/resources/organizations.spec.ts +++ b/specs/resources/organizations.spec.ts @@ -236,5 +236,26 @@ describe('Organizations resource', () => { }) /* relationship.permissions stop */ + + /* relationship.api_credentials start */ + it(resourceType + '.api_credentials', async () => { + + const id = TestData.id + const params = { fields: { api_credentials: CommonData.paramsFields } } + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType, id, currentAccessToken, 'api_credentials') + checkCommonParams(config, params) + return interceptRequest() + }) + + await clp[resourceType].api_credentials(id, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* relationship.api_credentials stop */ + }) diff --git a/src/api.ts b/src/api.ts index 149d1bf..5d70970 100644 --- a/src/api.ts +++ b/src/api.ts @@ -18,6 +18,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/resource.ts b/src/resource.ts index ba4230a..fb1698b 100644 --- a/src/resource.ts +++ b/src/resource.ts @@ -253,6 +253,18 @@ class ResourceAdapter { } + + async action(cmd: 'post' | 'patch', path: string, payload?: any, options?: ResourcesConfig): Promise { + + debug('action: %o %o, %O', cmd, path, options || {}) + + const queryParams = {} + if (options?.params) Object.assign(queryParams, options?.params) + + await this.#client.request(cmd, path, payload, { ...options, params: queryParams }) + + } + } diff --git a/src/resources/memberships.ts b/src/resources/memberships.ts index 7836ffa..514c0bd 100644 --- a/src/resources/memberships.ts +++ b/src/resources/memberships.ts @@ -67,6 +67,11 @@ class Memberships extends ApiResource { await this.resources.delete((typeof id === 'string')? { id, type: Memberships.TYPE } : id, options) } + async resend(membershipId: string | Membership, options?: ResourcesConfig): Promise { + const _membershipId = (membershipId as Membership).id || membershipId as string + await this.resources.action('post', `memberships/${_membershipId}/resend`, {}, options) + } + async organization(membershipId: string | Membership, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { const _membershipId = (membershipId as Membership).id || membershipId as string return this.resources.fetch({ type: 'organizations' }, `memberships/${_membershipId}/organization`, params, options) as unknown as Organization diff --git a/src/resources/organizations.ts b/src/resources/organizations.ts index 74e3b40..8b8f883 100644 --- a/src/resources/organizations.ts +++ b/src/resources/organizations.ts @@ -92,6 +92,11 @@ class Organizations extends ApiResource { return this.resources.update({ ...resource, type: Organizations.TYPE }, params, options) } + async transfer_ownership(organizationId: string | Organization, payload: TransferOwnershipDataType, options?: ResourcesConfig): Promise { + const _organizationId = (organizationId as Organization).id || organizationId as string + await this.resources.action('patch', `organizations/${_organizationId}/transfer_ownership`, { ...payload }, options) + } + async memberships(organizationId: string | Organization, params?: QueryParamsList, options?: ResourcesConfig): Promise> { const _organizationId = (organizationId as Organization).id || organizationId as string return this.resources.fetch({ type: 'memberships' }, `organizations/${_organizationId}/memberships`, params, options) as unknown as ListResponse @@ -107,6 +112,11 @@ class Organizations extends ApiResource { return this.resources.fetch({ type: 'permissions' }, `organizations/${_organizationId}/permissions`, params, options) as unknown as ListResponse } + async api_credentials(organizationId: string | Organization, params?: QueryParamsList, options?: ResourcesConfig): Promise> { + const _organizationId = (organizationId as Organization).id || organizationId as string + return this.resources.fetch({ type: 'api_credentials' }, `organizations/${_organizationId}/api_credentials`, params, options) as unknown as ListResponse + } + isOrganization(resource: any): resource is Organization { return resource.type && (resource.type === Organizations.TYPE) @@ -128,3 +138,4 @@ class Organizations extends ApiResource { export default Organizations export type { Organization, OrganizationCreate, OrganizationUpdate, OrganizationType } +export type TransferOwnershipDataType = { new_owner_email: string } diff --git a/test/spot.ts b/test/spot.ts index ecab29b..660f7c5 100644 --- a/test/spot.ts +++ b/test/spot.ts @@ -6,18 +6,18 @@ import getToken from './token' (async () => { - const organization = process.env.CL_SDK_ORGANIZATION || '' const auth = await getToken('user') const accessToken = auth ? auth.accessToken : '' - const cl = clProvisioning({ + const clp = clProvisioning({ accessToken, timeout: 5000, }) try { - + clp.memberships.resend('id') + clp.organizations.transfer_ownership('id', { new_owner_email: '' }) } catch (error: any) { console.log(inspect(error, false, null, true)) From 45e5c1886664c801e05efd92bee29b7ae1a71481 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 13 Dec 2023 08:18:46 +0000 Subject: [PATCH 16/30] chore(release): 1.0.0-beta.7 [skip ci] # [1.0.0-beta.7](https://github.com/commercelayer/provisioning-sdk/compare/v1.0.0-beta.6...v1.0.0-beta.7) (2023-12-13) ### Features * add auto generation of special actions ([08cd9ff](https://github.com/commercelayer/provisioning-sdk/commit/08cd9ffdae53c80d7b52f841c2da319488a9ee85)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cfd8c7e..515b2a8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [1.0.0-beta.7](https://github.com/commercelayer/provisioning-sdk/compare/v1.0.0-beta.6...v1.0.0-beta.7) (2023-12-13) + + +### Features + +* add auto generation of special actions ([08cd9ff](https://github.com/commercelayer/provisioning-sdk/commit/08cd9ffdae53c80d7b52f841c2da319488a9ee85)) + # [1.0.0-beta.6](https://github.com/commercelayer/provisioning-sdk/compare/v1.0.0-beta.5...v1.0.0-beta.6) (2023-12-12) diff --git a/package.json b/package.json index 4415aa1..f172a1b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@commercelayer/provisioning-sdk", - "version": "1.0.0-beta.6", + "version": "1.0.0-beta.7", "main": "lib/cjs/index.js", "types": "lib/cjs/index.d.ts", "module": "lib/esm/index.js", From 71e0e7b3a10ec3210da8363ccb5bc9986a4673a1 Mon Sep 17 00:00:00 2001 From: Pierluigi Viti Date: Wed, 20 Dec 2023 14:26:37 +0100 Subject: [PATCH 17/30] feat: add singleton update --- gen/generator.ts | 2 +- gen/openapi.json | 134 +++++++++- gen/schema.ts | 34 +-- gen/templates/singleton.tpl | 2 +- gen/templates/singleton_update.tpl | 4 + package.json | 4 +- pnpm-lock.yaml | 306 +++++++++++------------ specs/resource.spec.ts | 2 +- specs/resources/memberships.spec.ts | 21 ++ src/api.ts | 96 ------- src/resource.ts | 32 +-- src/resources/api_credentials.ts | 3 +- src/resources/application_memberships.ts | 5 + src/resources/memberships.ts | 8 + src/resources/organizations.ts | 1 + src/resources/user.ts | 5 +- 16 files changed, 365 insertions(+), 294 deletions(-) create mode 100644 gen/templates/singleton_update.tpl diff --git a/gen/generator.ts b/gen/generator.ts index a7f7c31..ff53c25 100644 --- a/gen/generator.ts +++ b/gen/generator.ts @@ -551,7 +551,7 @@ const generateResource = (type: string, name: string, resource: Resource): strin const qryMod = new Set() const resMod = new Set() Object.entries(resource.operations).forEach(([opName, op]) => { - const tpl = op.singleton ? templates['singleton'] : templates[opName] + const tpl = op.singleton ? ((opName === 'update')? templates['singleton_update'] : templates['singleton']) : templates[opName] if (op.singleton) resModelType = 'ApiSingleton' if (tpl) { if (['create', 'update'].includes(opName)) qryMod.add('QueryParamsRetrieve') diff --git a/gen/openapi.json b/gen/openapi.json index f256caf..ff64877 100644 --- a/gen/openapi.json +++ b/gen/openapi.json @@ -776,6 +776,33 @@ } } }, + "/memberships/{membershipId}/user": { + "get": { + "operationId": "GET/membershipId/user", + "summary": "Related membership", + "description": "Related membership", + "tags": [ + "user", + "has_one" + ], + "parameters": [ + { + "name": "membershipId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The user associated to the membership" + } + } + } + }, "/memberships/{membershipId}/versions": { "get": { "operationId": "GET/membershipId/versions", @@ -1771,7 +1798,7 @@ "type": "string", "description": "Indicates the environment the resource belongs to (one of `test` or `live`).", "example": "test", - "nullable": false + "nullable": true }, "custom": { "type": "boolean", @@ -1909,6 +1936,11 @@ "description": "The lifetime of the access token in seconds (min. `7200`, max. `31536000`. Default is `14400` for Sales channels and `7200` for other client types).", "example": 7200 }, + "mode": { + "type": "string", + "description": "Indicates the environment the resource belongs to (one of `test` or `live`).", + "example": "test" + }, "custom": { "type": "boolean", "description": "Indicates if the API credential is used to create a custom app (e.g. fork a hosted app).", @@ -2240,6 +2272,17 @@ "attributes": { "type": "object", "properties": { + "filters": { + "type": "object", + "description": "Set of key-value pairs that contains restrictions and scopes of the application membership.", + "example": { + "market_id_in": [ + 202, + 203 + ] + }, + "nullable": true + }, "created_at": { "type": "string", "description": "Time at which the resource was created.", @@ -2416,6 +2459,16 @@ "attributes": { "type": "object", "properties": { + "filters": { + "type": "object", + "description": "Set of key-value pairs that contains restrictions and scopes of the application membership.", + "example": { + "market_id_in": [ + 202, + 203 + ] + } + }, "reference": { "type": "string", "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", @@ -2605,6 +2658,17 @@ "attributes": { "type": "object", "properties": { + "filters": { + "type": "object", + "description": "Set of key-value pairs that contains restrictions and scopes of the application membership.", + "example": { + "market_id_in": [ + 202, + 203 + ] + }, + "nullable": true + }, "reference": { "type": "string", "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", @@ -2929,6 +2993,12 @@ "active" ] }, + "owner": { + "type": "boolean", + "description": "Indicates if the user it's the owner of the organization.", + "example": true, + "nullable": false + }, "created_at": { "type": "string", "description": "Time at which the resource was created.", @@ -3032,6 +3102,28 @@ } } }, + "user": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "user" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, "versions": { "type": "object", "properties": { @@ -3443,6 +3535,40 @@ } } }, + "user": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "user" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + }, "versions": { "type": "object", "properties": { @@ -3624,6 +3750,12 @@ "example": "eu-west-1", "nullable": true }, + "can_switch_live": { + "type": "boolean", + "description": "Indicates if the organization can switch to live mode.", + "example": false, + "nullable": false + }, "created_at": { "type": "string", "description": "Time at which the resource was created.", diff --git a/gen/schema.ts b/gen/schema.ts index 24f73e2..f7251bb 100644 --- a/gen/schema.ts +++ b/gen/schema.ts @@ -91,7 +91,7 @@ const parseSchema = (path: string): ApiSchema => { Object.keys(apiSchema.components).forEach(c => { if (!specialComponentMatcher.test(c)) components[c] = apiSchema.components[c] else - if (snakeCase(c.replace(specialComponentMatcher, '')) === singRes) resources[p].components[c] = apiSchema.components[c] + if (snakeCase(c.replace(specialComponentMatcher, '')) === singRes) resources[p].components[c] = apiSchema.components[c] }) // Sort components resources[p].components = sortObjectFields(resources[p].components) @@ -118,18 +118,18 @@ const operationName = (op: string, id?: string, relOrCmd?: string): string => { const referenceResource = (ref: { '$ref': string }): string | undefined => { const r = getReference(ref) as string - return r? Inflector.camelize(r.substring(r.lastIndexOf('/') + 1)) : undefined + return r ? Inflector.camelize(r.substring(r.lastIndexOf('/') + 1)) : undefined } const contentSchema = (content: any): any => { - return content["application/vnd.api+json"]?.schema + return content["application/vnd.api+json"]?.schema } const referenceContent = (content: any): string | undefined => { // No content or no response codes - if (!content || ! Object.keys(content).length) return undefined + if (!content || !Object.keys(content).length) return undefined const schema = contentSchema(content) - return schema? referenceResource(schema) : undefined + return schema ? referenceResource(schema) : undefined } @@ -137,12 +137,12 @@ const contentType = (content?: any): string | undefined => { if (!content) return undefined const schema = contentSchema(content) if (!schema) return undefined - return isReference(schema)? referenceContent(content) : 'object' + return isReference(schema) ? referenceContent(content) : 'object' } export const isObjectType = (type?: string): boolean => { - return (type !== undefined) && ['object', 'any'].includes(type) + return (type !== undefined) && ['object', 'any'].includes(type) } @@ -178,9 +178,9 @@ const parsePaths = (schemaPaths: any[]): PathMap => { if (id) op.id = id if (oValue.requestBody) { - op.requestType = contentType(oValue.requestBody.content) - if (isObjectType(op.requestType)) op.requestTypeDef = contentSchema(oValue.requestBody.content).properties.data.properties.attributes.properties - } + op.requestType = contentType(oValue.requestBody.content) + if (isObjectType(op.requestType)) op.requestTypeDef = contentSchema(oValue.requestBody.content).properties.data.properties.attributes.properties + } if (oValue.responses) { const responses = Object.values(oValue.responses) as any[] if (responses.length > 0) op.responseType = contentType(responses[0].content) @@ -205,9 +205,9 @@ const parsePaths = (schemaPaths: any[]): PathMap => { required: false, deprecated: false, } - op.responseType = Inflector.camelize(Inflector.singularize(op.relationship.type)) + op.responseType = Inflector.camelize(Inflector.singularize(op.relationship.type)) } else { - op.function = operationName(oKey, id,), + op.function = operationName(oKey, id), op.action = true } } else skip = true @@ -290,13 +290,13 @@ const parseComponents = (schemaComponents: any[]): ComponentMap => { fetchable, enum: aValue.enum } - }) + }) // Relationships if (cmpRelationships) { Object.entries(cmpRelationships.properties as object).forEach(r => { const [rKey, rValue] = r - const dataObj = rValue.properties.data? rValue.properties.data : rValue + const dataObj = rValue.properties.data ? rValue.properties.data : rValue const typeObj = dataObj.items ? dataObj.items.properties : dataObj.properties const type = typeObj.type.enum[0] // typeObj.type.default || typeObj.type.example let oneOf = rValue.oneOf @@ -385,11 +385,11 @@ type Operation = { type: string id?: string name: string - function?: string + function?: string requestType?: string - requestTypeDef?: any + requestTypeDef?: any responseType?: string - responseTypeDef?: any + responseTypeDef?: any singleton: boolean relationship?: Relationship trigger?: boolean, diff --git a/gen/templates/singleton.tpl b/gen/templates/singleton.tpl index c638732..574eca7 100644 --- a/gen/templates/singleton.tpl +++ b/gen/templates/singleton.tpl @@ -1,3 +1,3 @@ async retrieve(params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise<##__RESOURCE_RESPONSE_CLASS__##> { - return this.resources.singleton<##__RESOURCE_RESPONSE_CLASS__##>({ type: ##__RESOURCE_CLASS__##.TYPE }, params, options) + return this.resources.retrieve<##__RESOURCE_RESPONSE_CLASS__##>({ type: ##__RESOURCE_CLASS__##.TYPE }, params, options) } \ No newline at end of file diff --git a/gen/templates/singleton_update.tpl b/gen/templates/singleton_update.tpl new file mode 100644 index 0000000..b835dd8 --- /dev/null +++ b/gen/templates/singleton_update.tpl @@ -0,0 +1,4 @@ +async update(resource: ##__RESOURCE_REQUEST_CLASS__##, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise<##__RESOURCE_RESPONSE_CLASS__##> { + const res = await this.retrieve(params, options) // JsonAPI requires id in the request body + return this.resources.update<##__RESOURCE_REQUEST_CLASS__##, ##__RESOURCE_RESPONSE_CLASS__##>({ ...resource, id: res.id, type: ##__RESOURCE_CLASS__##.TYPE }, params, options) +} \ No newline at end of file diff --git a/package.json b/package.json index f172a1b..6fb03af 100644 --- a/package.json +++ b/package.json @@ -45,9 +45,9 @@ "@types/debug": "^4.1.12", "@types/jest": "^29.5.11", "@types/lodash": "^4.14.202", - "@types/node": "^20.10.4", + "@types/node": "^20.10.5", "dotenv": "^16.3.1", - "eslint": "^8.55.0", + "eslint": "^8.56.0", "inflector-js": "^1.0.1", "jest": "^29.7.0", "json-typescript": "^1.1.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9b0e985..94391e8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -21,7 +21,7 @@ devDependencies: version: 7.23.3(@babel/core@7.23.6) '@commercelayer/eslint-config-ts': specifier: 1.1.0 - version: 1.1.0(eslint@8.55.0)(typescript@5.3.3) + version: 1.1.0(eslint@8.56.0)(typescript@5.3.3) '@commercelayer/js-auth': specifier: ^4.2.0 version: 4.2.0 @@ -41,20 +41,20 @@ devDependencies: specifier: ^4.14.202 version: 4.14.202 '@types/node': - specifier: ^20.10.4 - version: 20.10.4 + specifier: ^20.10.5 + version: 20.10.5 dotenv: specifier: ^16.3.1 version: 16.3.1 eslint: - specifier: ^8.55.0 - version: 8.55.0 + specifier: ^8.56.0 + version: 8.56.0 inflector-js: specifier: ^1.0.1 version: 1.0.1 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2) + version: 29.7.0(@types/node@20.10.5)(ts-node@10.9.2) json-typescript: specifier: ^1.1.2 version: 1.1.2 @@ -72,7 +72,7 @@ devDependencies: version: 22.0.12(typescript@5.3.3) ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@20.10.4)(typescript@5.3.3) + version: 10.9.2(@types/node@20.10.5)(typescript@5.3.3) typescript: specifier: ^5.3.3 version: 5.3.3 @@ -1275,7 +1275,7 @@ packages: resolution: {integrity: sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==} engines: {node: '>=6.9.0'} dependencies: - regenerator-runtime: 0.14.0 + regenerator-runtime: 0.14.1 dev: true /@babel/template@7.22.15: @@ -1325,21 +1325,21 @@ packages: dev: true optional: true - /@commercelayer/eslint-config-ts@1.1.0(eslint@8.55.0)(typescript@5.3.3): + /@commercelayer/eslint-config-ts@1.1.0(eslint@8.56.0)(typescript@5.3.3): resolution: {integrity: sha512-OOzV3RPN7JlEZkwNxWVHdRRknjuLboB/CwxeS832/Kd5sMvOHyaYymNVSpG2tiQj7aFsvtfK8m1umM7Lhod6AA==} peerDependencies: eslint: '>=8.0' typescript: '>=5.0' dependencies: - '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0)(typescript@5.3.3) - '@typescript-eslint/parser': 6.14.0(eslint@8.55.0)(typescript@5.3.3) - eslint: 8.55.0 - eslint-config-prettier: 9.1.0(eslint@8.55.0) - eslint-config-standard-with-typescript: 39.1.1(@typescript-eslint/eslint-plugin@6.14.0)(eslint-plugin-import@2.29.0)(eslint-plugin-n@16.4.0)(eslint-plugin-promise@6.1.1)(eslint@8.55.0)(typescript@5.3.3) - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0) - eslint-plugin-n: 16.4.0(eslint@8.55.0) - eslint-plugin-prettier: 5.0.1(eslint-config-prettier@9.1.0)(eslint@8.55.0)(prettier@3.1.1) - eslint-plugin-promise: 6.1.1(eslint@8.55.0) + '@typescript-eslint/eslint-plugin': 6.15.0(@typescript-eslint/parser@6.15.0)(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.15.0(eslint@8.56.0)(typescript@5.3.3) + eslint: 8.56.0 + eslint-config-prettier: 9.1.0(eslint@8.56.0) + eslint-config-standard-with-typescript: 39.1.1(@typescript-eslint/eslint-plugin@6.15.0)(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.4.0)(eslint-plugin-promise@6.1.1)(eslint@8.56.0)(typescript@5.3.3) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.15.0)(eslint@8.56.0) + eslint-plugin-n: 16.4.0(eslint@8.56.0) + eslint-plugin-prettier: 5.1.0(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.1.1) + eslint-plugin-promise: 6.1.1(eslint@8.56.0) prettier: 3.1.1 typescript: 5.3.3 transitivePeerDependencies: @@ -1559,13 +1559,13 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.55.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.55.0 + eslint: 8.56.0 eslint-visitor-keys: 3.4.3 dev: true @@ -1591,8 +1591,8 @@ packages: - supports-color dev: true - /@eslint/js@8.55.0: - resolution: {integrity: sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==} + /@eslint/js@8.56.0: + resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -1649,7 +1649,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.10.4 + '@types/node': 20.10.5 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -1670,14 +1670,14 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.4 + '@types/node': 20.10.5 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@20.10.5)(ts-node@10.9.2) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -1705,7 +1705,7 @@ packages: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.4 + '@types/node': 20.10.5 jest-mock: 29.7.0 dev: true @@ -1732,7 +1732,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.10.4 + '@types/node': 20.10.5 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -1765,7 +1765,7 @@ packages: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.20 - '@types/node': 20.10.4 + '@types/node': 20.10.5 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -1853,7 +1853,7 @@ packages: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.10.4 + '@types/node': 20.10.5 '@types/yargs': 17.0.32 chalk: 4.1.2 dev: true @@ -1913,7 +1913,7 @@ packages: engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 + fastq: 1.16.0 dev: true /@octokit/auth-token@4.0.0: @@ -2132,7 +2132,7 @@ packages: https-proxy-agent: 7.0.2 issue-parser: 6.0.0 lodash-es: 4.17.21 - mime: 4.0.0 + mime: 4.0.1 p-filter: 3.0.0 semantic-release: 22.0.12(typescript@5.3.3) url-join: 5.0.0 @@ -2230,13 +2230,13 @@ packages: dependencies: '@babel/parser': 7.23.6 '@babel/types': 7.23.6 - '@types/babel__generator': 7.6.7 + '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.4 dev: true - /@types/babel__generator@7.6.7: - resolution: {integrity: sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==} + /@types/babel__generator@7.6.8: + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} dependencies: '@babel/types': 7.23.6 dev: true @@ -2263,7 +2263,7 @@ packages: /@types/graceful-fs@4.1.9: resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} dependencies: - '@types/node': 20.10.4 + '@types/node': 20.10.5 dev: true /@types/istanbul-lib-coverage@2.0.6: @@ -2305,8 +2305,8 @@ packages: resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} dev: true - /@types/node@20.10.4: - resolution: {integrity: sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==} + /@types/node@20.10.5: + resolution: {integrity: sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==} dependencies: undici-types: 5.26.5 dev: true @@ -2333,8 +2333,8 @@ packages: '@types/yargs-parser': 21.0.3 dev: true - /@typescript-eslint/eslint-plugin@6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0)(typescript@5.3.3): - resolution: {integrity: sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==} + /@typescript-eslint/eslint-plugin@6.15.0(@typescript-eslint/parser@6.15.0)(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-j5qoikQqPccq9QoBAupOP+CBu8BaJ8BLjaXSioDISeTZkVO3ig7oSIKh3H+rEpee7xCXtWwSB4KIL5l6hWZzpg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -2345,13 +2345,13 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.14.0(eslint@8.55.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 6.14.0 - '@typescript-eslint/type-utils': 6.14.0(eslint@8.55.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.14.0(eslint@8.55.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.14.0 + '@typescript-eslint/parser': 6.15.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.15.0 + '@typescript-eslint/type-utils': 6.15.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/utils': 6.15.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.15.0 debug: 4.3.4 - eslint: 8.55.0 + eslint: 8.56.0 graphemer: 1.4.0 ignore: 5.3.0 natural-compare: 1.4.0 @@ -2362,8 +2362,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3): - resolution: {integrity: sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==} + /@typescript-eslint/parser@6.15.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-MkgKNnsjC6QwcMdlNAel24jjkEO/0hQaMDLqP4S9zq5HBAUJNQB6y+3DwLjX7b3l2b37eNAxMPLwb3/kh8VKdA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2372,27 +2372,27 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.14.0 - '@typescript-eslint/types': 6.14.0 - '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.14.0 + '@typescript-eslint/scope-manager': 6.15.0 + '@typescript-eslint/types': 6.15.0 + '@typescript-eslint/typescript-estree': 6.15.0(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.15.0 debug: 4.3.4 - eslint: 8.55.0 + eslint: 8.56.0 typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@6.14.0: - resolution: {integrity: sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg==} + /@typescript-eslint/scope-manager@6.15.0: + resolution: {integrity: sha512-+BdvxYBltqrmgCNu4Li+fGDIkW9n//NrruzG9X1vBzaNK+ExVXPoGB71kneaVw/Jp+4rH/vaMAGC6JfMbHstVg==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.14.0 - '@typescript-eslint/visitor-keys': 6.14.0 + '@typescript-eslint/types': 6.15.0 + '@typescript-eslint/visitor-keys': 6.15.0 dev: true - /@typescript-eslint/type-utils@6.14.0(eslint@8.55.0)(typescript@5.3.3): - resolution: {integrity: sha512-x6OC9Q7HfYKqjnuNu5a7kffIYs3No30isapRBJl1iCHLitD8O0lFbRcVGiOcuyN837fqXzPZ1NS10maQzZMKqw==} + /@typescript-eslint/type-utils@6.15.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-CnmHKTfX6450Bo49hPg2OkIm/D/TVYV7jO1MCfPYGwf6x3GO0VU8YMO5AYMn+u3X05lRRxA4fWCz87GFQV6yVQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2401,23 +2401,23 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) - '@typescript-eslint/utils': 6.14.0(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.15.0(typescript@5.3.3) + '@typescript-eslint/utils': 6.15.0(eslint@8.56.0)(typescript@5.3.3) debug: 4.3.4 - eslint: 8.55.0 + eslint: 8.56.0 ts-api-utils: 1.0.3(typescript@5.3.3) typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@6.14.0: - resolution: {integrity: sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==} + /@typescript-eslint/types@6.15.0: + resolution: {integrity: sha512-yXjbt//E4T/ee8Ia1b5mGlbNj9fB9lJP4jqLbZualwpP2BCQ5is6BcWwxpIsY4XKAhmdv3hrW92GdtJbatC6dQ==} engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@6.14.0(typescript@5.3.3): - resolution: {integrity: sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==} + /@typescript-eslint/typescript-estree@6.15.0(typescript@5.3.3): + resolution: {integrity: sha512-7mVZJN7Hd15OmGuWrp2T9UvqR2Ecg+1j/Bp1jXUEY2GZKV6FXlOIoqVDmLpBiEiq3katvj/2n2mR0SDwtloCew==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -2425,8 +2425,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.14.0 - '@typescript-eslint/visitor-keys': 6.14.0 + '@typescript-eslint/types': 6.15.0 + '@typescript-eslint/visitor-keys': 6.15.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -2437,30 +2437,30 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@6.14.0(eslint@8.55.0)(typescript@5.3.3): - resolution: {integrity: sha512-XwRTnbvRr7Ey9a1NT6jqdKX8y/atWG+8fAIu3z73HSP8h06i3r/ClMhmaF/RGWGW1tHJEwij1uEg2GbEmPYvYg==} + /@typescript-eslint/utils@6.15.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-eF82p0Wrrlt8fQSRL0bGXzK5nWPRV2dYQZdajcfzOD9+cQz9O7ugifrJxclB+xVOvWvagXfqS4Es7vpLP4augw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 6.14.0 - '@typescript-eslint/types': 6.14.0 - '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) - eslint: 8.55.0 + '@typescript-eslint/scope-manager': 6.15.0 + '@typescript-eslint/types': 6.15.0 + '@typescript-eslint/typescript-estree': 6.15.0(typescript@5.3.3) + eslint: 8.56.0 semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys@6.14.0: - resolution: {integrity: sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==} + /@typescript-eslint/visitor-keys@6.15.0: + resolution: {integrity: sha512-1zvtdC1a9h5Tb5jU9x3ADNXO9yjP8rXlaoChu0DQX40vf5ACVpYIVIZhIMZ6d5sDXH7vq4dsZBT1fEGj8D2n2w==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/types': 6.15.0 eslint-visitor-keys: 3.4.3 dev: true @@ -2858,7 +2858,7 @@ packages: hasBin: true dependencies: caniuse-lite: 1.0.30001570 - electron-to-chromium: 1.4.611 + electron-to-chromium: 1.4.615 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.22.2) dev: true @@ -3125,7 +3125,7 @@ packages: typescript: 5.3.3 dev: true - /create-jest@29.7.0(@types/node@20.10.4)(ts-node@10.9.2): + /create-jest@29.7.0(@types/node@20.10.5)(ts-node@10.9.2): resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -3134,7 +3134,7 @@ packages: chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@20.10.5)(ts-node@10.9.2) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -3322,8 +3322,8 @@ packages: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true - /electron-to-chromium@1.4.611: - resolution: {integrity: sha512-ZtRpDxrjHapOwxtv+nuth5ByB8clyn8crVynmRNGO3wG3LOp8RTcyZDqwaI6Ng6y8FCK2hVZmJoqwCskKbNMaw==} + /electron-to-chromium@1.4.615: + resolution: {integrity: sha512-/bKPPcgZVUziECqDc+0HkT87+0zhaWSZHNXqF8FLd2lQcptpmUFwoCSWjCdOng9Gdq+afKArPdEg/0ZW461Eng==} dev: true /emittery@0.13.1: @@ -3481,25 +3481,25 @@ packages: engines: {node: '>=12'} dev: true - /eslint-compat-utils@0.1.2(eslint@8.55.0): + /eslint-compat-utils@0.1.2(eslint@8.56.0): resolution: {integrity: sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==} engines: {node: '>=12'} peerDependencies: eslint: '>=6.0.0' dependencies: - eslint: 8.55.0 + eslint: 8.56.0 dev: true - /eslint-config-prettier@9.1.0(eslint@8.55.0): + /eslint-config-prettier@9.1.0(eslint@8.56.0): resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.55.0 + eslint: 8.56.0 dev: true - /eslint-config-standard-with-typescript@39.1.1(@typescript-eslint/eslint-plugin@6.14.0)(eslint-plugin-import@2.29.0)(eslint-plugin-n@16.4.0)(eslint-plugin-promise@6.1.1)(eslint@8.55.0)(typescript@5.3.3): + /eslint-config-standard-with-typescript@39.1.1(@typescript-eslint/eslint-plugin@6.15.0)(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.4.0)(eslint-plugin-promise@6.1.1)(eslint@8.56.0)(typescript@5.3.3): resolution: {integrity: sha512-t6B5Ep8E4I18uuoYeYxINyqcXb2UbC0SOOTxRtBSt2JUs+EzeXbfe2oaiPs71AIdnoWhXDO2fYOHz8df3kV84A==} peerDependencies: '@typescript-eslint/eslint-plugin': ^6.4.0 @@ -3509,19 +3509,19 @@ packages: eslint-plugin-promise: ^6.0.0 typescript: '*' dependencies: - '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0)(typescript@5.3.3) - '@typescript-eslint/parser': 6.14.0(eslint@8.55.0)(typescript@5.3.3) - eslint: 8.55.0 - eslint-config-standard: 17.1.0(eslint-plugin-import@2.29.0)(eslint-plugin-n@16.4.0)(eslint-plugin-promise@6.1.1)(eslint@8.55.0) - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0) - eslint-plugin-n: 16.4.0(eslint@8.55.0) - eslint-plugin-promise: 6.1.1(eslint@8.55.0) + '@typescript-eslint/eslint-plugin': 6.15.0(@typescript-eslint/parser@6.15.0)(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.15.0(eslint@8.56.0)(typescript@5.3.3) + eslint: 8.56.0 + eslint-config-standard: 17.1.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.4.0)(eslint-plugin-promise@6.1.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.15.0)(eslint@8.56.0) + eslint-plugin-n: 16.4.0(eslint@8.56.0) + eslint-plugin-promise: 6.1.1(eslint@8.56.0) typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /eslint-config-standard@17.1.0(eslint-plugin-import@2.29.0)(eslint-plugin-n@16.4.0)(eslint-plugin-promise@6.1.1)(eslint@8.55.0): + /eslint-config-standard@17.1.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.4.0)(eslint-plugin-promise@6.1.1)(eslint@8.56.0): resolution: {integrity: sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==} engines: {node: '>=12.0.0'} peerDependencies: @@ -3530,10 +3530,10 @@ packages: eslint-plugin-n: '^15.0.0 || ^16.0.0 ' eslint-plugin-promise: ^6.0.0 dependencies: - eslint: 8.55.0 - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0) - eslint-plugin-n: 16.4.0(eslint@8.55.0) - eslint-plugin-promise: 6.1.1(eslint@8.55.0) + eslint: 8.56.0 + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.15.0)(eslint@8.56.0) + eslint-plugin-n: 16.4.0(eslint@8.56.0) + eslint-plugin-promise: 6.1.1(eslint@8.56.0) dev: true /eslint-import-resolver-node@0.3.9: @@ -3546,7 +3546,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint@8.55.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.15.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -3567,28 +3567,28 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.14.0(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.15.0(eslint@8.56.0)(typescript@5.3.3) debug: 3.2.7 - eslint: 8.55.0 + eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-es-x@7.5.0(eslint@8.55.0): + /eslint-plugin-es-x@7.5.0(eslint@8.56.0): resolution: {integrity: sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '>=8' dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@eslint-community/regexpp': 4.10.0 - eslint: 8.55.0 - eslint-compat-utils: 0.1.2(eslint@8.55.0) + eslint: 8.56.0 + eslint-compat-utils: 0.1.2(eslint@8.56.0) dev: true - /eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0): - resolution: {integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==} + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.15.0)(eslint@8.56.0): + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -3597,16 +3597,16 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.14.0(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.15.0(eslint@8.56.0)(typescript@5.3.3) 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: 8.55.0 + eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint@8.55.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.15.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -3615,23 +3615,23 @@ packages: object.groupby: 1.0.1 object.values: 1.1.7 semver: 6.3.1 - tsconfig-paths: 3.14.2 + tsconfig-paths: 3.15.0 transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color dev: true - /eslint-plugin-n@16.4.0(eslint@8.55.0): + /eslint-plugin-n@16.4.0(eslint@8.56.0): resolution: {integrity: sha512-IkqJjGoWYGskVaJA7WQuN8PINIxc0N/Pk/jLeYT4ees6Fo5lAhpwGsYek6gS9tCUxgDC4zJ+OwY2bY/6/9OMKQ==} engines: {node: '>=16.0.0'} peerDependencies: eslint: '>=7.0.0' dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) builtins: 5.0.1 - eslint: 8.55.0 - eslint-plugin-es-x: 7.5.0(eslint@8.55.0) + eslint: 8.56.0 + eslint-plugin-es-x: 7.5.0(eslint@8.56.0) get-tsconfig: 4.7.2 ignore: 5.3.0 is-builtin-module: 3.2.1 @@ -3641,8 +3641,8 @@ packages: semver: 7.5.4 dev: true - /eslint-plugin-prettier@5.0.1(eslint-config-prettier@9.1.0)(eslint@8.55.0)(prettier@3.1.1): - resolution: {integrity: sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==} + /eslint-plugin-prettier@5.1.0(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.1.1): + resolution: {integrity: sha512-hQc+2zbnMeXcIkg+pKZtVa+3Yqx4WY7SMkn1PLZ4VbBEU7jJIpVn9347P8BBhTbz6ne85aXvQf30kvexcqBeWw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: '@types/eslint': '>=8.0.0' @@ -3655,20 +3655,20 @@ packages: eslint-config-prettier: optional: true dependencies: - eslint: 8.55.0 - eslint-config-prettier: 9.1.0(eslint@8.55.0) + eslint: 8.56.0 + eslint-config-prettier: 9.1.0(eslint@8.56.0) prettier: 3.1.1 prettier-linter-helpers: 1.0.0 synckit: 0.8.6 dev: true - /eslint-plugin-promise@6.1.1(eslint@8.55.0): + /eslint-plugin-promise@6.1.1(eslint@8.56.0): resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - eslint: 8.55.0 + eslint: 8.56.0 dev: true /eslint-scope@7.2.2: @@ -3684,15 +3684,15 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.55.0: - resolution: {integrity: sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==} + /eslint@8.56.0: + resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@eslint-community/regexpp': 4.10.0 '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.55.0 + '@eslint/js': 8.56.0 '@humanwhocodes/config-array': 0.11.13 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 @@ -3858,8 +3858,8 @@ packages: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true - /fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + /fastq@1.16.0: + resolution: {integrity: sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==} dependencies: reusify: 1.0.4 dev: true @@ -4690,7 +4690,7 @@ packages: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.4 + '@types/node': 20.10.5 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.1 @@ -4711,7 +4711,7 @@ packages: - supports-color dev: true - /jest-cli@29.7.0(@types/node@20.10.4)(ts-node@10.9.2): + /jest-cli@29.7.0(@types/node@20.10.5)(ts-node@10.9.2): resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -4725,10 +4725,10 @@ packages: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2) + create-jest: 29.7.0(@types/node@20.10.5)(ts-node@10.9.2) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@20.10.5)(ts-node@10.9.2) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -4739,7 +4739,7 @@ packages: - ts-node dev: true - /jest-config@29.7.0(@types/node@20.10.4)(ts-node@10.9.2): + /jest-config@29.7.0(@types/node@20.10.5)(ts-node@10.9.2): resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -4754,7 +4754,7 @@ packages: '@babel/core': 7.23.6 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.4 + '@types/node': 20.10.5 babel-jest: 29.7.0(@babel/core@7.23.6) chalk: 4.1.2 ci-info: 3.9.0 @@ -4774,7 +4774,7 @@ packages: pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.2(@types/node@20.10.4)(typescript@5.3.3) + ts-node: 10.9.2(@types/node@20.10.5)(typescript@5.3.3) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -4815,7 +4815,7 @@ packages: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.4 + '@types/node': 20.10.5 jest-mock: 29.7.0 jest-util: 29.7.0 dev: true @@ -4831,7 +4831,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 20.10.4 + '@types/node': 20.10.5 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -4882,7 +4882,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.10.4 + '@types/node': 20.10.5 jest-util: 29.7.0 dev: true @@ -4937,7 +4937,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.4 + '@types/node': 20.10.5 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -4968,7 +4968,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.4 + '@types/node': 20.10.5 chalk: 4.1.2 cjs-module-lexer: 1.2.3 collect-v8-coverage: 1.0.2 @@ -5020,7 +5020,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.10.4 + '@types/node': 20.10.5 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -5045,7 +5045,7 @@ packages: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.4 + '@types/node': 20.10.5 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -5057,13 +5057,13 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 20.10.4 + '@types/node': 20.10.5 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest@29.7.0(@types/node@20.10.4)(ts-node@10.9.2): + /jest@29.7.0(@types/node@20.10.5)(ts-node@10.9.2): resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -5076,7 +5076,7 @@ packages: '@jest/core': 29.7.0(ts-node@10.9.2) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.10.4)(ts-node@10.9.2) + jest-cli: 29.7.0(@types/node@20.10.5)(ts-node@10.9.2) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -5360,8 +5360,8 @@ packages: mime-db: 1.52.0 dev: false - /mime@4.0.0: - resolution: {integrity: sha512-pzhgdeqU5pJ9t5WK9m4RT4GgGWqYJylxUf62Yb9datXRwdcw5MjiD1BYI5evF8AgTXN9gtKX3CFLvCUL5fAhEA==} + /mime@4.0.1: + resolution: {integrity: sha512-5lZ5tyrIfliMXzFtkYyekWbtRXObT9OWa8IwQ5uxTBDHucNNwniRqo0yInflj+iYi5CBa6qxadGzGarDfuEOxA==} engines: {node: '>=16'} hasBin: true dev: true @@ -5983,8 +5983,8 @@ packages: resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} dev: true - /regenerator-runtime@0.14.0: - resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} + /regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} dev: true /regenerator-transform@0.15.2: @@ -6545,7 +6545,7 @@ packages: typescript: 5.3.3 dev: true - /ts-node@10.9.2(@types/node@20.10.4)(typescript@5.3.3): + /ts-node@10.9.2(@types/node@20.10.5)(typescript@5.3.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -6564,7 +6564,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.10.4 + '@types/node': 20.10.5 acorn: 8.11.2 acorn-walk: 8.3.1 arg: 4.1.3 @@ -6576,8 +6576,8 @@ packages: yn: 3.1.1 dev: true - /tsconfig-paths@3.14.2: - resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} + /tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} dependencies: '@types/json5': 0.0.29 json5: 1.0.2 diff --git a/specs/resource.spec.ts b/specs/resource.spec.ts index ce08da5..7883899 100644 --- a/specs/resource.spec.ts +++ b/specs/resource.spec.ts @@ -60,7 +60,7 @@ describe('SDK:resource suite', () => { it('resource.create', async () => { - const user_email = 'spec@sdk-test.org-role' + const user_email = 'spec@provisioning-sdk-test.org-role' const org = (await clp.organizations.list()).first() const role = (await clp.roles.list()).first() if (!org || !role) return diff --git a/specs/resources/memberships.spec.ts b/specs/resources/memberships.spec.ts index 038226f..91f2da5 100644 --- a/specs/resources/memberships.spec.ts +++ b/specs/resources/memberships.spec.ts @@ -259,6 +259,27 @@ describe('Memberships resource', () => { /* relationship.application_memberships stop */ + /* relationship.user start */ + it(resourceType + '.user', async () => { + + const id = TestData.id + const params = { fields: { user: CommonData.paramsFields } } + + const intId = clp.addRequestInterceptor((config) => { + expect(config.method).toBe('get') + checkCommon(config, resourceType, id, currentAccessToken, 'user') + checkCommonParams(config, params) + return interceptRequest() + }) + + await clp[resourceType].user(id, params, CommonData.options) + .catch(handleError) + .finally(() => clp.removeInterceptor('request', intId)) + + }) + /* relationship.user stop */ + + /* relationship.versions start */ it(resourceType + '.versions', async () => { diff --git a/src/api.ts b/src/api.ts index 5d70970..e17eaaa 100644 --- a/src/api.ts +++ b/src/api.ts @@ -10,102 +10,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - import type { Resource, ResourceRel } from './resource' import type { VersionType } from './resources/versions' diff --git a/src/resource.ts b/src/resource.ts index fb1698b..c76d2b2 100644 --- a/src/resource.ts +++ b/src/resource.ts @@ -139,29 +139,19 @@ class ResourceAdapter { */ - async singleton(resource: ResourceType, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { - debug('singleton: %o, %O, %O', resource, params || {}, options || {}) + async retrieve(resource: ResourceId | ResourceType, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { - const queryParams = generateQueryStringParams(params, resource) - if (options?.params) Object.assign(queryParams, options?.params) - - const res = await this.#client.request('get', `${resource.type}`, undefined, { ...options, params: queryParams }) - const r = denormalize(res) as R - - return r + const singleton = !('id' in resource) || !resource.id - } - - - async retrieve(resource: ResourceId, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { - - debug('retrieve: %o, %O, %O', resource, params || {}, options || {}) + debug('retrieve:%s %o, %O, %O', (singleton? ' singleton,' : ''), resource, params || {}, options || {}) const queryParams = generateQueryStringParams(params, resource) if (options?.params) Object.assign(queryParams, options?.params) - const res = await this.#client.request('get', `${resource.type}/${resource.id}`, undefined, { ...options, params: queryParams }) + const path = `${resource.type}${singleton? '' : `/${resource.id}`}` + + const res = await this.#client.request('get', path, undefined, { ...options, params: queryParams }) const r = denormalize(res) as R return r @@ -209,13 +199,17 @@ class ResourceAdapter { async update(resource: U & ResourceId, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { - debug('update: %o, %O, %O', resource, params || {}, options || {}) + const singleton = !('id' in resource) || !resource.id + + debug('update:%s %o, %O, %O', (singleton? ' singleton,' : ''), resource, params || {}, options || {}) const queryParams = generateQueryStringParams(params, resource) if (options?.params) Object.assign(queryParams, options?.params) + const path = `${resource.type}${singleton? '' : `/${resource.id}`}` + const data = normalize(resource) - const res = await this.#client.request('patch', `${resource.type}/${resource.id}`, data, { ...options, params: queryParams }) + const res = await this.#client.request('patch', path, data, { ...options, params: queryParams }) const r = denormalize(res) as R return r @@ -325,7 +319,7 @@ abstract class ApiResource extends ApiResourceBase { abstract class ApiSingleton extends ApiResourceBase { async retrieve(params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { - return this.resources.singleton({ type: this.type() }, params, options) + return this.resources.retrieve({ type: this.type() }, params, options) } } diff --git a/src/resources/api_credentials.ts b/src/resources/api_credentials.ts index c3c42f3..4c18767 100644 --- a/src/resources/api_credentials.ts +++ b/src/resources/api_credentials.ts @@ -24,7 +24,7 @@ interface ApiCredential extends Resource { client_secret: string scopes: string expires_in?: number | null - mode: string + mode?: string | null custom?: boolean | null organization?: Organization | null @@ -39,6 +39,7 @@ interface ApiCredentialCreate extends ResourceCreate { kind: string redirect_uri?: string | null expires_in?: number | null + mode?: string | null custom?: boolean | null organization: OrganizationRel diff --git a/src/resources/application_memberships.ts b/src/resources/application_memberships.ts index e739c74..518fb26 100644 --- a/src/resources/application_memberships.ts +++ b/src/resources/application_memberships.ts @@ -22,6 +22,7 @@ interface ApplicationMembership extends Resource { readonly type: ApplicationMembershipType + filters?: Record | null api_credential?: ApiCredential | null membership?: Membership | null @@ -34,6 +35,8 @@ interface ApplicationMembership extends Resource { interface ApplicationMembershipCreate extends ResourceCreate { + filters?: Record | null + api_credential: ApiCredentialRel membership: MembershipRel user: UserRel @@ -45,6 +48,8 @@ interface ApplicationMembershipCreate extends ResourceCreate { interface ApplicationMembershipUpdate extends ResourceUpdate { + filters?: Record | null + role?: RoleRel | null } diff --git a/src/resources/memberships.ts b/src/resources/memberships.ts index 514c0bd..fa19fec 100644 --- a/src/resources/memberships.ts +++ b/src/resources/memberships.ts @@ -5,6 +5,7 @@ import type { QueryParamsRetrieve, QueryParamsList } from '../query' import type { Organization, OrganizationType } from './organizations' import type { Role, RoleType } from './roles' import type { ApplicationMembership, ApplicationMembershipType } from './application_memberships' +import type { User } from './user' import type { Version } from './versions' @@ -23,10 +24,12 @@ interface Membership extends Resource { user_first_name: string user_last_name: string status: 'pending' | 'active' + owner: boolean organization?: Organization | null role?: Role | null application_memberships?: ApplicationMembership[] | null + user?: User | null versions?: Version[] | null } @@ -87,6 +90,11 @@ class Memberships extends ApiResource { return this.resources.fetch({ type: 'application_memberships' }, `memberships/${_membershipId}/application_memberships`, params, options) as unknown as ListResponse } + async user(membershipId: string | Membership, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { + const _membershipId = (membershipId as Membership).id || membershipId as string + return this.resources.fetch({ type: 'user' }, `memberships/${_membershipId}/user`, params, options) as unknown as User + } + async versions(membershipId: string | Membership, params?: QueryParamsList, options?: ResourcesConfig): Promise> { const _membershipId = (membershipId as Membership).id || membershipId as string return this.resources.fetch({ type: 'versions' }, `memberships/${_membershipId}/versions`, params, options) as unknown as ListResponse diff --git a/src/resources/organizations.ts b/src/resources/organizations.ts index 8b8f883..430f0bd 100644 --- a/src/resources/organizations.ts +++ b/src/resources/organizations.ts @@ -34,6 +34,7 @@ interface Organization extends Resource { max_concurrent_imports: number associated_markets: Record region?: string | null + can_switch_live: boolean memberships?: Membership[] | null roles?: Role[] | null diff --git a/src/resources/user.ts b/src/resources/user.ts index ea6384e..4a70a0c 100644 --- a/src/resources/user.ts +++ b/src/resources/user.ts @@ -34,8 +34,9 @@ class Users extends ApiSingleton { static readonly TYPE: UserType = 'user' as const - async retrieve(params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { - return this.resources.singleton({ type: Users.TYPE }, params, options) + async update(resource: UserUpdate, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { + const res = await this.retrieve(params, options) // JsonAPI requires id in the request body + return this.resources.update({ ...resource, id: res.id, type: Users.TYPE }, params, options) } From 8c5f63e997ecf08d6af021cde31731892b0ae82a Mon Sep 17 00:00:00 2001 From: Pierluigi Viti Date: Wed, 20 Dec 2023 14:26:55 +0100 Subject: [PATCH 18/30] chore: update dependencies --- pnpm-lock.yaml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 94391e8..76a0c92 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1335,9 +1335,9 @@ packages: '@typescript-eslint/parser': 6.15.0(eslint@8.56.0)(typescript@5.3.3) eslint: 8.56.0 eslint-config-prettier: 9.1.0(eslint@8.56.0) - eslint-config-standard-with-typescript: 39.1.1(@typescript-eslint/eslint-plugin@6.15.0)(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.4.0)(eslint-plugin-promise@6.1.1)(eslint@8.56.0)(typescript@5.3.3) + eslint-config-standard-with-typescript: 39.1.1(@typescript-eslint/eslint-plugin@6.15.0)(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.5.0)(eslint-plugin-promise@6.1.1)(eslint@8.56.0)(typescript@5.3.3) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.15.0)(eslint@8.56.0) - eslint-plugin-n: 16.4.0(eslint@8.56.0) + eslint-plugin-n: 16.5.0(eslint@8.56.0) eslint-plugin-prettier: 5.1.0(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.1.1) eslint-plugin-promise: 6.1.1(eslint@8.56.0) prettier: 3.1.1 @@ -3499,7 +3499,7 @@ packages: eslint: 8.56.0 dev: true - /eslint-config-standard-with-typescript@39.1.1(@typescript-eslint/eslint-plugin@6.15.0)(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.4.0)(eslint-plugin-promise@6.1.1)(eslint@8.56.0)(typescript@5.3.3): + /eslint-config-standard-with-typescript@39.1.1(@typescript-eslint/eslint-plugin@6.15.0)(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.5.0)(eslint-plugin-promise@6.1.1)(eslint@8.56.0)(typescript@5.3.3): resolution: {integrity: sha512-t6B5Ep8E4I18uuoYeYxINyqcXb2UbC0SOOTxRtBSt2JUs+EzeXbfe2oaiPs71AIdnoWhXDO2fYOHz8df3kV84A==} peerDependencies: '@typescript-eslint/eslint-plugin': ^6.4.0 @@ -3512,16 +3512,16 @@ packages: '@typescript-eslint/eslint-plugin': 6.15.0(@typescript-eslint/parser@6.15.0)(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/parser': 6.15.0(eslint@8.56.0)(typescript@5.3.3) eslint: 8.56.0 - eslint-config-standard: 17.1.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.4.0)(eslint-plugin-promise@6.1.1)(eslint@8.56.0) + eslint-config-standard: 17.1.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.5.0)(eslint-plugin-promise@6.1.1)(eslint@8.56.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.15.0)(eslint@8.56.0) - eslint-plugin-n: 16.4.0(eslint@8.56.0) + eslint-plugin-n: 16.5.0(eslint@8.56.0) eslint-plugin-promise: 6.1.1(eslint@8.56.0) typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /eslint-config-standard@17.1.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.4.0)(eslint-plugin-promise@6.1.1)(eslint@8.56.0): + /eslint-config-standard@17.1.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.5.0)(eslint-plugin-promise@6.1.1)(eslint@8.56.0): resolution: {integrity: sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==} engines: {node: '>=12.0.0'} peerDependencies: @@ -3532,7 +3532,7 @@ packages: dependencies: eslint: 8.56.0 eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.15.0)(eslint@8.56.0) - eslint-plugin-n: 16.4.0(eslint@8.56.0) + eslint-plugin-n: 16.5.0(eslint@8.56.0) eslint-plugin-promise: 6.1.1(eslint@8.56.0) dev: true @@ -3622,8 +3622,8 @@ packages: - supports-color dev: true - /eslint-plugin-n@16.4.0(eslint@8.56.0): - resolution: {integrity: sha512-IkqJjGoWYGskVaJA7WQuN8PINIxc0N/Pk/jLeYT4ees6Fo5lAhpwGsYek6gS9tCUxgDC4zJ+OwY2bY/6/9OMKQ==} + /eslint-plugin-n@16.5.0(eslint@8.56.0): + resolution: {integrity: sha512-Hw02Bj1QrZIlKyj471Tb1jSReTl4ghIMHGuBGiMVmw+s0jOPbI4CBuYpGbZr+tdQ+VAvSK6FDSta3J4ib/SKHQ==} engines: {node: '>=16.0.0'} peerDependencies: eslint: '>=7.0.0' From 5c617a8af5c7682a38e645cf86607214c4cbd1de Mon Sep 17 00:00:00 2001 From: Pierluigi Viti Date: Wed, 20 Dec 2023 14:46:14 +0100 Subject: [PATCH 19/30] fix: fix singleton spec --- gen/templates/spec.tpl | 10 ++++++---- specs/resources/api_credentials.spec.ts | 10 ++++++---- specs/resources/application_memberships.spec.ts | 10 ++++++---- specs/resources/memberships.spec.ts | 10 ++++++---- specs/resources/organizations.spec.ts | 10 ++++++---- specs/resources/permissions.spec.ts | 10 ++++++---- specs/resources/roles.spec.ts | 10 ++++++---- specs/resources/user.spec.ts | 10 ++++++---- src/api.ts | 4 ++++ 9 files changed, 52 insertions(+), 32 deletions(-) diff --git a/gen/templates/spec.tpl b/gen/templates/spec.tpl index 4c4abe0..d58cd63 100644 --- a/gen/templates/spec.tpl +++ b/gen/templates/spec.tpl @@ -74,10 +74,12 @@ describe('##__RESOURCE_CLASS__## resource', () => { const resData = { id: TestData.id, ...attributes} const intId = clp.addRequestInterceptor((config) => { - expect(config.method).toBe('patch') - checkCommon(config, resourceType, resData.id, currentAccessToken) - checkCommonData(config, resourceType, attributes, resData.id) - return interceptRequest() + if (config.method !== 'get') { + expect(config.method).toBe('patch') + checkCommon(config, resourceType, resData.id, currentAccessToken) + checkCommonData(config, resourceType, attributes, resData.id) + } + return interceptRequest() }) await clp[resourceType].update(resData, params, CommonData.options) diff --git a/specs/resources/api_credentials.spec.ts b/specs/resources/api_credentials.spec.ts index 12ceef8..4322f68 100644 --- a/specs/resources/api_credentials.spec.ts +++ b/specs/resources/api_credentials.spec.ts @@ -80,10 +80,12 @@ describe('ApiCredentials resource', () => { const resData = { id: TestData.id, ...attributes} const intId = clp.addRequestInterceptor((config) => { - expect(config.method).toBe('patch') - checkCommon(config, resourceType, resData.id, currentAccessToken) - checkCommonData(config, resourceType, attributes, resData.id) - return interceptRequest() + if (config.method !== 'get') { + expect(config.method).toBe('patch') + checkCommon(config, resourceType, resData.id, currentAccessToken) + checkCommonData(config, resourceType, attributes, resData.id) + } + return interceptRequest() }) await clp[resourceType].update(resData, params, CommonData.options) diff --git a/specs/resources/application_memberships.spec.ts b/specs/resources/application_memberships.spec.ts index 93e7675..4acb870 100644 --- a/specs/resources/application_memberships.spec.ts +++ b/specs/resources/application_memberships.spec.ts @@ -81,10 +81,12 @@ describe('ApplicationMemberships resource', () => { const resData = { id: TestData.id, ...attributes} const intId = clp.addRequestInterceptor((config) => { - expect(config.method).toBe('patch') - checkCommon(config, resourceType, resData.id, currentAccessToken) - checkCommonData(config, resourceType, attributes, resData.id) - return interceptRequest() + if (config.method !== 'get') { + expect(config.method).toBe('patch') + checkCommon(config, resourceType, resData.id, currentAccessToken) + checkCommonData(config, resourceType, attributes, resData.id) + } + return interceptRequest() }) await clp[resourceType].update(resData, params, CommonData.options) diff --git a/specs/resources/memberships.spec.ts b/specs/resources/memberships.spec.ts index 91f2da5..45cef52 100644 --- a/specs/resources/memberships.spec.ts +++ b/specs/resources/memberships.spec.ts @@ -80,10 +80,12 @@ describe('Memberships resource', () => { const resData = { id: TestData.id, ...attributes} const intId = clp.addRequestInterceptor((config) => { - expect(config.method).toBe('patch') - checkCommon(config, resourceType, resData.id, currentAccessToken) - checkCommonData(config, resourceType, attributes, resData.id) - return interceptRequest() + if (config.method !== 'get') { + expect(config.method).toBe('patch') + checkCommon(config, resourceType, resData.id, currentAccessToken) + checkCommonData(config, resourceType, attributes, resData.id) + } + return interceptRequest() }) await clp[resourceType].update(resData, params, CommonData.options) diff --git a/specs/resources/organizations.spec.ts b/specs/resources/organizations.spec.ts index 0e26b61..2a8bb7e 100644 --- a/specs/resources/organizations.spec.ts +++ b/specs/resources/organizations.spec.ts @@ -77,10 +77,12 @@ describe('Organizations resource', () => { const resData = { id: TestData.id, ...attributes} const intId = clp.addRequestInterceptor((config) => { - expect(config.method).toBe('patch') - checkCommon(config, resourceType, resData.id, currentAccessToken) - checkCommonData(config, resourceType, attributes, resData.id) - return interceptRequest() + if (config.method !== 'get') { + expect(config.method).toBe('patch') + checkCommon(config, resourceType, resData.id, currentAccessToken) + checkCommonData(config, resourceType, attributes, resData.id) + } + return interceptRequest() }) await clp[resourceType].update(resData, params, CommonData.options) diff --git a/specs/resources/permissions.spec.ts b/specs/resources/permissions.spec.ts index 29c5d82..880aa04 100644 --- a/specs/resources/permissions.spec.ts +++ b/specs/resources/permissions.spec.ts @@ -82,10 +82,12 @@ describe('Permissions resource', () => { const resData = { id: TestData.id, ...attributes} const intId = clp.addRequestInterceptor((config) => { - expect(config.method).toBe('patch') - checkCommon(config, resourceType, resData.id, currentAccessToken) - checkCommonData(config, resourceType, attributes, resData.id) - return interceptRequest() + if (config.method !== 'get') { + expect(config.method).toBe('patch') + checkCommon(config, resourceType, resData.id, currentAccessToken) + checkCommonData(config, resourceType, attributes, resData.id) + } + return interceptRequest() }) await clp[resourceType].update(resData, params, CommonData.options) diff --git a/specs/resources/roles.spec.ts b/specs/resources/roles.spec.ts index ee640de..8663a33 100644 --- a/specs/resources/roles.spec.ts +++ b/specs/resources/roles.spec.ts @@ -78,10 +78,12 @@ describe('Roles resource', () => { const resData = { id: TestData.id, ...attributes} const intId = clp.addRequestInterceptor((config) => { - expect(config.method).toBe('patch') - checkCommon(config, resourceType, resData.id, currentAccessToken) - checkCommonData(config, resourceType, attributes, resData.id) - return interceptRequest() + if (config.method !== 'get') { + expect(config.method).toBe('patch') + checkCommon(config, resourceType, resData.id, currentAccessToken) + checkCommonData(config, resourceType, attributes, resData.id) + } + return interceptRequest() }) await clp[resourceType].update(resData, params, CommonData.options) diff --git a/specs/resources/user.spec.ts b/specs/resources/user.spec.ts index c3dbb1d..a5dd710 100644 --- a/specs/resources/user.spec.ts +++ b/specs/resources/user.spec.ts @@ -29,10 +29,12 @@ describe('Users resource', () => { const resData = { id: TestData.id, ...attributes} const intId = clp.addRequestInterceptor((config) => { - expect(config.method).toBe('patch') - checkCommon(config, resourceType, resData.id, currentAccessToken) - checkCommonData(config, resourceType, attributes, resData.id) - return interceptRequest() + if (config.method !== 'get') { + expect(config.method).toBe('patch') + checkCommon(config, resourceType, resData.id, currentAccessToken) + checkCommonData(config, resourceType, attributes, resData.id) + } + return interceptRequest() }) await clp[resourceType].update(resData, params, CommonData.options) diff --git a/src/api.ts b/src/api.ts index e17eaaa..401a3b6 100644 --- a/src/api.ts +++ b/src/api.ts @@ -10,6 +10,10 @@ + + + + import type { Resource, ResourceRel } from './resource' import type { VersionType } from './resources/versions' From de0c6d66740c04fad9beacec267302a2bc0f4484 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 20 Dec 2023 13:46:53 +0000 Subject: [PATCH 20/30] chore(release): 1.0.0-beta.8 [skip ci] # [1.0.0-beta.8](https://github.com/commercelayer/provisioning-sdk/compare/v1.0.0-beta.7...v1.0.0-beta.8) (2023-12-20) ### Bug Fixes * fix singleton spec ([5c617a8](https://github.com/commercelayer/provisioning-sdk/commit/5c617a8af5c7682a38e645cf86607214c4cbd1de)) ### Features * add singleton update ([71e0e7b](https://github.com/commercelayer/provisioning-sdk/commit/71e0e7b3a10ec3210da8363ccb5bc9986a4673a1)) --- CHANGELOG.md | 12 ++++++++++++ package.json | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 515b2a8..15c73e6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,15 @@ +# [1.0.0-beta.8](https://github.com/commercelayer/provisioning-sdk/compare/v1.0.0-beta.7...v1.0.0-beta.8) (2023-12-20) + + +### Bug Fixes + +* fix singleton spec ([5c617a8](https://github.com/commercelayer/provisioning-sdk/commit/5c617a8af5c7682a38e645cf86607214c4cbd1de)) + + +### Features + +* add singleton update ([71e0e7b](https://github.com/commercelayer/provisioning-sdk/commit/71e0e7b3a10ec3210da8363ccb5bc9986a4673a1)) + # [1.0.0-beta.7](https://github.com/commercelayer/provisioning-sdk/compare/v1.0.0-beta.6...v1.0.0-beta.7) (2023-12-13) diff --git a/package.json b/package.json index 6fb03af..dd57df8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@commercelayer/provisioning-sdk", - "version": "1.0.0-beta.7", + "version": "1.0.0-beta.8", "main": "lib/cjs/index.js", "types": "lib/cjs/index.d.ts", "module": "lib/esm/index.js", From 5f5d4f1c8be9ae70db4765bc8e6f519597db7b17 Mon Sep 17 00:00:00 2001 From: Pierluigi Viti Date: Wed, 20 Dec 2023 17:15:10 +0100 Subject: [PATCH 21/30] feat: add singletons list and functions --- gen/generator.ts | 10 +++++++--- src/api.ts | 16 ++++++++++++++-- src/static.ts | 8 ++++++++ 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/gen/generator.ts b/gen/generator.ts index ff53c25..00d422b 100644 --- a/gen/generator.ts +++ b/gen/generator.ts @@ -326,6 +326,10 @@ const updateApiResources = (resources: { [key: string]: ApiRes }): void => { const resStopIdx = findLine('##__API_RESOURCE_LIST_STOP__##', lines).index lines.splice(resStartIdx, resStopIdx - resStartIdx, types.join(',\n')) + const rsStartIdx = findLine('##__API_RESOURCE_SINGLETON_START__##', lines).index + 1 + const rsStopIdx = findLine('##__API_RESOURCE_SINGLETON_STOP__##', lines).index + lines.splice(rsStartIdx, rsStopIdx - rsStartIdx, singletons.join(',\n')) + /* const mapStartIdx = findLine('##__API_RESOURCE_MAP_START__##', lines).index + 1 const mapStopIdx = findLine('##__API_RESOURCE_MAP_STOP__##', lines).index @@ -334,9 +338,9 @@ const updateApiResources = (resources: { [key: string]: ApiRes }): void => { ) */ - const rsStartIdx = findLine('##__API_RESOURCE_SINGLETON_START__##', lines).index + 1 - const rsStopIdx = findLine('##__API_RESOURCE_SINGLETON_STOP__##', lines).index - lines.splice(rsStartIdx, rsStopIdx - rsStartIdx, singletons.join('\n|')) + const rlStartIdx = findLine('##__API_RESOURCE_NOT_LISTABLE_START__##', lines).index + 1 + const rlStopIdx = findLine('##__API_RESOURCE_NOT_LISTABLE_STOP__##', lines).index + lines.splice(rlStartIdx, rlStopIdx - rlStartIdx, singletons.join('\n|')) const rcStartIdx = findLine('##__API_RESOURCE_CREATABLE_START__##', lines).index + 1 const rcStopIdx = findLine('##__API_RESOURCE_CREATABLE_STOP__##', lines).index diff --git a/src/api.ts b/src/api.ts index 401a3b6..5c6bd28 100644 --- a/src/api.ts +++ b/src/api.ts @@ -1,6 +1,12 @@ + 'user' + + 'user' + + + @@ -60,6 +66,12 @@ export const resourceList = [ ] as const +export const singletonList = [ +// ##__API_RESOURCE_SINGLETON_START__## + 'user' +// ##__API_RESOURCE_SINGLETON_STOP__## +] as const + // Retrievable resources export type RetrievableResourceType = ResourceTypeLock @@ -71,9 +83,9 @@ export type RetrievableResource = Resource & { // Listable resources export type ListableResourceType = Exclude export type ListableResource = Resource & { diff --git a/src/static.ts b/src/static.ts index d89abe0..4debfab 100644 --- a/src/static.ts +++ b/src/static.ts @@ -12,6 +12,14 @@ export const CommerceLayerProvisioningStatic = { return sort? [ ...api.resourceList ].sort() : api.resourceList }, + singletons: (sort?: boolean): readonly string[] => { + return sort? [ ...api.singletonList ].sort() : api.singletonList + }, + + isSingleton: (resource: api.ResourceTypeLock): boolean => { + return (api.singletonList as unknown as api.ResourceTypeLock[]).includes(resource) + }, + isSdkError: (error: unknown): error is SdkError => { return SdkError.isSdkError(error) }, From ca338e63574b1c0aa8301d2de2676b4e32e991cd Mon Sep 17 00:00:00 2001 From: Pierluigi Viti Date: Wed, 20 Dec 2023 17:19:08 +0100 Subject: [PATCH 22/30] feat: add singletons functions to client instance --- src/commercelayer.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/commercelayer.ts b/src/commercelayer.ts index badb4e5..64c2710 100644 --- a/src/commercelayer.ts +++ b/src/commercelayer.ts @@ -91,8 +91,16 @@ class CommerceLayerProvisioningClient { resources(): readonly string[] { return CommerceLayerProvisioningStatic.resources() } - + singletons(): readonly string[] { + return CommerceLayerProvisioningStatic.singletons() + } + + isSingleton(resource: api.ResourceTypeLock): boolean { + return CommerceLayerProvisioningStatic.isSingleton(resource) + } + + isApiError(error: any): error is ApiError { return CommerceLayerProvisioningStatic.isApiError(error) } From 33d0bf92efbf75e717a0dcd4872b41d36d36349e Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 20 Dec 2023 16:19:45 +0000 Subject: [PATCH 23/30] chore(release): 1.0.0-beta.9 [skip ci] # [1.0.0-beta.9](https://github.com/commercelayer/provisioning-sdk/compare/v1.0.0-beta.8...v1.0.0-beta.9) (2023-12-20) ### Features * add singletons functions to client instance ([ca338e6](https://github.com/commercelayer/provisioning-sdk/commit/ca338e63574b1c0aa8301d2de2676b4e32e991cd)) * add singletons list and functions ([5f5d4f1](https://github.com/commercelayer/provisioning-sdk/commit/5f5d4f1c8be9ae70db4765bc8e6f519597db7b17)) --- CHANGELOG.md | 8 ++++++++ package.json | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 15c73e6..b055745 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +# [1.0.0-beta.9](https://github.com/commercelayer/provisioning-sdk/compare/v1.0.0-beta.8...v1.0.0-beta.9) (2023-12-20) + + +### Features + +* add singletons functions to client instance ([ca338e6](https://github.com/commercelayer/provisioning-sdk/commit/ca338e63574b1c0aa8301d2de2676b4e32e991cd)) +* add singletons list and functions ([5f5d4f1](https://github.com/commercelayer/provisioning-sdk/commit/5f5d4f1c8be9ae70db4765bc8e6f519597db7b17)) + # [1.0.0-beta.8](https://github.com/commercelayer/provisioning-sdk/compare/v1.0.0-beta.7...v1.0.0-beta.8) (2023-12-20) diff --git a/package.json b/package.json index dd57df8..8656f37 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@commercelayer/provisioning-sdk", - "version": "1.0.0-beta.8", + "version": "1.0.0-beta.9", "main": "lib/cjs/index.js", "types": "lib/cjs/index.d.ts", "module": "lib/esm/index.js", From e923c9ce69f5b5ea43698bd1df67f26783010d1e Mon Sep 17 00:00:00 2001 From: Pierluigi Viti Date: Wed, 20 Dec 2023 17:21:57 +0100 Subject: [PATCH 24/30] fix: fix singleton patch with body id --- src/resource.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/resource.ts b/src/resource.ts index c76d2b2..0c5f214 100644 --- a/src/resource.ts +++ b/src/resource.ts @@ -9,6 +9,7 @@ import type { InterceptorManager } from './interceptor' import { ErrorType, SdkError } from './error' import Debug from './debug' +import { CommerceLayerProvisioningStatic } from './static' const debug = Debug('resource') @@ -142,7 +143,7 @@ class ResourceAdapter { async retrieve(resource: ResourceId | ResourceType, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { - const singleton = !('id' in resource) || !resource.id + const singleton = !('id' in resource) || CommerceLayerProvisioningStatic.isSingleton(resource.type) debug('retrieve:%s %o, %O, %O', (singleton? ' singleton,' : ''), resource, params || {}, options || {}) @@ -199,7 +200,7 @@ class ResourceAdapter { async update(resource: U & ResourceId, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { - const singleton = !('id' in resource) || !resource.id + const singleton = !('id' in resource) || CommerceLayerProvisioningStatic.isSingleton(resource.type) debug('update:%s %o, %O, %O', (singleton? ' singleton,' : ''), resource, params || {}, options || {}) From 4e20d33ce4305406605630421a8697d6628bceed Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 20 Dec 2023 16:22:43 +0000 Subject: [PATCH 25/30] chore(release): 1.0.0-beta.10 [skip ci] # [1.0.0-beta.10](https://github.com/commercelayer/provisioning-sdk/compare/v1.0.0-beta.9...v1.0.0-beta.10) (2023-12-20) ### Bug Fixes * fix singleton patch with body id ([e923c9c](https://github.com/commercelayer/provisioning-sdk/commit/e923c9ce69f5b5ea43698bd1df67f26783010d1e)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b055745..776f828 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [1.0.0-beta.10](https://github.com/commercelayer/provisioning-sdk/compare/v1.0.0-beta.9...v1.0.0-beta.10) (2023-12-20) + + +### Bug Fixes + +* fix singleton patch with body id ([e923c9c](https://github.com/commercelayer/provisioning-sdk/commit/e923c9ce69f5b5ea43698bd1df67f26783010d1e)) + # [1.0.0-beta.9](https://github.com/commercelayer/provisioning-sdk/compare/v1.0.0-beta.8...v1.0.0-beta.9) (2023-12-20) diff --git a/package.json b/package.json index 8656f37..4f692e3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@commercelayer/provisioning-sdk", - "version": "1.0.0-beta.9", + "version": "1.0.0-beta.10", "main": "lib/cjs/index.js", "types": "lib/cjs/index.d.ts", "module": "lib/esm/index.js", From 8e3913557a272b3b31d168b3c54ced26128ed7c3 Mon Sep 17 00:00:00 2001 From: Pierluigi Viti Date: Wed, 10 Jan 2024 13:45:33 +0100 Subject: [PATCH 26/30] fix: update dependencies and fix lint errors --- .github/dependabot.yml | 11 - .github/release.yml | 24 - .github/workflows/publish.yml | 56 ++ package.json | 8 +- pnpm-lock.yaml | 1139 +++++++++++++++------------------ src/client.ts | 2 +- src/common.ts | 6 +- src/error.ts | 6 +- src/jsonapi.ts | 8 +- src/resource.ts | 18 +- 10 files changed, 582 insertions(+), 696 deletions(-) delete mode 100644 .github/dependabot.yml delete mode 100644 .github/release.yml create mode 100644 .github/workflows/publish.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index 808ccab..0000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,11 +0,0 @@ -# To get started with Dependabot version updates, you'll need to specify which -# package ecosystems to update and where the package manifests are located. -# Please see the documentation for all configuration options: -# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates - -version: 2 -updates: - - package-ecosystem: "npm" # See documentation for possible values - directory: "/" # Location of package manifests - schedule: - interval: "monthly" # daily, weekly, monthly diff --git a/.github/release.yml b/.github/release.yml deleted file mode 100644 index 0fa560f..0000000 --- a/.github/release.yml +++ /dev/null @@ -1,24 +0,0 @@ -# .github/release.yaml - -changelog: - exclude: - labels: - - ignore-for-release - authors: - - octocat - categories: - - title: 💥 Breaking Change - labels: - - breaking-change - - title: 🚀 Enhancement - labels: - - enhancement - - title: 🐛 Bug Fix - labels: - - bug - - title: 📝 Documentation - labels: - - documentation - - title: Other Changes - labels: - - "*" diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..a841724 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,56 @@ +name: Release +on: + release: + types: [ published ] +jobs: + publish: + name: Publish + runs-on: ubuntu-latest + steps: + - name: Post to a Slack channel + id: slack + uses: slackapi/slack-github-action@v1 + with: + payload: | + { + "text": "New release ${{github.ref_name}} for ${{github.event.repository.name}}.", + "blocks": [ + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "New release for <${{github.event.repository.html_url}}|`${{github.event.repository.name}}`>\n*<${{github.event.release.html_url}}|release notes>*" + } + }, + { + "type": "section", + "fields": [ + { + "type": "mrkdwn", + "text": "*Project:*\n${{github.event.repository.name}}" + }, + { + "type": "mrkdwn", + "text": "*Version:*\n${{github.ref_name}}" + } + ] + }, + { + "type": "context", + "elements": [ + { + "type": "image", + "image_url": "${{github.event.sender.avatar_url}}", + "alt_text": "${{github.event.sender.login}}" + }, + { + "type": "mrkdwn", + "text": "*${{github.event.sender.login}}* has triggered this release." + } + ] + } + ] + } + env: + SLACK_WEBHOOK_URL: ${{ secrets.PIPELINE_SLACK_CHANNEL_WEBHOOK_URL }} + SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK diff --git a/package.json b/package.json index 4f692e3..19820ac 100644 --- a/package.json +++ b/package.json @@ -33,19 +33,19 @@ "node": ">=16 || ^14.17" }, "dependencies": { - "axios": "1.5.1" + "axios": "1.6.5" }, "devDependencies": { - "@babel/preset-env": "^7.23.6", + "@babel/preset-env": "^7.23.8", "@babel/preset-typescript": "^7.23.3", - "@commercelayer/eslint-config-ts": "1.1.0", + "@commercelayer/eslint-config-ts": "1.3.0", "@commercelayer/js-auth": "^4.2.0", "@semantic-release/changelog": "^6.0.3", "@semantic-release/git": "^10.0.1", "@types/debug": "^4.1.12", "@types/jest": "^29.5.11", "@types/lodash": "^4.14.202", - "@types/node": "^20.10.5", + "@types/node": "^20.10.8", "dotenv": "^16.3.1", "eslint": "^8.56.0", "inflector-js": "^1.0.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 76a0c92..175e6f2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,19 +9,19 @@ overrides: dependencies: axios: - specifier: 1.5.1 - version: 1.5.1 + specifier: 1.6.5 + version: 1.6.5 devDependencies: '@babel/preset-env': - specifier: ^7.23.6 - version: 7.23.6(@babel/core@7.23.6) + specifier: ^7.23.8 + version: 7.23.8(@babel/core@7.23.7) '@babel/preset-typescript': specifier: ^7.23.3 - version: 7.23.3(@babel/core@7.23.6) + version: 7.23.3(@babel/core@7.23.7) '@commercelayer/eslint-config-ts': - specifier: 1.1.0 - version: 1.1.0(eslint@8.56.0)(typescript@5.3.3) + specifier: 1.3.0 + version: 1.3.0(eslint@8.56.0)(typescript@5.3.3) '@commercelayer/js-auth': specifier: ^4.2.0 version: 4.2.0 @@ -41,8 +41,8 @@ devDependencies: specifier: ^4.14.202 version: 4.14.202 '@types/node': - specifier: ^20.10.5 - version: 20.10.5 + specifier: ^20.10.8 + version: 20.10.8 dotenv: specifier: ^16.3.1 version: 16.3.1 @@ -54,7 +54,7 @@ devDependencies: version: 1.0.1 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.10.5)(ts-node@10.9.2) + version: 29.7.0(@types/node@20.10.8)(ts-node@10.9.2) json-typescript: specifier: ^1.1.2 version: 1.1.2 @@ -72,7 +72,7 @@ devDependencies: version: 22.0.12(typescript@5.3.3) ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@20.10.5)(typescript@5.3.3) + version: 10.9.2(@types/node@20.10.8)(typescript@5.3.3) typescript: specifier: ^5.3.3 version: 5.3.3 @@ -105,19 +105,19 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/core@7.23.6: - resolution: {integrity: sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==} + /@babel/core@7.23.7: + resolution: {integrity: sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.1 '@babel/code-frame': 7.23.5 '@babel/generator': 7.23.6 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) - '@babel/helpers': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) + '@babel/helpers': 7.23.8 '@babel/parser': 7.23.6 '@babel/template': 7.22.15 - '@babel/traverse': 7.23.6 + '@babel/traverse': 7.23.7 '@babel/types': 7.23.6 convert-source-map: 2.0.0 debug: 4.3.4 @@ -163,42 +163,42 @@ packages: semver: 6.3.1 dev: true - /@babel/helper-create-class-features-plugin@7.23.6(@babel/core@7.23.6): - resolution: {integrity: sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw==} + /@babel/helper-create-class-features-plugin@7.23.7(@babel/core@7.23.7): + resolution: {integrity: sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.6) + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.7) '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 semver: 6.3.1 dev: true - /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.6): + /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.7): resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-annotate-as-pure': 7.22.5 regexpu-core: 5.3.2 semver: 6.3.1 dev: true - /@babel/helper-define-polyfill-provider@0.4.4(@babel/core@7.23.6): + /@babel/helper-define-polyfill-provider@0.4.4(@babel/core@7.23.7): resolution: {integrity: sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 debug: 4.3.4 @@ -242,13 +242,13 @@ packages: '@babel/types': 7.23.6 dev: true - /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.6): + /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-module-imports': 7.22.15 '@babel/helper-simple-access': 7.22.5 @@ -268,25 +268,25 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.6): + /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.7): resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-wrap-function': 7.22.20 dev: true - /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.6): + /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.7): resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 @@ -337,12 +337,12 @@ packages: '@babel/types': 7.23.6 dev: true - /@babel/helpers@7.23.6: - resolution: {integrity: sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==} + /@babel/helpers@7.23.8: + resolution: {integrity: sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.22.15 - '@babel/traverse': 7.23.6 + '@babel/traverse': 7.23.7 '@babel/types': 7.23.6 transitivePeerDependencies: - supports-color @@ -365,914 +365,913 @@ packages: '@babel/types': 7.23.6 dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.6): + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.6): + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.7) dev: true - /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.3(@babel/core@7.23.6): - resolution: {integrity: sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==} + /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.7(@babel/core@7.23.7): + resolution: {integrity: sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.6): + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.7): resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 dev: true - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.6): + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.7): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.6): + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.7): resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.6): + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.7): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.6): + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.7): resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.6): + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.7): resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.6): + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.7): resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.6): + /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.6): + /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.6): + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.7): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.6): + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.7): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.6): + /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.6): + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.7): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.6): + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.7): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.6): + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.7): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.6): + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.7): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.6): + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.7): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.6): + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.7): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.6): + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.7): resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.6): + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.7): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.6): + /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.6): + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.7): resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) + '@babel/core': 7.23.7 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.6): + /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-async-generator-functions@7.23.4(@babel/core@7.23.6): - resolution: {integrity: sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==} + /@babel/plugin-transform-async-generator-functions@7.23.7(@babel/core@7.23.7): + resolution: {integrity: sha512-PdxEpL71bJp1byMG0va5gwQcXHxuEYC/BgI/e88mGTtohbZN28O5Yit0Plkkm/dBzCF/BxmbNcses1RH1T+urA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.6) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.6) + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.7) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.7) dev: true - /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.6): + /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-module-imports': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.6) + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.7) dev: true - /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.6): + /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.23.6): + /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.23.7): resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.6): + /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) + '@babel/core': 7.23.7 + '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.23.6): + /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.23.7): resolution: {integrity: sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) + '@babel/core': 7.23.7 + '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.6) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.7) dev: true - /@babel/plugin-transform-classes@7.23.5(@babel/core@7.23.6): - resolution: {integrity: sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==} + /@babel/plugin-transform-classes@7.23.8(@babel/core@7.23.7): + resolution: {integrity: sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.6) + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.7) '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 dev: true - /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.6): + /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 '@babel/template': 7.22.15 dev: true - /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.6): + /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.6): + /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) + '@babel/core': 7.23.7 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.6): + /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.23.6): + /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.23.7): resolution: {integrity: sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.7) dev: true - /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.6): + /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.23.6): + /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.23.7): resolution: {integrity: sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.7) dev: true - /@babel/plugin-transform-for-of@7.23.6(@babel/core@7.23.6): + /@babel/plugin-transform-for-of@7.23.6(@babel/core@7.23.7): resolution: {integrity: sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: true - /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.6): + /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-function-name': 7.23.0 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.23.6): + /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.23.7): resolution: {integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.7) dev: true - /@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.6): + /@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.23.6): + /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.23.7): resolution: {integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.6) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.7) dev: true - /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.6): + /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.6): + /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) + '@babel/core': 7.23.7 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.6): + /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) + '@babel/core': 7.23.7 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-simple-access': 7.22.5 dev: true - /@babel/plugin-transform-modules-systemjs@7.23.3(@babel/core@7.23.6): + /@babel/plugin-transform-modules-systemjs@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-identifier': 7.22.20 dev: true - /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.6): + /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) + '@babel/core': 7.23.7 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.6): + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.7): resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) + '@babel/core': 7.23.7 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.6): + /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.23.6): + /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.23.7): resolution: {integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.7) dev: true - /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.23.6): + /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.23.7): resolution: {integrity: sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.7) dev: true - /@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.23.6): + /@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.23.7): resolution: {integrity: sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.7) dev: true - /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.6): + /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.6) + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.7) dev: true - /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.23.6): + /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.23.7): resolution: {integrity: sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.7) dev: true - /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.23.6): + /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.23.7): resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.7) dev: true - /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.6): + /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.6): + /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) + '@babel/core': 7.23.7 + '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.23.6): + /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.23.7): resolution: {integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) + '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.6) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.7) dev: true - /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.6): + /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.6): + /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 regenerator-transform: 0.15.2 dev: true - /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.6): + /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.6): + /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.6): + /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: true - /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.6): + /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.6): + /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.6): + /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-typescript@7.23.6(@babel/core@7.23.6): + /@babel/plugin-transform-typescript@7.23.6(@babel/core@7.23.7): resolution: {integrity: sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) + '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.7) dev: true - /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.6): + /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.6): + /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) + '@babel/core': 7.23.7 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.6): + /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) + '@babel/core': 7.23.7 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.6): + /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.6 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) + '@babel/core': 7.23.7 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/preset-env@7.23.6(@babel/core@7.23.6): - resolution: {integrity: sha512-2XPn/BqKkZCpzYhUUNZ1ssXw7DcXfKQEjv/uXZUXgaebCMYmkEsfZ2yY+vv+xtXv50WmL5SGhyB6/xsWxIvvOQ==} + /@babel/preset-env@7.23.8(@babel/core@7.23.7): + resolution: {integrity: sha512-lFlpmkApLkEP6woIKprO6DO60RImpatTQKtz4sUcDjVcK8M8mQ4sZsuxaTMNOZf0sqAq/ReYW1ZBHnOQwKpLWA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.6) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.6) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.6) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.6) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.6) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.6) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.6) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.6) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.6) - '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-async-generator-functions': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-classes': 7.23.5(@babel/core@7.23.6) - '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.23.6) - '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-modules-systemjs': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.6) - '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.6) - '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.6) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.6) - babel-plugin-polyfill-corejs2: 0.4.7(@babel/core@7.23.6) - babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.23.6) - babel-plugin-polyfill-regenerator: 0.5.4(@babel/core@7.23.6) - core-js-compat: 3.34.0 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.7(@babel/core@7.23.7) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.7) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.7) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.7) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.7) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.7) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.7) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.7) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.7) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-async-generator-functions': 7.23.7(@babel/core@7.23.7) + '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-classes': 7.23.8(@babel/core@7.23.7) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.23.7) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-modules-systemjs': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.7) + '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.7) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.7) + babel-plugin-polyfill-corejs2: 0.4.7(@babel/core@7.23.7) + babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.23.7) + babel-plugin-polyfill-regenerator: 0.5.4(@babel/core@7.23.7) + core-js-compat: 3.35.0 semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true - /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.6): + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.7): resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 '@babel/types': 7.23.6 esutils: 2.0.3 dev: true - /@babel/preset-typescript@7.23.3(@babel/core@7.23.6): + /@babel/preset-typescript@7.23.3(@babel/core@7.23.7): resolution: {integrity: sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.23.6) + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.23.7) dev: true /@babel/regjsgen@0.8.0: resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} dev: true - /@babel/runtime@7.23.6: - resolution: {integrity: sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==} + /@babel/runtime@7.23.8: + resolution: {integrity: sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 @@ -1287,8 +1286,8 @@ packages: '@babel/types': 7.23.6 dev: true - /@babel/traverse@7.23.6: - resolution: {integrity: sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==} + /@babel/traverse@7.23.7: + resolution: {integrity: sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.23.5 @@ -1325,20 +1324,20 @@ packages: dev: true optional: true - /@commercelayer/eslint-config-ts@1.1.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-OOzV3RPN7JlEZkwNxWVHdRRknjuLboB/CwxeS832/Kd5sMvOHyaYymNVSpG2tiQj7aFsvtfK8m1umM7Lhod6AA==} + /@commercelayer/eslint-config-ts@1.3.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-N0ADyBWf2oPD4q0xVA7T18C+sYfAGmxiLPU8c99k3Mn9nN++gKJxXOL16zClokmfdEYn481nvmQHcmUaKOJYZw==} peerDependencies: eslint: '>=8.0' typescript: '>=5.0' dependencies: - '@typescript-eslint/eslint-plugin': 6.15.0(@typescript-eslint/parser@6.15.0)(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/parser': 6.15.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/eslint-plugin': 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.18.1(eslint@8.56.0)(typescript@5.3.3) eslint: 8.56.0 eslint-config-prettier: 9.1.0(eslint@8.56.0) - eslint-config-standard-with-typescript: 39.1.1(@typescript-eslint/eslint-plugin@6.15.0)(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.5.0)(eslint-plugin-promise@6.1.1)(eslint@8.56.0)(typescript@5.3.3) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.15.0)(eslint@8.56.0) - eslint-plugin-n: 16.5.0(eslint@8.56.0) - eslint-plugin-prettier: 5.1.0(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.1.1) + eslint-config-standard-with-typescript: 42.0.0(@typescript-eslint/eslint-plugin@6.18.1)(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.6.2)(eslint-plugin-promise@6.1.1)(eslint@8.56.0)(typescript@5.3.3) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0) + eslint-plugin-n: 16.6.2(eslint@8.56.0) + eslint-plugin-prettier: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.1.1) eslint-plugin-promise: 6.1.1(eslint@8.56.0) prettier: 3.1.1 typescript: 5.3.3 @@ -1649,7 +1648,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.10.5 + '@types/node': 20.10.8 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -1670,14 +1669,14 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.5 + '@types/node': 20.10.8 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.10.5)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@20.10.8)(ts-node@10.9.2) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -1705,7 +1704,7 @@ packages: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.5 + '@types/node': 20.10.8 jest-mock: 29.7.0 dev: true @@ -1732,7 +1731,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.10.5 + '@types/node': 20.10.8 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -1765,7 +1764,7 @@ packages: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.20 - '@types/node': 20.10.5 + '@types/node': 20.10.8 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -1827,7 +1826,7 @@ packages: resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.20 babel-plugin-istanbul: 6.1.1 @@ -1853,7 +1852,7 @@ packages: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.10.5 + '@types/node': 20.10.8 '@types/yargs': 17.0.32 chalk: 4.1.2 dev: true @@ -2020,16 +2019,9 @@ packages: dev: true optional: true - /@pkgr/utils@2.4.2: - resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} + /@pkgr/core@0.1.0: + resolution: {integrity: sha512-Zwq5OCzuwJC2jwqmpEQt7Ds1DTi6BWSwoGkbb1n9pO3hzb35BoJELx7c0T23iDkBGkh2e7tvOtjF3tr3OaQHDQ==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - dependencies: - cross-spawn: 7.0.3 - fast-glob: 3.3.2 - is-glob: 4.0.3 - open: 9.1.0 - picocolors: 1.0.0 - tslib: 2.6.2 dev: true /@pnpm/config.env-replace@1.1.0: @@ -2113,8 +2105,8 @@ packages: - supports-color dev: true - /@semantic-release/github@9.2.5(semantic-release@22.0.12): - resolution: {integrity: sha512-XWumFEOHiWllekymZjeVgkQCJ4YnD8020ZspAHYIIBNX8O4d/1ldeU5iNXu6NGkKlOCokyXh13KwVP0UEMm5kw==} + /@semantic-release/github@9.2.6(semantic-release@22.0.12): + resolution: {integrity: sha512-shi+Lrf6exeNZF+sBhK+P011LSbhmIAoUEgEY6SsxF8irJ+J2stwI5jkyDQ+4gzYyDImzV6LCKdYB9FXnQRWKA==} engines: {node: '>=18'} peerDependencies: semantic-release: '>=20.1.0' @@ -2133,7 +2125,7 @@ packages: issue-parser: 6.0.0 lodash-es: 4.17.21 mime: 4.0.1 - p-filter: 3.0.0 + p-filter: 4.1.0 semantic-release: 22.0.12(typescript@5.3.3) url-join: 5.0.0 transitivePeerDependencies: @@ -2232,7 +2224,7 @@ packages: '@babel/types': 7.23.6 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.4 + '@types/babel__traverse': 7.20.5 dev: true /@types/babel__generator@7.6.8: @@ -2248,8 +2240,8 @@ packages: '@babel/types': 7.23.6 dev: true - /@types/babel__traverse@7.20.4: - resolution: {integrity: sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==} + /@types/babel__traverse@7.20.5: + resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==} dependencies: '@babel/types': 7.23.6 dev: true @@ -2263,7 +2255,7 @@ packages: /@types/graceful-fs@4.1.9: resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} dependencies: - '@types/node': 20.10.5 + '@types/node': 20.10.8 dev: true /@types/istanbul-lib-coverage@2.0.6: @@ -2305,8 +2297,8 @@ packages: resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} dev: true - /@types/node@20.10.5: - resolution: {integrity: sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==} + /@types/node@20.10.8: + resolution: {integrity: sha512-f8nQs3cLxbAFc00vEU59yf9UyGUftkPaLGfvbVOIDdx2i1b8epBqj2aNGyP19fiyXWvlmZ7qC1XLjAzw/OKIeA==} dependencies: undici-types: 5.26.5 dev: true @@ -2333,8 +2325,8 @@ packages: '@types/yargs-parser': 21.0.3 dev: true - /@typescript-eslint/eslint-plugin@6.15.0(@typescript-eslint/parser@6.15.0)(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-j5qoikQqPccq9QoBAupOP+CBu8BaJ8BLjaXSioDISeTZkVO3ig7oSIKh3H+rEpee7xCXtWwSB4KIL5l6hWZzpg==} + /@typescript-eslint/eslint-plugin@6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-nISDRYnnIpk7VCFrGcu1rnZfM1Dh9LRHnfgdkjcbi/l7g16VYRri3TjXi9Ir4lOZSw5N/gnV/3H7jIPQ8Q4daA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -2345,11 +2337,11 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.15.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 6.15.0 - '@typescript-eslint/type-utils': 6.15.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.15.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.15.0 + '@typescript-eslint/parser': 6.18.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.18.1 + '@typescript-eslint/type-utils': 6.18.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/utils': 6.18.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.18.1 debug: 4.3.4 eslint: 8.56.0 graphemer: 1.4.0 @@ -2362,8 +2354,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@6.15.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-MkgKNnsjC6QwcMdlNAel24jjkEO/0hQaMDLqP4S9zq5HBAUJNQB6y+3DwLjX7b3l2b37eNAxMPLwb3/kh8VKdA==} + /@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-zct/MdJnVaRRNy9e84XnVtRv9Vf91/qqe+hZJtKanjojud4wAVy/7lXxJmMyX6X6J+xc6c//YEWvpeif8cAhWA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2372,10 +2364,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.15.0 - '@typescript-eslint/types': 6.15.0 - '@typescript-eslint/typescript-estree': 6.15.0(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.15.0 + '@typescript-eslint/scope-manager': 6.18.1 + '@typescript-eslint/types': 6.18.1 + '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.18.1 debug: 4.3.4 eslint: 8.56.0 typescript: 5.3.3 @@ -2383,16 +2375,16 @@ packages: - supports-color dev: true - /@typescript-eslint/scope-manager@6.15.0: - resolution: {integrity: sha512-+BdvxYBltqrmgCNu4Li+fGDIkW9n//NrruzG9X1vBzaNK+ExVXPoGB71kneaVw/Jp+4rH/vaMAGC6JfMbHstVg==} + /@typescript-eslint/scope-manager@6.18.1: + resolution: {integrity: sha512-BgdBwXPFmZzaZUuw6wKiHKIovms97a7eTImjkXCZE04TGHysG+0hDQPmygyvgtkoB/aOQwSM/nWv3LzrOIQOBw==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.15.0 - '@typescript-eslint/visitor-keys': 6.15.0 + '@typescript-eslint/types': 6.18.1 + '@typescript-eslint/visitor-keys': 6.18.1 dev: true - /@typescript-eslint/type-utils@6.15.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-CnmHKTfX6450Bo49hPg2OkIm/D/TVYV7jO1MCfPYGwf6x3GO0VU8YMO5AYMn+u3X05lRRxA4fWCz87GFQV6yVQ==} + /@typescript-eslint/type-utils@6.18.1(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-wyOSKhuzHeU/5pcRDP2G2Ndci+4g653V43gXTpt4nbyoIOAASkGDA9JIAgbQCdCkcr1MvpSYWzxTz0olCn8+/Q==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2401,8 +2393,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.15.0(typescript@5.3.3) - '@typescript-eslint/utils': 6.15.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.3.3) + '@typescript-eslint/utils': 6.18.1(eslint@8.56.0)(typescript@5.3.3) debug: 4.3.4 eslint: 8.56.0 ts-api-utils: 1.0.3(typescript@5.3.3) @@ -2411,13 +2403,13 @@ packages: - supports-color dev: true - /@typescript-eslint/types@6.15.0: - resolution: {integrity: sha512-yXjbt//E4T/ee8Ia1b5mGlbNj9fB9lJP4jqLbZualwpP2BCQ5is6BcWwxpIsY4XKAhmdv3hrW92GdtJbatC6dQ==} + /@typescript-eslint/types@6.18.1: + resolution: {integrity: sha512-4TuMAe+tc5oA7wwfqMtB0Y5OrREPF1GeJBAjqwgZh1lEMH5PJQgWgHGfYufVB51LtjD+peZylmeyxUXPfENLCw==} engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@6.15.0(typescript@5.3.3): - resolution: {integrity: sha512-7mVZJN7Hd15OmGuWrp2T9UvqR2Ecg+1j/Bp1jXUEY2GZKV6FXlOIoqVDmLpBiEiq3katvj/2n2mR0SDwtloCew==} + /@typescript-eslint/typescript-estree@6.18.1(typescript@5.3.3): + resolution: {integrity: sha512-fv9B94UAhywPRhUeeV/v+3SBDvcPiLxRZJw/xZeeGgRLQZ6rLMG+8krrJUyIf6s1ecWTzlsbp0rlw7n9sjufHA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -2425,11 +2417,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.15.0 - '@typescript-eslint/visitor-keys': 6.15.0 + '@typescript-eslint/types': 6.18.1 + '@typescript-eslint/visitor-keys': 6.18.1 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 + minimatch: 9.0.3 semver: 7.5.4 ts-api-utils: 1.0.3(typescript@5.3.3) typescript: 5.3.3 @@ -2437,8 +2430,8 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@6.15.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-eF82p0Wrrlt8fQSRL0bGXzK5nWPRV2dYQZdajcfzOD9+cQz9O7ugifrJxclB+xVOvWvagXfqS4Es7vpLP4augw==} + /@typescript-eslint/utils@6.18.1(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-zZmTuVZvD1wpoceHvoQpOiewmWu3uP9FuTWo8vqpy2ffsmfCE8mklRPi+vmnIYAIk9t/4kOThri2QCDgor+OpQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2446,9 +2439,9 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 6.15.0 - '@typescript-eslint/types': 6.15.0 - '@typescript-eslint/typescript-estree': 6.15.0(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.18.1 + '@typescript-eslint/types': 6.18.1 + '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.3.3) eslint: 8.56.0 semver: 7.5.4 transitivePeerDependencies: @@ -2456,11 +2449,11 @@ packages: - typescript dev: true - /@typescript-eslint/visitor-keys@6.15.0: - resolution: {integrity: sha512-1zvtdC1a9h5Tb5jU9x3ADNXO9yjP8rXlaoChu0DQX40vf5ACVpYIVIZhIMZ6d5sDXH7vq4dsZBT1fEGj8D2n2w==} + /@typescript-eslint/visitor-keys@6.18.1: + resolution: {integrity: sha512-/kvt0C5lRqGoCfsbmm7/CwMqoSkY3zzHLIjdhHZQW3VFrnz7ATecOHR7nb7V+xn4286MBxfnQfQhAmCI0u+bJA==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.15.0 + '@typescript-eslint/types': 6.18.1 eslint-visitor-keys: 3.4.3 dev: true @@ -2476,12 +2469,12 @@ packages: through: 2.3.8 dev: true - /acorn-jsx@5.3.2(acorn@8.11.2): + /acorn-jsx@5.3.2(acorn@8.11.3): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.11.2 + acorn: 8.11.3 dev: true /acorn-walk@8.3.1: @@ -2489,8 +2482,8 @@ packages: engines: {node: '>=0.4.0'} dev: true - /acorn@8.11.2: - resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} + /acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} engines: {node: '>=0.4.0'} hasBin: true dev: true @@ -2512,14 +2505,6 @@ packages: indent-string: 4.0.0 dev: true - /aggregate-error@4.0.1: - resolution: {integrity: sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==} - engines: {node: '>=12'} - dependencies: - clean-stack: 4.2.0 - indent-string: 5.0.0 - dev: true - /aggregate-error@5.0.0: resolution: {integrity: sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==} engines: {node: '>=18'} @@ -2690,27 +2675,27 @@ packages: engines: {node: '>= 0.4'} dev: true - /axios@1.5.1: - resolution: {integrity: sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==} + /axios@1.6.5: + resolution: {integrity: sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==} dependencies: - follow-redirects: 1.15.3 + follow-redirects: 1.15.4 form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug dev: false - /babel-jest@29.7.0(@babel/core@7.23.6): + /babel-jest@29.7.0(@babel/core@7.23.7): resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@jest/transform': 29.7.0 '@types/babel__core': 7.20.5 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.23.6) + babel-preset-jest: 29.6.3(@babel/core@7.23.7) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -2738,74 +2723,74 @@ packages: '@babel/template': 7.22.15 '@babel/types': 7.23.6 '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.20.4 + '@types/babel__traverse': 7.20.5 dev: true - /babel-plugin-polyfill-corejs2@0.4.7(@babel/core@7.23.6): + /babel-plugin-polyfill-corejs2@0.4.7(@babel/core@7.23.7): resolution: {integrity: sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.6 - '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.6) + '@babel/core': 7.23.7 + '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.7) semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-corejs3@0.8.7(@babel/core@7.23.6): + /babel-plugin-polyfill-corejs3@0.8.7(@babel/core@7.23.7): resolution: {integrity: sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.6 - '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.6) - core-js-compat: 3.34.0 + '@babel/core': 7.23.7 + '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.7) + core-js-compat: 3.35.0 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-regenerator@0.5.4(@babel/core@7.23.6): + /babel-plugin-polyfill-regenerator@0.5.4(@babel/core@7.23.7): resolution: {integrity: sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.6 - '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.6) + '@babel/core': 7.23.7 + '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.7) transitivePeerDependencies: - supports-color dev: true - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.6): + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.7): resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.6 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.6) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.6) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.6) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.6) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.6) - dev: true - - /babel-preset-jest@29.6.3(@babel/core@7.23.6): + '@babel/core': 7.23.7 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.7) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.7) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.7) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.7) + dev: true + + /babel-preset-jest@29.6.3(@babel/core@7.23.7): resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.6) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.7) dev: true /balanced-match@1.0.2: @@ -2816,22 +2801,10 @@ packages: resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} dev: true - /big-integer@1.6.52: - resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} - engines: {node: '>=0.6'} - dev: true - /bottleneck@2.19.5: resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==} dev: true - /bplist-parser@0.2.0: - resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} - engines: {node: '>= 5.10.0'} - dependencies: - big-integer: 1.6.52 - dev: true - /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -2857,8 +2830,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001570 - electron-to-chromium: 1.4.615 + caniuse-lite: 1.0.30001576 + electron-to-chromium: 1.4.626 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.22.2) dev: true @@ -2884,13 +2857,6 @@ packages: semver: 7.5.4 dev: true - /bundle-name@3.0.0: - resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} - engines: {node: '>=12'} - dependencies: - run-applescript: 5.0.0 - dev: true - /call-bind@1.0.5: resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} dependencies: @@ -2914,8 +2880,8 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite@1.0.30001570: - resolution: {integrity: sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==} + /caniuse-lite@1.0.30001576: + resolution: {integrity: sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==} dev: true /cardinal@2.1.1: @@ -2967,13 +2933,6 @@ packages: engines: {node: '>=6'} dev: true - /clean-stack@4.2.0: - resolution: {integrity: sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==} - engines: {node: '>=12'} - dependencies: - escape-string-regexp: 5.0.0 - dev: true - /clean-stack@5.2.0: resolution: {integrity: sha512-TyUIUJgdFnCISzG5zu3291TAsE77ddchd0bepon1VVQrKLGKFED4iXFEDQ24mIPdPBbyE16PK3F8MYE1CmcBEQ==} engines: {node: '>=14.16'} @@ -3099,8 +3058,8 @@ packages: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} dev: true - /core-js-compat@3.34.0: - resolution: {integrity: sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA==} + /core-js-compat@3.35.0: + resolution: {integrity: sha512-5blwFAddknKeNgsjBzilkdQ0+YK8L1PfqPYq40NOYMYFSS38qj+hpTcLLWwpIwA2A5bje/x5jmVn2tzUMg9IVw==} dependencies: browserslist: 4.22.2 dev: true @@ -3125,7 +3084,7 @@ packages: typescript: 5.3.3 dev: true - /create-jest@29.7.0(@types/node@20.10.5)(ts-node@10.9.2): + /create-jest@29.7.0(@types/node@20.10.8)(ts-node@10.9.2): resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -3134,7 +3093,7 @@ packages: chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.10.5)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@20.10.8)(ts-node@10.9.2) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -3210,24 +3169,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /default-browser-id@3.0.0: - resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} - engines: {node: '>=12'} - dependencies: - bplist-parser: 0.2.0 - untildify: 4.0.0 - dev: true - - /default-browser@4.0.0: - resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} - engines: {node: '>=14.16'} - dependencies: - bundle-name: 3.0.0 - default-browser-id: 3.0.0 - execa: 7.2.0 - titleize: 3.0.0 - dev: true - /define-data-property@1.1.1: resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} engines: {node: '>= 0.4'} @@ -3237,11 +3178,6 @@ packages: has-property-descriptors: 1.0.1 dev: true - /define-lazy-prop@3.0.0: - resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} - engines: {node: '>=12'} - dev: true - /define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} @@ -3322,8 +3258,8 @@ packages: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true - /electron-to-chromium@1.4.615: - resolution: {integrity: sha512-/bKPPcgZVUziECqDc+0HkT87+0zhaWSZHNXqF8FLd2lQcptpmUFwoCSWjCdOng9Gdq+afKArPdEg/0ZW461Eng==} + /electron-to-chromium@1.4.626: + resolution: {integrity: sha512-f7/be56VjRRQk+Ric6PmIrEtPcIqsn3tElyAu9Sh6egha2VLJ82qwkcOdcnT06W+Pb6RUulV1ckzrGbKzVcTHg==} dev: true /emittery@0.13.1: @@ -3390,7 +3326,7 @@ packages: object.assign: 4.1.5 regexp.prototype.flags: 1.5.1 safe-array-concat: 1.0.1 - safe-regex-test: 1.0.0 + safe-regex-test: 1.0.1 string.prototype.trim: 1.2.8 string.prototype.trimend: 1.0.7 string.prototype.trimstart: 1.0.7 @@ -3499,8 +3435,8 @@ packages: eslint: 8.56.0 dev: true - /eslint-config-standard-with-typescript@39.1.1(@typescript-eslint/eslint-plugin@6.15.0)(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.5.0)(eslint-plugin-promise@6.1.1)(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-t6B5Ep8E4I18uuoYeYxINyqcXb2UbC0SOOTxRtBSt2JUs+EzeXbfe2oaiPs71AIdnoWhXDO2fYOHz8df3kV84A==} + /eslint-config-standard-with-typescript@42.0.0(@typescript-eslint/eslint-plugin@6.18.1)(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.6.2)(eslint-plugin-promise@6.1.1)(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-m1/2g/Sicun1uFZOFigJVeOqo9fE7OkMsNtilcpHwdCdcGr21qsGqYiyxYSvvHfJwY7w5OTQH0hxk8sM2N5Ohg==} peerDependencies: '@typescript-eslint/eslint-plugin': ^6.4.0 eslint: ^8.0.1 @@ -3509,19 +3445,19 @@ packages: eslint-plugin-promise: ^6.0.0 typescript: '*' dependencies: - '@typescript-eslint/eslint-plugin': 6.15.0(@typescript-eslint/parser@6.15.0)(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/parser': 6.15.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/eslint-plugin': 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.18.1(eslint@8.56.0)(typescript@5.3.3) eslint: 8.56.0 - eslint-config-standard: 17.1.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.5.0)(eslint-plugin-promise@6.1.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.15.0)(eslint@8.56.0) - eslint-plugin-n: 16.5.0(eslint@8.56.0) + eslint-config-standard: 17.1.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.6.2)(eslint-plugin-promise@6.1.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0) + eslint-plugin-n: 16.6.2(eslint@8.56.0) eslint-plugin-promise: 6.1.1(eslint@8.56.0) typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /eslint-config-standard@17.1.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.5.0)(eslint-plugin-promise@6.1.1)(eslint@8.56.0): + /eslint-config-standard@17.1.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.6.2)(eslint-plugin-promise@6.1.1)(eslint@8.56.0): resolution: {integrity: sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==} engines: {node: '>=12.0.0'} peerDependencies: @@ -3531,8 +3467,8 @@ packages: eslint-plugin-promise: ^6.0.0 dependencies: eslint: 8.56.0 - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.15.0)(eslint@8.56.0) - eslint-plugin-n: 16.5.0(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0) + eslint-plugin-n: 16.6.2(eslint@8.56.0) eslint-plugin-promise: 6.1.1(eslint@8.56.0) dev: true @@ -3546,7 +3482,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.15.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.18.1)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -3567,7 +3503,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.15.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.18.1(eslint@8.56.0)(typescript@5.3.3) debug: 3.2.7 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 @@ -3587,7 +3523,7 @@ packages: eslint-compat-utils: 0.1.2(eslint@8.56.0) dev: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.15.0)(eslint@8.56.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -3597,7 +3533,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.15.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.18.1(eslint@8.56.0)(typescript@5.3.3) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -3606,7 +3542,7 @@ packages: doctrine: 2.1.0 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.15.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.18.1)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -3622,8 +3558,8 @@ packages: - supports-color dev: true - /eslint-plugin-n@16.5.0(eslint@8.56.0): - resolution: {integrity: sha512-Hw02Bj1QrZIlKyj471Tb1jSReTl4ghIMHGuBGiMVmw+s0jOPbI4CBuYpGbZr+tdQ+VAvSK6FDSta3J4ib/SKHQ==} + /eslint-plugin-n@16.6.2(eslint@8.56.0): + resolution: {integrity: sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==} engines: {node: '>=16.0.0'} peerDependencies: eslint: '>=7.0.0' @@ -3633,6 +3569,7 @@ packages: eslint: 8.56.0 eslint-plugin-es-x: 7.5.0(eslint@8.56.0) get-tsconfig: 4.7.2 + globals: 13.24.0 ignore: 5.3.0 is-builtin-module: 3.2.1 is-core-module: 2.13.1 @@ -3641,8 +3578,8 @@ packages: semver: 7.5.4 dev: true - /eslint-plugin-prettier@5.1.0(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.1.1): - resolution: {integrity: sha512-hQc+2zbnMeXcIkg+pKZtVa+3Yqx4WY7SMkn1PLZ4VbBEU7jJIpVn9347P8BBhTbz6ne85aXvQf30kvexcqBeWw==} + /eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.1.1): + resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: '@types/eslint': '>=8.0.0' @@ -3659,7 +3596,7 @@ packages: eslint-config-prettier: 9.1.0(eslint@8.56.0) prettier: 3.1.1 prettier-linter-helpers: 1.0.0 - synckit: 0.8.6 + synckit: 0.8.8 dev: true /eslint-plugin-promise@6.1.1(eslint@8.56.0): @@ -3735,8 +3672,8 @@ packages: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.11.2 - acorn-jsx: 5.3.2(acorn@8.11.2) + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) eslint-visitor-keys: 3.4.3 dev: true @@ -3785,21 +3722,6 @@ packages: strip-final-newline: 2.0.0 dev: true - /execa@7.2.0: - resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} - engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 4.3.1 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.1.0 - onetime: 6.0.0 - signal-exit: 3.0.7 - strip-final-newline: 3.0.0 - dev: true - /execa@8.0.1: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} @@ -3809,7 +3731,7 @@ packages: human-signals: 5.0.0 is-stream: 3.0.0 merge-stream: 2.0.0 - npm-run-path: 5.1.0 + npm-run-path: 5.2.0 onetime: 6.0.0 signal-exit: 4.1.0 strip-final-newline: 3.0.0 @@ -3946,8 +3868,8 @@ packages: resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} dev: true - /follow-redirects@1.15.3: - resolution: {integrity: sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==} + /follow-redirects@1.15.4: + resolution: {integrity: sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -4086,7 +4008,7 @@ packages: split2: 1.0.0 stream-combiner2: 1.1.1 through2: 2.0.5 - traverse: 0.6.7 + traverse: 0.6.8 dev: true /glob-parent@5.1.2: @@ -4285,11 +4207,6 @@ packages: engines: {node: '>=10.17.0'} dev: true - /human-signals@4.3.1: - resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} - engines: {node: '>=14.18.0'} - dev: true - /human-signals@5.0.0: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} @@ -4438,18 +4355,6 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - dev: true - - /is-docker@3.0.0: - resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - hasBin: true - dev: true - /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -4472,14 +4377,6 @@ packages: is-extglob: 2.1.1 dev: true - /is-inside-container@1.0.0: - resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} - engines: {node: '>=14.16'} - hasBin: true - dependencies: - is-docker: 3.0.0 - dev: true - /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} @@ -4570,13 +4467,6 @@ packages: call-bind: 1.0.5 dev: true - /is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - dependencies: - is-docker: 2.2.1 - dev: true - /isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} dev: true @@ -4609,7 +4499,7 @@ packages: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/parser': 7.23.6 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 @@ -4622,7 +4512,7 @@ packages: resolution: {integrity: sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==} engines: {node: '>=10'} dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/parser': 7.23.6 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 @@ -4690,7 +4580,7 @@ packages: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.5 + '@types/node': 20.10.8 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.1 @@ -4711,7 +4601,7 @@ packages: - supports-color dev: true - /jest-cli@29.7.0(@types/node@20.10.5)(ts-node@10.9.2): + /jest-cli@29.7.0(@types/node@20.10.8)(ts-node@10.9.2): resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -4725,10 +4615,10 @@ packages: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.10.5)(ts-node@10.9.2) + create-jest: 29.7.0(@types/node@20.10.8)(ts-node@10.9.2) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.10.5)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@20.10.8)(ts-node@10.9.2) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -4739,7 +4629,7 @@ packages: - ts-node dev: true - /jest-config@29.7.0(@types/node@20.10.5)(ts-node@10.9.2): + /jest-config@29.7.0(@types/node@20.10.8)(ts-node@10.9.2): resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -4751,11 +4641,11 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.5 - babel-jest: 29.7.0(@babel/core@7.23.6) + '@types/node': 20.10.8 + babel-jest: 29.7.0(@babel/core@7.23.7) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 @@ -4774,7 +4664,7 @@ packages: pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.2(@types/node@20.10.5)(typescript@5.3.3) + ts-node: 10.9.2(@types/node@20.10.8)(typescript@5.3.3) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -4815,7 +4705,7 @@ packages: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.5 + '@types/node': 20.10.8 jest-mock: 29.7.0 jest-util: 29.7.0 dev: true @@ -4831,7 +4721,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 20.10.5 + '@types/node': 20.10.8 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -4882,7 +4772,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.10.5 + '@types/node': 20.10.8 jest-util: 29.7.0 dev: true @@ -4937,7 +4827,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.5 + '@types/node': 20.10.8 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -4968,7 +4858,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.5 + '@types/node': 20.10.8 chalk: 4.1.2 cjs-module-lexer: 1.2.3 collect-v8-coverage: 1.0.2 @@ -4991,15 +4881,15 @@ packages: resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.23.6 + '@babel/core': 7.23.7 '@babel/generator': 7.23.6 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.6) - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.7) '@babel/types': 7.23.6 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.6) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.7) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -5020,7 +4910,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.10.5 + '@types/node': 20.10.8 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -5045,7 +4935,7 @@ packages: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.5 + '@types/node': 20.10.8 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -5057,13 +4947,13 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 20.10.5 + '@types/node': 20.10.8 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest@29.7.0(@types/node@20.10.5)(ts-node@10.9.2): + /jest@29.7.0(@types/node@20.10.8)(ts-node@10.9.2): resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -5076,7 +4966,7 @@ packages: '@jest/core': 29.7.0(ts-node@10.9.2) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.10.5)(ts-node@10.9.2) + jest-cli: 29.7.0(@types/node@20.10.8)(ts-node@10.9.2) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -5476,8 +5366,8 @@ packages: path-key: 3.1.1 dev: true - /npm-run-path@5.1.0: - resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + /npm-run-path@5.2.0: + resolution: {integrity: sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: path-key: 4.0.0 @@ -5627,16 +5517,6 @@ packages: mimic-fn: 4.0.0 dev: true - /open@9.1.0: - resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} - engines: {node: '>=14.16'} - dependencies: - default-browser: 4.0.0 - define-lazy-prop: 3.0.0 - is-inside-container: 1.0.0 - is-wsl: 2.2.0 - dev: true - /optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} @@ -5654,11 +5534,11 @@ packages: engines: {node: '>=12'} dev: true - /p-filter@3.0.0: - resolution: {integrity: sha512-QtoWLjXAW++uTX67HZQz1dbTpqBfiidsB6VtQUC9iR85S120+s0T5sO6s+B5MLzFcZkrEd/DGMmCjR+f2Qpxwg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + /p-filter@4.1.0: + resolution: {integrity: sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==} + engines: {node: '>=18'} dependencies: - p-map: 5.5.0 + p-map: 7.0.1 dev: true /p-is-promise@3.0.0: @@ -5708,11 +5588,9 @@ packages: p-limit: 3.1.0 dev: true - /p-map@5.5.0: - resolution: {integrity: sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==} - engines: {node: '>=12'} - dependencies: - aggregate-error: 4.0.1 + /p-map@7.0.1: + resolution: {integrity: sha512-2wnaR0XL/FDOj+TgpDuRb2KTjLnu3Fma6b1ZUwGY7LcqenMcvP/YFpjpbPKY6WVGsbuJZRuoUz8iPrt8ORnAFw==} + engines: {node: '>=18'} dev: true /p-reduce@2.1.0: @@ -5766,7 +5644,7 @@ packages: dependencies: '@babel/code-frame': 7.23.5 index-to-position: 0.1.2 - type-fest: 4.8.3 + type-fest: 4.9.0 dev: true /path-exists@3.0.0: @@ -5940,7 +5818,7 @@ packages: dependencies: find-up-simple: 1.0.0 read-pkg: 9.0.1 - type-fest: 4.8.3 + type-fest: 4.9.0 dev: true /read-pkg@9.0.1: @@ -5950,7 +5828,7 @@ packages: '@types/normalize-package-data': 2.4.4 normalize-package-data: 6.0.0 parse-json: 8.1.0 - type-fest: 4.8.3 + type-fest: 4.9.0 unicorn-magic: 0.1.0 dev: true @@ -5990,7 +5868,7 @@ packages: /regenerator-transform@0.15.2: resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.23.8 dev: true /regexp.prototype.flags@1.5.1: @@ -6080,13 +5958,6 @@ packages: glob: 7.2.3 dev: true - /run-applescript@5.0.0: - resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} - engines: {node: '>=12'} - dependencies: - execa: 5.1.1 - dev: true - /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: @@ -6107,8 +5978,9 @@ packages: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} dev: true - /safe-regex-test@1.0.0: - resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + /safe-regex-test@1.0.1: + resolution: {integrity: sha512-Y5NejJTTliTyY4H7sipGqY+RX5P87i3F7c4Rcepy72nq+mNLhIsD0W4c7kEmduMDQCSqtPsXPlSTsFhh2LQv+g==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 get-intrinsic: 1.2.2 @@ -6122,7 +5994,7 @@ packages: dependencies: '@semantic-release/commit-analyzer': 11.1.0(semantic-release@22.0.12) '@semantic-release/error': 4.0.0 - '@semantic-release/github': 9.2.5(semantic-release@22.0.12) + '@semantic-release/github': 9.2.6(semantic-release@22.0.12) '@semantic-release/npm': 11.0.2(semantic-release@22.0.12) '@semantic-release/release-notes-generator': 12.1.0(semantic-release@22.0.12) aggregate-error: 5.0.0 @@ -6459,11 +6331,11 @@ packages: engines: {node: '>= 0.4'} dev: true - /synckit@0.8.6: - resolution: {integrity: sha512-laHF2savN6sMeHCjLRkheIU4wo3Zg9Ln5YOjOo7sZ5dVQW8yF5pPE5SIw1dsPhq3TRp1jisKRCdPhfs/1WMqDA==} + /synckit@0.8.8: + resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} engines: {node: ^14.18.0 || >=16.0.0} dependencies: - '@pkgr/utils': 2.4.2 + '@pkgr/core': 0.1.0 tslib: 2.6.2 dev: true @@ -6511,11 +6383,6 @@ packages: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} dev: true - /titleize@3.0.0: - resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} - engines: {node: '>=12'} - dev: true - /tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} dev: true @@ -6532,8 +6399,9 @@ packages: is-number: 7.0.0 dev: true - /traverse@0.6.7: - resolution: {integrity: sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==} + /traverse@0.6.8: + resolution: {integrity: sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==} + engines: {node: '>= 0.4'} dev: true /ts-api-utils@1.0.3(typescript@5.3.3): @@ -6545,7 +6413,7 @@ packages: typescript: 5.3.3 dev: true - /ts-node@10.9.2(@types/node@20.10.5)(typescript@5.3.3): + /ts-node@10.9.2(@types/node@20.10.8)(typescript@5.3.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -6564,8 +6432,8 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.10.5 - acorn: 8.11.2 + '@types/node': 20.10.8 + acorn: 8.11.3 acorn-walk: 8.3.1 arg: 4.1.3 create-require: 1.1.1 @@ -6626,8 +6494,8 @@ packages: engines: {node: '>=14.16'} dev: true - /type-fest@4.8.3: - resolution: {integrity: sha512-//BaTm14Q/gHBn09xlnKNqfI8t6bmdzx2DXYfPBNofN0WUybCEUDcbCWcTa0oF09lzLjZgPphXAsvRiMK0V6Bw==} + /type-fest@4.9.0: + resolution: {integrity: sha512-KS/6lh/ynPGiHD/LnAobrEFq3Ad4pBzOlJ1wAnJx9N4EYoqFhMfLIBjUT2UEx4wg5ZE+cC1ob6DCSpppVo+rtg==} engines: {node: '>=16'} dev: true @@ -6745,11 +6613,6 @@ packages: engines: {node: '>= 10.0.0'} dev: true - /untildify@4.0.0: - resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} - engines: {node: '>=8'} - dev: true - /update-browserslist-db@1.0.13(browserslist@4.22.2): resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true diff --git a/src/client.ts b/src/client.ts index a9a7c58..69ccc22 100644 --- a/src/client.ts +++ b/src/client.ts @@ -183,7 +183,7 @@ class ApiClient { // const start = Date.now() return this.#client.request(requestParams) .then(response => response.data) - .catch(error => handleError(error)) + .catch((error: Error) => handleError(error)) // .finally(() => console.log(`<<-- ${method} ${path} ${Date.now() - start}`)) } diff --git a/src/common.ts b/src/common.ts index 5f905a2..25d9249 100644 --- a/src/common.ts +++ b/src/common.ts @@ -1,13 +1,13 @@ -import { resourceList } from './api' +import { type ResourceTypeLock, resourceList } from './api' import type { ResourceId, ResourceType } from './resource' const isResourceId = (resource: any): resource is ResourceId => { - return (resource?.type && resource.id) && resourceList.includes(resource.type) + return (resource?.type && resource.id) && resourceList.includes(resource.type as ResourceTypeLock) } const isResourceType = (resource: any): resource is ResourceType => { - return resource && (typeof resource.type !== 'undefined') && resource.type && resourceList.includes(resource.type) + return resource && (typeof resource.type !== 'undefined') && resource.type && resourceList.includes(resource.type as ResourceTypeLock) } diff --git a/src/error.ts b/src/error.ts index b9b0ec7..73ec7e7 100644 --- a/src/error.ts +++ b/src/error.ts @@ -14,11 +14,11 @@ class SdkError extends Error { static NAME = 'SdkError' - static isSdkError(error: any): error is ApiError { - return error && [SdkError.NAME, ApiError.NAME].includes(error.name) && Object.values(ErrorType).includes(error.type) + static isSdkError(error: any): error is SdkError { + return error && [SdkError.NAME, ApiError.NAME].includes(error.name as string) && Object.values(ErrorType).includes(error.type as ErrorType) } - type: string + type: ErrorType code?: string source?: Error request?: any diff --git a/src/jsonapi.ts b/src/jsonapi.ts index c9c1198..9c2ae8d 100644 --- a/src/jsonapi.ts +++ b/src/jsonapi.ts @@ -7,6 +7,8 @@ import { isResourceId, isResourceType } from './common' import Debug from './debug' const debug = Debug('jsonapi') +export type { DocWithData } + // DENORMALIZATION @@ -51,10 +53,10 @@ const denormalizeResource = (res: any, included?: Includ ...res.attributes, } - if (res.relationships) Object.keys(res.relationships).forEach(key => { - const rel = res.relationships[key].data + if (res.relationships) Object.keys(res.relationships as object).forEach(key => { + const rel: ResourceIdentifierObject = res.relationships[key].data if (rel) { - if (Array.isArray(rel)) resource[key] = rel.map(r => denormalizeResource(findIncluded(r, included), included)) + if (Array.isArray(rel)) resource[key] = rel.map((r: ResourceIdentifierObject) => denormalizeResource(findIncluded(r, included), included)) else resource[key] = denormalizeResource(findIncluded(rel, included), included) } else if (rel === null) resource[key] = null }) diff --git a/src/resource.ts b/src/resource.ts index 0c5f214..ef187be 100644 --- a/src/resource.ts +++ b/src/resource.ts @@ -1,15 +1,15 @@ import ApiClient, { type ApiClientInitConfig } from './client' -import { denormalize, normalize } from './jsonapi' +import { denormalize, normalize, type DocWithData } from './jsonapi' import type { QueryParamsRetrieve, QueryParamsList, QueryFilter, QueryParams } from './query' import { generateQueryStringParams, isParamsList } from './query' import type { ResourceTypeLock } from './api' import config from './config' import type { InterceptorManager } from './interceptor' import { ErrorType, SdkError } from './error' +import { CommerceLayerProvisioningStatic } from './static' import Debug from './debug' -import { CommerceLayerProvisioningStatic } from './static' const debug = Debug('resource') @@ -152,7 +152,7 @@ class ResourceAdapter { const path = `${resource.type}${singleton? '' : `/${resource.id}`}` - const res = await this.#client.request('get', path, undefined, { ...options, params: queryParams }) + const res: DocWithData = await this.#client.request('get', path, undefined, { ...options, params: queryParams }) const r = denormalize(res) as R return r @@ -167,7 +167,7 @@ class ResourceAdapter { const queryParams = generateQueryStringParams(params, resource) if (options?.params) Object.assign(queryParams, options?.params) - const res = await this.#client.request('get', `${resource.type}`, undefined, { ...options, params: queryParams }) + const res: DocWithData = await this.#client.request('get', `${resource.type}`, undefined, { ...options, params: queryParams }) const r = denormalize(res) as R[] const meta: ListMeta = { @@ -190,7 +190,7 @@ class ResourceAdapter { if (options?.params) Object.assign(queryParams, options?.params) const data = normalize(resource) - const res = await this.#client.request('post', resource.type, data, { ...options, params: queryParams }) + const res: DocWithData = await this.#client.request('post', resource.type, data, { ...options, params: queryParams }) const r = denormalize(res) as R return r @@ -210,7 +210,7 @@ class ResourceAdapter { const path = `${resource.type}${singleton? '' : `/${resource.id}`}` const data = normalize(resource) - const res = await this.#client.request('patch', path, data, { ...options, params: queryParams }) + const res: DocWithData = await this.#client.request('patch', path, data, { ...options, params: queryParams }) const r = denormalize(res) as R return r @@ -231,7 +231,7 @@ class ResourceAdapter { const queryParams = generateQueryStringParams(params, resource) if (options?.params) Object.assign(queryParams, options?.params) - const res = await this.#client.request('get', path, undefined, { ...options, params: queryParams }) + const res: DocWithData = await this.#client.request('get', path, undefined, { ...options, params: queryParams }) const r = denormalize(res) if (Array.isArray(r)) { @@ -278,11 +278,11 @@ abstract class ApiResourceBase { abstract type(): ResourceTypeLock - parse(resource: any): R | R[] { + parse(resource: string): R | R[] { try { const res = JSON.parse(resource) if (res.data?.type !== this.type()) throw new SdkError({ message: `Invalid resource type [${res.data?.type}]`, type: ErrorType.PARSE }) - return denormalize(res) + return denormalize(res as DocWithData) } catch (error: any) { if (SdkError.isSdkError(error)) throw error else throw new SdkError({ message: `Payload parse error [${error.message}]`, type: ErrorType.PARSE }) From 93c3a77aabe5d156adea63ed2ce1224ea9cf48cb Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 10 Jan 2024 12:46:27 +0000 Subject: [PATCH 27/30] chore(release): 1.0.0-beta.11 [skip ci] # [1.0.0-beta.11](https://github.com/commercelayer/provisioning-sdk/compare/v1.0.0-beta.10...v1.0.0-beta.11) (2024-01-10) ### Bug Fixes * update dependencies and fix lint errors ([8e39135](https://github.com/commercelayer/provisioning-sdk/commit/8e3913557a272b3b31d168b3c54ced26128ed7c3)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 776f828..c3c21d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [1.0.0-beta.11](https://github.com/commercelayer/provisioning-sdk/compare/v1.0.0-beta.10...v1.0.0-beta.11) (2024-01-10) + + +### Bug Fixes + +* update dependencies and fix lint errors ([8e39135](https://github.com/commercelayer/provisioning-sdk/commit/8e3913557a272b3b31d168b3c54ced26128ed7c3)) + # [1.0.0-beta.10](https://github.com/commercelayer/provisioning-sdk/compare/v1.0.0-beta.9...v1.0.0-beta.10) (2023-12-20) diff --git a/package.json b/package.json index 19820ac..15ceaa1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@commercelayer/provisioning-sdk", - "version": "1.0.0-beta.10", + "version": "1.0.0-beta.11", "main": "lib/cjs/index.js", "types": "lib/cjs/index.d.ts", "module": "lib/esm/index.js", From d9113284fbe28ef6f2f2f21b054451b2696a1253 Mon Sep 17 00:00:00 2001 From: Pierluigi Viti Date: Thu, 18 Jan 2024 12:55:23 +0100 Subject: [PATCH 28/30] chore: update dependencies --- package.json | 2 +- pnpm-lock.yaml | 296 ++++++++++++++++++++++++++----------------------- 2 files changed, 157 insertions(+), 141 deletions(-) diff --git a/package.json b/package.json index 15ceaa1..cf92a9d 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "@types/debug": "^4.1.12", "@types/jest": "^29.5.11", "@types/lodash": "^4.14.202", - "@types/node": "^20.10.8", + "@types/node": "^20.11.5", "dotenv": "^16.3.1", "eslint": "^8.56.0", "inflector-js": "^1.0.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 175e6f2..08d16e8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -41,8 +41,8 @@ devDependencies: specifier: ^4.14.202 version: 4.14.202 '@types/node': - specifier: ^20.10.8 - version: 20.10.8 + specifier: ^20.11.5 + version: 20.11.5 dotenv: specifier: ^16.3.1 version: 16.3.1 @@ -54,7 +54,7 @@ devDependencies: version: 1.0.1 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.10.8)(ts-node@10.9.2) + version: 29.7.0(@types/node@20.11.5)(ts-node@10.9.2) json-typescript: specifier: ^1.1.2 version: 1.1.2 @@ -72,7 +72,7 @@ devDependencies: version: 22.0.12(typescript@5.3.3) ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@20.10.8)(typescript@5.3.3) + version: 10.9.2(@types/node@20.11.5)(typescript@5.3.3) typescript: specifier: ^5.3.3 version: 5.3.3 @@ -89,7 +89,7 @@ packages: engines: {node: '>=6.0.0'} dependencies: '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/trace-mapping': 0.3.21 dev: true /@babel/code-frame@7.23.5: @@ -134,7 +134,7 @@ packages: dependencies: '@babel/types': 7.23.6 '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/trace-mapping': 0.3.21 jsesc: 2.5.2 dev: true @@ -208,6 +208,21 @@ packages: - supports-color dev: true + /@babel/helper-define-polyfill-provider@0.5.0(@babel/core@7.23.7): + resolution: {integrity: sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + debug: 4.3.4 + lodash.debounce: 4.0.8 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/helper-environment-visitor@7.22.20: resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} engines: {node: '>=6.9.0'} @@ -1232,9 +1247,9 @@ packages: '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.7) '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.7) '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.7) - babel-plugin-polyfill-corejs2: 0.4.7(@babel/core@7.23.7) + babel-plugin-polyfill-corejs2: 0.4.8(@babel/core@7.23.7) babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.23.7) - babel-plugin-polyfill-regenerator: 0.5.4(@babel/core@7.23.7) + babel-plugin-polyfill-regenerator: 0.5.5(@babel/core@7.23.7) core-js-compat: 3.35.0 semver: 6.3.1 transitivePeerDependencies: @@ -1330,16 +1345,16 @@ packages: eslint: '>=8.0' typescript: '>=5.0' dependencies: - '@typescript-eslint/eslint-plugin': 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/parser': 6.18.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/eslint-plugin': 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.3.3) eslint: 8.56.0 eslint-config-prettier: 9.1.0(eslint@8.56.0) - eslint-config-standard-with-typescript: 42.0.0(@typescript-eslint/eslint-plugin@6.18.1)(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.6.2)(eslint-plugin-promise@6.1.1)(eslint@8.56.0)(typescript@5.3.3) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0) + eslint-config-standard-with-typescript: 42.0.0(@typescript-eslint/eslint-plugin@6.19.0)(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.6.2)(eslint-plugin-promise@6.1.1)(eslint@8.56.0)(typescript@5.3.3) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.19.0)(eslint@8.56.0) eslint-plugin-n: 16.6.2(eslint@8.56.0) - eslint-plugin-prettier: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.1.1) + eslint-plugin-prettier: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.2.4) eslint-plugin-promise: 6.1.1(eslint@8.56.0) - prettier: 3.1.1 + prettier: 3.2.4 typescript: 5.3.3 transitivePeerDependencies: - '@types/eslint' @@ -1595,11 +1610,11 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@humanwhocodes/config-array@0.11.13: - resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} + /@humanwhocodes/config-array@0.11.14: + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} dependencies: - '@humanwhocodes/object-schema': 2.0.1 + '@humanwhocodes/object-schema': 2.0.2 debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: @@ -1611,8 +1626,8 @@ packages: engines: {node: '>=12.22'} dev: true - /@humanwhocodes/object-schema@2.0.1: - resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} + /@humanwhocodes/object-schema@2.0.2: + resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} dev: true /@isaacs/cliui@8.0.2: @@ -1648,7 +1663,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.10.8 + '@types/node': 20.11.5 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -1669,14 +1684,14 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.8 + '@types/node': 20.11.5 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.10.8)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@20.11.5)(ts-node@10.9.2) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -1704,7 +1719,7 @@ packages: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.8 + '@types/node': 20.11.5 jest-mock: 29.7.0 dev: true @@ -1731,7 +1746,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.10.8 + '@types/node': 20.11.5 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -1763,8 +1778,8 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.20 - '@types/node': 20.10.8 + '@jridgewell/trace-mapping': 0.3.21 + '@types/node': 20.11.5 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -1797,7 +1812,7 @@ packages: resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/trace-mapping': 0.3.21 callsites: 3.1.0 graceful-fs: 4.2.11 dev: true @@ -1828,7 +1843,7 @@ packages: dependencies: '@babel/core': 7.23.7 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/trace-mapping': 0.3.21 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 @@ -1852,7 +1867,7 @@ packages: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.10.8 + '@types/node': 20.11.5 '@types/yargs': 17.0.32 chalk: 4.1.2 dev: true @@ -1863,7 +1878,7 @@ packages: dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/trace-mapping': 0.3.21 dev: true /@jridgewell/resolve-uri@3.1.1: @@ -1880,8 +1895,8 @@ packages: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} dev: true - /@jridgewell/trace-mapping@0.3.20: - resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} + /@jridgewell/trace-mapping@0.3.21: + resolution: {integrity: sha512-SRfKmRe1KvYnxjEMtxEr+J4HIeMX5YBg/qhRHpxEIGjhX1rshcHlnFUE9K0GazhVKWM7B+nARSkV8LuvJdJ5/g==} dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 @@ -2019,8 +2034,8 @@ packages: dev: true optional: true - /@pkgr/core@0.1.0: - resolution: {integrity: sha512-Zwq5OCzuwJC2jwqmpEQt7Ds1DTi6BWSwoGkbb1n9pO3hzb35BoJELx7c0T23iDkBGkh2e7tvOtjF3tr3OaQHDQ==} + /@pkgr/core@0.1.1: + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} dev: true @@ -2145,7 +2160,7 @@ packages: lodash-es: 4.17.21 nerf-dart: 1.0.0 normalize-url: 8.0.0 - npm: 10.2.5 + npm: 10.3.0 rc: 1.2.8 read-pkg: 9.0.1 registry-auth-token: 5.0.2 @@ -2255,7 +2270,7 @@ packages: /@types/graceful-fs@4.1.9: resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} dependencies: - '@types/node': 20.10.8 + '@types/node': 20.11.5 dev: true /@types/istanbul-lib-coverage@2.0.6: @@ -2297,8 +2312,8 @@ packages: resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} dev: true - /@types/node@20.10.8: - resolution: {integrity: sha512-f8nQs3cLxbAFc00vEU59yf9UyGUftkPaLGfvbVOIDdx2i1b8epBqj2aNGyP19fiyXWvlmZ7qC1XLjAzw/OKIeA==} + /@types/node@20.11.5: + resolution: {integrity: sha512-g557vgQjUUfN76MZAN/dt1z3dzcUsimuysco0KeluHgrPdJXkP/XdAURgyO2W9fZWHRtRBiVKzKn8vyOAwlG+w==} dependencies: undici-types: 5.26.5 dev: true @@ -2325,8 +2340,8 @@ packages: '@types/yargs-parser': 21.0.3 dev: true - /@typescript-eslint/eslint-plugin@6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-nISDRYnnIpk7VCFrGcu1rnZfM1Dh9LRHnfgdkjcbi/l7g16VYRri3TjXi9Ir4lOZSw5N/gnV/3H7jIPQ8Q4daA==} + /@typescript-eslint/eslint-plugin@6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-DUCUkQNklCQYnrBSSikjVChdc84/vMPDQSgJTHBZ64G9bA9w0Crc0rd2diujKbTdp6w2J47qkeHQLoi0rpLCdg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -2337,11 +2352,11 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.18.1(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 6.18.1 - '@typescript-eslint/type-utils': 6.18.1(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.18.1(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.18.1 + '@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.19.0 + '@typescript-eslint/type-utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.19.0 debug: 4.3.4 eslint: 8.56.0 graphemer: 1.4.0 @@ -2354,8 +2369,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-zct/MdJnVaRRNy9e84XnVtRv9Vf91/qqe+hZJtKanjojud4wAVy/7lXxJmMyX6X6J+xc6c//YEWvpeif8cAhWA==} + /@typescript-eslint/parser@6.19.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-1DyBLG5SH7PYCd00QlroiW60YJ4rWMuUGa/JBV0iZuqi4l4IK3twKPq5ZkEebmGqRjXWVgsUzfd3+nZveewgow==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2364,10 +2379,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.18.1 - '@typescript-eslint/types': 6.18.1 - '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.18.1 + '@typescript-eslint/scope-manager': 6.19.0 + '@typescript-eslint/types': 6.19.0 + '@typescript-eslint/typescript-estree': 6.19.0(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.19.0 debug: 4.3.4 eslint: 8.56.0 typescript: 5.3.3 @@ -2375,16 +2390,16 @@ packages: - supports-color dev: true - /@typescript-eslint/scope-manager@6.18.1: - resolution: {integrity: sha512-BgdBwXPFmZzaZUuw6wKiHKIovms97a7eTImjkXCZE04TGHysG+0hDQPmygyvgtkoB/aOQwSM/nWv3LzrOIQOBw==} + /@typescript-eslint/scope-manager@6.19.0: + resolution: {integrity: sha512-dO1XMhV2ehBI6QN8Ufi7I10wmUovmLU0Oru3n5LVlM2JuzB4M+dVphCPLkVpKvGij2j/pHBWuJ9piuXx+BhzxQ==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.18.1 - '@typescript-eslint/visitor-keys': 6.18.1 + '@typescript-eslint/types': 6.19.0 + '@typescript-eslint/visitor-keys': 6.19.0 dev: true - /@typescript-eslint/type-utils@6.18.1(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-wyOSKhuzHeU/5pcRDP2G2Ndci+4g653V43gXTpt4nbyoIOAASkGDA9JIAgbQCdCkcr1MvpSYWzxTz0olCn8+/Q==} + /@typescript-eslint/type-utils@6.19.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-mcvS6WSWbjiSxKCwBcXtOM5pRkPQ6kcDds/juxcy/727IQr3xMEcwr/YLHW2A2+Fp5ql6khjbKBzOyjuPqGi/w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2393,8 +2408,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.3.3) - '@typescript-eslint/utils': 6.18.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.19.0(typescript@5.3.3) + '@typescript-eslint/utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3) debug: 4.3.4 eslint: 8.56.0 ts-api-utils: 1.0.3(typescript@5.3.3) @@ -2403,13 +2418,13 @@ packages: - supports-color dev: true - /@typescript-eslint/types@6.18.1: - resolution: {integrity: sha512-4TuMAe+tc5oA7wwfqMtB0Y5OrREPF1GeJBAjqwgZh1lEMH5PJQgWgHGfYufVB51LtjD+peZylmeyxUXPfENLCw==} + /@typescript-eslint/types@6.19.0: + resolution: {integrity: sha512-lFviGV/vYhOy3m8BJ/nAKoAyNhInTdXpftonhWle66XHAtT1ouBlkjL496b5H5hb8dWXHwtypTqgtb/DEa+j5A==} engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@6.18.1(typescript@5.3.3): - resolution: {integrity: sha512-fv9B94UAhywPRhUeeV/v+3SBDvcPiLxRZJw/xZeeGgRLQZ6rLMG+8krrJUyIf6s1ecWTzlsbp0rlw7n9sjufHA==} + /@typescript-eslint/typescript-estree@6.19.0(typescript@5.3.3): + resolution: {integrity: sha512-o/zefXIbbLBZ8YJ51NlkSAt2BamrK6XOmuxSR3hynMIzzyMY33KuJ9vuMdFSXW+H0tVvdF9qBPTHA91HDb4BIQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -2417,8 +2432,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.18.1 - '@typescript-eslint/visitor-keys': 6.18.1 + '@typescript-eslint/types': 6.19.0 + '@typescript-eslint/visitor-keys': 6.19.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -2430,8 +2445,8 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@6.18.1(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-zZmTuVZvD1wpoceHvoQpOiewmWu3uP9FuTWo8vqpy2ffsmfCE8mklRPi+vmnIYAIk9t/4kOThri2QCDgor+OpQ==} + /@typescript-eslint/utils@6.19.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-QR41YXySiuN++/dC9UArYOg4X86OAYP83OWTewpVx5ct1IZhjjgTLocj7QNxGhWoTqknsgpl7L+hGygCO+sdYw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2439,9 +2454,9 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 6.18.1 - '@typescript-eslint/types': 6.18.1 - '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.19.0 + '@typescript-eslint/types': 6.19.0 + '@typescript-eslint/typescript-estree': 6.19.0(typescript@5.3.3) eslint: 8.56.0 semver: 7.5.4 transitivePeerDependencies: @@ -2449,11 +2464,11 @@ packages: - typescript dev: true - /@typescript-eslint/visitor-keys@6.18.1: - resolution: {integrity: sha512-/kvt0C5lRqGoCfsbmm7/CwMqoSkY3zzHLIjdhHZQW3VFrnz7ATecOHR7nb7V+xn4286MBxfnQfQhAmCI0u+bJA==} + /@typescript-eslint/visitor-keys@6.19.0: + resolution: {integrity: sha512-hZaUCORLgubBvtGpp1JEFEazcuEdfxta9j4iUwdSAr7mEsYYAp3EAUyCZk3VEEqGj6W+AV4uWyrDGtrlawAsgQ==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.18.1 + '@typescript-eslint/types': 6.19.0 eslint-visitor-keys: 3.4.3 dev: true @@ -2477,8 +2492,8 @@ packages: acorn: 8.11.3 dev: true - /acorn-walk@8.3.1: - resolution: {integrity: sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==} + /acorn-walk@8.3.2: + resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} engines: {node: '>=0.4.0'} dev: true @@ -2678,7 +2693,7 @@ packages: /axios@1.6.5: resolution: {integrity: sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==} dependencies: - follow-redirects: 1.15.4 + follow-redirects: 1.15.5 form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -2726,14 +2741,14 @@ packages: '@types/babel__traverse': 7.20.5 dev: true - /babel-plugin-polyfill-corejs2@0.4.7(@babel/core@7.23.7): - resolution: {integrity: sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==} + /babel-plugin-polyfill-corejs2@0.4.8(@babel/core@7.23.7): + resolution: {integrity: sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: '@babel/compat-data': 7.23.5 '@babel/core': 7.23.7 - '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.7) + '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.23.7) semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -2751,13 +2766,13 @@ packages: - supports-color dev: true - /babel-plugin-polyfill-regenerator@0.5.4(@babel/core@7.23.7): - resolution: {integrity: sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==} + /babel-plugin-polyfill-regenerator@0.5.5(@babel/core@7.23.7): + resolution: {integrity: sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: '@babel/core': 7.23.7 - '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.7) + '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.23.7) transitivePeerDependencies: - supports-color dev: true @@ -2830,8 +2845,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001576 - electron-to-chromium: 1.4.626 + caniuse-lite: 1.0.30001579 + electron-to-chromium: 1.4.637 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.22.2) dev: true @@ -2862,7 +2877,7 @@ packages: dependencies: function-bind: 1.1.2 get-intrinsic: 1.2.2 - set-function-length: 1.1.1 + set-function-length: 1.2.0 dev: true /callsites@3.1.0: @@ -2880,8 +2895,8 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite@1.0.30001576: - resolution: {integrity: sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==} + /caniuse-lite@1.0.30001579: + resolution: {integrity: sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==} dev: true /cardinal@2.1.1: @@ -3084,7 +3099,7 @@ packages: typescript: 5.3.3 dev: true - /create-jest@29.7.0(@types/node@20.10.8)(ts-node@10.9.2): + /create-jest@29.7.0(@types/node@20.11.5)(ts-node@10.9.2): resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -3093,7 +3108,7 @@ packages: chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.10.8)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@20.11.5)(ts-node@10.9.2) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -3258,8 +3273,8 @@ packages: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true - /electron-to-chromium@1.4.626: - resolution: {integrity: sha512-f7/be56VjRRQk+Ric6PmIrEtPcIqsn3tElyAu9Sh6egha2VLJ82qwkcOdcnT06W+Pb6RUulV1ckzrGbKzVcTHg==} + /electron-to-chromium@1.4.637: + resolution: {integrity: sha512-G7j3UCOukFtxVO1vWrPQUoDk3kL70mtvjc/DC/k2o7lE0wAdq+Vwp1ipagOow+BH0uVztFysLWbkM/RTIrbK3w==} dev: true /emittery@0.13.1: @@ -3325,8 +3340,8 @@ packages: object-keys: 1.1.1 object.assign: 4.1.5 regexp.prototype.flags: 1.5.1 - safe-array-concat: 1.0.1 - safe-regex-test: 1.0.1 + safe-array-concat: 1.1.0 + safe-regex-test: 1.0.2 string.prototype.trim: 1.2.8 string.prototype.trimend: 1.0.7 string.prototype.trimstart: 1.0.7 @@ -3435,7 +3450,7 @@ packages: eslint: 8.56.0 dev: true - /eslint-config-standard-with-typescript@42.0.0(@typescript-eslint/eslint-plugin@6.18.1)(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.6.2)(eslint-plugin-promise@6.1.1)(eslint@8.56.0)(typescript@5.3.3): + /eslint-config-standard-with-typescript@42.0.0(@typescript-eslint/eslint-plugin@6.19.0)(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.6.2)(eslint-plugin-promise@6.1.1)(eslint@8.56.0)(typescript@5.3.3): resolution: {integrity: sha512-m1/2g/Sicun1uFZOFigJVeOqo9fE7OkMsNtilcpHwdCdcGr21qsGqYiyxYSvvHfJwY7w5OTQH0hxk8sM2N5Ohg==} peerDependencies: '@typescript-eslint/eslint-plugin': ^6.4.0 @@ -3445,11 +3460,11 @@ packages: eslint-plugin-promise: ^6.0.0 typescript: '*' dependencies: - '@typescript-eslint/eslint-plugin': 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/parser': 6.18.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/eslint-plugin': 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.3.3) eslint: 8.56.0 eslint-config-standard: 17.1.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.6.2)(eslint-plugin-promise@6.1.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.19.0)(eslint@8.56.0) eslint-plugin-n: 16.6.2(eslint@8.56.0) eslint-plugin-promise: 6.1.1(eslint@8.56.0) typescript: 5.3.3 @@ -3467,7 +3482,7 @@ packages: eslint-plugin-promise: ^6.0.0 dependencies: eslint: 8.56.0 - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.19.0)(eslint@8.56.0) eslint-plugin-n: 16.6.2(eslint@8.56.0) eslint-plugin-promise: 6.1.1(eslint@8.56.0) dev: true @@ -3482,7 +3497,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.18.1)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.19.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -3503,7 +3518,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.18.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.3.3) debug: 3.2.7 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 @@ -3523,7 +3538,7 @@ packages: eslint-compat-utils: 0.1.2(eslint@8.56.0) dev: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.19.0)(eslint@8.56.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -3533,7 +3548,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.18.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.3.3) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -3542,7 +3557,7 @@ packages: doctrine: 2.1.0 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.18.1)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.19.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -3578,7 +3593,7 @@ packages: semver: 7.5.4 dev: true - /eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.1.1): + /eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.2.4): resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -3594,7 +3609,7 @@ packages: dependencies: eslint: 8.56.0 eslint-config-prettier: 9.1.0(eslint@8.56.0) - prettier: 3.1.1 + prettier: 3.2.4 prettier-linter-helpers: 1.0.0 synckit: 0.8.8 dev: true @@ -3630,7 +3645,7 @@ packages: '@eslint-community/regexpp': 4.10.0 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.56.0 - '@humanwhocodes/config-array': 0.11.13 + '@humanwhocodes/config-array': 0.11.14 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 '@ungap/structured-clone': 1.2.0 @@ -3868,8 +3883,8 @@ packages: resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} dev: true - /follow-redirects@1.15.4: - resolution: {integrity: sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==} + /follow-redirects@1.15.5: + resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -4580,7 +4595,7 @@ packages: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.8 + '@types/node': 20.11.5 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.1 @@ -4601,7 +4616,7 @@ packages: - supports-color dev: true - /jest-cli@29.7.0(@types/node@20.10.8)(ts-node@10.9.2): + /jest-cli@29.7.0(@types/node@20.11.5)(ts-node@10.9.2): resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -4615,10 +4630,10 @@ packages: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.10.8)(ts-node@10.9.2) + create-jest: 29.7.0(@types/node@20.11.5)(ts-node@10.9.2) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.10.8)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@20.11.5)(ts-node@10.9.2) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -4629,7 +4644,7 @@ packages: - ts-node dev: true - /jest-config@29.7.0(@types/node@20.10.8)(ts-node@10.9.2): + /jest-config@29.7.0(@types/node@20.11.5)(ts-node@10.9.2): resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -4644,7 +4659,7 @@ packages: '@babel/core': 7.23.7 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.8 + '@types/node': 20.11.5 babel-jest: 29.7.0(@babel/core@7.23.7) chalk: 4.1.2 ci-info: 3.9.0 @@ -4664,7 +4679,7 @@ packages: pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.2(@types/node@20.10.8)(typescript@5.3.3) + ts-node: 10.9.2(@types/node@20.11.5)(typescript@5.3.3) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -4705,7 +4720,7 @@ packages: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.8 + '@types/node': 20.11.5 jest-mock: 29.7.0 jest-util: 29.7.0 dev: true @@ -4721,7 +4736,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 20.10.8 + '@types/node': 20.11.5 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -4772,7 +4787,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.10.8 + '@types/node': 20.11.5 jest-util: 29.7.0 dev: true @@ -4827,7 +4842,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.8 + '@types/node': 20.11.5 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -4858,7 +4873,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.8 + '@types/node': 20.11.5 chalk: 4.1.2 cjs-module-lexer: 1.2.3 collect-v8-coverage: 1.0.2 @@ -4910,7 +4925,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.10.8 + '@types/node': 20.11.5 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -4935,7 +4950,7 @@ packages: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.10.8 + '@types/node': 20.11.5 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -4947,13 +4962,13 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 20.10.8 + '@types/node': 20.11.5 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest@29.7.0(@types/node@20.10.8)(ts-node@10.9.2): + /jest@29.7.0(@types/node@20.11.5)(ts-node@10.9.2): resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -4966,7 +4981,7 @@ packages: '@jest/core': 29.7.0(ts-node@10.9.2) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.10.8)(ts-node@10.9.2) + jest-cli: 29.7.0(@types/node@20.11.5)(ts-node@10.9.2) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -5373,8 +5388,8 @@ packages: path-key: 4.0.0 dev: true - /npm@10.2.5: - resolution: {integrity: sha512-lXdZ7titEN8CH5YJk9C/aYRU9JeDxQ4d8rwIIDsvH3SMjLjHTukB2CFstMiB30zXs4vCrPN2WH6cDq1yHBeJAw==} + /npm@10.3.0: + resolution: {integrity: sha512-9u5GFc1UqI2DLlGI7QdjkpIaBs3UhTtY8KoCqYJK24gV/j/tByaI4BA4R7RkOc+ASqZMzFPKt4Pj2Z8JcGo//A==} engines: {node: ^18.17.0 || >=20.5.0} hasBin: true dev: true @@ -5740,8 +5755,8 @@ packages: fast-diff: 1.3.0 dev: true - /prettier@3.1.1: - resolution: {integrity: sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==} + /prettier@3.2.4: + resolution: {integrity: sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==} engines: {node: '>=14'} hasBin: true dev: true @@ -5964,8 +5979,8 @@ packages: queue-microtask: 1.2.3 dev: true - /safe-array-concat@1.0.1: - resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} + /safe-array-concat@1.1.0: + resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} engines: {node: '>=0.4'} dependencies: call-bind: 1.0.5 @@ -5978,8 +5993,8 @@ packages: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} dev: true - /safe-regex-test@1.0.1: - resolution: {integrity: sha512-Y5NejJTTliTyY4H7sipGqY+RX5P87i3F7c4Rcepy72nq+mNLhIsD0W4c7kEmduMDQCSqtPsXPlSTsFhh2LQv+g==} + /safe-regex-test@1.0.2: + resolution: {integrity: sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 @@ -6051,11 +6066,12 @@ packages: lru-cache: 6.0.0 dev: true - /set-function-length@1.1.1: - resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} + /set-function-length@1.2.0: + resolution: {integrity: sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==} engines: {node: '>= 0.4'} dependencies: define-data-property: 1.1.1 + function-bind: 1.1.2 get-intrinsic: 1.2.2 gopd: 1.0.1 has-property-descriptors: 1.0.1 @@ -6335,7 +6351,7 @@ packages: resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} engines: {node: ^14.18.0 || >=16.0.0} dependencies: - '@pkgr/core': 0.1.0 + '@pkgr/core': 0.1.1 tslib: 2.6.2 dev: true @@ -6413,7 +6429,7 @@ packages: typescript: 5.3.3 dev: true - /ts-node@10.9.2(@types/node@20.10.8)(typescript@5.3.3): + /ts-node@10.9.2(@types/node@20.11.5)(typescript@5.3.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -6432,9 +6448,9 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.10.8 + '@types/node': 20.11.5 acorn: 8.11.3 - acorn-walk: 8.3.1 + acorn-walk: 8.3.2 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 @@ -6647,7 +6663,7 @@ packages: resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} engines: {node: '>=10.12.0'} dependencies: - '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/trace-mapping': 0.3.21 '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 dev: true From a597c7513a16d92842f7fddf74517af1fd4a0f9c Mon Sep 17 00:00:00 2001 From: Pierluigi Viti Date: Fri, 19 Jan 2024 10:56:22 +0100 Subject: [PATCH 29/30] fix: fix release script and update dependencies --- .github/workflows/publish.yml | 2 +- pnpm-lock.yaml | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index a841724..0d914b9 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,4 +1,4 @@ -name: Release +name: Publish on: release: types: [ published ] diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 08d16e8..2dc7d44 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2846,7 +2846,7 @@ packages: hasBin: true dependencies: caniuse-lite: 1.0.30001579 - electron-to-chromium: 1.4.637 + electron-to-chromium: 1.4.639 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.22.2) dev: true @@ -3273,8 +3273,8 @@ packages: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true - /electron-to-chromium@1.4.637: - resolution: {integrity: sha512-G7j3UCOukFtxVO1vWrPQUoDk3kL70mtvjc/DC/k2o7lE0wAdq+Vwp1ipagOow+BH0uVztFysLWbkM/RTIrbK3w==} + /electron-to-chromium@1.4.639: + resolution: {integrity: sha512-CkKf3ZUVZchr+zDpAlNLEEy2NJJ9T64ULWaDgy3THXXlPVPkLu3VOs9Bac44nebVtdwl2geSj6AxTtGDOxoXhg==} dev: true /emittery@0.13.1: From 686e24ae6f3c63a2a07d9e5fac8047161d7b462c Mon Sep 17 00:00:00 2001 From: Pierluigi Viti Date: Tue, 23 Jan 2024 10:17:37 +0100 Subject: [PATCH 30/30] feat: update resources to schema v1.0.1 --- gen/openapi.json | 10843 ++++++++-------- gen/schema.ts | 4 - package.json | 2 +- pnpm-lock.yaml | 178 +- specs/resource.spec.ts | 4 +- specs/resources/api_credentials.spec.ts | 2 +- .../resources/application_memberships.spec.ts | 24 +- specs/resources/memberships.spec.ts | 23 +- specs/resources/organizations.spec.ts | 2 +- specs/resources/permissions.spec.ts | 2 +- specs/resources/roles.spec.ts | 2 +- specs/resources/user.spec.ts | 2 +- specs/resources/versions.spec.ts | 2 +- src/api.ts | 7 +- src/commercelayer.ts | 2 +- src/model.ts | 2 +- src/resources/application_memberships.ts | 9 - src/resources/memberships.ts | 7 - src/resources/organizations.ts | 2 +- 19 files changed, 5427 insertions(+), 5692 deletions(-) diff --git a/gen/openapi.json b/gen/openapi.json index ff64877..bb5aa29 100644 --- a/gen/openapi.json +++ b/gen/openapi.json @@ -1,5836 +1,5629 @@ { - "openapi": "3.0.1", - "info": { - "title": "Commerce Layer Provisioning API", - "version": "1.0.0", - "contact": { - "name": "API Support", - "url": "https://commercelayer.io", - "email": "support@commercelayer.io" - }, - "description": "Headless Commerce for Global Brands." - }, - "servers": [ - { - "url": "https://provisioning.commercelayer.io", - "description": "Commerce Layer Provisioning API" + "openapi": "3.0.1", + "info": { + "title": "Commerce Layer Provisioning API", + "version": "1.0.1", + "contact": { + "name": "API Support", + "url": "https://commercelayer.io", + "email": "support@commercelayer.io" + }, + "description": "Headless Commerce for Global Brands." }, - { - "url": "https://docs.commercelayer.io/provisioning-api", - "description": "API reference" - } - ], - "paths": { - "/api_credentials": { - "get": { - "operationId": "GET/api_credentials", - "summary": "List all API credentials", - "description": "List all API credentials", - "tags": [ - "api_credentials" - ], - "responses": { - "200": { - "description": "A list of API credential objects", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/apiCredentialResponseList" - } - } - } - } - } - }, - "post": { - "operationId": "POST/api_credentials", - "summary": "Creates an API credential", - "description": "Creates an API credential", - "tags": [ - "api_credentials" - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/apiCredentialCreate" - } - } - } + "servers": [ + { + "url": "https://provisioning.commercelayer.io", + "description": "Commerce Layer Provisioning API" }, - "responses": { - "201": { - "description": "The created API credential object", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/apiCredentialResponse" - } - } - } - } + { + "url": "https://docs.commercelayer.io/provisioning-api", + "description": "API reference" } - } - }, - "/api_credentials/{apiCredentialId}": { - "get": { - "operationId": "GET/api_credentials/apiCredentialId", - "summary": "Retrieve an API credential", - "description": "Retrieve an API credential", - "parameters": [ - { - "name": "apiCredentialId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true, - "description": "The resource's id" - } - ], - "tags": [ - "api_credentials" - ], - "responses": { - "200": { - "description": "The API credential object", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/apiCredentialResponse" + ], + "paths": { + "/api_credentials": { + "post": { + "operationId": "POST/api_credentials", + "summary": "Creates an API credential", + "description": "Creates an API credential", + "tags": [ + "api_credentials" + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/apiCredentialCreate" + } + } + } + }, + "responses": { + "201": { + "description": "The created API credential object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/apiCredentialResponse" + } + } + } + } } - } - } - } - } - }, - "patch": { - "operationId": "PATCH/api_credentials/apiCredentialId", - "summary": "Updates an API credential", - "description": "Updates an API credential", - "tags": [ - "api_credentials" - ], - "parameters": [ - { - "name": "apiCredentialId", - "in": "path", - "schema": { - "type": "string" }, - "required": true, - "description": "The resource's id" - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/apiCredentialUpdate" - } + "get": { + "operationId": "GET/api_credentials", + "summary": "List all API credentials", + "description": "List all API credentials", + "tags": [ + "api_credentials" + ], + "responses": { + "200": { + "description": "A list of API credential objects", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/apiCredentialResponseList" + } + } + } + } + } } - } }, - "responses": { - "200": { - "description": "The updated API credential object", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/apiCredentialResponse" + "/api_credentials/{apiCredentialId}": { + "get": { + "operationId": "GET/api_credentials/apiCredentialId", + "summary": "Retrieve an API credential", + "description": "Retrieve an API credential", + "parameters": [ + { + "name": "apiCredentialId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "tags": [ + "api_credentials" + ], + "responses": { + "200": { + "description": "The API credential object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/apiCredentialResponse" + } + } + } + } } - } - } - } - } - }, - "delete": { - "operationId": "DELETE/api_credentials/apiCredentialId", - "summary": "Delete an API credential", - "description": "Delete an API credential", - "tags": [ - "api_credentials" - ], - "parameters": [ - { - "name": "apiCredentialId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true, - "description": "The resource's id" - } - ], - "responses": { - "204": { - "description": "No content" - } - } - } - }, - "/api_credentials/{apiCredentialId}/organization": { - "get": { - "operationId": "GET/apiCredentialId/organization", - "summary": "Related API credential", - "description": "Related API credential", - "tags": [ - "organizations", - "has_one" - ], - "parameters": [ - { - "name": "apiCredentialId", - "in": "path", - "schema": { - "type": "string" }, - "required": true, - "description": "The resource's id" - } - ], - "responses": { - "200": { - "description": "The organization associated to the API credential" - } - } - } - }, - "/api_credentials/{apiCredentialId}/role": { - "get": { - "operationId": "GET/apiCredentialId/role", - "summary": "Related API credential", - "description": "Related API credential", - "tags": [ - "roles", - "has_one" - ], - "parameters": [ - { - "name": "apiCredentialId", - "in": "path", - "schema": { - "type": "string" + "patch": { + "operationId": "PATCH/api_credentials/apiCredentialId", + "summary": "Updates an API credential", + "description": "Updates an API credential", + "tags": [ + "api_credentials" + ], + "parameters": [ + { + "name": "apiCredentialId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/apiCredentialUpdate" + } + } + } + }, + "responses": { + "200": { + "description": "The updated API credential object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/apiCredentialResponse" + } + } + } + } + } }, - "required": true, - "description": "The resource's id" - } - ], - "responses": { - "200": { - "description": "The role associated to the API credential" - } - } - } - }, - "/application_memberships": { - "get": { - "operationId": "GET/application_memberships", - "summary": "List all application memberships", - "description": "List all application memberships", - "tags": [ - "application_memberships" - ], - "responses": { - "200": { - "description": "A list of application membership objects", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/applicationMembershipResponseList" + "delete": { + "operationId": "DELETE/api_credentials/apiCredentialId", + "summary": "Delete an API credential", + "description": "Delete an API credential", + "tags": [ + "api_credentials" + ], + "parameters": [ + { + "name": "apiCredentialId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "204": { + "description": "No content" + } } - } - } - } - } - }, - "post": { - "operationId": "POST/application_memberships", - "summary": "Creates an application membership", - "description": "Creates an application membership", - "tags": [ - "application_memberships" - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/applicationMembershipCreate" - } } - } }, - "responses": { - "201": { - "description": "The created application membership object", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/applicationMembershipResponse" + "/api_credentials/{apiCredentialId}/organization": { + "get": { + "operationId": "GET/apiCredentialId/organization", + "summary": "Related API credential", + "description": "Related API credential", + "tags": [ + "organizations", + "has_one" + ], + "parameters": [ + { + "name": "apiCredentialId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The organization associated to the API credential" + } } - } } - } - } - } - }, - "/application_memberships/{applicationMembershipId}": { - "get": { - "operationId": "GET/application_memberships/applicationMembershipId", - "summary": "Retrieve an application membership", - "description": "Retrieve an application membership", - "parameters": [ - { - "name": "applicationMembershipId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true, - "description": "The resource's id" - } - ], - "tags": [ - "application_memberships" - ], - "responses": { - "200": { - "description": "The application membership object", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/applicationMembershipResponse" + }, + "/api_credentials/{apiCredentialId}/role": { + "get": { + "operationId": "GET/apiCredentialId/role", + "summary": "Related API credential", + "description": "Related API credential", + "tags": [ + "roles", + "has_one" + ], + "parameters": [ + { + "name": "apiCredentialId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The role associated to the API credential" + } } - } - } - } - } - }, - "patch": { - "operationId": "PATCH/application_memberships/applicationMembershipId", - "summary": "Updates an application membership", - "description": "Updates an application membership", - "tags": [ - "application_memberships" - ], - "parameters": [ - { - "name": "applicationMembershipId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true, - "description": "The resource's id" - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/applicationMembershipUpdate" - } } - } }, - "responses": { - "200": { - "description": "The updated application membership object", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/applicationMembershipResponse" + "/application_memberships": { + "post": { + "operationId": "POST/application_memberships", + "summary": "Creates an application membership", + "description": "Creates an application membership", + "tags": [ + "application_memberships" + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/applicationMembershipCreate" + } + } + } + }, + "responses": { + "201": { + "description": "The created application membership object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/applicationMembershipResponse" + } + } + } + } } - } - } - } - } - }, - "delete": { - "operationId": "DELETE/application_memberships/applicationMembershipId", - "summary": "Delete an application membership", - "description": "Delete an application membership", - "tags": [ - "application_memberships" - ], - "parameters": [ - { - "name": "applicationMembershipId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true, - "description": "The resource's id" - } - ], - "responses": { - "204": { - "description": "No content" - } - } - } - }, - "/application_memberships/{applicationMembershipId}/api_credential": { - "get": { - "operationId": "GET/applicationMembershipId/api_credential", - "summary": "Related application membership", - "description": "Related application membership", - "tags": [ - "api_credentials", - "has_one" - ], - "parameters": [ - { - "name": "applicationMembershipId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true, - "description": "The resource's id" - } - ], - "responses": { - "200": { - "description": "The api_credential associated to the application membership" - } - } - } - }, - "/application_memberships/{applicationMembershipId}/membership": { - "get": { - "operationId": "GET/applicationMembershipId/membership", - "summary": "Related application membership", - "description": "Related application membership", - "tags": [ - "memberships", - "has_one" - ], - "parameters": [ - { - "name": "applicationMembershipId", - "in": "path", - "schema": { - "type": "string" }, - "required": true, - "description": "The resource's id" - } - ], - "responses": { - "200": { - "description": "The membership associated to the application membership" - } - } - } - }, - "/application_memberships/{applicationMembershipId}/user": { - "get": { - "operationId": "GET/applicationMembershipId/user", - "summary": "Related application membership", - "description": "Related application membership", - "tags": [ - "user", - "has_one" - ], - "parameters": [ - { - "name": "applicationMembershipId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true, - "description": "The resource's id" - } - ], - "responses": { - "200": { - "description": "The user associated to the application membership" - } - } - } - }, - "/application_memberships/{applicationMembershipId}/organization": { - "get": { - "operationId": "GET/applicationMembershipId/organization", - "summary": "Related application membership", - "description": "Related application membership", - "tags": [ - "organizations", - "has_one" - ], - "parameters": [ - { - "name": "applicationMembershipId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true, - "description": "The resource's id" - } - ], - "responses": { - "200": { - "description": "The organization associated to the application membership" - } - } - } - }, - "/application_memberships/{applicationMembershipId}/role": { - "get": { - "operationId": "GET/applicationMembershipId/role", - "summary": "Related application membership", - "description": "Related application membership", - "tags": [ - "roles", - "has_one" - ], - "parameters": [ - { - "name": "applicationMembershipId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true, - "description": "The resource's id" - } - ], - "responses": { - "200": { - "description": "The role associated to the application membership" - } - } - } - }, - "/memberships": { - "get": { - "operationId": "GET/memberships", - "summary": "List all memberships", - "description": "List all memberships", - "tags": [ - "memberships" - ], - "responses": { - "200": { - "description": "A list of membership objects", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/membershipResponseList" + "get": { + "operationId": "GET/application_memberships", + "summary": "List all application memberships", + "description": "List all application memberships", + "tags": [ + "application_memberships" + ], + "responses": { + "200": { + "description": "A list of application membership objects", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/applicationMembershipResponseList" + } + } + } + } } - } - } - } - } - }, - "post": { - "operationId": "POST/memberships", - "summary": "Creates an membership", - "description": "Creates an membership", - "tags": [ - "memberships" - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/membershipCreate" - } } - } }, - "responses": { - "201": { - "description": "The created membership object", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/membershipResponse" + "/application_memberships/{applicationMembershipId}": { + "get": { + "operationId": "GET/application_memberships/applicationMembershipId", + "summary": "Retrieve an application membership", + "description": "Retrieve an application membership", + "parameters": [ + { + "name": "applicationMembershipId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "tags": [ + "application_memberships" + ], + "responses": { + "200": { + "description": "The application membership object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/applicationMembershipResponse" + } + } + } + } } - } - } - } - } - } - }, - "/memberships/{membershipId}": { - "get": { - "operationId": "GET/memberships/membershipId", - "summary": "Retrieve an membership", - "description": "Retrieve an membership", - "parameters": [ - { - "name": "membershipId", - "in": "path", - "schema": { - "type": "string" }, - "required": true, - "description": "The resource's id" - } - ], - "tags": [ - "memberships" - ], - "responses": { - "200": { - "description": "The membership object", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/membershipResponse" + "patch": { + "operationId": "PATCH/application_memberships/applicationMembershipId", + "summary": "Updates an application membership", + "description": "Updates an application membership", + "tags": [ + "application_memberships" + ], + "parameters": [ + { + "name": "applicationMembershipId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/applicationMembershipUpdate" + } + } + } + }, + "responses": { + "200": { + "description": "The updated application membership object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/applicationMembershipResponse" + } + } + } + } } - } - } - } - } - }, - "patch": { - "operationId": "PATCH/memberships/membershipId", - "summary": "Updates an membership", - "description": "Updates an membership", - "tags": [ - "memberships" - ], - "parameters": [ - { - "name": "membershipId", - "in": "path", - "schema": { - "type": "string" }, - "required": true, - "description": "The resource's id" - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/membershipUpdate" - } + "delete": { + "operationId": "DELETE/application_memberships/applicationMembershipId", + "summary": "Delete an application membership", + "description": "Delete an application membership", + "tags": [ + "application_memberships" + ], + "parameters": [ + { + "name": "applicationMembershipId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "204": { + "description": "No content" + } + } } - } }, - "responses": { - "200": { - "description": "The updated membership object", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/membershipResponse" + "/application_memberships/{applicationMembershipId}/api_credential": { + "get": { + "operationId": "GET/applicationMembershipId/api_credential", + "summary": "Related application membership", + "description": "Related application membership", + "tags": [ + "api_credentials", + "has_one" + ], + "parameters": [ + { + "name": "applicationMembershipId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The api_credential associated to the application membership" + } } - } - } - } - } - }, - "delete": { - "operationId": "DELETE/memberships/membershipId", - "summary": "Delete an membership", - "description": "Delete an membership", - "tags": [ - "memberships" - ], - "parameters": [ - { - "name": "membershipId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true, - "description": "The resource's id" - } - ], - "responses": { - "204": { - "description": "No content" - } - } - } - }, - "/memberships/{membershipId}/resend": { - "post": { - "operationId": "POST/memberships/membershipId/resend", - "summary": "Resend invitation", - "description": "Resend invitation for the given membership", - "tags": [ - "memberships" - ], - "parameters": [ - { - "name": "membershipId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true, - "description": "The resource's id" - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { } - } }, - "responses": { - "202": { - "description": "Confirmation that the invitation has been sent", - "content": { - } - } - } - } - }, - "/memberships/{membershipId}/organization": { - "get": { - "operationId": "GET/membershipId/organization", - "summary": "Related membership", - "description": "Related membership", - "tags": [ - "organizations", - "has_one" - ], - "parameters": [ - { - "name": "membershipId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true, - "description": "The resource's id" - } - ], - "responses": { - "200": { - "description": "The organization associated to the membership" - } - } - } - }, - "/memberships/{membershipId}/role": { - "get": { - "operationId": "GET/membershipId/role", - "summary": "Related membership", - "description": "Related membership", - "tags": [ - "roles", - "has_one" - ], - "parameters": [ - { - "name": "membershipId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true, - "description": "The resource's id" - } - ], - "responses": { - "200": { - "description": "The role associated to the membership" - } - } - } - }, - "/memberships/{membershipId}/application_memberships": { - "get": { - "operationId": "GET/membershipId/application_memberships", - "summary": "Related membership", - "description": "Related membership", - "tags": [ - "application_memberships", - "has_many" - ], - "parameters": [ - { - "name": "membershipId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true, - "description": "The resource's id" - } - ], - "responses": { - "200": { - "description": "The application_memberships associated to the membership" - } - } - } - }, - "/memberships/{membershipId}/user": { - "get": { - "operationId": "GET/membershipId/user", - "summary": "Related membership", - "description": "Related membership", - "tags": [ - "user", - "has_one" - ], - "parameters": [ - { - "name": "membershipId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true, - "description": "The resource's id" - } - ], - "responses": { - "200": { - "description": "The user associated to the membership" - } - } - } - }, - "/memberships/{membershipId}/versions": { - "get": { - "operationId": "GET/membershipId/versions", - "summary": "Related membership", - "description": "Related membership", - "tags": [ - "versions", - "has_many" - ], - "parameters": [ - { - "name": "membershipId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true, - "description": "The resource's id" - } - ], - "responses": { - "200": { - "description": "The versions associated to the membership" - } - } - } - }, - "/organizations": { - "get": { - "operationId": "GET/organizations", - "summary": "List all organizations", - "description": "List all organizations", - "tags": [ - "organizations" - ], - "responses": { - "200": { - "description": "A list of organization objects", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/organizationResponseList" + "/application_memberships/{applicationMembershipId}/membership": { + "get": { + "operationId": "GET/applicationMembershipId/membership", + "summary": "Related application membership", + "description": "Related application membership", + "tags": [ + "memberships", + "has_one" + ], + "parameters": [ + { + "name": "applicationMembershipId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The membership associated to the application membership" + } } - } - } - } - } - }, - "post": { - "operationId": "POST/organizations", - "summary": "Creates an organization", - "description": "Creates an organization", - "tags": [ - "organizations" - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/organizationCreate" - } } - } }, - "responses": { - "201": { - "description": "The created organization object", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/organizationResponse" + "/application_memberships/{applicationMembershipId}/organization": { + "get": { + "operationId": "GET/applicationMembershipId/organization", + "summary": "Related application membership", + "description": "Related application membership", + "tags": [ + "organizations", + "has_one" + ], + "parameters": [ + { + "name": "applicationMembershipId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The organization associated to the application membership" + } } - } } - } - } - } - }, - "/organizations/{organizationId}": { - "get": { - "operationId": "GET/organizations/organizationId", - "summary": "Retrieve an organization", - "description": "Retrieve an organization", - "parameters": [ - { - "name": "organizationId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true, - "description": "The resource's id" - } - ], - "tags": [ - "organizations" - ], - "responses": { - "200": { - "description": "The organization object", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/organizationResponse" + }, + "/application_memberships/{applicationMembershipId}/role": { + "get": { + "operationId": "GET/applicationMembershipId/role", + "summary": "Related application membership", + "description": "Related application membership", + "tags": [ + "roles", + "has_one" + ], + "parameters": [ + { + "name": "applicationMembershipId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The role associated to the application membership" + } } - } - } - } - } - }, - "patch": { - "operationId": "PATCH/organizations/organizationId", - "summary": "Updates an organization", - "description": "Updates an organization", - "tags": [ - "organizations" - ], - "parameters": [ - { - "name": "organizationId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true, - "description": "The resource's id" - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/organizationUpdate" - } } - } }, - "responses": { - "200": { - "description": "The updated organization object", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/organizationResponse" + "/memberships": { + "post": { + "operationId": "POST/memberships", + "summary": "Creates an membership", + "description": "Creates an membership", + "tags": [ + "memberships" + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/membershipCreate" + } + } + } + }, + "responses": { + "201": { + "description": "The created membership object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/membershipResponse" + } + } + } + } } - } - } - } - } - } - }, - "/organizations/{organizationId}/transfer_ownership": { - "patch": { - "operationId": "PATCH/organizations/organizationId/transfer_ownership", - "summary": "Transfer ownership of an organization", - "description": "Transfers the ownership of an organization to a new owner", - "tags": [ - "organizations" - ], - "parameters": [ - { - "name": "organizationId", - "in": "path", - "schema": { - "type": "string" }, - "required": true, - "description": "The resource's id" - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "required": [ - "data" + "get": { + "operationId": "GET/memberships", + "summary": "List all memberships", + "description": "List all memberships", + "tags": [ + "memberships" ], - "type": "object", - "properties": { - "data": { - "type": "object", - "required": [ - "type", - "id", - "attributes" - ], - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "organizations" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - }, - "attributes": { - "type": "object", - "properties": { - "new_owner_email": { - "type": "string", - "description": "The user email of the new owner of the organization.", - "example": "test@commercelayer.io", - "nullable": false - } + "responses": { + "200": { + "description": "A list of membership objects", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/membershipResponseList" + } + } } - } } - } } - } } - } }, - "responses": { - "202": { - "description": "The confirmation of the transfer ownership", - "content": { - } - } - } - } - }, - "/organizations/{organizationId}/memberships": { - "get": { - "operationId": "GET/organizationId/memberships", - "summary": "Related organization", - "description": "Related organization", - "tags": [ - "memberships", - "has_many" - ], - "parameters": [ - { - "name": "organizationId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true, - "description": "The resource's id" - } - ], - "responses": { - "200": { - "description": "The memberships associated to the organization" - } - } - } - }, - "/organizations/{organizationId}/roles": { - "get": { - "operationId": "GET/organizationId/roles", - "summary": "Related organization", - "description": "Related organization", - "tags": [ - "roles", - "has_many" - ], - "parameters": [ - { - "name": "organizationId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true, - "description": "The resource's id" - } - ], - "responses": { - "200": { - "description": "The roles associated to the organization" - } - } - } - }, - "/organizations/{organizationId}/permissions": { - "get": { - "operationId": "GET/organizationId/permissions", - "summary": "Related organization", - "description": "Related organization", - "tags": [ - "permissions", - "has_many" - ], - "parameters": [ - { - "name": "organizationId", - "in": "path", - "schema": { - "type": "string" + "/memberships/{membershipId}": { + "get": { + "operationId": "GET/memberships/membershipId", + "summary": "Retrieve an membership", + "description": "Retrieve an membership", + "parameters": [ + { + "name": "membershipId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "tags": [ + "memberships" + ], + "responses": { + "200": { + "description": "The membership object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/membershipResponse" + } + } + } + } + } }, - "required": true, - "description": "The resource's id" - } - ], - "responses": { - "200": { - "description": "The permissions associated to the organization" - } - } - } - }, - "/organizations/{organizationId}/api_credentials": { - "get": { - "operationId": "GET/organizationId/api_credentials", - "summary": "Related organization", - "description": "Related organization", - "tags": [ - "api_credentials", - "has_many" - ], - "parameters": [ - { - "name": "organizationId", - "in": "path", - "schema": { - "type": "string" + "patch": { + "operationId": "PATCH/memberships/membershipId", + "summary": "Updates an membership", + "description": "Updates an membership", + "tags": [ + "memberships" + ], + "parameters": [ + { + "name": "membershipId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/membershipUpdate" + } + } + } + }, + "responses": { + "200": { + "description": "The updated membership object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/membershipResponse" + } + } + } + } + } }, - "required": true, - "description": "The resource's id" - } - ], - "responses": { - "200": { - "description": "The api_credentials associated to the organization" - } - } - } - }, - "/permissions": { - "get": { - "operationId": "GET/permissions", - "summary": "List all permissions", - "description": "List all permissions", - "tags": [ - "permissions" - ], - "responses": { - "200": { - "description": "A list of permission objects", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/permissionResponseList" + "delete": { + "operationId": "DELETE/memberships/membershipId", + "summary": "Delete an membership", + "description": "Delete an membership", + "tags": [ + "memberships" + ], + "parameters": [ + { + "name": "membershipId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "204": { + "description": "No content" + } } - } - } - } - } - }, - "post": { - "operationId": "POST/permissions", - "summary": "Creates an permission", - "description": "Creates an permission", - "tags": [ - "permissions" - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/permissionCreate" - } } - } }, - "responses": { - "201": { - "description": "The created permission object", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/permissionResponse" - } - } - } - } - } - } - }, - "/permissions/{permissionId}": { - "get": { - "operationId": "GET/permissions/permissionId", - "summary": "Retrieve an permission", - "description": "Retrieve an permission", - "parameters": [ - { - "name": "permissionId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true, - "description": "The resource's id" - } - ], - "tags": [ - "permissions" - ], - "responses": { - "200": { - "description": "The permission object", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/permissionResponse" + "/memberships/{membershipId}/resend": { + "post": { + "operationId": "POST/memberships/membershipId/resend", + "summary": "Resend invitation", + "description": "Resend invitation for the given membership", + "tags": [ + "memberships" + ], + "parameters": [ + { + "name": "membershipId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": {} + } + }, + "responses": { + "202": { + "description": "Confirmation that the invitation has been sent", + "content": {} + } } - } - } - } - } - }, - "patch": { - "operationId": "PATCH/permissions/permissionId", - "summary": "Updates an permission", - "description": "Updates an permission", - "tags": [ - "permissions" - ], - "parameters": [ - { - "name": "permissionId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true, - "description": "The resource's id" - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/permissionUpdate" - } } - } }, - "responses": { - "200": { - "description": "The updated permission object", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/permissionResponse" + "/memberships/{membershipId}/organization": { + "get": { + "operationId": "GET/membershipId/organization", + "summary": "Related membership", + "description": "Related membership", + "tags": [ + "organizations", + "has_one" + ], + "parameters": [ + { + "name": "membershipId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The organization associated to the membership" + } } - } } - } - } - } - }, - "/permissions/{permissionId}/organization": { - "get": { - "operationId": "GET/permissionId/organization", - "summary": "Related permission", - "description": "Related permission", - "tags": [ - "organizations", - "has_one" - ], - "parameters": [ - { - "name": "permissionId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true, - "description": "The resource's id" - } - ], - "responses": { - "200": { - "description": "The organization associated to the permission" - } - } - } - }, - "/permissions/{permissionId}/role": { - "get": { - "operationId": "GET/permissionId/role", - "summary": "Related permission", - "description": "Related permission", - "tags": [ - "roles", - "has_one" - ], - "parameters": [ - { - "name": "permissionId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true, - "description": "The resource's id" - } - ], - "responses": { - "200": { - "description": "The role associated to the permission" - } - } - } - }, - "/permissions/{permissionId}/versions": { - "get": { - "operationId": "GET/permissionId/versions", - "summary": "Related permission", - "description": "Related permission", - "tags": [ - "versions", - "has_many" - ], - "parameters": [ - { - "name": "permissionId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true, - "description": "The resource's id" - } - ], - "responses": { - "200": { - "description": "The versions associated to the permission" - } - } - } - }, - "/roles": { - "get": { - "operationId": "GET/roles", - "summary": "List all roles", - "description": "List all roles", - "tags": [ - "roles" - ], - "responses": { - "200": { - "description": "A list of role objects", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/roleResponseList" + }, + "/memberships/{membershipId}/role": { + "get": { + "operationId": "GET/membershipId/role", + "summary": "Related membership", + "description": "Related membership", + "tags": [ + "roles", + "has_one" + ], + "parameters": [ + { + "name": "membershipId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The role associated to the membership" + } } - } - } - } - } - }, - "post": { - "operationId": "POST/roles", - "summary": "Creates an role", - "description": "Creates an role", - "tags": [ - "roles" - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/roleCreate" - } } - } }, - "responses": { - "201": { - "description": "The created role object", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/roleResponse" + "/memberships/{membershipId}/application_memberships": { + "get": { + "operationId": "GET/membershipId/application_memberships", + "summary": "Related membership", + "description": "Related membership", + "tags": [ + "application_memberships", + "has_many" + ], + "parameters": [ + { + "name": "membershipId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The application_memberships associated to the membership" + } } - } } - } - } - } - }, - "/roles/{roleId}": { - "get": { - "operationId": "GET/roles/roleId", - "summary": "Retrieve an role", - "description": "Retrieve an role", - "parameters": [ - { - "name": "roleId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true, - "description": "The resource's id" - } - ], - "tags": [ - "roles" - ], - "responses": { - "200": { - "description": "The role object", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/roleResponse" + }, + "/memberships/{membershipId}/versions": { + "get": { + "operationId": "GET/membershipId/versions", + "summary": "Related membership", + "description": "Related membership", + "tags": [ + "versions", + "has_many" + ], + "parameters": [ + { + "name": "membershipId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The versions associated to the membership" + } } - } - } - } - } - }, - "patch": { - "operationId": "PATCH/roles/roleId", - "summary": "Updates an role", - "description": "Updates an role", - "tags": [ - "roles" - ], - "parameters": [ - { - "name": "roleId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true, - "description": "The resource's id" - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/roleUpdate" - } } - } }, - "responses": { - "200": { - "description": "The updated role object", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/roleResponse" + "/organizations": { + "post": { + "operationId": "POST/organizations", + "summary": "Creates an organization", + "description": "Creates an organization", + "tags": [ + "organizations" + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/organizationCreate" + } + } + } + }, + "responses": { + "201": { + "description": "The created organization object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/organizationResponse" + } + } + } + } } - } - } - } - } - } - }, - "/roles/{roleId}/organization": { - "get": { - "operationId": "GET/roleId/organization", - "summary": "Related role", - "description": "Related role", - "tags": [ - "organizations", - "has_one" - ], - "parameters": [ - { - "name": "roleId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true, - "description": "The resource's id" - } - ], - "responses": { - "200": { - "description": "The organization associated to the role" - } - } - } - }, - "/roles/{roleId}/permissions": { - "get": { - "operationId": "GET/roleId/permissions", - "summary": "Related role", - "description": "Related role", - "tags": [ - "permissions", - "has_many" - ], - "parameters": [ - { - "name": "roleId", - "in": "path", - "schema": { - "type": "string" }, - "required": true, - "description": "The resource's id" - } - ], - "responses": { - "200": { - "description": "The permissions associated to the role" - } - } - } - }, - "/roles/{roleId}/memberships": { - "get": { - "operationId": "GET/roleId/memberships", - "summary": "Related role", - "description": "Related role", - "tags": [ - "memberships", - "has_many" - ], - "parameters": [ - { - "name": "roleId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true, - "description": "The resource's id" - } - ], - "responses": { - "200": { - "description": "The memberships associated to the role" - } - } - } - }, - "/roles/{roleId}/api_credentials": { - "get": { - "operationId": "GET/roleId/api_credentials", - "summary": "Related role", - "description": "Related role", - "tags": [ - "api_credentials", - "has_many" - ], - "parameters": [ - { - "name": "roleId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true, - "description": "The resource's id" - } - ], - "responses": { - "200": { - "description": "The api_credentials associated to the role" - } - } - } - }, - "/roles/{roleId}/versions": { - "get": { - "operationId": "GET/roleId/versions", - "summary": "Related role", - "description": "Related role", - "tags": [ - "versions", - "has_many" - ], - "parameters": [ - { - "name": "roleId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true, - "description": "The resource's id" - } - ], - "responses": { - "200": { - "description": "The versions associated to the role" - } - } - } - }, - "/user": { - "get": { - "operationId": "GET/user/userId", - "summary": "Retrieve an user", - "description": "Retrieve an user", - "parameters": [ - - ], - "tags": [ - "user", - "singleton" - ], - "responses": { - "200": { - "description": "The user object", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/userResponse" + "get": { + "operationId": "GET/organizations", + "summary": "List all organizations", + "description": "List all organizations", + "tags": [ + "organizations" + ], + "responses": { + "200": { + "description": "A list of organization objects", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/organizationResponseList" + } + } + } + } } - } - } - } - } - }, - "patch": { - "operationId": "PATCH/user/userId", - "summary": "Updates an user", - "description": "Updates an user", - "tags": [ - "user", - "singleton" - ], - "parameters": [ - - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/userUpdate" - } } - } }, - "responses": { - "200": { - "description": "The updated user object", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/userResponse" - } - } - } - } - } - } - }, - "/versions": { - "get": { - "operationId": "GET/versions", - "summary": "List all versions", - "description": "List all versions", - "tags": [ - "versions" - ], - "responses": { - "200": { - "description": "A list of version objects", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/versionResponseList" + "/organizations/{organizationId}": { + "get": { + "operationId": "GET/organizations/organizationId", + "summary": "Retrieve an organization", + "description": "Retrieve an organization", + "parameters": [ + { + "name": "organizationId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "tags": [ + "organizations" + ], + "responses": { + "200": { + "description": "The organization object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/organizationResponse" + } + } + } + } } - } - } - } - } - } - }, - "/versions/{versionId}": { - "get": { - "operationId": "GET/versions/versionId", - "summary": "Retrieve an version", - "description": "Retrieve an version", - "parameters": [ - { - "name": "versionId", - "in": "path", - "schema": { - "type": "string" }, - "required": true, - "description": "The resource's id" - } - ], - "tags": [ - "versions" - ], - "responses": { - "200": { - "description": "The version object", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/versionResponse" - } - } - } - } - } - } - } - }, - "components": { - "schemas": { - "apiCredential": { - "type": "object", - "properties": { - "data": { - "type": "object", - "required": [ - "type", - "attributes" - ], - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "api_credentials" - ] - }, - "attributes": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The API credential internal name.", - "example": "My app", - "nullable": false - }, - "kind": { - "type": "string", - "description": "The API credential kind, can be one of: `webapp`, `sales_channel`, `integration` or the kind of app you want to fork (e.g. `orders`, `imports`, etc.).", - "example": "sales_channel", - "nullable": false - }, - "confidential": { - "type": "boolean", - "description": "Indicates if the API credential it's confidential.", - "example": true, - "nullable": false - }, - "redirect_uri": { - "type": "string", - "description": "The API credential redirect URI.", - "example": "https://bluebrand.com/img/logo.svg", - "nullable": true - }, - "client_id": { - "type": "string", - "description": "The API credential unique ID.", - "example": "xxxx-yyyy-zzzz", - "nullable": false - }, - "client_secret": { - "type": "string", - "description": "The API credential unique secret.", - "example": "xxxx-yyyy-zzzz", - "nullable": false - }, - "scopes": { - "type": "string", - "description": "The API credential scopes.", - "example": "market:all market:9 market:122 market:6 stock_location:6 stock_location:33", - "nullable": false - }, - "expires_in": { - "type": "integer", - "description": "The lifetime of the access token in seconds (min. `7200`, max. `31536000`. Default is `14400` for Sales channels and `7200` for other client types).", - "example": 7200, - "nullable": true - }, - "mode": { - "type": "string", - "description": "Indicates the environment the resource belongs to (one of `test` or `live`).", - "example": "test", - "nullable": true - }, - "custom": { - "type": "boolean", - "description": "Indicates if the API credential is used to create a custom app (e.g. fork a hosted app).", - "example": false, - "nullable": true - }, - "created_at": { - "type": "string", - "description": "Time at which the resource was created.", - "example": "2018-01-01T12:00:00.000Z", - "nullable": false - }, - "updated_at": { - "type": "string", - "description": "Time at which the resource was last updated.", - "example": "2018-01-01T12:00:00.000Z", - "nullable": false - }, - "reference": { - "type": "string", - "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", - "example": "ANY-EXTERNAL-REFEFERNCE", - "nullable": true - }, - "reference_origin": { - "type": "string", - "description": "Any identifier of the third party system that defines the reference code.", - "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", - "nullable": true - }, - "metadata": { - "type": "object", - "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", - "example": { - "foo": "bar" - }, - "nullable": true - } - } - }, - "relationships": { - "type": "object", - "properties": { - "organization": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "organizations" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } + "patch": { + "operationId": "PATCH/organizations/organizationId", + "summary": "Updates an organization", + "description": "Updates an organization", + "tags": [ + "organizations" + ], + "parameters": [ + { + "name": "organizationId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/organizationUpdate" + } } - } } - }, - "role": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "roles" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } + }, + "responses": { + "200": { + "description": "The updated organization object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/organizationResponse" + } + } } - } } - } } - } } - } - } - }, - "apiCredentialCreate": { - "required": [ - "data" - ], - "type": "object", - "properties": { - "data": { - "type": "object", - "required": [ - "type", - "attributes" - ], - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "api_credentials" - ] - }, - "attributes": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The API credential internal name.", - "example": "My app" - }, - "kind": { - "type": "string", - "description": "The API credential kind, can be one of: `webapp`, `sales_channel`, `integration` or the kind of app you want to fork (e.g. `orders`, `imports`, etc.).", - "example": "sales_channel" - }, - "redirect_uri": { - "type": "string", - "description": "The API credential redirect URI.", - "example": "https://bluebrand.com/img/logo.svg" - }, - "expires_in": { - "type": "integer", - "description": "The lifetime of the access token in seconds (min. `7200`, max. `31536000`. Default is `14400` for Sales channels and `7200` for other client types).", - "example": 7200 - }, - "mode": { - "type": "string", - "description": "Indicates the environment the resource belongs to (one of `test` or `live`).", - "example": "test" - }, - "custom": { - "type": "boolean", - "description": "Indicates if the API credential is used to create a custom app (e.g. fork a hosted app).", - "example": false - }, - "reference": { - "type": "string", - "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", - "example": "ANY-EXTERNAL-REFEFERNCE" - }, - "reference_origin": { - "type": "string", - "description": "Any identifier of the third party system that defines the reference code.", - "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN" - }, - "metadata": { - "type": "object", - "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", - "example": { - "foo": "bar" - } - } - }, - "required": [ - "name", - "kind" - ] - }, - "relationships": { - "type": "object", - "properties": { - "organization": { - "required": [ - "data" - ], - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "organizations" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } - } - } - } - }, - "role": { - "required": [ - "data" - ], - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "roles" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } + }, + "/organizations/{organizationId}/transfer_ownership": { + "patch": { + "operationId": "PATCH/organizations/organizationId/transfer_ownership", + "summary": "Transfer ownership of an organization", + "description": "Transfers the ownership of an organization to a new owner", + "tags": [ + "organizations" + ], + "parameters": [ + { + "name": "organizationId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "required": [ + "type", + "id", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organizations" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + }, + "attributes": { + "type": "object", + "properties": { + "new_owner_email": { + "type": "string", + "description": "The user email of the new owner of the organization.", + "example": "test@commercelayer.io", + "nullable": false + } + } + } + } + } + } + } } - } } - } }, - "required": [ - "organization" - ] - } - } - } - } - }, - "apiCredentialUpdate": { - "required": [ - "data" - ], - "type": "object", - "properties": { - "data": { - "type": "object", - "required": [ - "type", - "id", - "attributes" - ], - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "api_credentials" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - }, - "attributes": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The API credential internal name.", - "example": "My app", - "nullable": false - }, - "redirect_uri": { - "type": "string", - "description": "The API credential redirect URI.", - "example": "https://bluebrand.com/img/logo.svg", - "nullable": true - }, - "expires_in": { - "type": "integer", - "description": "The lifetime of the access token in seconds (min. `7200`, max. `31536000`. Default is `14400` for Sales channels and `7200` for other client types).", - "example": 7200, - "nullable": true - }, - "reference": { - "type": "string", - "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", - "example": "ANY-EXTERNAL-REFEFERNCE", - "nullable": true - }, - "reference_origin": { - "type": "string", - "description": "Any identifier of the third party system that defines the reference code.", - "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", - "nullable": true - }, - "metadata": { - "type": "object", - "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", - "example": { - "foo": "bar" - }, - "nullable": true - } - } - }, - "relationships": { - "type": "object", - "properties": { - "role": { - "required": [ - "data" - ], - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "roles" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } - } - } + "responses": { + "202": { + "description": "The confirmation of the transfer ownership", + "content": {} } - } } - } } - } - } - }, - "apiCredentialResponse": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - }, - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "api_credentials" - ] - }, - "links": { - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "URL" - } - } - }, - "attributes": { - "$ref": "#/components/schemas/apiCredential/properties/data/properties/attributes" - }, - "relationships": { - "type": "object", - "properties": { - "organization": { - "type": "object", - "properties": { - "links": { - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "URL" - }, - "related": { - "type": "string", - "description": "URL" - } - } - }, - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "organization" - ] - }, - "id": { - "type": "string", - "description": "The resource ID" - } - } - } + }, + "/organizations/{organizationId}/memberships": { + "get": { + "operationId": "GET/organizationId/memberships", + "summary": "Related organization", + "description": "Related organization", + "tags": [ + "memberships", + "has_many" + ], + "parameters": [ + { + "name": "organizationId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" } - }, - "role": { - "type": "object", - "properties": { - "links": { - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "URL" - }, - "related": { - "type": "string", - "description": "URL" - } - } - }, - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "role" - ] - }, - "id": { - "type": "string", - "description": "The resource ID" - } - } - } + ], + "responses": { + "200": { + "description": "The memberships associated to the organization" } - } } - } - } - } - } - }, - "apiCredentialResponseList": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/apiCredentialResponse/properties/data" } - } - } - }, - "applicationMembership": { - "type": "object", - "properties": { - "data": { - "type": "object", - "required": [ - "type", - "attributes" - ], - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "application_memberships" - ] - }, - "attributes": { - "type": "object", - "properties": { - "filters": { - "type": "object", - "description": "Set of key-value pairs that contains restrictions and scopes of the application membership.", - "example": { - "market_id_in": [ - 202, - 203 - ] - }, - "nullable": true - }, - "created_at": { - "type": "string", - "description": "Time at which the resource was created.", - "example": "2018-01-01T12:00:00.000Z", - "nullable": false - }, - "updated_at": { - "type": "string", - "description": "Time at which the resource was last updated.", - "example": "2018-01-01T12:00:00.000Z", - "nullable": false - }, - "reference": { - "type": "string", - "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", - "example": "ANY-EXTERNAL-REFEFERNCE", - "nullable": true - }, - "reference_origin": { - "type": "string", - "description": "Any identifier of the third party system that defines the reference code.", - "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", - "nullable": true - }, - "metadata": { - "type": "object", - "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", - "example": { - "foo": "bar" - }, - "nullable": true - } - } - }, - "relationships": { - "type": "object", - "properties": { - "api_credential": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "api_credentials" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } - } - } - } - }, - "membership": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "memberships" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } - } - } + }, + "/organizations/{organizationId}/roles": { + "get": { + "operationId": "GET/organizationId/roles", + "summary": "Related organization", + "description": "Related organization", + "tags": [ + "roles", + "has_many" + ], + "parameters": [ + { + "name": "organizationId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" } - }, - "user": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "user" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } - } - } + ], + "responses": { + "200": { + "description": "The roles associated to the organization" } - }, - "organization": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "organizations" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } - } - } + } + } + }, + "/organizations/{organizationId}/permissions": { + "get": { + "operationId": "GET/organizationId/permissions", + "summary": "Related organization", + "description": "Related organization", + "tags": [ + "permissions", + "has_many" + ], + "parameters": [ + { + "name": "organizationId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" } - }, - "role": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "roles" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } - } - } + ], + "responses": { + "200": { + "description": "The permissions associated to the organization" } - } } - } } - } - } - }, - "applicationMembershipCreate": { - "required": [ - "data" - ], - "type": "object", - "properties": { - "data": { - "type": "object", - "required": [ - "type", - "attributes" - ], - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "application_memberships" - ] - }, - "attributes": { - "type": "object", - "properties": { - "filters": { - "type": "object", - "description": "Set of key-value pairs that contains restrictions and scopes of the application membership.", - "example": { - "market_id_in": [ - 202, - 203 - ] - } - }, - "reference": { - "type": "string", - "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", - "example": "ANY-EXTERNAL-REFEFERNCE" - }, - "reference_origin": { - "type": "string", - "description": "Any identifier of the third party system that defines the reference code.", - "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN" - }, - "metadata": { - "type": "object", - "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", - "example": { - "foo": "bar" - } - } + }, + "/organizations/{organizationId}/api_credentials": { + "get": { + "operationId": "GET/organizationId/api_credentials", + "summary": "Related organization", + "description": "Related organization", + "tags": [ + "api_credentials", + "has_many" + ], + "parameters": [ + { + "name": "organizationId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The api_credentials associated to the organization" + } } - }, - "relationships": { - "type": "object", - "properties": { - "api_credential": { - "required": [ - "data" - ], - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "api_credentials" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } - } - } - } - }, - "membership": { - "required": [ - "data" - ], - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "memberships" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } - } - } - } - }, - "user": { - "required": [ - "data" - ], - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "user" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } - } - } - } - }, - "organization": { - "required": [ - "data" - ], - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "organizations" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } - } - } - } - }, - "role": { - "required": [ - "data" - ], - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "roles" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } + } + }, + "/permissions": { + "post": { + "operationId": "POST/permissions", + "summary": "Creates an permission", + "description": "Creates an permission", + "tags": [ + "permissions" + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/permissionCreate" + } } - } } - } }, - "required": [ - "api_credential", - "membership", - "user", - "organization", - "role" - ] - } - } - } - } - }, - "applicationMembershipUpdate": { - "required": [ - "data" - ], - "type": "object", - "properties": { - "data": { - "type": "object", - "required": [ - "type", - "id", - "attributes" - ], - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "application_memberships" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - }, - "attributes": { - "type": "object", - "properties": { - "filters": { - "type": "object", - "description": "Set of key-value pairs that contains restrictions and scopes of the application membership.", - "example": { - "market_id_in": [ - 202, - 203 - ] - }, - "nullable": true - }, - "reference": { - "type": "string", - "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", - "example": "ANY-EXTERNAL-REFEFERNCE", - "nullable": true - }, - "reference_origin": { - "type": "string", - "description": "Any identifier of the third party system that defines the reference code.", - "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", - "nullable": true - }, - "metadata": { - "type": "object", - "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", - "example": { - "foo": "bar" - }, - "nullable": true - } + "responses": { + "201": { + "description": "The created permission object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/permissionResponse" + } + } + } + } } - }, - "relationships": { - "type": "object", - "properties": { - "role": { - "required": [ - "data" - ], - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "roles" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } + }, + "get": { + "operationId": "GET/permissions", + "summary": "List all permissions", + "description": "List all permissions", + "tags": [ + "permissions" + ], + "responses": { + "200": { + "description": "A list of permission objects", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/permissionResponseList" + } + } } - } } - } } - } } - } - } - }, - "applicationMembershipResponse": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - }, - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "application_memberships" - ] - }, - "links": { - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "URL" - } - } - }, - "attributes": { - "$ref": "#/components/schemas/applicationMembership/properties/data/properties/attributes" - }, - "relationships": { - "type": "object", - "properties": { - "api_credential": { - "type": "object", - "properties": { - "links": { - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "URL" - }, - "related": { - "type": "string", - "description": "URL" - } - } - }, - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "api_credential" - ] - }, - "id": { - "type": "string", - "description": "The resource ID" - } - } - } + }, + "/permissions/{permissionId}": { + "get": { + "operationId": "GET/permissions/permissionId", + "summary": "Retrieve an permission", + "description": "Retrieve an permission", + "parameters": [ + { + "name": "permissionId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" } - }, - "membership": { - "type": "object", - "properties": { - "links": { - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "URL" - }, - "related": { - "type": "string", - "description": "URL" - } - } - }, - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "membership" - ] - }, - "id": { - "type": "string", - "description": "The resource ID" - } + ], + "tags": [ + "permissions" + ], + "responses": { + "200": { + "description": "The permission object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/permissionResponse" + } + } } - } } - }, - "user": { - "type": "object", - "properties": { - "links": { - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "URL" - }, - "related": { - "type": "string", - "description": "URL" - } - } - }, - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "user" - ] - }, - "id": { - "type": "string", - "description": "The resource ID" - } - } - } + } + }, + "patch": { + "operationId": "PATCH/permissions/permissionId", + "summary": "Updates an permission", + "description": "Updates an permission", + "tags": [ + "permissions" + ], + "parameters": [ + { + "name": "permissionId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" } - }, - "organization": { - "type": "object", - "properties": { - "links": { - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "URL" - }, - "related": { - "type": "string", - "description": "URL" - } - } - }, - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "organization" - ] - }, - "id": { - "type": "string", - "description": "The resource ID" - } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/permissionUpdate" + } } - } } - }, - "role": { - "type": "object", - "properties": { - "links": { - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "URL" - }, - "related": { - "type": "string", - "description": "URL" - } - } - }, - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "role" - ] - }, - "id": { - "type": "string", - "description": "The resource ID" - } + }, + "responses": { + "200": { + "description": "The updated permission object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/permissionResponse" + } + } } - } } - } } - } } - } - } - }, - "applicationMembershipResponseList": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/applicationMembershipResponse/properties/data" - } - } - } - }, - "membership": { - "type": "object", - "properties": { - "data": { - "type": "object", - "required": [ - "type", - "attributes" - ], - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "memberships" - ] - }, - "attributes": { - "type": "object", - "properties": { - "user_email": { - "type": "string", - "description": "The user email.", - "example": "commercelayer@commercelayer.io", - "nullable": false - }, - "user_first_name": { - "type": "string", - "description": "The user first name.", - "example": "John", - "nullable": false - }, - "user_last_name": { - "type": "string", - "description": "The user last name.", - "example": "Doe", - "nullable": false - }, - "status": { - "type": "string", - "description": "The memberships status. One of `pending` (default), `active`.", - "example": "pending", - "nullable": false, - "enum": [ - "pending", - "active" - ] - }, - "owner": { - "type": "boolean", - "description": "Indicates if the user it's the owner of the organization.", - "example": true, - "nullable": false - }, - "created_at": { - "type": "string", - "description": "Time at which the resource was created.", - "example": "2018-01-01T12:00:00.000Z", - "nullable": false - }, - "updated_at": { - "type": "string", - "description": "Time at which the resource was last updated.", - "example": "2018-01-01T12:00:00.000Z", - "nullable": false - }, - "reference": { - "type": "string", - "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", - "example": "ANY-EXTERNAL-REFEFERNCE", - "nullable": true - }, - "reference_origin": { - "type": "string", - "description": "Any identifier of the third party system that defines the reference code.", - "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", - "nullable": true - }, - "metadata": { - "type": "object", - "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", - "example": { - "foo": "bar" - }, - "nullable": true - } - } - }, - "relationships": { - "type": "object", - "properties": { - "organization": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "organizations" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } - } - } + }, + "/permissions/{permissionId}/organization": { + "get": { + "operationId": "GET/permissionId/organization", + "summary": "Related permission", + "description": "Related permission", + "tags": [ + "organizations", + "has_one" + ], + "parameters": [ + { + "name": "permissionId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" } - }, - "role": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "roles" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } - } - } + ], + "responses": { + "200": { + "description": "The organization associated to the permission" } - }, - "application_memberships": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "application_memberships" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } - } - } + } + } + }, + "/permissions/{permissionId}/role": { + "get": { + "operationId": "GET/permissionId/role", + "summary": "Related permission", + "description": "Related permission", + "tags": [ + "roles", + "has_one" + ], + "parameters": [ + { + "name": "permissionId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" } - }, - "user": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "user" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } - } - } + ], + "responses": { + "200": { + "description": "The role associated to the permission" } - }, - "versions": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "versions" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } - } - } + } + } + }, + "/permissions/{permissionId}/versions": { + "get": { + "operationId": "GET/permissionId/versions", + "summary": "Related permission", + "description": "Related permission", + "tags": [ + "versions", + "has_many" + ], + "parameters": [ + { + "name": "permissionId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The versions associated to the permission" } - } } - } } - } - } - }, - "membershipCreate": { - "required": [ - "data" - ], - "type": "object", - "properties": { - "data": { - "type": "object", - "required": [ - "type", - "attributes" - ], - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "memberships" - ] - }, - "attributes": { - "type": "object", - "properties": { - "user_email": { - "type": "string", - "description": "The user email.", - "example": "commercelayer@commercelayer.io" - }, - "reference": { - "type": "string", - "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", - "example": "ANY-EXTERNAL-REFEFERNCE" - }, - "reference_origin": { - "type": "string", - "description": "Any identifier of the third party system that defines the reference code.", - "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN" - }, - "metadata": { - "type": "object", - "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", - "example": { - "foo": "bar" - } - } - }, - "required": [ - "user_email" - ] - }, - "relationships": { - "type": "object", - "properties": { - "organization": { - "required": [ - "data" - ], - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "organizations" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } - } - } - } - }, - "role": { - "required": [ - "data" - ], - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "roles" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } - } - } - } - }, - "application_memberships": { - "required": [ - "data" - ], - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "application_memberships" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } + }, + "/roles": { + "post": { + "operationId": "POST/roles", + "summary": "Creates an role", + "description": "Creates an role", + "tags": [ + "roles" + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/roleCreate" + } } - } } - } }, - "required": [ - "organization", - "role" - ] - } - } - } - } - }, - "membershipUpdate": { - "required": [ - "data" - ], - "type": "object", - "properties": { - "data": { - "type": "object", - "required": [ - "type", - "id", - "attributes" - ], - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "memberships" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - }, - "attributes": { - "type": "object", - "properties": { - "reference": { - "type": "string", - "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", - "example": "ANY-EXTERNAL-REFEFERNCE", - "nullable": true - }, - "reference_origin": { - "type": "string", - "description": "Any identifier of the third party system that defines the reference code.", - "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", - "nullable": true - }, - "metadata": { - "type": "object", - "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", - "example": { - "foo": "bar" - }, - "nullable": true - } - } - }, - "relationships": { - "type": "object", - "properties": { - "role": { - "required": [ - "data" - ], - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "roles" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } + "responses": { + "201": { + "description": "The created role object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/roleResponse" + } + } } - } - } - }, - "application_memberships": { - "required": [ - "data" - ], - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "application_memberships" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } + } + } + }, + "get": { + "operationId": "GET/roles", + "summary": "List all roles", + "description": "List all roles", + "tags": [ + "roles" + ], + "responses": { + "200": { + "description": "A list of role objects", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/roleResponseList" + } + } } - } } - } } - } } - } - } - }, - "membershipResponse": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - }, - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "memberships" - ] - }, - "links": { - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "URL" - } - } - }, - "attributes": { - "$ref": "#/components/schemas/membership/properties/data/properties/attributes" - }, - "relationships": { - "type": "object", - "properties": { - "organization": { - "type": "object", - "properties": { - "links": { - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "URL" - }, - "related": { - "type": "string", - "description": "URL" - } - } - }, - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "organization" - ] - }, - "id": { - "type": "string", - "description": "The resource ID" - } - } - } + }, + "/roles/{roleId}": { + "get": { + "operationId": "GET/roles/roleId", + "summary": "Retrieve an role", + "description": "Retrieve an role", + "parameters": [ + { + "name": "roleId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" } - }, - "role": { - "type": "object", - "properties": { - "links": { - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "URL" - }, - "related": { - "type": "string", - "description": "URL" - } - } - }, - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "role" - ] - }, - "id": { - "type": "string", - "description": "The resource ID" - } + ], + "tags": [ + "roles" + ], + "responses": { + "200": { + "description": "The role object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/roleResponse" + } + } } - } } - }, - "application_memberships": { - "type": "object", - "properties": { - "links": { - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "URL" - }, - "related": { - "type": "string", - "description": "URL" - } - } - }, - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "application_memberships" - ] - }, - "id": { - "type": "string", - "description": "The resource ID" - } - } - } + } + }, + "patch": { + "operationId": "PATCH/roles/roleId", + "summary": "Updates an role", + "description": "Updates an role", + "tags": [ + "roles" + ], + "parameters": [ + { + "name": "roleId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" } - }, - "user": { - "type": "object", - "properties": { - "links": { - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "URL" - }, - "related": { - "type": "string", - "description": "URL" - } - } - }, - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "user" - ] - }, - "id": { - "type": "string", - "description": "The resource ID" - } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/roleUpdate" + } } - } } - }, - "versions": { - "type": "object", - "properties": { - "links": { - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "URL" - }, - "related": { - "type": "string", - "description": "URL" - } - } - }, - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "versions" - ] - }, - "id": { - "type": "string", - "description": "The resource ID" - } + }, + "responses": { + "200": { + "description": "The updated role object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/roleResponse" + } + } } - } } - } } - } - } - } - } - }, - "membershipResponseList": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/membershipResponse/properties/data" } - } - } - }, - "organization": { - "type": "object", - "properties": { - "data": { - "type": "object", - "required": [ - "type", - "attributes" - ], - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "organizations" - ] - }, - "attributes": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The organization's internal name.", - "example": "The Blue Brand", - "nullable": false - }, - "slug": { - "type": "string", - "description": "The organization's slug name.", - "example": "the-blue-brand", - "nullable": false - }, - "domain": { - "type": "string", - "description": "The organization's domain.", - "example": "the-blue-brand.commercelayer.io", - "nullable": false - }, - "support_phone": { - "type": "string", - "description": "The organization's support phone.", - "example": "+01 30800857", - "nullable": true - }, - "support_email": { - "type": "string", - "description": "The organization's support email.", - "example": "support@bluebrand.com", - "nullable": true - }, - "logo_url": { - "type": "string", - "description": "The URL to the organization's logo.", - "example": "https://bluebrand.com/img/logo.svg", - "nullable": true - }, - "favicon_url": { - "type": "string", - "description": "The URL to the organization's favicon.", - "example": "https://bluebrand.com/img/favicon.ico", - "nullable": true - }, - "primary_color": { - "type": "string", - "description": "The organization's primary color. Format is HEX (starts with `#` and it's followed by six letters and/or numbers).", - "example": "#C8984E", - "nullable": true - }, - "contrast_color": { - "type": "string", - "description": "The organization's contrast color. Format is HEX (starts with `#` and it's followed by six letters and/or numbers).", - "example": "#FFFFCC", - "nullable": true - }, - "gtm_id": { - "type": "string", - "description": "The organization's Google Tag Manager ID.", - "example": "GTM-5FJXX6", - "nullable": true - }, - "gtm_id_test": { - "type": "string", - "description": "The organization's Google Tag Manager ID for test.", - "example": "GTM-5FJXX7", - "nullable": true - }, - "discount_disabled": { - "type": "boolean", - "description": "Indicates if organization has discount disabled.", - "example": false, - "nullable": true - }, - "account_disabled": { - "type": "boolean", - "description": "Indicates if organization has account disabled.", - "example": false, - "nullable": true - }, - "acceptance_disabled": { - "type": "boolean", - "description": "Indicates if organization has acceptance disabled.", - "example": false, - "nullable": true - }, - "max_concurrent_promotions": { - "type": "integer", - "description": "The maximum number of active concurrent promotions allowed for your organization.", - "example": 10, - "nullable": false - }, - "max_concurrent_imports": { - "type": "integer", - "description": "The maximum number of concurrent imports allowed for your organization.", - "example": 30, - "nullable": false - }, - "associated_markets": { - "type": "object", - "description": "An object that contains the markets of the organization.", - "example": { - "foo": "bar" - }, - "nullable": false - }, - "region": { - "type": "string", - "description": "The region where the organization it's located, default value it's `eu-west-1`.", - "example": "eu-west-1", - "nullable": true - }, - "can_switch_live": { - "type": "boolean", - "description": "Indicates if the organization can switch to live mode.", - "example": false, - "nullable": false - }, - "created_at": { - "type": "string", - "description": "Time at which the resource was created.", - "example": "2018-01-01T12:00:00.000Z", - "nullable": false - }, - "updated_at": { - "type": "string", - "description": "Time at which the resource was last updated.", - "example": "2018-01-01T12:00:00.000Z", - "nullable": false - }, - "reference": { - "type": "string", - "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", - "example": "ANY-EXTERNAL-REFEFERNCE", - "nullable": true - }, - "reference_origin": { - "type": "string", - "description": "Any identifier of the third party system that defines the reference code.", - "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", - "nullable": true - }, - "metadata": { - "type": "object", - "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", - "example": { - "foo": "bar" - }, - "nullable": true - } - } - }, - "relationships": { - "type": "object", - "properties": { - "memberships": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "memberships" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } - } - } + }, + "/roles/{roleId}/organization": { + "get": { + "operationId": "GET/roleId/organization", + "summary": "Related role", + "description": "Related role", + "tags": [ + "organizations", + "has_one" + ], + "parameters": [ + { + "name": "roleId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" } - }, - "roles": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "roles" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } - } - } + ], + "responses": { + "200": { + "description": "The organization associated to the role" } - }, - "permissions": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "permissions" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } - } - } + } + } + }, + "/roles/{roleId}/permissions": { + "get": { + "operationId": "GET/roleId/permissions", + "summary": "Related role", + "description": "Related role", + "tags": [ + "permissions", + "has_many" + ], + "parameters": [ + { + "name": "roleId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" } - }, - "api_credentials": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "api_credentials" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } - } - } + ], + "responses": { + "200": { + "description": "The permissions associated to the role" } - } } - } } - } - } - }, - "organizationCreate": { - "required": [ - "data" - ], - "type": "object", - "properties": { - "data": { - "type": "object", - "required": [ - "type", - "attributes" - ], - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "organizations" - ] - }, - "attributes": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The organization's internal name.", - "example": "The Blue Brand" - }, - "support_phone": { - "type": "string", - "description": "The organization's support phone.", - "example": "+01 30800857" - }, - "support_email": { - "type": "string", - "description": "The organization's support email.", - "example": "support@bluebrand.com" - }, - "logo_url": { - "type": "string", - "description": "The URL to the organization's logo.", - "example": "https://bluebrand.com/img/logo.svg" - }, - "favicon_url": { - "type": "string", - "description": "The URL to the organization's favicon.", - "example": "https://bluebrand.com/img/favicon.ico" - }, - "primary_color": { - "type": "string", - "description": "The organization's primary color. Format is HEX (starts with `#` and it's followed by six letters and/or numbers).", - "example": "#C8984E" - }, - "contrast_color": { - "type": "string", - "description": "The organization's contrast color. Format is HEX (starts with `#` and it's followed by six letters and/or numbers).", - "example": "#FFFFCC" - }, - "gtm_id": { - "type": "string", - "description": "The organization's Google Tag Manager ID.", - "example": "GTM-5FJXX6" - }, - "gtm_id_test": { - "type": "string", - "description": "The organization's Google Tag Manager ID for test.", - "example": "GTM-5FJXX7" - }, - "discount_disabled": { - "type": "boolean", - "description": "Indicates if organization has discount disabled.", - "example": false - }, - "account_disabled": { - "type": "boolean", - "description": "Indicates if organization has account disabled.", - "example": false - }, - "acceptance_disabled": { - "type": "boolean", - "description": "Indicates if organization has acceptance disabled.", - "example": false - }, - "region": { - "type": "string", - "description": "The region where the organization it's located, default value it's `eu-west-1`.", - "example": "eu-west-1" - }, - "reference": { - "type": "string", - "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", - "example": "ANY-EXTERNAL-REFEFERNCE" - }, - "reference_origin": { - "type": "string", - "description": "Any identifier of the third party system that defines the reference code.", - "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN" - }, - "metadata": { - "type": "object", - "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", - "example": { - "foo": "bar" - } - } - }, - "required": [ - "name" - ] - }, - "relationships": { - "type": "object", - "properties": { + }, + "/roles/{roleId}/memberships": { + "get": { + "operationId": "GET/roleId/memberships", + "summary": "Related role", + "description": "Related role", + "tags": [ + "memberships", + "has_many" + ], + "parameters": [ + { + "name": "roleId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The memberships associated to the role" + } } - } } - } - } - }, - "organizationUpdate": { - "required": [ - "data" - ], - "type": "object", - "properties": { - "data": { - "type": "object", - "required": [ - "type", - "id", - "attributes" - ], - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "organizations" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - }, - "attributes": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The organization's internal name.", - "example": "The Blue Brand", - "nullable": false - }, - "support_phone": { - "type": "string", - "description": "The organization's support phone.", - "example": "+01 30800857", - "nullable": true - }, - "support_email": { - "type": "string", - "description": "The organization's support email.", - "example": "support@bluebrand.com", - "nullable": true - }, - "logo_url": { - "type": "string", - "description": "The URL to the organization's logo.", - "example": "https://bluebrand.com/img/logo.svg", - "nullable": true - }, - "favicon_url": { - "type": "string", - "description": "The URL to the organization's favicon.", - "example": "https://bluebrand.com/img/favicon.ico", - "nullable": true - }, - "primary_color": { - "type": "string", - "description": "The organization's primary color. Format is HEX (starts with `#` and it's followed by six letters and/or numbers).", - "example": "#C8984E", - "nullable": true - }, - "contrast_color": { - "type": "string", - "description": "The organization's contrast color. Format is HEX (starts with `#` and it's followed by six letters and/or numbers).", - "example": "#FFFFCC", - "nullable": true - }, - "gtm_id": { - "type": "string", - "description": "The organization's Google Tag Manager ID.", - "example": "GTM-5FJXX6", - "nullable": true - }, - "gtm_id_test": { - "type": "string", - "description": "The organization's Google Tag Manager ID for test.", - "example": "GTM-5FJXX7", - "nullable": true - }, - "discount_disabled": { - "type": "boolean", - "description": "Indicates if organization has discount disabled.", - "example": false, - "nullable": false - }, - "account_disabled": { - "type": "boolean", - "description": "Indicates if organization has account disabled.", - "example": false, - "nullable": false - }, - "acceptance_disabled": { - "type": "boolean", - "description": "Indicates if organization has acceptance disabled.", - "example": false, - "nullable": false - }, - "reference": { - "type": "string", - "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", - "example": "ANY-EXTERNAL-REFEFERNCE", - "nullable": true - }, - "reference_origin": { - "type": "string", - "description": "Any identifier of the third party system that defines the reference code.", - "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", - "nullable": true - }, - "metadata": { - "type": "object", - "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", - "example": { - "foo": "bar" - }, - "nullable": true - } - } - }, - "relationships": { - "type": "object", - "properties": { + }, + "/roles/{roleId}/api_credentials": { + "get": { + "operationId": "GET/roleId/api_credentials", + "summary": "Related role", + "description": "Related role", + "tags": [ + "api_credentials", + "has_many" + ], + "parameters": [ + { + "name": "roleId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The api_credentials associated to the role" + } } - } } - } - } - }, - "organizationResponse": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - }, - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "organizations" - ] - }, - "links": { - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "URL" - } + }, + "/roles/{roleId}/versions": { + "get": { + "operationId": "GET/roleId/versions", + "summary": "Related role", + "description": "Related role", + "tags": [ + "versions", + "has_many" + ], + "parameters": [ + { + "name": "roleId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "responses": { + "200": { + "description": "The versions associated to the role" + } } - }, - "attributes": { - "$ref": "#/components/schemas/organization/properties/data/properties/attributes" - }, - "relationships": { - "type": "object", - "properties": { - "memberships": { - "type": "object", - "properties": { - "links": { - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "URL" - }, - "related": { - "type": "string", - "description": "URL" - } - } - }, - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "memberships" - ] - }, - "id": { - "type": "string", - "description": "The resource ID" - } + } + }, + "/user": { + "get": { + "operationId": "GET/user/userId", + "summary": "Retrieve an user", + "description": "Retrieve an user", + "parameters": [], + "tags": [ + "user", + "singleton" + ], + "responses": { + "200": { + "description": "The user object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/userResponse" + } + } } - } } - }, - "roles": { - "type": "object", - "properties": { - "links": { - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "URL" - }, - "related": { - "type": "string", - "description": "URL" - } - } - }, - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "roles" - ] - }, - "id": { - "type": "string", - "description": "The resource ID" - } + } + }, + "patch": { + "operationId": "PATCH/user/userId", + "summary": "Updates an user", + "description": "Updates an user", + "tags": [ + "user", + "singleton" + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/userUpdate" + } } - } } - }, - "permissions": { - "type": "object", - "properties": { - "links": { - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "URL" - }, - "related": { - "type": "string", - "description": "URL" - } - } - }, - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "permissions" - ] - }, - "id": { - "type": "string", - "description": "The resource ID" - } + }, + "responses": { + "200": { + "description": "The updated user object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/userResponse" + } + } } - } } - }, - "api_credentials": { - "type": "object", - "properties": { - "links": { - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "URL" - }, - "related": { - "type": "string", - "description": "URL" - } + } + } + }, + "/versions": { + "get": { + "operationId": "GET/versions", + "summary": "List all versions", + "description": "List all versions", + "tags": [ + "versions" + ], + "responses": { + "200": { + "description": "A list of version objects", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/versionResponseList" + } + } } - }, - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "api_credentials" - ] - }, - "id": { - "type": "string", - "description": "The resource ID" - } + } + } + } + }, + "/versions/{versionId}": { + "get": { + "operationId": "GET/versions/versionId", + "summary": "Retrieve an version", + "description": "Retrieve an version", + "parameters": [ + { + "name": "versionId", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "The resource's id" + } + ], + "tags": [ + "versions" + ], + "responses": { + "200": { + "description": "The version object", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/versionResponse" + } + } } - } } - } } - } - } - } - } - }, - "organizationResponseList": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/organizationResponse/properties/data" } - } } - }, - "permission": { - "type": "object", - "properties": { - "data": { - "type": "object", - "required": [ - "type", - "attributes" - ], - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "permissions" - ] - }, - "attributes": { - "type": "object", - "properties": { - "can_create": { - "type": "boolean", - "description": "Determines if the permission have access to create rights.", - "example": false, - "nullable": false - }, - "can_read": { - "type": "boolean", - "description": "Determines if the permission have access to read rights.", - "example": false, - "nullable": false - }, - "can_update": { - "type": "boolean", - "description": "Determines if the permission have access to update rights.", - "example": false, - "nullable": false - }, - "can_destroy": { - "type": "boolean", - "description": "Determines if the permission have access to destroy rights.", - "example": false, - "nullable": false - }, - "subject": { - "type": "string", - "description": "The resource where this permission is applied.", - "example": "", - "nullable": false - }, - "restrictions": { - "type": "object", - "description": "An object that contains additional restrictions.", - "example": { - "foo": "bar" - }, - "nullable": false - }, - "created_at": { - "type": "string", - "description": "Time at which the resource was created.", - "example": "2018-01-01T12:00:00.000Z", - "nullable": false - }, - "updated_at": { - "type": "string", - "description": "Time at which the resource was last updated.", - "example": "2018-01-01T12:00:00.000Z", - "nullable": false - }, - "reference": { - "type": "string", - "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", - "example": "ANY-EXTERNAL-REFEFERNCE", - "nullable": true - }, - "reference_origin": { - "type": "string", - "description": "Any identifier of the third party system that defines the reference code.", - "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", - "nullable": true - }, - "metadata": { - "type": "object", - "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", - "example": { - "foo": "bar" - }, - "nullable": true - } - } - }, - "relationships": { + }, + "components": { + "schemas": { + "apiCredential": { "type": "object", "properties": { - "organization": { - "type": "object", - "properties": { - "data": { + "data": { "type": "object", + "required": [ + "type", + "attributes" + ], "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "organizations" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "api_credentials" + ] + }, + "attributes": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The API credential internal name.", + "example": "My app", + "nullable": false + }, + "kind": { + "type": "string", + "description": "The API credential kind, can be one of: `webapp`, `sales_channel`, `integration` or the kind of app you want to fork (e.g. `orders`, `imports`, etc.).", + "example": "sales_channel", + "nullable": false + }, + "confidential": { + "type": "boolean", + "description": "Indicates if the API credential it's confidential.", + "example": true, + "nullable": false + }, + "redirect_uri": { + "type": "string", + "description": "The API credential redirect URI.", + "example": "https://bluebrand.com/img/logo.svg", + "nullable": true + }, + "client_id": { + "type": "string", + "description": "The API credential unique ID.", + "example": "xxxx-yyyy-zzzz", + "nullable": false + }, + "client_secret": { + "type": "string", + "description": "The API credential unique secret.", + "example": "xxxx-yyyy-zzzz", + "nullable": false + }, + "scopes": { + "type": "string", + "description": "The API credential scopes.", + "example": "market:all market:9 market:122 market:6 stock_location:6 stock_location:33", + "nullable": false + }, + "expires_in": { + "type": "integer", + "description": "The lifetime of the access token in seconds (min. `7200`, max. `31536000`. Default is `14400` for Sales channels and `7200` for other client types).", + "example": 7200, + "nullable": true + }, + "mode": { + "type": "string", + "description": "Indicates the environment the resource belongs to (one of `test` or `live`).", + "example": "test", + "nullable": true + }, + "custom": { + "type": "boolean", + "description": "Indicates if the API credential is used to create a custom app (e.g. fork a hosted app).", + "example": false, + "nullable": true + }, + "created_at": { + "type": "string", + "description": "Time at which the resource was created.", + "example": "2018-01-01T12:00:00.000Z", + "nullable": false + }, + "updated_at": { + "type": "string", + "description": "Time at which the resource was last updated.", + "example": "2018-01-01T12:00:00.000Z", + "nullable": false + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE", + "nullable": true + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", + "nullable": true + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + }, + "nullable": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "organization": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organizations" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "role": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "roles" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + } + } + } } - } } - }, - "role": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "roles" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } - } - } - } - }, - "versions": { - "type": "object", - "properties": { - "data": { + } + }, + "apiCredentialCreate": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { "type": "object", + "required": [ + "type", + "attributes" + ], "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "versions" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "api_credentials" + ] + }, + "attributes": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The API credential internal name.", + "example": "My app" + }, + "kind": { + "type": "string", + "description": "The API credential kind, can be one of: `webapp`, `sales_channel`, `integration` or the kind of app you want to fork (e.g. `orders`, `imports`, etc.).", + "example": "sales_channel" + }, + "redirect_uri": { + "type": "string", + "description": "The API credential redirect URI.", + "example": "https://bluebrand.com/img/logo.svg" + }, + "expires_in": { + "type": "integer", + "description": "The lifetime of the access token in seconds (min. `7200`, max. `31536000`. Default is `14400` for Sales channels and `7200` for other client types).", + "example": 7200 + }, + "mode": { + "type": "string", + "description": "Indicates the environment the resource belongs to (one of `test` or `live`).", + "example": "test" + }, + "custom": { + "type": "boolean", + "description": "Indicates if the API credential is used to create a custom app (e.g. fork a hosted app).", + "example": false + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE" + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN" + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + } + } + }, + "required": [ + "name", + "kind" + ] + }, + "relationships": { + "type": "object", + "properties": { + "organization": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organizations" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "role": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "roles" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + } + }, + "required": [ + "organization" + ] + } } - } } - } } - } - } - } - } - }, - "permissionCreate": { - "required": [ - "data" - ], - "type": "object", - "properties": { - "data": { - "type": "object", - "required": [ - "type", - "attributes" - ], - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "permissions" - ] - }, - "attributes": { - "type": "object", - "properties": { - "can_create": { - "type": "boolean", - "description": "Determines if the permission have access to create rights.", - "example": false - }, - "can_read": { - "type": "boolean", - "description": "Determines if the permission have access to read rights.", - "example": false - }, - "can_update": { - "type": "boolean", - "description": "Determines if the permission have access to update rights.", - "example": false - }, - "can_destroy": { - "type": "boolean", - "description": "Determines if the permission have access to destroy rights.", - "example": false - }, - "subject": { - "type": "string", - "description": "The resource where this permission is applied.", - "example": "" - }, - "reference": { - "type": "string", - "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", - "example": "ANY-EXTERNAL-REFEFERNCE" - }, - "reference_origin": { - "type": "string", - "description": "Any identifier of the third party system that defines the reference code.", - "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN" - }, - "metadata": { - "type": "object", - "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", - "example": { - "foo": "bar" - } - } - }, + }, + "apiCredentialUpdate": { "required": [ - "can_create", - "can_read", - "can_update", - "can_destroy", - "subject" - ] - }, - "relationships": { + "data" + ], "type": "object", "properties": { - "role": { - "required": [ - "data" - ], - "type": "object", - "properties": { - "data": { + "data": { "type": "object", + "required": [ + "type", + "id", + "attributes" + ], "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "roles" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "api_credentials" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + }, + "attributes": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The API credential internal name.", + "example": "My app", + "nullable": false + }, + "redirect_uri": { + "type": "string", + "description": "The API credential redirect URI.", + "example": "https://bluebrand.com/img/logo.svg", + "nullable": true + }, + "expires_in": { + "type": "integer", + "description": "The lifetime of the access token in seconds (min. `7200`, max. `31536000`. Default is `14400` for Sales channels and `7200` for other client types).", + "example": 7200, + "nullable": true + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE", + "nullable": true + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", + "nullable": true + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + }, + "nullable": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "role": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "roles" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + } + } + } } - } } - } - }, - "required": [ - "role" - ] - } - } - } - } - }, - "permissionUpdate": { - "required": [ - "data" - ], - "type": "object", - "properties": { - "data": { - "type": "object", - "required": [ - "type", - "id", - "attributes" - ], - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "permissions" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - }, - "attributes": { - "type": "object", - "properties": { - "can_create": { - "type": "boolean", - "description": "Determines if the permission have access to create rights.", - "example": false, - "nullable": false - }, - "can_read": { - "type": "boolean", - "description": "Determines if the permission have access to read rights.", - "example": false, - "nullable": false - }, - "can_update": { - "type": "boolean", - "description": "Determines if the permission have access to update rights.", - "example": false, - "nullable": false - }, - "can_destroy": { - "type": "boolean", - "description": "Determines if the permission have access to destroy rights.", - "example": false, - "nullable": false - }, - "reference": { - "type": "string", - "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", - "example": "ANY-EXTERNAL-REFEFERNCE", - "nullable": true - }, - "reference_origin": { - "type": "string", - "description": "Any identifier of the third party system that defines the reference code.", - "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", - "nullable": true - }, - "metadata": { - "type": "object", - "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", - "example": { - "foo": "bar" - }, - "nullable": true - } } - }, - "relationships": { + }, + "apiCredentialResponse": { "type": "object", "properties": { + "data": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + }, + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "api_credentials" + ] + }, + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + } + } + }, + "attributes": { + "$ref": "#/components/schemas/apiCredential/properties/data/properties/attributes" + }, + "relationships": { + "type": "object", + "properties": { + "organization": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organization" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + }, + "role": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "role" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + } + } + } + } + } } - } - } - } - } - }, - "permissionResponse": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - }, - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "permissions" - ] - }, - "links": { + }, + "apiCredentialResponseList": { "type": "object", "properties": { - "self": { - "type": "string", - "description": "URL" - } + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/apiCredentialResponse/properties/data" + } + } } - }, - "attributes": { - "$ref": "#/components/schemas/permission/properties/data/properties/attributes" - }, - "relationships": { + }, + "applicationMembership": { "type": "object", "properties": { - "organization": { - "type": "object", - "properties": { - "links": { - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "URL" - }, - "related": { - "type": "string", - "description": "URL" - } - } - }, - "data": { + "data": { "type": "object", + "required": [ + "type", + "attributes" + ], "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "organization" - ] - }, - "id": { - "type": "string", - "description": "The resource ID" - } + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "application_memberships" + ] + }, + "attributes": { + "type": "object", + "properties": { + "filters": { + "type": "object", + "description": "Set of key-value pairs that contains restrictions and scopes of the application membership.", + "example": { + "market_id_in": [ + 202, + 203 + ] + }, + "nullable": true + }, + "created_at": { + "type": "string", + "description": "Time at which the resource was created.", + "example": "2018-01-01T12:00:00.000Z", + "nullable": false + }, + "updated_at": { + "type": "string", + "description": "Time at which the resource was last updated.", + "example": "2018-01-01T12:00:00.000Z", + "nullable": false + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE", + "nullable": true + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", + "nullable": true + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + }, + "nullable": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "api_credential": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "api_credentials" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "membership": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "memberships" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "organization": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organizations" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "role": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "roles" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + } + } + } } - } } - }, - "role": { - "type": "object", - "properties": { - "links": { - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "URL" - }, - "related": { - "type": "string", - "description": "URL" - } - } - }, - "data": { + } + }, + "applicationMembershipCreate": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { "type": "object", + "required": [ + "type", + "attributes" + ], "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "role" - ] - }, - "id": { - "type": "string", - "description": "The resource ID" - } + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "application_memberships" + ] + }, + "attributes": { + "type": "object", + "properties": { + "filters": { + "type": "object", + "description": "Set of key-value pairs that contains restrictions and scopes of the application membership.", + "example": { + "market_id_in": [ + 202, + 203 + ] + } + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE" + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN" + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + } + } + } + }, + "relationships": { + "type": "object", + "properties": { + "api_credential": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "api_credentials" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "membership": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "memberships" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "organization": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organizations" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "role": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "roles" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + } + }, + "required": [ + "api_credential", + "membership", + "organization", + "role" + ] + } } - } } - }, - "versions": { - "type": "object", - "properties": { - "links": { + } + }, + "applicationMembershipUpdate": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { "type": "object", + "required": [ + "type", + "id", + "attributes" + ], "properties": { - "self": { - "type": "string", - "description": "URL" - }, - "related": { - "type": "string", - "description": "URL" - } + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "application_memberships" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + }, + "attributes": { + "type": "object", + "properties": { + "filters": { + "type": "object", + "description": "Set of key-value pairs that contains restrictions and scopes of the application membership.", + "example": { + "market_id_in": [ + 202, + 203 + ] + }, + "nullable": true + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE", + "nullable": true + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", + "nullable": true + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + }, + "nullable": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "role": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "roles" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + } + } + } } - }, - "data": { + } + } + }, + "applicationMembershipResponse": { + "type": "object", + "properties": { + "data": { "type": "object", "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "versions" - ] - }, - "id": { - "type": "string", - "description": "The resource ID" - } + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + }, + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "application_memberships" + ] + }, + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + } + } + }, + "attributes": { + "$ref": "#/components/schemas/applicationMembership/properties/data/properties/attributes" + }, + "relationships": { + "type": "object", + "properties": { + "api_credential": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "api_credential" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + }, + "membership": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "membership" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + }, + "organization": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organization" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + }, + "role": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "role" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + } + } + } } - } } - } } - } - } - } - } - }, - "permissionResponseList": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/permissionResponse/properties/data" - } - } - } - }, - "role": { - "type": "object", - "properties": { - "data": { - "type": "object", - "required": [ - "type", - "attributes" - ], - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "roles" - ] - }, - "attributes": { + }, + "applicationMembershipResponseList": { "type": "object", "properties": { - "name": { - "type": "string", - "description": "The role name.", - "example": "Custom role", - "nullable": false - }, - "kind": { - "type": "string", - "description": "The kind of role, one of: `custom`, `admin`, `read_only`", - "example": "custom", - "nullable": false - }, - "created_at": { - "type": "string", - "description": "Time at which the resource was created.", - "example": "2018-01-01T12:00:00.000Z", - "nullable": false - }, - "updated_at": { - "type": "string", - "description": "Time at which the resource was last updated.", - "example": "2018-01-01T12:00:00.000Z", - "nullable": false - }, - "reference": { - "type": "string", - "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", - "example": "ANY-EXTERNAL-REFEFERNCE", - "nullable": true - }, - "reference_origin": { - "type": "string", - "description": "Any identifier of the third party system that defines the reference code.", - "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", - "nullable": true - }, - "metadata": { - "type": "object", - "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", - "example": { - "foo": "bar" - }, - "nullable": true - } + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/applicationMembershipResponse/properties/data" + } + } } - }, - "relationships": { + }, + "membership": { "type": "object", "properties": { - "organization": { - "type": "object", - "properties": { - "data": { + "data": { "type": "object", + "required": [ + "type", + "attributes" + ], "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "organizations" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "memberships" + ] + }, + "attributes": { + "type": "object", + "properties": { + "user_email": { + "type": "string", + "description": "The user email.", + "example": "commercelayer@commercelayer.io", + "nullable": false + }, + "user_first_name": { + "type": "string", + "description": "The user first name.", + "example": "John", + "nullable": false + }, + "user_last_name": { + "type": "string", + "description": "The user last name.", + "example": "Doe", + "nullable": false + }, + "status": { + "type": "string", + "description": "The memberships status. One of `pending` (default), `active`.", + "example": "pending", + "nullable": false, + "enum": [ + "pending", + "active" + ] + }, + "owner": { + "type": "boolean", + "description": "Indicates if the user it's the owner of the organization.", + "example": true, + "nullable": false + }, + "created_at": { + "type": "string", + "description": "Time at which the resource was created.", + "example": "2018-01-01T12:00:00.000Z", + "nullable": false + }, + "updated_at": { + "type": "string", + "description": "Time at which the resource was last updated.", + "example": "2018-01-01T12:00:00.000Z", + "nullable": false + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE", + "nullable": true + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", + "nullable": true + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + }, + "nullable": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "organization": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organizations" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "role": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "roles" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "application_memberships": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "application_memberships" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "versions": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "versions" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + } + } + } } - } } - }, - "permissions": { - "type": "object", - "properties": { - "data": { + } + }, + "membershipCreate": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { "type": "object", + "required": [ + "type", + "attributes" + ], "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "permissions" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "memberships" + ] + }, + "attributes": { + "type": "object", + "properties": { + "user_email": { + "type": "string", + "description": "The user email.", + "example": "commercelayer@commercelayer.io" + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE" + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN" + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + } + } + }, + "required": [ + "user_email" + ] + }, + "relationships": { + "type": "object", + "properties": { + "organization": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organizations" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "role": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "roles" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "application_memberships": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "application_memberships" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + } + }, + "required": [ + "organization", + "role" + ] + } } - } } - }, - "memberships": { - "type": "object", - "properties": { - "data": { + } + }, + "membershipUpdate": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { "type": "object", + "required": [ + "type", + "id", + "attributes" + ], "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "memberships" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "memberships" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + }, + "attributes": { + "type": "object", + "properties": { + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE", + "nullable": true + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", + "nullable": true + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + }, + "nullable": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "role": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "roles" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "application_memberships": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "application_memberships" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + } + } + } } - } } - }, - "api_credentials": { - "type": "object", - "properties": { - "data": { + } + }, + "membershipResponse": { + "type": "object", + "properties": { + "data": { "type": "object", "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "api_credentials" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + }, + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "memberships" + ] + }, + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + } + } + }, + "attributes": { + "$ref": "#/components/schemas/membership/properties/data/properties/attributes" + }, + "relationships": { + "type": "object", + "properties": { + "organization": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organization" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + }, + "role": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "role" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + }, + "application_memberships": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "application_memberships" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + }, + "versions": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "versions" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + } + } + } } - } } - }, - "versions": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "versions" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } + } + }, + "membershipResponseList": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/membershipResponse/properties/data" } - } } - } } - } - } - } - } - }, - "roleCreate": { - "required": [ - "data" - ], - "type": "object", - "properties": { - "data": { - "type": "object", - "required": [ - "type", - "attributes" - ], - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "roles" - ] - }, - "attributes": { + }, + "organization": { "type": "object", "properties": { - "name": { - "type": "string", - "description": "The role name.", - "example": "Custom role" - }, - "reference": { - "type": "string", - "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", - "example": "ANY-EXTERNAL-REFEFERNCE" - }, - "reference_origin": { - "type": "string", - "description": "Any identifier of the third party system that defines the reference code.", - "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN" - }, - "metadata": { - "type": "object", - "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", - "example": { - "foo": "bar" - } - } - }, + "data": { + "type": "object", + "required": [ + "type", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organizations" + ] + }, + "attributes": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The organization's internal name.", + "example": "The Blue Brand", + "nullable": false + }, + "slug": { + "type": "string", + "description": "The organization's slug name.", + "example": "the-blue-brand", + "nullable": false + }, + "domain": { + "type": "string", + "description": "The organization's domain.", + "example": "the-blue-brand.commercelayer.io", + "nullable": false + }, + "support_phone": { + "type": "string", + "description": "The organization's support phone.", + "example": "+01 30800857", + "nullable": true + }, + "support_email": { + "type": "string", + "description": "The organization's support email.", + "example": "support@bluebrand.com", + "nullable": true + }, + "logo_url": { + "type": "string", + "description": "The URL to the organization's logo.", + "example": "https://bluebrand.com/img/logo.svg", + "nullable": true + }, + "favicon_url": { + "type": "string", + "description": "The URL to the organization's favicon.", + "example": "https://bluebrand.com/img/favicon.ico", + "nullable": true + }, + "primary_color": { + "type": "string", + "description": "The organization's primary color. Format is HEX (starts with `#` and it's followed by six letters and/or numbers).", + "example": "#C8984E", + "nullable": true + }, + "contrast_color": { + "type": "string", + "description": "The organization's contrast color. Format is HEX (starts with `#` and it's followed by six letters and/or numbers).", + "example": "#FFFFCC", + "nullable": true + }, + "gtm_id": { + "type": "string", + "description": "The organization's Google Tag Manager ID.", + "example": "GTM-5FJXX6", + "nullable": true + }, + "gtm_id_test": { + "type": "string", + "description": "The organization's Google Tag Manager ID for test.", + "example": "GTM-5FJXX7", + "nullable": true + }, + "discount_disabled": { + "type": "boolean", + "description": "Indicates if organization has discount disabled.", + "example": false, + "nullable": true + }, + "account_disabled": { + "type": "boolean", + "description": "Indicates if organization has account disabled.", + "example": false, + "nullable": true + }, + "acceptance_disabled": { + "type": "boolean", + "description": "Indicates if organization has acceptance disabled.", + "example": false, + "nullable": true + }, + "max_concurrent_promotions": { + "type": "integer", + "description": "The maximum number of active concurrent promotions allowed for your organization.", + "example": 10, + "nullable": false + }, + "max_concurrent_imports": { + "type": "integer", + "description": "The maximum number of concurrent imports allowed for your organization.", + "example": 30, + "nullable": false + }, + "region": { + "type": "string", + "description": "The region where the organization it's located, default value it's `eu-west-1`.", + "example": "eu-west-1", + "nullable": true + }, + "can_switch_live": { + "type": "boolean", + "description": "Indicates if the organization can switch to live mode.", + "example": false, + "nullable": false + }, + "subscription_totals": { + "type": "object", + "description": "The number of current organizations, markets, memberships, and SKUs associated with the active subscription.", + "example": { + "organizations": 1, + "markets": 0, + "memberships": 0, + "skus": 0 + }, + "nullable": false + }, + "created_at": { + "type": "string", + "description": "Time at which the resource was created.", + "example": "2018-01-01T12:00:00.000Z", + "nullable": false + }, + "updated_at": { + "type": "string", + "description": "Time at which the resource was last updated.", + "example": "2018-01-01T12:00:00.000Z", + "nullable": false + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE", + "nullable": true + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", + "nullable": true + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + }, + "nullable": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "memberships": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "memberships" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "roles": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "roles" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "permissions": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "permissions" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "api_credentials": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "api_credentials" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + } + } + } + } + } + } + }, + "organizationCreate": { "required": [ - "name" - ] - }, - "relationships": { + "data" + ], "type": "object", "properties": { - "organization": { - "required": [ - "data" - ], - "type": "object", - "properties": { - "data": { + "data": { "type": "object", + "required": [ + "type", + "attributes" + ], "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "organizations" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - } + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organizations" + ] + }, + "attributes": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The organization's internal name.", + "example": "The Blue Brand" + }, + "support_phone": { + "type": "string", + "description": "The organization's support phone.", + "example": "+01 30800857" + }, + "support_email": { + "type": "string", + "description": "The organization's support email.", + "example": "support@bluebrand.com" + }, + "logo_url": { + "type": "string", + "description": "The URL to the organization's logo.", + "example": "https://bluebrand.com/img/logo.svg" + }, + "favicon_url": { + "type": "string", + "description": "The URL to the organization's favicon.", + "example": "https://bluebrand.com/img/favicon.ico" + }, + "primary_color": { + "type": "string", + "description": "The organization's primary color. Format is HEX (starts with `#` and it's followed by six letters and/or numbers).", + "example": "#C8984E" + }, + "contrast_color": { + "type": "string", + "description": "The organization's contrast color. Format is HEX (starts with `#` and it's followed by six letters and/or numbers).", + "example": "#FFFFCC" + }, + "gtm_id": { + "type": "string", + "description": "The organization's Google Tag Manager ID.", + "example": "GTM-5FJXX6" + }, + "gtm_id_test": { + "type": "string", + "description": "The organization's Google Tag Manager ID for test.", + "example": "GTM-5FJXX7" + }, + "discount_disabled": { + "type": "boolean", + "description": "Indicates if organization has discount disabled.", + "example": false + }, + "account_disabled": { + "type": "boolean", + "description": "Indicates if organization has account disabled.", + "example": false + }, + "acceptance_disabled": { + "type": "boolean", + "description": "Indicates if organization has acceptance disabled.", + "example": false + }, + "region": { + "type": "string", + "description": "The region where the organization it's located, default value it's `eu-west-1`.", + "example": "eu-west-1" + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE" + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN" + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + } + } + }, + "required": [ + "name" + ] + }, + "relationships": { + "type": "object", + "properties": {} + } } - } } - } - }, + } + }, + "organizationUpdate": { "required": [ - "organization" - ] - } - } - } - } - }, - "roleUpdate": { - "required": [ - "data" - ], - "type": "object", - "properties": { - "data": { - "type": "object", - "required": [ - "type", - "id", - "attributes" - ], - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "roles" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - }, - "attributes": { + "data" + ], "type": "object", "properties": { - "name": { - "type": "string", - "description": "The role name.", - "example": "Custom role", - "nullable": false - }, - "reference": { - "type": "string", - "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", - "example": "ANY-EXTERNAL-REFEFERNCE", - "nullable": true - }, - "reference_origin": { - "type": "string", - "description": "Any identifier of the third party system that defines the reference code.", - "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", - "nullable": true - }, - "metadata": { - "type": "object", - "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", - "example": { - "foo": "bar" - }, - "nullable": true - } + "data": { + "type": "object", + "required": [ + "type", + "id", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organizations" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + }, + "attributes": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The organization's internal name.", + "example": "The Blue Brand", + "nullable": false + }, + "support_phone": { + "type": "string", + "description": "The organization's support phone.", + "example": "+01 30800857", + "nullable": true + }, + "support_email": { + "type": "string", + "description": "The organization's support email.", + "example": "support@bluebrand.com", + "nullable": true + }, + "logo_url": { + "type": "string", + "description": "The URL to the organization's logo.", + "example": "https://bluebrand.com/img/logo.svg", + "nullable": true + }, + "favicon_url": { + "type": "string", + "description": "The URL to the organization's favicon.", + "example": "https://bluebrand.com/img/favicon.ico", + "nullable": true + }, + "primary_color": { + "type": "string", + "description": "The organization's primary color. Format is HEX (starts with `#` and it's followed by six letters and/or numbers).", + "example": "#C8984E", + "nullable": true + }, + "contrast_color": { + "type": "string", + "description": "The organization's contrast color. Format is HEX (starts with `#` and it's followed by six letters and/or numbers).", + "example": "#FFFFCC", + "nullable": true + }, + "gtm_id": { + "type": "string", + "description": "The organization's Google Tag Manager ID.", + "example": "GTM-5FJXX6", + "nullable": true + }, + "gtm_id_test": { + "type": "string", + "description": "The organization's Google Tag Manager ID for test.", + "example": "GTM-5FJXX7", + "nullable": true + }, + "discount_disabled": { + "type": "boolean", + "description": "Indicates if organization has discount disabled.", + "example": false, + "nullable": false + }, + "account_disabled": { + "type": "boolean", + "description": "Indicates if organization has account disabled.", + "example": false, + "nullable": false + }, + "acceptance_disabled": { + "type": "boolean", + "description": "Indicates if organization has acceptance disabled.", + "example": false, + "nullable": false + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE", + "nullable": true + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", + "nullable": true + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + }, + "nullable": true + } + } + }, + "relationships": { + "type": "object", + "properties": {} + } + } + } } - }, - "relationships": { + }, + "organizationResponse": { "type": "object", "properties": { + "data": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + }, + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organizations" + ] + }, + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + } + } + }, + "attributes": { + "$ref": "#/components/schemas/organization/properties/data/properties/attributes" + }, + "relationships": { + "type": "object", + "properties": { + "memberships": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "memberships" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + }, + "roles": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "roles" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + }, + "permissions": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "permissions" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + }, + "api_credentials": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "api_credentials" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + } + } + } + } + } } - } - } - } - } - }, - "roleResponse": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - }, - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "roles" - ] - }, - "links": { + }, + "organizationResponseList": { "type": "object", "properties": { - "self": { - "type": "string", - "description": "URL" - } + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/organizationResponse/properties/data" + } + } } - }, - "attributes": { - "$ref": "#/components/schemas/role/properties/data/properties/attributes" - }, - "relationships": { + }, + "permission": { "type": "object", "properties": { - "organization": { - "type": "object", - "properties": { - "links": { - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "URL" - }, - "related": { - "type": "string", - "description": "URL" - } - } - }, - "data": { + "data": { "type": "object", + "required": [ + "type", + "attributes" + ], "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "organization" - ] - }, - "id": { - "type": "string", - "description": "The resource ID" - } + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "permissions" + ] + }, + "attributes": { + "type": "object", + "properties": { + "can_create": { + "type": "boolean", + "description": "Determines if the permission have access to create rights.", + "example": false, + "nullable": false + }, + "can_read": { + "type": "boolean", + "description": "Determines if the permission have access to read rights.", + "example": false, + "nullable": false + }, + "can_update": { + "type": "boolean", + "description": "Determines if the permission have access to update rights.", + "example": false, + "nullable": false + }, + "can_destroy": { + "type": "boolean", + "description": "Determines if the permission have access to destroy rights.", + "example": false, + "nullable": false + }, + "subject": { + "type": "string", + "description": "The resource where this permission is applied.", + "example": "", + "nullable": false + }, + "restrictions": { + "type": "object", + "description": "An object that contains additional restrictions.", + "example": { + "foo": "bar" + }, + "nullable": false + }, + "created_at": { + "type": "string", + "description": "Time at which the resource was created.", + "example": "2018-01-01T12:00:00.000Z", + "nullable": false + }, + "updated_at": { + "type": "string", + "description": "Time at which the resource was last updated.", + "example": "2018-01-01T12:00:00.000Z", + "nullable": false + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE", + "nullable": true + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", + "nullable": true + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + }, + "nullable": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "organization": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organizations" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "role": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "roles" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "versions": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "versions" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + } + } + } } - } } - }, - "permissions": { - "type": "object", - "properties": { - "links": { - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "URL" - }, - "related": { - "type": "string", - "description": "URL" - } - } - }, - "data": { + } + }, + "permissionCreate": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { "type": "object", + "required": [ + "type", + "attributes" + ], "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "permissions" - ] - }, - "id": { - "type": "string", - "description": "The resource ID" - } + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "permissions" + ] + }, + "attributes": { + "type": "object", + "properties": { + "can_create": { + "type": "boolean", + "description": "Determines if the permission have access to create rights.", + "example": false + }, + "can_read": { + "type": "boolean", + "description": "Determines if the permission have access to read rights.", + "example": false + }, + "can_update": { + "type": "boolean", + "description": "Determines if the permission have access to update rights.", + "example": false + }, + "can_destroy": { + "type": "boolean", + "description": "Determines if the permission have access to destroy rights.", + "example": false + }, + "subject": { + "type": "string", + "description": "The resource where this permission is applied.", + "example": "" + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE" + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN" + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + } + } + }, + "required": [ + "can_create", + "can_read", + "can_update", + "can_destroy", + "subject" + ] + }, + "relationships": { + "type": "object", + "properties": { + "role": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "roles" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + } + }, + "required": [ + "role" + ] + } } - } } - }, - "memberships": { - "type": "object", - "properties": { - "links": { - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "URL" - }, - "related": { - "type": "string", - "description": "URL" - } - } - }, - "data": { + } + }, + "permissionUpdate": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { "type": "object", + "required": [ + "type", + "id", + "attributes" + ], "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "memberships" - ] - }, - "id": { - "type": "string", - "description": "The resource ID" - } + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "permissions" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + }, + "attributes": { + "type": "object", + "properties": { + "can_create": { + "type": "boolean", + "description": "Determines if the permission have access to create rights.", + "example": false, + "nullable": false + }, + "can_read": { + "type": "boolean", + "description": "Determines if the permission have access to read rights.", + "example": false, + "nullable": false + }, + "can_update": { + "type": "boolean", + "description": "Determines if the permission have access to update rights.", + "example": false, + "nullable": false + }, + "can_destroy": { + "type": "boolean", + "description": "Determines if the permission have access to destroy rights.", + "example": false, + "nullable": false + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE", + "nullable": true + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", + "nullable": true + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + }, + "nullable": true + } + } + }, + "relationships": { + "type": "object", + "properties": {} + } } - } } - }, - "api_credentials": { - "type": "object", - "properties": { - "links": { + } + }, + "permissionResponse": { + "type": "object", + "properties": { + "data": { "type": "object", "properties": { - "self": { - "type": "string", - "description": "URL" - }, - "related": { - "type": "string", - "description": "URL" - } + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + }, + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "permissions" + ] + }, + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + } + } + }, + "attributes": { + "$ref": "#/components/schemas/permission/properties/data/properties/attributes" + }, + "relationships": { + "type": "object", + "properties": { + "organization": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organization" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + }, + "role": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "role" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + }, + "versions": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "versions" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + } + } + } } - }, - "data": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "api_credentials" - ] - }, - "id": { - "type": "string", - "description": "The resource ID" - } + } + } + }, + "permissionResponseList": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/permissionResponse/properties/data" } - } } - }, - "versions": { - "type": "object", - "properties": { - "links": { + } + }, + "role": { + "type": "object", + "properties": { + "data": { "type": "object", + "required": [ + "type", + "attributes" + ], "properties": { - "self": { - "type": "string", - "description": "URL" - }, - "related": { - "type": "string", - "description": "URL" - } + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "roles" + ] + }, + "attributes": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The role name.", + "example": "Custom role", + "nullable": false + }, + "kind": { + "type": "string", + "description": "The kind of role, one of: `custom`, `admin`, `read_only`", + "example": "custom", + "nullable": false + }, + "created_at": { + "type": "string", + "description": "Time at which the resource was created.", + "example": "2018-01-01T12:00:00.000Z", + "nullable": false + }, + "updated_at": { + "type": "string", + "description": "Time at which the resource was last updated.", + "example": "2018-01-01T12:00:00.000Z", + "nullable": false + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE", + "nullable": true + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", + "nullable": true + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + }, + "nullable": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "organization": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organizations" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "permissions": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "permissions" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "memberships": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "memberships" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "api_credentials": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "api_credentials" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + }, + "versions": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "versions" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + } + } + } } - }, - "data": { + } + } + }, + "roleCreate": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { "type": "object", + "required": [ + "type", + "attributes" + ], "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "versions" - ] - }, - "id": { - "type": "string", - "description": "The resource ID" - } + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "roles" + ] + }, + "attributes": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The role name.", + "example": "Custom role" + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE" + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN" + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + } + } + }, + "required": [ + "name" + ] + }, + "relationships": { + "type": "object", + "properties": { + "organization": { + "required": [ + "data" + ], + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organizations" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + } + } + } + } + } + }, + "required": [ + "organization" + ] + } } - } } - } } - } - } - } - } - }, - "roleResponseList": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/roleResponse/properties/data" - } - } - } - }, - "user": { - "type": "object", - "properties": { - "data": { - "type": "object", - "required": [ - "type", - "attributes" - ], - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "user" - ] - }, - "attributes": { + }, + "roleUpdate": { + "required": [ + "data" + ], "type": "object", "properties": { - "email": { - "type": "string", - "description": "The user email.", - "example": "user@commercelayer.io", - "nullable": false - }, - "first_name": { - "type": "string", - "description": "The user first name.", - "example": "John", - "nullable": false - }, - "last_name": { - "type": "string", - "description": "The user last name.", - "example": "Doe", - "nullable": false - }, - "time_zone": { - "type": "string", - "description": "The user preferred timezone.", - "example": "UTC", - "nullable": true - }, - "created_at": { - "type": "string", - "description": "Time at which the resource was created.", - "example": "2018-01-01T12:00:00.000Z", - "nullable": false - }, - "updated_at": { - "type": "string", - "description": "Time at which the resource was last updated.", - "example": "2018-01-01T12:00:00.000Z", - "nullable": false - }, - "reference": { - "type": "string", - "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", - "example": "ANY-EXTERNAL-REFEFERNCE", - "nullable": true - }, - "reference_origin": { - "type": "string", - "description": "Any identifier of the third party system that defines the reference code.", - "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", - "nullable": true - }, - "metadata": { - "type": "object", - "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", - "example": { - "foo": "bar" - }, - "nullable": true - } + "data": { + "type": "object", + "required": [ + "type", + "id", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "roles" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + }, + "attributes": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The role name.", + "example": "Custom role", + "nullable": false + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE", + "nullable": true + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", + "nullable": true + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + }, + "nullable": true + } + } + }, + "relationships": { + "type": "object", + "properties": {} + } + } + } } - }, - "relationships": { + }, + "roleResponse": { "type": "object", "properties": { + "data": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + }, + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "roles" + ] + }, + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + } + } + }, + "attributes": { + "$ref": "#/components/schemas/role/properties/data/properties/attributes" + }, + "relationships": { + "type": "object", + "properties": { + "organization": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "organization" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + }, + "permissions": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "permissions" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + }, + "memberships": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "memberships" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + }, + "api_credentials": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "api_credentials" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + }, + "versions": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + }, + "related": { + "type": "string", + "description": "URL" + } + } + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "versions" + ] + }, + "id": { + "type": "string", + "description": "The resource ID" + } + } + } + } + } + } + } + } + } } - } - } - } - } - }, - "userUpdate": { - "required": [ - "data" - ], - "type": "object", - "properties": { - "data": { - "type": "object", - "required": [ - "type", - "id", - "attributes" - ], - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "user" - ] - }, - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - }, - "attributes": { + }, + "roleResponseList": { "type": "object", "properties": { - "email": { - "type": "string", - "description": "The user email.", - "example": "user@commercelayer.io", - "nullable": false - }, - "first_name": { - "type": "string", - "description": "The user first name.", - "example": "John", - "nullable": false - }, - "last_name": { - "type": "string", - "description": "The user last name.", - "example": "Doe", - "nullable": false - }, - "time_zone": { - "type": "string", - "description": "The user preferred timezone.", - "example": "UTC", - "nullable": true - }, - "reference": { - "type": "string", - "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", - "example": "ANY-EXTERNAL-REFEFERNCE", - "nullable": true - }, - "reference_origin": { - "type": "string", - "description": "Any identifier of the third party system that defines the reference code.", - "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", - "nullable": true - }, - "metadata": { - "type": "object", - "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", - "example": { - "foo": "bar" - }, - "nullable": true - } + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/roleResponse/properties/data" + } + } } - }, - "relationships": { + }, + "user": { "type": "object", "properties": { + "data": { + "type": "object", + "required": [ + "type", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "user" + ] + }, + "attributes": { + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "The user email.", + "example": "user@commercelayer.io", + "nullable": false + }, + "first_name": { + "type": "string", + "description": "The user first name.", + "example": "John", + "nullable": false + }, + "last_name": { + "type": "string", + "description": "The user last name.", + "example": "Doe", + "nullable": false + }, + "time_zone": { + "type": "string", + "description": "The user preferred timezone.", + "example": "UTC", + "nullable": true + }, + "created_at": { + "type": "string", + "description": "Time at which the resource was created.", + "example": "2018-01-01T12:00:00.000Z", + "nullable": false + }, + "updated_at": { + "type": "string", + "description": "Time at which the resource was last updated.", + "example": "2018-01-01T12:00:00.000Z", + "nullable": false + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE", + "nullable": true + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", + "nullable": true + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + }, + "nullable": true + } + } + }, + "relationships": { + "type": "object", + "properties": {} + } + } + } } - } - } - } - } - }, - "userResponse": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - }, - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "user" - ] - }, - "links": { + }, + "userUpdate": { + "required": [ + "data" + ], "type": "object", "properties": { - "self": { - "type": "string", - "description": "URL" - } + "data": { + "type": "object", + "required": [ + "type", + "id", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "user" + ] + }, + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + }, + "attributes": { + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "The user email.", + "example": "user@commercelayer.io", + "nullable": false + }, + "first_name": { + "type": "string", + "description": "The user first name.", + "example": "John", + "nullable": false + }, + "last_name": { + "type": "string", + "description": "The user last name.", + "example": "Doe", + "nullable": false + }, + "time_zone": { + "type": "string", + "description": "The user preferred timezone.", + "example": "UTC", + "nullable": true + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE", + "nullable": true + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", + "nullable": true + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + }, + "nullable": true + } + } + }, + "relationships": { + "type": "object", + "properties": {} + } + } + } } - }, - "attributes": { - "$ref": "#/components/schemas/user/properties/data/properties/attributes" - }, - "relationships": { + }, + "userResponse": { "type": "object", "properties": { + "data": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + }, + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "user" + ] + }, + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + } + } + }, + "attributes": { + "$ref": "#/components/schemas/user/properties/data/properties/attributes" + }, + "relationships": { + "type": "object", + "properties": {} + } + } + } } - } - } - } - } - }, - "userResponseList": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/userResponse/properties/data" - } - } - } - }, - "version": { - "type": "object", - "properties": { - "data": { - "type": "object", - "required": [ - "type", - "attributes" - ], - "properties": { - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "versions" - ] - }, - "attributes": { + }, + "userResponseList": { "type": "object", "properties": { - "resource_type": { - "type": "string", - "description": "The type of the versioned resource.", - "example": "roles", - "nullable": false - }, - "resource_id": { - "type": "string", - "description": "The versioned resource ID.", - "example": "PzdJhdLdYV", - "nullable": false - }, - "event": { - "type": "string", - "description": "The event which generates the version.", - "example": "update", - "nullable": false - }, - "changes": { - "type": "object", - "description": "The object changes payload.", - "example": { - "name": [ - "previous", - "new" - ] - }, - "nullable": false - }, - "who": { - "type": "object", - "description": "Information about who triggered the change, only showed when it's from a JWT token.", - "example": { - "application": { - "id": "DNOPYiZYpn", - "kind": "integration", - "public": true - } - }, - "nullable": false - }, - "created_at": { - "type": "string", - "description": "Time at which the resource was created.", - "example": "2018-01-01T12:00:00.000Z", - "nullable": false - }, - "updated_at": { - "type": "string", - "description": "Time at which the resource was last updated.", - "example": "2018-01-01T12:00:00.000Z", - "nullable": false - }, - "reference": { - "type": "string", - "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", - "example": "ANY-EXTERNAL-REFEFERNCE", - "nullable": true - }, - "reference_origin": { - "type": "string", - "description": "Any identifier of the third party system that defines the reference code.", - "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", - "nullable": true - }, - "metadata": { - "type": "object", - "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", - "example": { - "foo": "bar" - }, - "nullable": true - } + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/userResponse/properties/data" + } + } } - }, - "relationships": { + }, + "version": { "type": "object", "properties": { + "data": { + "type": "object", + "required": [ + "type", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "versions" + ] + }, + "attributes": { + "type": "object", + "properties": { + "resource_type": { + "type": "string", + "description": "The type of the versioned resource.", + "example": "roles", + "nullable": false + }, + "resource_id": { + "type": "string", + "description": "The versioned resource ID.", + "example": "PzdJhdLdYV", + "nullable": false + }, + "event": { + "type": "string", + "description": "The event which generates the version.", + "example": "update", + "nullable": false + }, + "changes": { + "type": "object", + "description": "The object changes payload.", + "example": { + "name": [ + "previous", + "new" + ] + }, + "nullable": false + }, + "who": { + "type": "object", + "description": "Information about who triggered the change, only showed when it's from a JWT token.", + "example": { + "application": { + "id": "DNOPYiZYpn", + "kind": "integration", + "public": true + } + }, + "nullable": false + }, + "created_at": { + "type": "string", + "description": "Time at which the resource was created.", + "example": "2018-01-01T12:00:00.000Z", + "nullable": false + }, + "updated_at": { + "type": "string", + "description": "Time at which the resource was last updated.", + "example": "2018-01-01T12:00:00.000Z", + "nullable": false + }, + "reference": { + "type": "string", + "description": "A string that you can use to add any external identifier to the resource. This can be useful for integrating the resource to an external system, like an ERP, a marketing tool, a CRM, or whatever.", + "example": "ANY-EXTERNAL-REFEFERNCE", + "nullable": true + }, + "reference_origin": { + "type": "string", + "description": "Any identifier of the third party system that defines the reference code.", + "example": "ANY-EXTERNAL-REFEFERNCE-ORIGIN", + "nullable": true + }, + "metadata": { + "type": "object", + "description": "Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.", + "example": { + "foo": "bar" + }, + "nullable": true + } + } + }, + "relationships": { + "type": "object", + "properties": {} + } + } + } } - } - } - } - } - }, - "versionResponse": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "The resource's id", - "example": "XGZwpOSrWL" - }, - "type": { - "type": "string", - "description": "The resource's type", - "enum": [ - "versions" - ] - }, - "links": { + }, + "versionResponse": { "type": "object", "properties": { - "self": { - "type": "string", - "description": "URL" - } + "data": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The resource's id", + "example": "XGZwpOSrWL" + }, + "type": { + "type": "string", + "description": "The resource's type", + "enum": [ + "versions" + ] + }, + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "description": "URL" + } + } + }, + "attributes": { + "$ref": "#/components/schemas/version/properties/data/properties/attributes" + }, + "relationships": { + "type": "object", + "properties": {} + } + } + } } - }, - "attributes": { - "$ref": "#/components/schemas/version/properties/data/properties/attributes" - }, - "relationships": { + }, + "versionResponseList": { "type": "object", "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/versionResponse/properties/data" + } + } } - } } - } - } - }, - "versionResponseList": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/versionResponse/properties/data" + }, + "securitySchemes": { + "bearerAuth": { + "type": "http", + "scheme": "bearer", + "bearerFormat": "JWT" } - } } - } - }, - "securitySchemes": { - "bearerAuth": { - "type": "http", - "scheme": "bearer", - "bearerFormat": "JWT" - } - } - }, - "tags": [ - { - "name": "singleton", - "description": "singleton resource" - }, - { - "name": "api_credentials", - "description": "resource type" - }, - { - "name": "has_one", - "description": "relationship kind" - }, - { - "name": "application_memberships", - "description": "resource type" - }, - { - "name": "memberships", - "description": "resource type" - }, - { - "name": "has_many", - "description": "relationship kind" }, - { - "name": "organizations", - "description": "resource type" - }, - { - "name": "permissions", - "description": "resource type" - }, - { - "name": "roles", - "description": "resource type" - }, - { - "name": "user", - "description": "resource type" - }, - { - "name": "versions", - "description": "resource type" - } - ], - "security": [ - { - "bearerAuth": [ - - ] - } - ] + "tags": [ + { + "name": "singleton", + "description": "singleton resource" + }, + { + "name": "api_credentials", + "description": "resource type" + }, + { + "name": "has_one", + "description": "relationship kind" + }, + { + "name": "application_memberships", + "description": "resource type" + }, + { + "name": "memberships", + "description": "resource type" + }, + { + "name": "has_many", + "description": "relationship kind" + }, + { + "name": "organizations", + "description": "resource type" + }, + { + "name": "permissions", + "description": "resource type" + }, + { + "name": "roles", + "description": "resource type" + }, + { + "name": "user", + "description": "resource type" + }, + { + "name": "versions", + "description": "resource type" + } + ], + "security": [ + { + "bearerAuth": [] + } + ] } \ No newline at end of file diff --git a/gen/schema.ts b/gen/schema.ts index f7251bb..4129f3f 100644 --- a/gen/schema.ts +++ b/gen/schema.ts @@ -1,14 +1,10 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -/* eslint-disable no-console */ import { readFileSync, writeFileSync } from 'fs' import { snakeCase } from 'lodash' import axios from 'axios' import { resolve } from 'path' import { sortObjectFields } from '../src/util' -import { inspect } from 'util' -// eslint-disable-next-line @typescript-eslint/no-var-requires const Inflector = require('inflector-js') diff --git a/package.json b/package.json index cf92a9d..ac65226 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "@types/jest": "^29.5.11", "@types/lodash": "^4.14.202", "@types/node": "^20.11.5", - "dotenv": "^16.3.1", + "dotenv": "^16.3.2", "eslint": "^8.56.0", "inflector-js": "^1.0.1", "jest": "^29.7.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2dc7d44..e9dce5c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -44,8 +44,8 @@ devDependencies: specifier: ^20.11.5 version: 20.11.5 dotenv: - specifier: ^16.3.1 - version: 16.3.1 + specifier: ^16.3.2 + version: 16.3.2 eslint: specifier: ^8.56.0 version: 8.56.0 @@ -89,7 +89,7 @@ packages: engines: {node: '>=6.0.0'} dependencies: '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.21 + '@jridgewell/trace-mapping': 0.3.22 dev: true /@babel/code-frame@7.23.5: @@ -134,7 +134,7 @@ packages: dependencies: '@babel/types': 7.23.6 '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.21 + '@jridgewell/trace-mapping': 0.3.22 jsesc: 2.5.2 dev: true @@ -1250,7 +1250,7 @@ packages: babel-plugin-polyfill-corejs2: 0.4.8(@babel/core@7.23.7) babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.23.7) babel-plugin-polyfill-regenerator: 0.5.5(@babel/core@7.23.7) - core-js-compat: 3.35.0 + core-js-compat: 3.35.1 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -1345,12 +1345,12 @@ packages: eslint: '>=8.0' typescript: '>=5.0' dependencies: - '@typescript-eslint/eslint-plugin': 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/eslint-plugin': 6.19.1(@typescript-eslint/parser@6.19.1)(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.19.1(eslint@8.56.0)(typescript@5.3.3) eslint: 8.56.0 eslint-config-prettier: 9.1.0(eslint@8.56.0) - eslint-config-standard-with-typescript: 42.0.0(@typescript-eslint/eslint-plugin@6.19.0)(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.6.2)(eslint-plugin-promise@6.1.1)(eslint@8.56.0)(typescript@5.3.3) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.19.0)(eslint@8.56.0) + eslint-config-standard-with-typescript: 42.0.0(@typescript-eslint/eslint-plugin@6.19.1)(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.6.2)(eslint-plugin-promise@6.1.1)(eslint@8.56.0)(typescript@5.3.3) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.19.1)(eslint@8.56.0) eslint-plugin-n: 16.6.2(eslint@8.56.0) eslint-plugin-prettier: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.2.4) eslint-plugin-promise: 6.1.1(eslint@8.56.0) @@ -1778,7 +1778,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.21 + '@jridgewell/trace-mapping': 0.3.22 '@types/node': 20.11.5 chalk: 4.1.2 collect-v8-coverage: 1.0.2 @@ -1812,7 +1812,7 @@ packages: resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jridgewell/trace-mapping': 0.3.21 + '@jridgewell/trace-mapping': 0.3.22 callsites: 3.1.0 graceful-fs: 4.2.11 dev: true @@ -1843,7 +1843,7 @@ packages: dependencies: '@babel/core': 7.23.7 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.21 + '@jridgewell/trace-mapping': 0.3.22 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 @@ -1878,7 +1878,7 @@ packages: dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.21 + '@jridgewell/trace-mapping': 0.3.22 dev: true /@jridgewell/resolve-uri@3.1.1: @@ -1895,8 +1895,8 @@ packages: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} dev: true - /@jridgewell/trace-mapping@0.3.21: - resolution: {integrity: sha512-SRfKmRe1KvYnxjEMtxEr+J4HIeMX5YBg/qhRHpxEIGjhX1rshcHlnFUE9K0GazhVKWM7B+nARSkV8LuvJdJ5/g==} + /@jridgewell/trace-mapping@0.3.22: + resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==} dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 @@ -1935,8 +1935,8 @@ packages: engines: {node: '>= 18'} dev: true - /@octokit/core@5.0.2: - resolution: {integrity: sha512-cZUy1gUvd4vttMic7C0lwPed8IYXWYp8kHIMatyhY8t8n3Cpw2ILczkV5pGMPqef7v0bLo0pOHrEHarsau2Ydg==} + /@octokit/core@5.1.0: + resolution: {integrity: sha512-BDa2VAMLSh3otEiaMJ/3Y36GU4qf6GI+VivQ/P41NC6GHcdxpKlqV0ikSZ5gdQsmS3ojXeRx5vasgNTinF0Q4g==} engines: {node: '>= 18'} dependencies: '@octokit/auth-token': 4.0.0 @@ -1969,35 +1969,35 @@ packages: resolution: {integrity: sha512-6G+ywGClliGQwRsjvqVYpklIfa7oRPA0vyhPQG/1Feh+B+wU0vGH1JiJ5T25d3g1JZYBHzR2qefLi9x8Gt+cpw==} dev: true - /@octokit/plugin-paginate-rest@9.1.5(@octokit/core@5.0.2): + /@octokit/plugin-paginate-rest@9.1.5(@octokit/core@5.1.0): resolution: {integrity: sha512-WKTQXxK+bu49qzwv4qKbMMRXej1DU2gq017euWyKVudA6MldaSSQuxtz+vGbhxV4CjxpUxjZu6rM2wfc1FiWVg==} engines: {node: '>= 18'} peerDependencies: '@octokit/core': '>=5' dependencies: - '@octokit/core': 5.0.2 + '@octokit/core': 5.1.0 '@octokit/types': 12.4.0 dev: true - /@octokit/plugin-retry@6.0.1(@octokit/core@5.0.2): + /@octokit/plugin-retry@6.0.1(@octokit/core@5.1.0): resolution: {integrity: sha512-SKs+Tz9oj0g4p28qkZwl/topGcb0k0qPNX/i7vBKmDsjoeqnVfFUquqrE/O9oJY7+oLzdCtkiWSXLpLjvl6uog==} engines: {node: '>= 18'} peerDependencies: '@octokit/core': '>=5' dependencies: - '@octokit/core': 5.0.2 + '@octokit/core': 5.1.0 '@octokit/request-error': 5.0.1 '@octokit/types': 12.4.0 bottleneck: 2.19.5 dev: true - /@octokit/plugin-throttling@8.1.3(@octokit/core@5.0.2): + /@octokit/plugin-throttling@8.1.3(@octokit/core@5.1.0): resolution: {integrity: sha512-pfyqaqpc0EXh5Cn4HX9lWYsZ4gGbjnSmUILeu4u2gnuM50K/wIk9s1Pxt3lVeVwekmITgN/nJdoh43Ka+vye8A==} engines: {node: '>= 18'} peerDependencies: '@octokit/core': ^5.0.0 dependencies: - '@octokit/core': 5.0.2 + '@octokit/core': 5.1.0 '@octokit/types': 12.4.0 bottleneck: 2.19.5 dev: true @@ -2126,10 +2126,10 @@ packages: peerDependencies: semantic-release: '>=20.1.0' dependencies: - '@octokit/core': 5.0.2 - '@octokit/plugin-paginate-rest': 9.1.5(@octokit/core@5.0.2) - '@octokit/plugin-retry': 6.0.1(@octokit/core@5.0.2) - '@octokit/plugin-throttling': 8.1.3(@octokit/core@5.0.2) + '@octokit/core': 5.1.0 + '@octokit/plugin-paginate-rest': 9.1.5(@octokit/core@5.1.0) + '@octokit/plugin-retry': 6.0.1(@octokit/core@5.1.0) + '@octokit/plugin-throttling': 8.1.3(@octokit/core@5.1.0) '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 debug: 4.3.4 @@ -2204,8 +2204,8 @@ packages: engines: {node: '>=18'} dev: true - /@sinonjs/commons@3.0.0: - resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} + /@sinonjs/commons@3.0.1: + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} dependencies: type-detect: 4.0.8 dev: true @@ -2213,7 +2213,7 @@ packages: /@sinonjs/fake-timers@10.3.0: resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} dependencies: - '@sinonjs/commons': 3.0.0 + '@sinonjs/commons': 3.0.1 dev: true /@tsconfig/node10@1.0.9: @@ -2340,8 +2340,8 @@ packages: '@types/yargs-parser': 21.0.3 dev: true - /@typescript-eslint/eslint-plugin@6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-DUCUkQNklCQYnrBSSikjVChdc84/vMPDQSgJTHBZ64G9bA9w0Crc0rd2diujKbTdp6w2J47qkeHQLoi0rpLCdg==} + /@typescript-eslint/eslint-plugin@6.19.1(@typescript-eslint/parser@6.19.1)(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-roQScUGFruWod9CEyoV5KlCYrubC/fvG8/1zXuT0WTcxX87GnMMmnksMwSg99lo1xiKrBzw2icsJPMAw1OtKxg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -2352,11 +2352,11 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 6.19.0 - '@typescript-eslint/type-utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.19.0 + '@typescript-eslint/parser': 6.19.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.19.1 + '@typescript-eslint/type-utils': 6.19.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/utils': 6.19.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.19.1 debug: 4.3.4 eslint: 8.56.0 graphemer: 1.4.0 @@ -2369,8 +2369,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@6.19.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-1DyBLG5SH7PYCd00QlroiW60YJ4rWMuUGa/JBV0iZuqi4l4IK3twKPq5ZkEebmGqRjXWVgsUzfd3+nZveewgow==} + /@typescript-eslint/parser@6.19.1(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-WEfX22ziAh6pRE9jnbkkLGp/4RhTpffr2ZK5bJ18M8mIfA8A+k97U9ZyaXCEJRlmMHh7R9MJZWXp/r73DzINVQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2379,10 +2379,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.19.0 - '@typescript-eslint/types': 6.19.0 - '@typescript-eslint/typescript-estree': 6.19.0(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.19.0 + '@typescript-eslint/scope-manager': 6.19.1 + '@typescript-eslint/types': 6.19.1 + '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.19.1 debug: 4.3.4 eslint: 8.56.0 typescript: 5.3.3 @@ -2390,16 +2390,16 @@ packages: - supports-color dev: true - /@typescript-eslint/scope-manager@6.19.0: - resolution: {integrity: sha512-dO1XMhV2ehBI6QN8Ufi7I10wmUovmLU0Oru3n5LVlM2JuzB4M+dVphCPLkVpKvGij2j/pHBWuJ9piuXx+BhzxQ==} + /@typescript-eslint/scope-manager@6.19.1: + resolution: {integrity: sha512-4CdXYjKf6/6aKNMSly/BP4iCSOpvMmqtDzRtqFyyAae3z5kkqEjKndR5vDHL8rSuMIIWP8u4Mw4VxLyxZW6D5w==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.19.0 - '@typescript-eslint/visitor-keys': 6.19.0 + '@typescript-eslint/types': 6.19.1 + '@typescript-eslint/visitor-keys': 6.19.1 dev: true - /@typescript-eslint/type-utils@6.19.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-mcvS6WSWbjiSxKCwBcXtOM5pRkPQ6kcDds/juxcy/727IQr3xMEcwr/YLHW2A2+Fp5ql6khjbKBzOyjuPqGi/w==} + /@typescript-eslint/type-utils@6.19.1(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-0vdyld3ecfxJuddDjACUvlAeYNrHP/pDeQk2pWBR2ESeEzQhg52DF53AbI9QCBkYE23lgkhLCZNkHn2hEXXYIg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2408,8 +2408,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.19.0(typescript@5.3.3) - '@typescript-eslint/utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.3.3) + '@typescript-eslint/utils': 6.19.1(eslint@8.56.0)(typescript@5.3.3) debug: 4.3.4 eslint: 8.56.0 ts-api-utils: 1.0.3(typescript@5.3.3) @@ -2418,13 +2418,13 @@ packages: - supports-color dev: true - /@typescript-eslint/types@6.19.0: - resolution: {integrity: sha512-lFviGV/vYhOy3m8BJ/nAKoAyNhInTdXpftonhWle66XHAtT1ouBlkjL496b5H5hb8dWXHwtypTqgtb/DEa+j5A==} + /@typescript-eslint/types@6.19.1: + resolution: {integrity: sha512-6+bk6FEtBhvfYvpHsDgAL3uo4BfvnTnoge5LrrCj2eJN8g3IJdLTD4B/jK3Q6vo4Ql/Hoip9I8aB6fF+6RfDqg==} engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@6.19.0(typescript@5.3.3): - resolution: {integrity: sha512-o/zefXIbbLBZ8YJ51NlkSAt2BamrK6XOmuxSR3hynMIzzyMY33KuJ9vuMdFSXW+H0tVvdF9qBPTHA91HDb4BIQ==} + /@typescript-eslint/typescript-estree@6.19.1(typescript@5.3.3): + resolution: {integrity: sha512-aFdAxuhzBFRWhy+H20nYu19+Km+gFfwNO4TEqyszkMcgBDYQjmPJ61erHxuT2ESJXhlhrO7I5EFIlZ+qGR8oVA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -2432,8 +2432,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.19.0 - '@typescript-eslint/visitor-keys': 6.19.0 + '@typescript-eslint/types': 6.19.1 + '@typescript-eslint/visitor-keys': 6.19.1 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -2445,8 +2445,8 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@6.19.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-QR41YXySiuN++/dC9UArYOg4X86OAYP83OWTewpVx5ct1IZhjjgTLocj7QNxGhWoTqknsgpl7L+hGygCO+sdYw==} + /@typescript-eslint/utils@6.19.1(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-JvjfEZuP5WoMqwh9SPAPDSHSg9FBHHGhjPugSRxu5jMfjvBpq5/sGTD+9M9aQ5sh6iJ8AY/Kk/oUYVEMAPwi7w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2454,9 +2454,9 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 6.19.0 - '@typescript-eslint/types': 6.19.0 - '@typescript-eslint/typescript-estree': 6.19.0(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.19.1 + '@typescript-eslint/types': 6.19.1 + '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.3.3) eslint: 8.56.0 semver: 7.5.4 transitivePeerDependencies: @@ -2464,11 +2464,11 @@ packages: - typescript dev: true - /@typescript-eslint/visitor-keys@6.19.0: - resolution: {integrity: sha512-hZaUCORLgubBvtGpp1JEFEazcuEdfxta9j4iUwdSAr7mEsYYAp3EAUyCZk3VEEqGj6W+AV4uWyrDGtrlawAsgQ==} + /@typescript-eslint/visitor-keys@6.19.1: + resolution: {integrity: sha512-gkdtIO+xSO/SmI0W68DBg4u1KElmIUo3vXzgHyGPs6cxgB0sa3TlptRAAE0hUY1hM6FcDKEv7aIwiTGm76cXfQ==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.19.0 + '@typescript-eslint/types': 6.19.1 eslint-visitor-keys: 3.4.3 dev: true @@ -2761,7 +2761,7 @@ packages: dependencies: '@babel/core': 7.23.7 '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.7) - core-js-compat: 3.35.0 + core-js-compat: 3.35.1 transitivePeerDependencies: - supports-color dev: true @@ -2846,7 +2846,7 @@ packages: hasBin: true dependencies: caniuse-lite: 1.0.30001579 - electron-to-chromium: 1.4.639 + electron-to-chromium: 1.4.642 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.22.2) dev: true @@ -3073,8 +3073,8 @@ packages: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} dev: true - /core-js-compat@3.35.0: - resolution: {integrity: sha512-5blwFAddknKeNgsjBzilkdQ0+YK8L1PfqPYq40NOYMYFSS38qj+hpTcLLWwpIwA2A5bje/x5jmVn2tzUMg9IVw==} + /core-js-compat@3.35.1: + resolution: {integrity: sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw==} dependencies: browserslist: 4.22.2 dev: true @@ -3254,8 +3254,8 @@ packages: is-obj: 2.0.0 dev: true - /dotenv@16.3.1: - resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} + /dotenv@16.3.2: + resolution: {integrity: sha512-HTlk5nmhkm8F6JcdXvHIzaorzCoziNQT9mGxLPVXW8wJF1TiGSL60ZGB4gHWabHOaMmWmhvk2/lPHfnBiT78AQ==} engines: {node: '>=12'} dev: true @@ -3273,8 +3273,8 @@ packages: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true - /electron-to-chromium@1.4.639: - resolution: {integrity: sha512-CkKf3ZUVZchr+zDpAlNLEEy2NJJ9T64ULWaDgy3THXXlPVPkLu3VOs9Bac44nebVtdwl2geSj6AxTtGDOxoXhg==} + /electron-to-chromium@1.4.642: + resolution: {integrity: sha512-M4+u22ZJGpk4RY7tne6W+APkZhnnhmAH48FNl8iEFK2lEgob+U5rUQsIqQhvAwCXYpfd3H20pHK/ENsCvwTbsA==} dev: true /emittery@0.13.1: @@ -3450,7 +3450,7 @@ packages: eslint: 8.56.0 dev: true - /eslint-config-standard-with-typescript@42.0.0(@typescript-eslint/eslint-plugin@6.19.0)(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.6.2)(eslint-plugin-promise@6.1.1)(eslint@8.56.0)(typescript@5.3.3): + /eslint-config-standard-with-typescript@42.0.0(@typescript-eslint/eslint-plugin@6.19.1)(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.6.2)(eslint-plugin-promise@6.1.1)(eslint@8.56.0)(typescript@5.3.3): resolution: {integrity: sha512-m1/2g/Sicun1uFZOFigJVeOqo9fE7OkMsNtilcpHwdCdcGr21qsGqYiyxYSvvHfJwY7w5OTQH0hxk8sM2N5Ohg==} peerDependencies: '@typescript-eslint/eslint-plugin': ^6.4.0 @@ -3460,11 +3460,11 @@ packages: eslint-plugin-promise: ^6.0.0 typescript: '*' dependencies: - '@typescript-eslint/eslint-plugin': 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/eslint-plugin': 6.19.1(@typescript-eslint/parser@6.19.1)(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.19.1(eslint@8.56.0)(typescript@5.3.3) eslint: 8.56.0 eslint-config-standard: 17.1.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.6.2)(eslint-plugin-promise@6.1.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.19.0)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.19.1)(eslint@8.56.0) eslint-plugin-n: 16.6.2(eslint@8.56.0) eslint-plugin-promise: 6.1.1(eslint@8.56.0) typescript: 5.3.3 @@ -3482,7 +3482,7 @@ packages: eslint-plugin-promise: ^6.0.0 dependencies: eslint: 8.56.0 - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.19.0)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.19.1)(eslint@8.56.0) eslint-plugin-n: 16.6.2(eslint@8.56.0) eslint-plugin-promise: 6.1.1(eslint@8.56.0) dev: true @@ -3497,7 +3497,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.19.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.19.1)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -3518,7 +3518,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.19.1(eslint@8.56.0)(typescript@5.3.3) debug: 3.2.7 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 @@ -3538,7 +3538,7 @@ packages: eslint-compat-utils: 0.1.2(eslint@8.56.0) dev: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.19.0)(eslint@8.56.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.19.1)(eslint@8.56.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -3548,7 +3548,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.19.1(eslint@8.56.0)(typescript@5.3.3) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -3557,7 +3557,7 @@ packages: doctrine: 2.1.0 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.19.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.19.1)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -5659,7 +5659,7 @@ packages: dependencies: '@babel/code-frame': 7.23.5 index-to-position: 0.1.2 - type-fest: 4.9.0 + type-fest: 4.10.0 dev: true /path-exists@3.0.0: @@ -5833,7 +5833,7 @@ packages: dependencies: find-up-simple: 1.0.0 read-pkg: 9.0.1 - type-fest: 4.9.0 + type-fest: 4.10.0 dev: true /read-pkg@9.0.1: @@ -5843,7 +5843,7 @@ packages: '@types/normalize-package-data': 2.4.4 normalize-package-data: 6.0.0 parse-json: 8.1.0 - type-fest: 4.9.0 + type-fest: 4.10.0 unicorn-magic: 0.1.0 dev: true @@ -6510,8 +6510,8 @@ packages: engines: {node: '>=14.16'} dev: true - /type-fest@4.9.0: - resolution: {integrity: sha512-KS/6lh/ynPGiHD/LnAobrEFq3Ad4pBzOlJ1wAnJx9N4EYoqFhMfLIBjUT2UEx4wg5ZE+cC1ob6DCSpppVo+rtg==} + /type-fest@4.10.0: + resolution: {integrity: sha512-NPaKJsb4wyJ16qc8zBQrWswLKv/YirgBFykvUQ1Iajt2wd+twC8E4hFXdlIXqiMl6kWA0zY8tUJ9ELVAdu5h7w==} engines: {node: '>=16'} dev: true @@ -6663,7 +6663,7 @@ packages: resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} engines: {node: '>=10.12.0'} dependencies: - '@jridgewell/trace-mapping': 0.3.21 + '@jridgewell/trace-mapping': 0.3.22 '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 dev: true diff --git a/specs/resource.spec.ts b/specs/resource.spec.ts index 7883899..e090c29 100644 --- a/specs/resource.spec.ts +++ b/specs/resource.spec.ts @@ -60,10 +60,10 @@ describe('SDK:resource suite', () => { it('resource.create', async () => { - const user_email = 'spec@provisioning-sdk-test.org-role' + const user_email = 'spec@provisioning-sdk-test.org' const org = (await clp.organizations.list()).first() const role = (await clp.roles.list()).first() - if (!org || !role) return + if (!org || !role) throw new Error('Missing role or organization') const ms = await clp.memberships.create({ user_email, organization: clp.organizations.relationship(org), diff --git a/specs/resources/api_credentials.spec.ts b/specs/resources/api_credentials.spec.ts index 4322f68..99dcf36 100644 --- a/specs/resources/api_credentials.spec.ts +++ b/specs/resources/api_credentials.spec.ts @@ -1,5 +1,5 @@ /** - * ©2023 Commerce Layer Inc. + * ©2024 Commerce Layer Inc. * Source code generated automatically by SDK codegen **/ diff --git a/specs/resources/application_memberships.spec.ts b/specs/resources/application_memberships.spec.ts index 4acb870..d2741da 100644 --- a/specs/resources/application_memberships.spec.ts +++ b/specs/resources/application_memberships.spec.ts @@ -1,5 +1,5 @@ /** - * ©2023 Commerce Layer Inc. + * ©2024 Commerce Layer Inc. * Source code generated automatically by SDK codegen **/ @@ -27,7 +27,6 @@ describe('ApplicationMemberships resource', () => { const createAttributes = { api_credential: clp.api_credentials.relationship(TestData.id), membership: clp.memberships.relationship(TestData.id), - user: clp.user.relationship(TestData.id), organization: clp.organizations.relationship(TestData.id), role: clp.roles.relationship(TestData.id), } @@ -241,27 +240,6 @@ describe('ApplicationMemberships resource', () => { /* relationship.membership stop */ - /* relationship.user start */ - it(resourceType + '.user', async () => { - - const id = TestData.id - const params = { fields: { user: CommonData.paramsFields } } - - const intId = clp.addRequestInterceptor((config) => { - expect(config.method).toBe('get') - checkCommon(config, resourceType, id, currentAccessToken, 'user') - checkCommonParams(config, params) - return interceptRequest() - }) - - await clp[resourceType].user(id, params, CommonData.options) - .catch(handleError) - .finally(() => clp.removeInterceptor('request', intId)) - - }) - /* relationship.user stop */ - - /* relationship.organization start */ it(resourceType + '.organization', async () => { diff --git a/specs/resources/memberships.spec.ts b/specs/resources/memberships.spec.ts index 45cef52..eec6a0f 100644 --- a/specs/resources/memberships.spec.ts +++ b/specs/resources/memberships.spec.ts @@ -1,5 +1,5 @@ /** - * ©2023 Commerce Layer Inc. + * ©2024 Commerce Layer Inc. * Source code generated automatically by SDK codegen **/ @@ -261,27 +261,6 @@ describe('Memberships resource', () => { /* relationship.application_memberships stop */ - /* relationship.user start */ - it(resourceType + '.user', async () => { - - const id = TestData.id - const params = { fields: { user: CommonData.paramsFields } } - - const intId = clp.addRequestInterceptor((config) => { - expect(config.method).toBe('get') - checkCommon(config, resourceType, id, currentAccessToken, 'user') - checkCommonParams(config, params) - return interceptRequest() - }) - - await clp[resourceType].user(id, params, CommonData.options) - .catch(handleError) - .finally(() => clp.removeInterceptor('request', intId)) - - }) - /* relationship.user stop */ - - /* relationship.versions start */ it(resourceType + '.versions', async () => { diff --git a/specs/resources/organizations.spec.ts b/specs/resources/organizations.spec.ts index 2a8bb7e..84284b9 100644 --- a/specs/resources/organizations.spec.ts +++ b/specs/resources/organizations.spec.ts @@ -1,5 +1,5 @@ /** - * ©2023 Commerce Layer Inc. + * ©2024 Commerce Layer Inc. * Source code generated automatically by SDK codegen **/ diff --git a/specs/resources/permissions.spec.ts b/specs/resources/permissions.spec.ts index 880aa04..0751074 100644 --- a/specs/resources/permissions.spec.ts +++ b/specs/resources/permissions.spec.ts @@ -1,5 +1,5 @@ /** - * ©2023 Commerce Layer Inc. + * ©2024 Commerce Layer Inc. * Source code generated automatically by SDK codegen **/ diff --git a/specs/resources/roles.spec.ts b/specs/resources/roles.spec.ts index 8663a33..486decf 100644 --- a/specs/resources/roles.spec.ts +++ b/specs/resources/roles.spec.ts @@ -1,5 +1,5 @@ /** - * ©2023 Commerce Layer Inc. + * ©2024 Commerce Layer Inc. * Source code generated automatically by SDK codegen **/ diff --git a/specs/resources/user.spec.ts b/specs/resources/user.spec.ts index a5dd710..7b50822 100644 --- a/specs/resources/user.spec.ts +++ b/specs/resources/user.spec.ts @@ -1,5 +1,5 @@ /** - * ©2023 Commerce Layer Inc. + * ©2024 Commerce Layer Inc. * Source code generated automatically by SDK codegen **/ diff --git a/specs/resources/versions.spec.ts b/specs/resources/versions.spec.ts index 9be5c75..a23b286 100644 --- a/specs/resources/versions.spec.ts +++ b/specs/resources/versions.spec.ts @@ -1,5 +1,5 @@ /** - * ©2023 Commerce Layer Inc. + * ©2024 Commerce Layer Inc. * Source code generated automatically by SDK codegen **/ diff --git a/src/api.ts b/src/api.ts index 5c6bd28..59e0a39 100644 --- a/src/api.ts +++ b/src/api.ts @@ -1,6 +1,11 @@ + + + + + 'user' 'user' @@ -26,7 +31,7 @@ import type { VersionType } from './resources/versions' // ##__API_RESOURCES_START__## // ##__API_RESOURCES_TEMPLATE:: export { default as ##__RESOURCE_CLASS__## } from './resources/##__RESOURCE_TYPE__##' /** - * ©2023 Commerce Layer Inc. + * ©2024 Commerce Layer Inc. **/ export { default as ApiCredentials } from './resources/api_credentials' export { default as ApplicationMemberships } from './resources/application_memberships' diff --git a/src/commercelayer.ts b/src/commercelayer.ts index 64c2710..71442fc 100644 --- a/src/commercelayer.ts +++ b/src/commercelayer.ts @@ -10,7 +10,7 @@ const debug = Debug('commercelayer') // Autogenerated schema version number, do not remove this line -const OPEN_API_SCHEMA_VERSION = '1.0.0' +const OPEN_API_SCHEMA_VERSION = '1.0.1' export { OPEN_API_SCHEMA_VERSION } diff --git a/src/model.ts b/src/model.ts index 59a9219..769028f 100644 --- a/src/model.ts +++ b/src/model.ts @@ -2,7 +2,7 @@ // ##__MODEL_TYPES_START__## // ##__MODEL_TYPES_TEMPLATE:: export type { ##__RESOURCE_MODELS__## } from './resources/##__RESOURCE_TYPE__##' /** - * ©2023 Commerce Layer Inc. + * ©2024 Commerce Layer Inc. **/ export type { ApiCredential, ApiCredentialCreate, ApiCredentialUpdate } from './resources/api_credentials' export type { ApplicationMembership, ApplicationMembershipCreate, ApplicationMembershipUpdate } from './resources/application_memberships' diff --git a/src/resources/application_memberships.ts b/src/resources/application_memberships.ts index 518fb26..acf38e8 100644 --- a/src/resources/application_memberships.ts +++ b/src/resources/application_memberships.ts @@ -4,7 +4,6 @@ import type { QueryParamsRetrieve } from '../query' import type { ApiCredential, ApiCredentialType } from './api_credentials' import type { Membership, MembershipType } from './memberships' -import type { User, UserType } from './user' import type { Organization, OrganizationType } from './organizations' import type { Role, RoleType } from './roles' @@ -13,7 +12,6 @@ type ApplicationMembershipType = 'application_memberships' type ApplicationMembershipRel = ResourceRel & { type: ApplicationMembershipType } type ApiCredentialRel = ResourceRel & { type: ApiCredentialType } type MembershipRel = ResourceRel & { type: MembershipType } -type UserRel = ResourceRel & { type: UserType } type OrganizationRel = ResourceRel & { type: OrganizationType } type RoleRel = ResourceRel & { type: RoleType } @@ -26,7 +24,6 @@ interface ApplicationMembership extends Resource { api_credential?: ApiCredential | null membership?: Membership | null - user?: User | null organization?: Organization | null role?: Role | null @@ -39,7 +36,6 @@ interface ApplicationMembershipCreate extends ResourceCreate { api_credential: ApiCredentialRel membership: MembershipRel - user: UserRel organization: OrganizationRel role: RoleRel @@ -81,11 +77,6 @@ class ApplicationMemberships extends ApiResource { return this.resources.fetch({ type: 'memberships' }, `application_memberships/${_applicationMembershipId}/membership`, params, options) as unknown as Membership } - async user(applicationMembershipId: string | ApplicationMembership, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { - const _applicationMembershipId = (applicationMembershipId as ApplicationMembership).id || applicationMembershipId as string - return this.resources.fetch({ type: 'user' }, `application_memberships/${_applicationMembershipId}/user`, params, options) as unknown as User - } - async organization(applicationMembershipId: string | ApplicationMembership, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { const _applicationMembershipId = (applicationMembershipId as ApplicationMembership).id || applicationMembershipId as string return this.resources.fetch({ type: 'organizations' }, `application_memberships/${_applicationMembershipId}/organization`, params, options) as unknown as Organization diff --git a/src/resources/memberships.ts b/src/resources/memberships.ts index fa19fec..5ecb467 100644 --- a/src/resources/memberships.ts +++ b/src/resources/memberships.ts @@ -5,7 +5,6 @@ import type { QueryParamsRetrieve, QueryParamsList } from '../query' import type { Organization, OrganizationType } from './organizations' import type { Role, RoleType } from './roles' import type { ApplicationMembership, ApplicationMembershipType } from './application_memberships' -import type { User } from './user' import type { Version } from './versions' @@ -29,7 +28,6 @@ interface Membership extends Resource { organization?: Organization | null role?: Role | null application_memberships?: ApplicationMembership[] | null - user?: User | null versions?: Version[] | null } @@ -90,11 +88,6 @@ class Memberships extends ApiResource { return this.resources.fetch({ type: 'application_memberships' }, `memberships/${_membershipId}/application_memberships`, params, options) as unknown as ListResponse } - async user(membershipId: string | Membership, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { - const _membershipId = (membershipId as Membership).id || membershipId as string - return this.resources.fetch({ type: 'user' }, `memberships/${_membershipId}/user`, params, options) as unknown as User - } - async versions(membershipId: string | Membership, params?: QueryParamsList, options?: ResourcesConfig): Promise> { const _membershipId = (membershipId as Membership).id || membershipId as string return this.resources.fetch({ type: 'versions' }, `memberships/${_membershipId}/versions`, params, options) as unknown as ListResponse diff --git a/src/resources/organizations.ts b/src/resources/organizations.ts index 430f0bd..73124cb 100644 --- a/src/resources/organizations.ts +++ b/src/resources/organizations.ts @@ -32,9 +32,9 @@ interface Organization extends Resource { acceptance_disabled?: boolean | null max_concurrent_promotions: number max_concurrent_imports: number - associated_markets: Record region?: string | null can_switch_live: boolean + subscription_totals: Record memberships?: Membership[] | null roles?: Role[] | null