diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..9b21dc4 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,6 @@ +.awcache/ +dist/ +node_modules/ +.DS_Store/ +.git/ +Dockerfile \ No newline at end of file diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml new file mode 100644 index 0000000..69b95c6 --- /dev/null +++ b/.github/workflows/codeql-analysis.yml @@ -0,0 +1,71 @@ +# For most projects, this workflow file will not need changing; you simply need +# to commit it to your repository. +# +# You may wish to alter this file to override the set of languages analyzed, +# or to provide custom queries or build logic. +# +# ******** NOTE ******** +# We have attempted to detect the languages in your repository. Please check +# the `language` matrix defined below to confirm you have the correct set of +# supported CodeQL languages. +# +name: "CodeQL" + +on: + push: + branches: [ master ] + pull_request: + # The branches below must be a subset of the branches above + branches: [ master ] + schedule: + - cron: '15 4 * * 0' + +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/.gitignore b/.gitignore new file mode 100644 index 0000000..21a10a6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +dist/ +node_modules/ +.awcache-browser/ +.awcache-server/ +.awcache +.DS_Store/ +.vscode/ diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..214c29d --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +registry=https://registry.npmjs.org/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..23f0729 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,75 @@ +FROM node:16-alpine as builder + +ARG PORT=8080 +ARG HOST='0.0.0.0' + +ENV HOST=$HOST \ + PORT=$PORT \ + DB_HOST=$DB_HOST \ + DB_USER=$DB_USER \ + DB_ACCESS_TOKEN=$DB_ACCESS_TOKEN \ + TERM=xterm \ + LANG=en_US.UTF-8 \ + TZ='Europe/Moscow' \ + NO_UPDATE_NOTIFIER=true \ + NPM_CONFIG_USERCONFIG=/tmp/.npmrc \ + NPM_CONFIG_CACHE=/tmp/npm-cache \ + NPM_CONFIG_PREFIX=/tmp/npm-global + +# Java and OpenJDK is used for OpenAPI tools +RUN apk add openjdk11 && \ + mkdir -p /usr/share/app \ + && chown 1001:0 /usr/share/app \ + && mkdir -p /tmp/npm-cache \ + && mkdir -p /tmp/npm-global + +WORKDIR /usr/share/app + +COPY package.json . +COPY package-lock.json . +COPY .npmrc . +RUN npm ci --no-audit --no-fund +COPY static ./static +COPY bin ./bin +COPY config ./config +COPY tsconfig.json . +COPY globals.d.ts . +COPY openapi.json . +COPY docs ./docs +COPY src ./src + +ARG NODE_ENV=production +ENV NODE_ENV $NODE_ENV + +RUN chown -R 1001:0 ./docs +RUN sh ./bin/build.sh + + + +FROM node:16-alpine as runner + +ARG PORT=8080 +ARG HOST='0.0.0.0' +ARG NODE_ENV=production + +ENV HOST=$HOST \ + PORT=$PORT \ + DB_HOST=$DB_HOST \ + DB_USER=$DB_USER \ + DB_ACCESS_TOKEN=$DB_ACCESS_TOKEN \ + NODE_ENV=$NODE_ENV + +WORKDIR /usr/share/app +RUN chown -R 1001:0 . + +COPY --from=builder --chown=1001:0 /usr/share/app/bin ./bin +COPY --from=builder --chown=1001:0 /usr/share/app/dist ./dist +COPY --from=builder --chown=1001:0 /usr/share/app/docs/html ./docs/html +COPY --from=builder --chown=1001:0 /usr/share/app/static ./static +COPY --from=builder --chown=1001:0 /usr/share/app/node_modules/full-icu ./node_modules/full-icu + +EXPOSE $PORT +HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 CMD [ "./bin/healthcheck.sh" ] + +USER 1001 +CMD [ "./bin/start.sh" ] diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..dad4ebc --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2022 Artem Nechunaev + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..e527701 --- /dev/null +++ b/README.md @@ -0,0 +1,64 @@ +# Modern Node.js API Boilerplate + +## Technologies +- TypeScript v4, Node.js v16, Express v4 +- API Schema: OpenAPI v3 + +## Limitations and restrictions +- TLS/SSL not supported, it should be implemented by platform router or reverse-proxy + +## Docker repository + +`bungubot/nodejs-api-boilerplate` + +## Features + +### Build process + +- [x] Containerized build process with Docker +- [x] Multi-stage build with Docker + +### Server-side application + +- [x] Graceful shutdown +- [x] Internationalization support with `Intl` API for Node.js +- [ ] Optional: Use GraphQL to implement client-server-client messaging +- [ ] Optional: Add GRPC protocol + +### Development tools + +- [ ] Quality assurance tools + - [ ] Integrate framework for unit-testing + - [ ] Integrate framework for e2e testing + - [ ] Coverage reports + - [ ] Performance reports + - [ ] Linters and code-style checkers +- [ ] Watcher +- [ ] Hot module replacement for client-side code +- [ ] Iterative assets building + +## How to build +Production build: +```sh +$ npm run build +``` + +Development build: +```sh +$ npm run dev:build +``` + +Start server: +```sh +$ npm start +# or +$ ./bin/start.sh +``` + +It is possible to start an application cluster on a local development machine. Docker Compose is used for running development environment. Just change `./dev/docker-compose.yaml` according to your application and run it: + +```sh +$ cd dev +$ docker-compose build +$ docker-compose up +``` \ No newline at end of file diff --git a/bin/build.sh b/bin/build.sh new file mode 100755 index 0000000..078045c --- /dev/null +++ b/bin/build.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +npm run docgen:html +npm run build diff --git a/bin/healthcheck.sh b/bin/healthcheck.sh new file mode 100755 index 0000000..eaf3967 --- /dev/null +++ b/bin/healthcheck.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +STATUSCODE=$(curl --silent --output /dev/null --write-out "%{http_code}" http://0.0.0.0:$PORT/healthcheck) + +if test $STATUSCODE -ne 200; then + exit 1 +fi diff --git a/bin/start.sh b/bin/start.sh new file mode 100755 index 0000000..dfb2a12 --- /dev/null +++ b/bin/start.sh @@ -0,0 +1,32 @@ +#!/bin/sh + +prep_term() +{ + unset term_child_pid + unset term_kill_needed + trap 'handle_term' TERM INT +} + +handle_term() +{ + if [ "${term_child_pid}" ]; then + kill -TERM "${term_child_pid}" 2>/dev/null + else + term_kill_needed="yes" + fi +} + +wait_term() +{ + term_child_pid=$! + if [ "${term_kill_needed}" ]; then + kill -TERM "${term_child_pid}" 2>/dev/null + fi + wait ${term_child_pid} + trap - TERM INT + wait ${term_child_pid} +} + +prep_term +/usr/bin/env node --icu-data-dir=./node_modules/full-icu ./dist/server & +wait_term diff --git a/config/webpack/server.dev.js b/config/webpack/server.dev.js new file mode 100644 index 0000000..55b2b20 --- /dev/null +++ b/config/webpack/server.dev.js @@ -0,0 +1,64 @@ +const { resolve } = require("path"); +const webpack = require("webpack"); +const ForkTsCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin"); + +module.exports = { + mode: "development", + target: "node", + context: resolve(__dirname), + devtool: "cheap-module-source-map", + entry: { + server: resolve(__dirname, "../../src/index.ts"), + }, + output: { + filename: "[name].js", + chunkFilename: "[name].chunk.js", + publicPath: "/dist/", + path: resolve(__dirname, "../../dist"), + }, + resolve: { + extensions: [".js", ".jsx", ".ts", ".tsx", ".json"], + modules: [resolve(__dirname, "../../src"), "node_modules"], + }, + module: { + rules: [ + { + test: /\.(j|t)sx?$/, + use: [ + { + loader: "ts-loader", + options: { + configFile: "tsconfig.json", + transpileOnly: true, + logInfoToStdOut: true, + }, + }, + ], + exclude: /node_modules/, + }, + ], + }, + optimization: { + chunkIds: "named", + moduleIds: "named", + }, + plugins: [ + new webpack.DefinePlugin({ + "process.env": { + NODE_ENV: JSON.stringify("development"), + HOST: JSON.stringify(process.env.HOST), + PORT: JSON.stringify(process.env.PORT), + }, + PRODUCTION: JSON.stringify(false), + __dirname: JSON.stringify(__dirname), + }), + new webpack.optimize.LimitChunkCountPlugin({ + maxChunks: 1, + }), + new ForkTsCheckerWebpackPlugin({ + typescript: { + configFile: "../../tsconfig.json", + }, + }), + ], +}; diff --git a/config/webpack/server.prod.js b/config/webpack/server.prod.js new file mode 100644 index 0000000..34fe5d8 --- /dev/null +++ b/config/webpack/server.prod.js @@ -0,0 +1,65 @@ +const { resolve } = require("path"); +const webpack = require("webpack"); +const TerserPlugin = require("terser-webpack-plugin"); +const ForkTsCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin"); + +module.exports = { + mode: "production", + target: "node", + context: resolve(__dirname), + entry: { + server: resolve(__dirname, "../../src/index.ts"), + }, + output: { + filename: "[name].js", + chunkFilename: "[name].chunk.js", + publicPath: "/dist/", + path: resolve(__dirname, "../../dist"), + }, + resolve: { + extensions: [".js", ".jsx", ".ts", ".tsx", ".json"], + modules: [resolve(__dirname, "../../src"), "node_modules"], + }, + module: { + rules: [ + { + test: /\.(j|t)sx?$/, + use: [ + { + loader: "ts-loader", + options: { + configFile: "tsconfig.json", + transpileOnly: true, + logInfoToStdOut: true, + }, + }, + ], + exclude: /node_modules/, + }, + ], + }, + plugins: [ + new webpack.DefinePlugin({ + "process.env": { + NODE_ENV: JSON.stringify("production"), + HOST: JSON.stringify(process.env.HOST), + PORT: JSON.stringify(process.env.PORT), + }, + PRODUCTION: JSON.stringify(true), + __dirname: JSON.stringify(__dirname), + }), + new ForkTsCheckerWebpackPlugin({ + typescript: { + configFile: "../../tsconfig.json", + }, + }), + new webpack.optimize.LimitChunkCountPlugin({ + maxChunks: 1, + }), + ], + optimization: { + chunkIds: "deterministic", + moduleIds: "deterministic", + minimizer: [new TerserPlugin()], + }, +}; diff --git a/dev/docker-compose.yaml b/dev/docker-compose.yaml new file mode 100644 index 0000000..d461aff --- /dev/null +++ b/dev/docker-compose.yaml @@ -0,0 +1,47 @@ +version: '3' +services: + rest-api: + build: + context: ../ + dockerfile: Dockerfile + container_name: rest-api + depends_on: + - db + restart: unless-stopped + tty: true + ports: + - '8080:8080' + environment: + SERVICE_NAME: rest-api + NODE_ENV: development + DB_USER: anonymous + DB_ACCESS_TOKEN: 1234567890 + DB_HOST: db:27017 + networks: + - app-network + volumes: + - ../dist:/usr/share/app/dist + - ../node_modules:/usr/share/app/node_modules + + db: + image: mongo:5.0.5 + container_name: database + restart: always + tty: true + ports: + - '27017:27017' + environment: + MONGO_INITDB_ROOT_USERNAME: anonymous + MONGO_INITDB_ROOT_PASSWORD: 1234567890 + networks: + - app-network + volumes: + - dbdata:/var/lib/mongodb + +networks: + app-network: + driver: bridge + +volumes: + dbdata: + driver: local \ No newline at end of file diff --git a/docs/html/.openapi-generator-ignore b/docs/html/.openapi-generator-ignore new file mode 100755 index 0000000..7484ee5 --- /dev/null +++ b/docs/html/.openapi-generator-ignore @@ -0,0 +1,23 @@ +# OpenAPI Generator Ignore +# Generated by openapi-generator https://github.com/openapitools/openapi-generator + +# Use this file to prevent files from being overwritten by the generator. +# The patterns follow closely to .gitignore or .dockerignore. + +# As an example, the C# client generator defines ApiClient.cs. +# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line: +#ApiClient.cs + +# You can match any string of characters against a directory, file or extension with a single asterisk (*): +#foo/*/qux +# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux + +# You can recursively match patterns against a directory, file or extension with a double asterisk (**): +#foo/**/qux +# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux + +# You can also negate patterns with an exclamation (!). +# For example, you can ignore all files in a docs folder with the file extension .md: +#docs/*.md +# Then explicitly reverse the ignore rule for a single file: +#!docs/README.md diff --git a/docs/html/.openapi-generator/FILES b/docs/html/.openapi-generator/FILES new file mode 100755 index 0000000..af3fdae --- /dev/null +++ b/docs/html/.openapi-generator/FILES @@ -0,0 +1,2 @@ +.openapi-generator-ignore +index.html diff --git a/docs/html/.openapi-generator/VERSION b/docs/html/.openapi-generator/VERSION new file mode 100755 index 0000000..7d3cdbf --- /dev/null +++ b/docs/html/.openapi-generator/VERSION @@ -0,0 +1 @@ +5.3.1 \ No newline at end of file diff --git a/docs/html/index.html b/docs/html/index.html new file mode 100755 index 0000000..11a8110 --- /dev/null +++ b/docs/html/index.html @@ -0,0 +1,479 @@ + + + + Node.js API example + + + +

Node.js API example

+
Node.js API example
+
More information: https://openapi-generator.tech
+
Contact Info: artem@nechunaev.com
+
Version: 1.0.0
+
BasePath:/api
+
MIT
+
https://opensource.org/licenses/MIT
+

Access

+ +

Methods

+ [ Jump to Models ] + +

Table of Contents

+
+

Default

+ + +

Default

+
+
+ Up +
post /v1/creatures
+
Creates new creature (addCreatureV1)
+
+ + +

Consumes

+ This API call consumes the following media types via the Content-Type request header: + + +

Request body

+
+
Creature_v1 Creature_v1 (required)
+ +
Body Parameter
+ +
+ + + + +

Return type

+ + + + +

Example data

+
Content-Type: application/json
+
null
+ +

Produces

+ This API call produces the following media types according to the Accept request header; + the media type will be conveyed by the Content-Type response header. + + +

Responses

+

200

+ Creatures data + CreatureList_v1 +

500

+ Could not create creature + Error_v1 +
+
+
+
+ Up +
get /v1/creatures/{id}
+
Returns information about specific living creature (getCreatureV1)
+
+ +

Path parameters

+
+
id (required)
+ +
Path Parameter — Identifier of a specific creature. default: null format: uuid
+
+ +

Consumes

+ This API call consumes the following media types via the Content-Type request header: + + +

Request body

+
+
Creature_v1 Creature_v1 (required)
+ +
Body Parameter
+ +
+ + + + +

Return type

+
+ Creature_v1 + +
+ + + +

Example data

+
Content-Type: application/json
+
{
+  "kind" : "Human",
+  "greeting" : "Well, hello there!",
+  "name" : "Artem",
+  "id" : 0
+}
+ +

Produces

+ This API call produces the following media types according to the Accept request header; + the media type will be conveyed by the Content-Type response header. + + +

Responses

+

200

+ Creature info + Creature_v1 +

404

+ Creature was not found + Error_v1 +
+
+
+
+ Up +
get /v1/creatures
+
Returns information about all living creatures (getCreaturesV1)
+
+ + + + + +

Query parameters

+
+
offset (optional)
+ +
Query Parameter — Sets the ID of a creature for a start of the list. By default is 0. default: 0
limit (optional)
+ +
Query Parameter — Sets the length of the list. By default is 100. default: 100
+
+ + +

Return type

+ + + + +

Example data

+
Content-Type: application/json
+
null
+ +

Produces

+ This API call produces the following media types according to the Accept request header; + the media type will be conveyed by the Content-Type response header. + + +

Responses

+

200

+ Creatures data + CreatureList_v1 +
+
+
+
+ Up +
post /v1/creatures/{id}
+
Updates specific creature info (updateCreatureV1)
+
+ +

Path parameters

+
+
id (required)
+ +
Path Parameter — Identifier of a specific creature. default: null format: uuid
+
+ +

Consumes

+ This API call consumes the following media types via the Content-Type request header: + + +

Request body

+
+
Creature_v1 Creature_v1 (required)
+ +
Body Parameter
+ +
+ + + + +

Return type

+
+ Creature_v1 + +
+ + + +

Example data

+
Content-Type: application/json
+
{
+  "kind" : "Human",
+  "greeting" : "Well, hello there!",
+  "name" : "Artem",
+  "id" : 0
+}
+ +

Produces

+ This API call produces the following media types according to the Accept request header; + the media type will be conveyed by the Content-Type response header. + + +

Responses

+

200

+ Creature info + Creature_v1 +

500

+ Cannot add creature + Error_v1 +
+
+ +

Models

+ [ Jump to Methods ] + +

Table of Contents

+
    +
  1. CreatureList_v1 -
  2. +
  3. Creature_v1 -
  4. +
  5. Error_v1 -
  6. +
  7. Error_v1_error -
  8. +
+ +
+

CreatureList_v1 - Up

+
+
+
+
+
+

Creature_v1 - Up

+
+
+
id
Integer Unique identificator of a specific creature
+
kind
String Kind of a living creature
+
name
String Name of a living creature
+
greeting
String What the creature says when you meet it
+
+
+
+

Error_v1 - Up

+
+
+
error
+
message
String Description of the error
+
+
+
+

Error_v1_error - Up

+
+
+
code
String Error code
+
httpStatus
Integer HTTP response status code
+
name
String Error name
+
+
+ + diff --git a/docs/md/.openapi-generator-ignore b/docs/md/.openapi-generator-ignore new file mode 100755 index 0000000..7484ee5 --- /dev/null +++ b/docs/md/.openapi-generator-ignore @@ -0,0 +1,23 @@ +# OpenAPI Generator Ignore +# Generated by openapi-generator https://github.com/openapitools/openapi-generator + +# Use this file to prevent files from being overwritten by the generator. +# The patterns follow closely to .gitignore or .dockerignore. + +# As an example, the C# client generator defines ApiClient.cs. +# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line: +#ApiClient.cs + +# You can match any string of characters against a directory, file or extension with a single asterisk (*): +#foo/*/qux +# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux + +# You can recursively match patterns against a directory, file or extension with a double asterisk (**): +#foo/**/qux +# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux + +# You can also negate patterns with an exclamation (!). +# For example, you can ignore all files in a docs folder with the file extension .md: +#docs/*.md +# Then explicitly reverse the ignore rule for a single file: +#!docs/README.md diff --git a/docs/md/.openapi-generator/FILES b/docs/md/.openapi-generator/FILES new file mode 100755 index 0000000..051f235 --- /dev/null +++ b/docs/md/.openapi-generator/FILES @@ -0,0 +1,7 @@ +.openapi-generator-ignore +Apis/DefaultApi.md +Models/CreatureList_v1.md +Models/Creature_v1.md +Models/Error_v1.md +Models/Error_v1_error.md +README.md diff --git a/docs/md/.openapi-generator/VERSION b/docs/md/.openapi-generator/VERSION new file mode 100755 index 0000000..7d3cdbf --- /dev/null +++ b/docs/md/.openapi-generator/VERSION @@ -0,0 +1 @@ +5.3.1 \ No newline at end of file diff --git a/docs/md/Apis/DefaultApi.md b/docs/md/Apis/DefaultApi.md new file mode 100755 index 0000000..010fdcd --- /dev/null +++ b/docs/md/Apis/DefaultApi.md @@ -0,0 +1,115 @@ +# DefaultApi + +All URIs are relative to *http://localhost:8080/api* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**addCreatureV1**](DefaultApi.md#addCreatureV1) | **POST** /v1/creatures | Creates new creature +[**getCreatureV1**](DefaultApi.md#getCreatureV1) | **GET** /v1/creatures/{id} | Returns information about specific living creature +[**getCreaturesV1**](DefaultApi.md#getCreaturesV1) | **GET** /v1/creatures | Returns information about all living creatures +[**updateCreatureV1**](DefaultApi.md#updateCreatureV1) | **POST** /v1/creatures/{id} | Updates specific creature info + + + +# **addCreatureV1** +> CreatureList_v1 addCreatureV1(Creature\_v1) + +Creates new creature + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **Creature\_v1** | [**Creature_v1**](../Models/Creature_v1.md)| | + +### Return type + +[**CreatureList_v1**](../Models/CreatureList_v1.md) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: application/json + + +# **getCreatureV1** +> Creature_v1 getCreatureV1(id, Creature\_v1) + +Returns information about specific living creature + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **UUID**| Identifier of a specific creature. | [default to null] + **Creature\_v1** | [**Creature_v1**](../Models/Creature_v1.md)| | + +### Return type + +[**Creature_v1**](../Models/Creature_v1.md) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: application/json + + +# **getCreaturesV1** +> CreatureList_v1 getCreaturesV1(offset, limit) + +Returns information about all living creatures + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **offset** | **Integer**| Sets the ID of a creature for a start of the list. By default is `0`. | [optional] [default to 0] + **limit** | **Integer**| Sets the length of the list. By default is `100`. | [optional] [default to 100] + +### Return type + +[**CreatureList_v1**](../Models/CreatureList_v1.md) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + + +# **updateCreatureV1** +> Creature_v1 updateCreatureV1(id, Creature\_v1) + +Updates specific creature info + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **UUID**| Identifier of a specific creature. | [default to null] + **Creature\_v1** | [**Creature_v1**](../Models/Creature_v1.md)| | + +### Return type + +[**Creature_v1**](../Models/Creature_v1.md) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: application/json + diff --git a/docs/md/Models/CreatureList_v1.md b/docs/md/Models/CreatureList_v1.md new file mode 100755 index 0000000..dc211c1 --- /dev/null +++ b/docs/md/Models/CreatureList_v1.md @@ -0,0 +1,8 @@ +# CreatureList_v1 +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/docs/md/Models/Creature_v1.md b/docs/md/Models/Creature_v1.md new file mode 100755 index 0000000..7dc95e3 --- /dev/null +++ b/docs/md/Models/Creature_v1.md @@ -0,0 +1,12 @@ +# Creature_v1 +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **Integer** | Unique identificator of a specific creature | [default to null] +**kind** | **String** | Kind of a living creature | [default to null] +**name** | **String** | Name of a living creature | [default to null] +**greeting** | **String** | What the creature says when you meet it | [default to null] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/docs/md/Models/Error_v1.md b/docs/md/Models/Error_v1.md new file mode 100755 index 0000000..64a4d54 --- /dev/null +++ b/docs/md/Models/Error_v1.md @@ -0,0 +1,10 @@ +# Error_v1 +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**error** | [**Error_v1_error**](Error_v1_error.md) | | [default to null] +**message** | **String** | Description of the error | [default to null] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/docs/md/Models/Error_v1_error.md b/docs/md/Models/Error_v1_error.md new file mode 100755 index 0000000..9020b07 --- /dev/null +++ b/docs/md/Models/Error_v1_error.md @@ -0,0 +1,11 @@ +# Error_v1_error +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**code** | **String** | Error code | [default to null] +**httpStatus** | **Integer** | HTTP response status code | [default to null] +**name** | **String** | Error name | [default to null] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/docs/md/README.md b/docs/md/README.md new file mode 100755 index 0000000..9ca69af --- /dev/null +++ b/docs/md/README.md @@ -0,0 +1,28 @@ +# Documentation for Node.js API example + + +## Documentation for API Endpoints + +All URIs are relative to *http://localhost:8080/api* + +Class | Method | HTTP request | Description +------------ | ------------- | ------------- | ------------- +*DefaultApi* | [**addCreatureV1**](Apis/DefaultApi.md#addcreaturev1) | **POST** /v1/creatures | Creates new creature +*DefaultApi* | [**getCreatureV1**](Apis/DefaultApi.md#getcreaturev1) | **GET** /v1/creatures/{id} | Returns information about specific living creature +*DefaultApi* | [**getCreaturesV1**](Apis/DefaultApi.md#getcreaturesv1) | **GET** /v1/creatures | Returns information about all living creatures +*DefaultApi* | [**updateCreatureV1**](Apis/DefaultApi.md#updatecreaturev1) | **POST** /v1/creatures/{id} | Updates specific creature info + + + +## Documentation for Models + + - [CreatureList_v1](./Models/CreatureList_v1.md) + - [Creature_v1](./Models/Creature_v1.md) + - [Error_v1](./Models/Error_v1.md) + - [Error_v1_error](./Models/Error_v1_error.md) + + + +## Documentation for Authorization + +All endpoints do not require authorization. diff --git a/globals.d.ts b/globals.d.ts new file mode 100644 index 0000000..e651f3d --- /dev/null +++ b/globals.d.ts @@ -0,0 +1,4 @@ +declare module "*.json" { + const value: {[key: string]: any}; + export default value; +} diff --git a/openapi.json b/openapi.json new file mode 100644 index 0000000..2d11c18 --- /dev/null +++ b/openapi.json @@ -0,0 +1,363 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "Node.js API example", + "version": "1.0.0", + "description": "Node.js API example", + "contact": { + "name": "Artem Nechunaev", + "email": "artem@nechunaev.com" + }, + "license": { + "name": "MIT", + "url": "https://opensource.org/licenses/MIT" + } + }, + "servers": [ + { + "url": "http://localhost:8080/api", + "description": "Main entry point" + } + ], + "paths": { + "/v1/creatures": { + "get": { + "parameters": [ + { + "name": "offset", + "description": "Sets the ID of a creature for a start of the list. By default is `0`.", + "schema": { + "default": 0, + "type": "integer" + }, + "in": "query", + "required": false + }, + { + "name": "limit", + "description": "Sets the length of the list. By default is `100`.", + "schema": { + "default": 100, + "type": "integer" + }, + "in": "query", + "required": false + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreatureList_v1" + }, + "example": [ + { + "id": 0, + "kind": "Human", + "name": "Artem", + "greeting": "Well, hello there!" + }, + { + "id": 1, + "kind": "Dog", + "name": "Clifford", + "greeting": "Woof!" + } + ] + } + }, + "description": "Creatures data", + "headers": {}, + "links": {} + } + }, + "operationId": "getCreatures_v1", + "summary": "Returns information about all living creatures", + "description": "" + }, + "post": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Creature_v1", + "required": [ + "kind", + "name", + "greeting" + ] + }, + "example": { + "kind": "Human", + "name": "Artem", + "greeting": "Well, hello there!" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreatureList_v1" + }, + "example": { + "id": 1, + "kind": "Dog", + "name": "Clifford", + "greeting": "Woof!" + } + } + }, + "description": "Creatures data", + "headers": {}, + "links": {} + }, + "500": { + "description": "Could not create creature", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error_v1" + } + } + } + } + }, + "operationId": "addCreature_v1", + "summary": "Creates new creature", + "description": "" + } + }, + "/v1/creatures/{id}": { + "get": { + "parameters": [ + { + "name": "id", + "$ref": "#/components/parameters/id" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Creature_v1" + }, + "example": { + "id": 0, + "greeting": "Hello world!" + } + } + }, + "description": "Creature info", + "headers": {}, + "links": {} + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error_v1" + } + } + }, + "description": "Creature was not found", + "headers": {}, + "links": {} + } + }, + "operationId": "getCreature_v1", + "summary": "Returns information about specific living creature", + "description": "", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Creature_v1" + }, + "example": { + "greeting": "Hello world!" + } + } + } + } + }, + "post": { + "parameters": [ + { + "name": "id", + "$ref": "#/components/parameters/id" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Creature_v1" + } + } + }, + "description": "Creature info", + "headers": {}, + "links": {} + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error_v1" + } + } + }, + "description": "Cannot add creature" + } + }, + "operationId": "updateCreature_v1", + "summary": "Updates specific creature info", + "description": "", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Creature_v1" + }, + "example": { + "greeting": "Hello world!" + } + } + } + } + } + } + }, + "components": { + "schemas": { + "Error_v1": { + "required": [ + "error", + "message" + ], + "type": "object", + "properties": { + "error": { + "required": [ + "code", + "httpStatus", + "name" + ], + "type": "object", + "properties": { + "code": { + "description": "Error code", + "type": "string", + "example": "ENOTFOUND" + }, + "httpStatus": { + "description": "HTTP response status code", + "type": "integer", + "example": 404 + }, + "name": { + "description": "Error name", + "type": "string", + "example": "NotFoundError" + } + } + }, + "message": { + "description": "Description of the error", + "type": "string", + "example": "Specific creature was not found" + } + } + }, + "CreatureList_v1": { + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "#/components/schemas/Error_v1" + }, + { + "$ref": "#/components/schemas/Creature_v1" + } + ] + } + }, + "Creature_v1": { + "required": [ + "id", + "kind", + "name", + "greeting" + ], + "type": "object", + "properties": { + "id": { + "description": "Unique identificator of a specific creature", + "type": "integer", + "example": 0 + }, + "kind": { + "description": "Kind of a living creature", + "type": "string", + "example": "Human" + }, + "name": { + "description": "Name of a living creature", + "type": "string", + "example": "Artem" + }, + "greeting": { + "description": "What the creature says when you meet it", + "type": "string", + "example": "Well, hello there!" + } + } + } + }, + "securitySchemes": {}, + "headers": {}, + "responses": {}, + "parameters": { + "id": { + "in": "path", + "name": "id", + "example": "GET /api/v1/creatures/0", + "description": "Identifier of a specific creature.", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "deprecated": false + } + } + }, + "externalDocs": { + "description": "Auto generated docs in human readable format", + "url": "http://localhost:8080/docs" + }, + "tags": [ + { + "name": "example", + "description": "example" + }, + { + "name": "creatures", + "description": "creatures" + }, + { + "name": "REST", + "description": "REST" + } + ], + "security": [] +} \ No newline at end of file diff --git a/openapitools.json b/openapitools.json new file mode 100644 index 0000000..2774f45 --- /dev/null +++ b/openapitools.json @@ -0,0 +1,7 @@ +{ + "$schema": "node_modules/@openapitools/openapi-generator-cli/config.schema.json", + "spaces": 2, + "generator-cli": { + "version": "5.3.1" + } +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..ca1a86d --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6866 @@ +{ + "name": "nodejs-api-boilerplate", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "nodejs-api-boilerplate", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "express": "^4.17.2", + "express-static-gzip": "^2.1.1", + "full-icu": "^1.4.0" + }, + "devDependencies": { + "@openapitools/openapi-generator-cli": "^2.4.25", + "@types/express": "^4.17.13", + "@types/morgan": "^1.9.3", + "fork-ts-checker-webpack-plugin": "^6.5.0", + "morgan": "^1.10.0", + "terser-webpack-plugin": "^5.3.0", + "ts-loader": "^9.2.6", + "typescript": "^4.5.4", + "webpack": "^5.66.0", + "webpack-cli": "^4.9.1", + "webpack-manifest-plugin": "^4.1.1" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha1-REFra9diS5mPWxr11HCFbEATh4k=", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha1-6MYCQ4xKgZV1EkPakDHRYH0kfK0=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.16.7", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@babel/highlight/-/highlight-7.16.7.tgz", + "integrity": "sha1-gaAdfWdQRvDZb4JFDZ2VeL39aws=", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.6", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz", + "integrity": "sha1-1eBwbPjGrNjGAy+NVAcK8mG7uy8=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@nestjs/common": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-8.2.5.tgz", + "integrity": "sha512-8VOZmHcCyhBtfvxehDfudsCrNghUoqDpZA5W8d/PUhMgz4Y1eT0M2ENBIuxr3C3j1vLypFOo30La2ymfQlOC8Q==", + "dev": true, + "dependencies": { + "axios": "0.24.0", + "iterare": "1.2.1", + "tslib": "2.3.1", + "uuid": "8.3.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "cache-manager": "*", + "class-transformer": "*", + "class-validator": "*", + "reflect-metadata": "^0.1.12", + "rxjs": "^7.1.0" + }, + "peerDependenciesMeta": { + "cache-manager": { + "optional": true + }, + "class-transformer": { + "optional": true + }, + "class-validator": { + "optional": true + } + } + }, + "node_modules/@nestjs/common/node_modules/tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "dev": true + }, + "node_modules/@nestjs/core": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-8.2.5.tgz", + "integrity": "sha512-R0vp0VlAQFP7qBTZMzMspwOCO6MpsMJON/MsrfHVGgZS5Sd5DInfboWhe2COPnAr+VAT0o4FAKObW08Pdb5hMg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@nuxtjs/opencollective": "0.3.2", + "fast-safe-stringify": "2.1.1", + "iterare": "1.2.1", + "object-hash": "2.2.0", + "path-to-regexp": "3.2.0", + "tslib": "2.3.1", + "uuid": "8.3.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "@nestjs/common": "^8.0.0", + "@nestjs/microservices": "^8.0.0", + "@nestjs/platform-express": "^8.0.0", + "@nestjs/websockets": "^8.0.0", + "reflect-metadata": "^0.1.12", + "rxjs": "^7.1.0" + }, + "peerDependenciesMeta": { + "@nestjs/microservices": { + "optional": true + }, + "@nestjs/platform-express": { + "optional": true + }, + "@nestjs/websockets": { + "optional": true + } + } + }, + "node_modules/@nestjs/core/node_modules/path-to-regexp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.2.0.tgz", + "integrity": "sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==", + "dev": true + }, + "node_modules/@nestjs/core/node_modules/tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "dev": true + }, + "node_modules/@nuxtjs/opencollective": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@nuxtjs/opencollective/-/opencollective-0.3.2.tgz", + "integrity": "sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "consola": "^2.15.0", + "node-fetch": "^2.6.1" + }, + "bin": { + "opencollective": "bin/opencollective.js" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" + } + }, + "node_modules/@openapitools/openapi-generator-cli": { + "version": "2.4.25", + "resolved": "https://registry.npmjs.org/@openapitools/openapi-generator-cli/-/openapi-generator-cli-2.4.25.tgz", + "integrity": "sha512-n2RExPLkscjgjryEW+SbhJNs22LHsCLIlBtD5FaZsW84tTcii2YcbyHOIfz9xAoNKbpshk2hgxjtnXqTK92mGg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@nestjs/common": "8.2.5", + "@nestjs/core": "8.2.5", + "@nuxtjs/opencollective": "0.3.2", + "chalk": "4.1.2", + "commander": "8.3.0", + "compare-versions": "3.6.0", + "concurrently": "6.5.1", + "console.table": "0.10.0", + "fs-extra": "10.0.0", + "glob": "7.1.6", + "inquirer": "8.2.0", + "lodash": "4.17.21", + "reflect-metadata": "0.1.13", + "rxjs": "7.5.2", + "tslib": "2.0.3" + }, + "bin": { + "openapi-generator-cli": "main.js" + }, + "engines": { + "node": ">=10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/openapi_generator" + } + }, + "node_modules/@openapitools/openapi-generator-cli/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@openapitools/openapi-generator-cli/node_modules/fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@openapitools/openapi-generator-cli/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha1-rqIFnii3ZYY5CBNHrE+rPeFm5vA=", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha1-X89q5EXkAh0fwiGaSHPMc6O7KtE=", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.2.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@types/eslint/-/eslint-8.2.2.tgz", + "integrity": "sha1-tk29tksZV8/IppjGgpf8+Jg+lMc=", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha1-EluIUEth48i8b4cIggAyUwBcMiQ=", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.50", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@types/estree/-/estree-0.0.50.tgz", + "integrity": "sha1-Hgyqk2TT/M0pMcPtlv2+ql1MyoM=", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "4.17.13", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@types/express/-/express-4.17.13.tgz", + "integrity": "sha1-p24plXKJmbq1GjP6vOHXBaNwkDQ=", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.28", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", + "integrity": "sha1-xH3vnzTsgdxjKNCxtTA9HsmNhrg=", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.9", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha1-l+3JA36gw4WFMgsolk3eOznkZg0=", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha1-k+Jb+e51/g/YC1lLxP6w6GIRG1o=", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/morgan": { + "version": "1.9.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@types/morgan/-/morgan-1.9.3.tgz", + "integrity": "sha1-rgQYDf8CxDcxK8DPseKWAIay9UA=", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "17.0.9", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@types/node/-/node-17.0.9.tgz", + "integrity": "sha1-C38WGvtbHMElGNKbLNxxddVJBig=", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-L4u0QUNNFjs1+4/9zNcTiSf/uMA=", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha1-Y7t9Bn2xB8weRXwwO8JdUR/r9ss=", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha1-zWZ7z90CUhOq+3ylkVqTJZCs3Nw=", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/serve-static": { + "version": "1.13.10", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha1-9eDOh5fS18xevtpIpSyWxPpHqNk=", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha1-K/12fq4aaZb0Mv9+jX/HVnnAtqc=", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha1-9sYacF8P16auyqToGY8j2dwXnk8=", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha1-GmMZLYeI5cASgAump6RscFKI/RY=", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha1-gyqQDrREiEzemnytRn+BUA9eWrU=", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha1-ZNgdohn7u6HjvRv8dPboxOEKYq4=", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha1-8ygkHkHnsZnQsgwY6IQpxEMyleE=", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha1-Ie4GWntjXzGec48N1zv72igcCXo=", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha1-ljkp6bvQVwnn4SJDoJkYCBKZJhQ=", + "dev": true, + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha1-zoFLRVdOk9drrh+yZEq5zdlSeqU=", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha1-0fi3ZDaefG5rrjUOhU3smlnwo/8=", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha1-rSBuv0v5WgWM6YgKjAksXeyBk9Y=", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha1-hsXqMEhJdZt9iMR6MvTwOa48j3Y=", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha1-ZXtMIgL0zzs0X4pMZGHIwkGJhfI=", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha1-hspzRTT0F+m9PGfHocddi+QfsZk=", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha1-0Mc77ajuxUJvEK6O9VzuXnCEwvA=", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "1.1.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@webpack-cli/configtest/-/configtest-1.1.0.tgz", + "integrity": "sha1-g0K+8Lrft9/TtXbyV0q4DHJb4EM=", + "dev": true, + "license": "MIT", + "peerDependencies": { + "webpack": "4.x.x || 5.x.x", + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "1.4.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@webpack-cli/info/-/info-1.4.0.tgz", + "integrity": "sha1-uRecMierCcu7FJqnM0dfz5lDAiM=", + "dev": true, + "license": "MIT", + "dependencies": { + "envinfo": "^7.7.3" + }, + "peerDependencies": { + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "1.6.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@webpack-cli/serve/-/serve-1.6.0.tgz", + "integrity": "sha1-LCdaoFyJXszrv8NM+yI8bovVkaI=", + "dev": true, + "license": "MIT", + "peerDependencies": { + "webpack-cli": "4.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha1-7vAUoxRa5Hehy8AM0eVSM23Ot5A=", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha1-0pHGpOl5ibXGHZrPOWrk/hM6cY0=", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha1-UxvHJlF6OytB+FACHGzBXqq1B80=", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.7.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha1-kJUf3g+PCd+TVJSB5fwUFEW3kc8=", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha1-uitZOc5iwjjbbZPYHJsRGym4Vek=", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha1-MfKdpatuANHC0yms97WSlhTVAU0=", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha1-wFV8CWrzLxBhmPT04qODU343hxY=", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha1-YCzUtG6EStTv/JKoARo8RuAjjcI=", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/axios": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", + "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.14.4" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4=", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha1-uZgnm/R844NEtPPPkW1Gebv1Hjo=", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/basic-auth/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=", + "dev": true, + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha1-dfUC7q+f/eQvyYgpZFvk6na9ni0=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/body-parser": { + "version": "1.19.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/body-parser/-/body-parser-1.19.1.tgz", + "integrity": "sha1-FJmruqknSvPsyfbxA5bJlZQ+MdQ=", + "license": "MIT", + "dependencies": { + "bytes": "3.1.1", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.9.6", + "raw-body": "2.4.2", + "type-is": "~1.6.18" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/braces/-/braces-3.0.2.tgz", + "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.19.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha1-SsBDWzWrZViWwx1TAYtt1enkyaM=", + "dev": true, + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha1-KxRqb9cugLT1XSVfNe1Zo6mkG9U=", + "dev": true, + "license": "MIT" + }, + "node_modules/bytes": { + "version": "3.1.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha1-PwGCkctMutmsy25pcLypyIieh5o=", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001300", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/caniuse-lite/-/caniuse-lite-1.0.30001300.tgz", + "integrity": "sha1-EatsV9Prb5ZMupUEAf0AoUZ4ZGg=", + "dev": true, + "license": "CC-BY-4.0", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha1-HPN8hwe5Mr0a8a4iwEMuKs0ZA70=", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha1-EBXs7UdB4V0GZkqVfbv1DQQeJqw=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha1-wZ/Zvbv4WUK0/ZechNz31fB8I4c=", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", + "dev": true, + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.16", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha1-cTua+E/bAAE58EVGvUqT9ipQhdo=", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/commander/-/commander-2.20.3.tgz", + "integrity": "sha1-/UhehMA+tIgcIHIrpIA16FMa6zM=", + "dev": true, + "license": "MIT" + }, + "node_modules/compare-versions": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", + "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true, + "license": "MIT" + }, + "node_modules/concurrently": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.5.1.tgz", + "integrity": "sha512-FlSwNpGjWQfRwPLXvJ/OgysbBxPkWpiVjy1042b0U7on7S7qwwMIILRj7WTN1mTgqa582bG6NFuScOoh6Zgdag==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "date-fns": "^2.16.1", + "lodash": "^4.17.21", + "rxjs": "^6.6.3", + "spawn-command": "^0.0.2-1", + "supports-color": "^8.1.0", + "tree-kill": "^1.2.2", + "yargs": "^16.2.0" + }, + "bin": { + "concurrently": "bin/concurrently.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/concurrently/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/concurrently/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", + "dev": true + }, + "node_modules/console.table": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/console.table/-/console.table-0.10.0.tgz", + "integrity": "sha1-CRcCVYiHW+/XDPLv9L7yxuLXXQQ=", + "dev": true, + "dependencies": { + "easy-table": "1.1.0" + }, + "engines": { + "node": "> 0.10" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha1-i4K076yCUSoCuwsdzsnSxejrW/4=", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.4.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha1-r9cT/ibr0hupXOth+agRblClN9E=", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha1-2k/uhTxS9rHmk19BwaL8UL1KmYI=", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha1-9zqFudXUHQRVUcF34ogtSshXKKY=", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/date-fns": { + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.28.0.tgz", + "integrity": "sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==", + "dev": true, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/debug/-/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha1-RNLqNnm49NT/ujPwPYZfwee/SVU=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "license": "MIT" + }, + "node_modules/easy-table": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.1.0.tgz", + "integrity": "sha1-hvmrTBAvA3G3KXuSplHVgkvIy3M=", + "dev": true, + "optionalDependencies": { + "wcwidth": ">=1.0.1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.47", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/electron-to-chromium/-/electron-to-chromium-1.4.47.tgz", + "integrity": "sha1-XVU1zbyiuSZKvuTW6hIZlelVS74=", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.8.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", + "integrity": "sha1-bVUtRlzOBCP1s9cYUR6lOCansvA=", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/enhanced-resolve/node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha1-GWenPvQGCoLxKrlq+G1S/bdu7KA=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/envinfo": { + "version": "7.8.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha1-Bjd+Pl9NN5/qesWS1a2JJ+DE1HU=", + "dev": true, + "license": "MIT", + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha1-bxPbAMw4QXE32vdDZvU1yOtDjxk=", + "dev": true, + "license": "MIT" + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha1-2M/ccACWXFoBdLSoLqpcBVJ0LkA=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha1-54blmmbLkrP2wfsNUIqrF0hI9Iw=", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha1-eteWTWeauyi+5yzsY3WLHF0smSE=", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha1-LupSkHAvJquP5TcDcP+GyWXSESM=", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0=", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/events/-/events-3.3.0.tgz", + "integrity": "sha1-Mala0Kkk4tLEGagTrrLE6HjqdAA=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/execa/-/execa-5.1.1.tgz", + "integrity": "sha1-+ArZy/Qpj3vR1MlVXCHpN0HEEd0=", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/express": { + "version": "4.17.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/express/-/express-4.17.2.tgz", + "integrity": "sha1-wYNp8mUpcxm+7U5VWHU8yME2TLM=", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.4.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.9.6", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.17.2", + "serve-static": "1.14.2", + "setprototypeof": "1.2.0", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express-static-gzip": { + "version": "2.1.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/express-static-gzip/-/express-static-gzip-2.1.1.tgz", + "integrity": "sha1-7joOyj8QNIvNIUCV+7RvjQ+MtHE=", + "license": "MIT", + "dependencies": { + "serve-static": "^1.14.1" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM=", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha1-mZD306iMxan/0fF0V0UlFwDUl+I=", + "dev": true, + "license": "MIT" + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha1-t+fQAP/RGTjQ/bBTUG9uur6fWH0=", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.14.7", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", + "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "6.5.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.0.tgz", + "integrity": "sha1-AoKzNfpJWpfhZ/aQGPVm6n0qK14=", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=10", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "eslint": ">= 6", + "typescript": ">= 2.7", + "vue-template-compiler": "*", + "webpack": ">= 4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha1-ImmTZCiq1MFcfr6XeahL8LKoGBE=", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha1-WVRGDHZKjaIJS6NVS/g55rmnyG0=", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha1-rjrJLVO7Mo7+DpodlUH2rY1I4tM=", + "dev": true, + "license": "Unlicense" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha1-ilJveLj99GI7cJ4Ll1xSwkwC/Ro=", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/full-icu": { + "version": "1.4.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/full-icu/-/full-icu-1.4.0.tgz", + "integrity": "sha1-w4eCXjhys5o1t/PZV2UHJtANa38=", + "hasInstallScript": true, + "license": "Unicode-DFS-2016", + "dependencies": { + "yauzl": "^2.10.0" + }, + "bin": { + "full-icu": "node-full-icu.js", + "node-full-icu-path": "node-icu-data.js" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=", + "dev": true, + "license": "MIT" + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha1-omLY7vZ6ztV8KFKtYWdSakPL97c=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/glob/-/glob-7.2.0.tgz", + "integrity": "sha1-0VU1r3cy4C6Uj0xBYovZECk/YCM=", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ=", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha1-x1KXCHyFG5pXi9IX3VmpL1n+VG4=", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/graceful-fs": { + "version": "4.2.9", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha1-BBsF30V1Xlh6JJQiebnRExRuHJY=", + "dev": true, + "license": "ISC" + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/has/-/has-1.0.3.tgz", + "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha1-fD8oV3y8iiBziEVdvWIpXtB71ow=", + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha1-3JH8ukLk0G5Kuu0zs+ejwC9RTqA=", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha1-NxYsJfy566oublPVtNiM4X2eDCs=", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha1-tEed+KX9RPbNziQHBnVnYGPJXLQ=", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=", + "license": "ISC" + }, + "node_modules/inquirer": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.0.tgz", + "integrity": "sha512-0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.2.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/interpret": { + "version": "2.2.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha1-GnigtZZcQKVBbQB61vUK0nxBffk=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha1-v/OFQ+64mEglB5/zoqjmy9RngbM=", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true, + "license": "MIT" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.8.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha1-9Z/fynAdWHnQprEApAqhVgzichE=", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha1-ZPYeQsu7LuwgcanawLKLoeZdUIQ=", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha1-+sHj1TuXrVqdCunO8jifWBClwHc=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true, + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/iterare": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iterare/-/iterare-1.2.1.tgz", + "integrity": "sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-worker": { + "version": "27.4.6", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/jest-worker/-/jest-worker-27.4.6.tgz", + "integrity": "sha1-XS2T20GVZstoB1LKB5J4DnGzJz4=", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha1-zW/BfihQDP9WwbhsCn/UpUpzAFw=", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha1-GSA/tZmR35jjoocFDUZHzerzJJk=", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha1-fEeAWpQxmSjgV3dAXcEuH3pO4C0=", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha1-vFWyY0eTxnnsZAMJTrE2mKbsCq4=", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha1-7KKE910pZQeTCdwK2SVauy68FjI=", + "dev": true, + "license": "MIT" + }, + "node_modules/loader-runner": { + "version": "4.2.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha1-1wIjgNZtFMX7HUlriYZOvP1Hg4Q=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ=", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.4.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/memfs/-/memfs-3.4.1.tgz", + "integrity": "sha1-t4CS9Gag3OBU1j05J1skxx0/EwU=", + "dev": true, + "license": "Unlicense", + "dependencies": { + "fs-monkey": "1.0.3" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "license": "MIT" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A=", + "dev": true, + "license": "MIT" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha1-iW1Rnf6dsl/OlM63pQCRm/iB6/k=", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/mime/-/mime-1.6.0.tgz", + "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.51.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha1-2f9iRRhZsYNC2WCFDcPPt35j+ww=", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.34", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha1-WnEvnsFQNRGpRYA2QPr+CdN5PCQ=", + "license": "MIT", + "dependencies": { + "mime-db": "1.51.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/morgan": { + "version": "1.10.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha1-CRd4q8H8R801CYJGU9rh+qtrF9c=", + "dev": true, + "license": "MIT", + "dependencies": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/morgan/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/depd/-/depd-2.0.0.tgz", + "integrity": "sha1-tpYWPMdXVg0JzyLMj60Vcbeedt8=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "license": "MIT" + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs=", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha1-tKr7k+OustgXTKU88WOrfXMIMF8=", + "dev": true, + "license": "MIT" + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-releases": { + "version": "2.0.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha1-PR05XyBPHy8ppUNYuftnh2WtL8U=", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha1-t+zR5e1T2o43pV4cImnguX7XSOo=", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-hash": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha1-dysK5qqlJcOZ5Imt+tkMQD6zwo8=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4=", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE=", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha1-o0KLtwiLOmApL2aRkni3wpetTwc=", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI=", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha1-x2/Gbe5UIxyWKyK8yKcs8vmXU80=", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ=", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha1-+8EUtgykKzDZ2vWFjkvWi77bZzU=", + "dev": true, + "license": "MIT" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha1-hO0BwKe6OAr+CdkKjBgNzZ0DBDs=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha1-y1vcdP8/UYkiNur3nWi8RFZKuBw=", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha1-O6ODNzNkbZ0+SZWUbBNlpn+wekI=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM=", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha1-8Z/mnOqzEe65S0LnDowgcPm6ECU=", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.9.6", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/qs/-/qs-6.9.6.tgz", + "integrity": "sha1-Ju08gkOkMbKSSsqEzJBHHzXVoO4=", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha1-32+ENy8CcNxlzfYpE0mrekc9Tyo=", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE=", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.4.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/raw-body/-/raw-body-2.4.2.tgz", + "integrity": "sha1-uvPpwh7rztWd1lM6yHK3H3thyzI=", + "license": "MIT", + "dependencies": { + "bytes": "3.1.1", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha1-dKNwvYVxFuJFspzJc0DNQxoCpsc=", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.7.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha1-lHipahyhNbXoj8An8D7pLWxkVoY=", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve": "^1.9.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", + "dev": true + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.21.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/resolve/-/resolve-1.21.0.tgz", + "integrity": "sha1-tRrcl/NHLmpc9ERNNLyda5A3WR8=", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.8.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha1-DwB18bslRHZs9zumpuKt/ryxPy0=", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha1-w1IlhD3493bfIcV1V7wIfp39/Gk=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/rxjs": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.2.tgz", + "integrity": "sha512-PwDt186XaL3QN5qXj/H9DGyHhP3/RYYgZZwqBv9Tv8rsAaiwFH1IsJJlcgD37J7UW5a6O67qX0KWKS3/pu0m4w==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "dev": true + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=", + "license": "MIT" + }, + "node_modules/schema-utils": { + "version": "2.7.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha1-FxUfdtjq5n+793lgwzxnatn078c=", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/semver": { + "version": "7.3.5", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/semver/-/semver-7.3.5.tgz", + "integrity": "sha1-C2Ich5NI2JmOSw5L6Us/EuYBjvc=", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.17.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/send/-/send-0.17.2.tgz", + "integrity": "sha1-kmYi92YBxBgIASyL8WiP45BveCA=", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "1.8.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/ms/-/ms-2.1.3.tgz", + "integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=", + "license": "MIT" + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha1-765diPRdeSQUHai1w6en5mP+/rg=", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-static": { + "version": "1.14.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha1-ci1ilLHWJibUG0OgE+zkWY0pK/o=", + "license": "MIT", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha1-ZsmiSnP5/CjL5msJ/tPTPcrxtCQ=", + "license": "ISC" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha1-jymBrZJTH1UDWwH7IwdppA4C76M=", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo=", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.6", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha1-JOYwxLDwP+pEaivSmeYrSmyo0K8=", + "dev": true, + "license": "ISC" + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha1-OZO9hzv8SEecyp6jpUeDXHwVSzQ=", + "dev": true, + "license": "MIT" + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha1-BP58f54e0tZiIzwoyys1ufY/bk8=", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", + "dev": true + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha1-ibhS+y/L6Tb29LMYevsKEsGrWK0=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha1-btpL00SjyUrqN21MwxvHcxEDngk=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha1-ofzMBrWNth/XpF2i2kT186Pme6I=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.10.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/terser/-/terser-5.10.0.tgz", + "integrity": "sha1-uGOQgJwDiRBesKC2I5dWMJbdr8w=", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "acorn": "^8.5.0" + }, + "peerDependenciesMeta": { + "acorn": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/terser-webpack-plugin/-/terser-webpack-plugin-5.3.0.tgz", + "integrity": "sha1-IWQTJkhuz5HYBUFhyBbkZENbrp8=", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-worker": "^27.4.1", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha1-vHTEtraZXB2I92qLd76nIZ4MgoE=", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha1-UwL4FpAxc1ImVECS5kmB91F1A4M=", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha1-O+NDIaiKgg7RvYDfqjPkefu43TU=", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "dev": true + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-loader": { + "version": "9.2.6", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/ts-loader/-/ts-loader-9.2.6.tgz", + "integrity": "sha1-mTfE3QoePbu15DP4ECpmAcZhXXQ=", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/tslib": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", + "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==", + "dev": true + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha1-TlUs0F3wlGfcvE73Od6J8s83wTE=", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typescript": { + "version": "4.5.4", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/typescript/-/typescript-4.5.4.tgz", + "integrity": "sha1-oX06AmO/XIcjucUvQ8UITt8Twug=", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha1-daSYTv7cSwiXXFrrc/Uw0C3yVxc=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha1-mxpSWVIlhZ5V9mnZKPiMbFfyp34=", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/watchpack": { + "version": "2.3.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/watchpack/-/watchpack-2.3.1.tgz", + "integrity": "sha1-QgDZRHtAEVbuyndn7mEPiAm8nSU=", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "dev": true + }, + "node_modules/webpack": { + "version": "5.66.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/webpack/-/webpack-5.66.0.tgz", + "integrity": "sha1-eJvzYof0B/ySs+LW+Xjd/xv8Lbs=", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.3", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.3.1", + "webpack-sources": "^3.2.2" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "4.9.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/webpack-cli/-/webpack-cli-4.9.1.tgz", + "integrity": "sha1-tkvoJeLRsTDyhcMUyqOxuppGMrM=", + "dev": true, + "license": "MIT", + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.1.0", + "@webpack-cli/info": "^1.4.0", + "@webpack-cli/serve": "^1.6.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "execa": "^5.0.0", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "@webpack-cli/migrate": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/commander/-/commander-7.2.0.tgz", + "integrity": "sha1-o2y1fQtQHOEI5NIFWaFQo5HZerc=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-manifest-plugin": { + "version": "4.1.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz", + "integrity": "sha1-EPjb9HFP+TohXVpFvMQW2AUG+U8=", + "dev": true, + "license": "MIT", + "dependencies": { + "tapable": "^2.0.0", + "webpack-sources": "^2.2.0" + }, + "engines": { + "node": ">=12.22.0" + }, + "peerDependencies": { + "webpack": "^4.44.2 || ^5.47.0" + } + }, + "node_modules/webpack-manifest-plugin/node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha1-GWenPvQGCoLxKrlq+G1S/bdu7KA=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-manifest-plugin/node_modules/webpack-sources": { + "version": "2.3.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/webpack-sources/-/webpack-sources-2.3.1.tgz", + "integrity": "sha1-Vw3grxY5Sf4nIjPCzv4bVvdFEf0=", + "dev": true, + "license": "MIT", + "dependencies": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-merge": { + "version": "5.8.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha1-Kznb8ir4d3atdEw5AiNzHTCmj2E=", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha1-LU2quEUf1LJAzCcFX/agwszqDN4=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha1-vHTEtraZXB2I92qLd76nIZ4MgoE=", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack/node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha1-GWenPvQGCoLxKrlq+G1S/bdu7KA=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/which/-/which-2.0.2.tgz", + "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wildcard": { + "version": "2.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha1-p30g5SAMb6qsl55LOq3Hs91/j+w=", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true, + "license": "ISC" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=", + "dev": true, + "license": "ISC" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha1-IwHF/78StGfejaIzOkWeKeeSDks=", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha1-REFra9diS5mPWxr11HCFbEATh4k=", + "dev": true, + "requires": { + "@babel/highlight": "^7.16.7" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha1-6MYCQ4xKgZV1EkPakDHRYH0kfK0=", + "dev": true + }, + "@babel/highlight": { + "version": "7.16.7", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@babel/highlight/-/highlight-7.16.7.tgz", + "integrity": "sha1-gaAdfWdQRvDZb4JFDZ2VeL39aws=", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@discoveryjs/json-ext": { + "version": "0.5.6", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz", + "integrity": "sha1-1eBwbPjGrNjGAy+NVAcK8mG7uy8=", + "dev": true + }, + "@nestjs/common": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-8.2.5.tgz", + "integrity": "sha512-8VOZmHcCyhBtfvxehDfudsCrNghUoqDpZA5W8d/PUhMgz4Y1eT0M2ENBIuxr3C3j1vLypFOo30La2ymfQlOC8Q==", + "dev": true, + "requires": { + "axios": "0.24.0", + "iterare": "1.2.1", + "tslib": "2.3.1", + "uuid": "8.3.2" + }, + "dependencies": { + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "dev": true + } + } + }, + "@nestjs/core": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-8.2.5.tgz", + "integrity": "sha512-R0vp0VlAQFP7qBTZMzMspwOCO6MpsMJON/MsrfHVGgZS5Sd5DInfboWhe2COPnAr+VAT0o4FAKObW08Pdb5hMg==", + "dev": true, + "requires": { + "@nuxtjs/opencollective": "0.3.2", + "fast-safe-stringify": "2.1.1", + "iterare": "1.2.1", + "object-hash": "2.2.0", + "path-to-regexp": "3.2.0", + "tslib": "2.3.1", + "uuid": "8.3.2" + }, + "dependencies": { + "path-to-regexp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.2.0.tgz", + "integrity": "sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==", + "dev": true + }, + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "dev": true + } + } + }, + "@nuxtjs/opencollective": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@nuxtjs/opencollective/-/opencollective-0.3.2.tgz", + "integrity": "sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "consola": "^2.15.0", + "node-fetch": "^2.6.1" + } + }, + "@openapitools/openapi-generator-cli": { + "version": "2.4.25", + "resolved": "https://registry.npmjs.org/@openapitools/openapi-generator-cli/-/openapi-generator-cli-2.4.25.tgz", + "integrity": "sha512-n2RExPLkscjgjryEW+SbhJNs22LHsCLIlBtD5FaZsW84tTcii2YcbyHOIfz9xAoNKbpshk2hgxjtnXqTK92mGg==", + "dev": true, + "requires": { + "@nestjs/common": "8.2.5", + "@nestjs/core": "8.2.5", + "@nuxtjs/opencollective": "0.3.2", + "chalk": "4.1.2", + "commander": "8.3.0", + "compare-versions": "3.6.0", + "concurrently": "6.5.1", + "console.table": "0.10.0", + "fs-extra": "10.0.0", + "glob": "7.1.6", + "inquirer": "8.2.0", + "lodash": "4.17.21", + "reflect-metadata": "0.1.13", + "rxjs": "7.5.2", + "tslib": "2.0.3" + }, + "dependencies": { + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true + }, + "fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "@types/body-parser": { + "version": "1.19.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha1-rqIFnii3ZYY5CBNHrE+rPeFm5vA=", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.35", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha1-X89q5EXkAh0fwiGaSHPMc6O7KtE=", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/eslint": { + "version": "8.2.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@types/eslint/-/eslint-8.2.2.tgz", + "integrity": "sha1-tk29tksZV8/IppjGgpf8+Jg+lMc=", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha1-EluIUEth48i8b4cIggAyUwBcMiQ=", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.50", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@types/estree/-/estree-0.0.50.tgz", + "integrity": "sha1-Hgyqk2TT/M0pMcPtlv2+ql1MyoM=", + "dev": true + }, + "@types/express": { + "version": "4.17.13", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@types/express/-/express-4.17.13.tgz", + "integrity": "sha1-p24plXKJmbq1GjP6vOHXBaNwkDQ=", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.28", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", + "integrity": "sha1-xH3vnzTsgdxjKNCxtTA9HsmNhrg=", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "@types/json-schema": { + "version": "7.0.9", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha1-l+3JA36gw4WFMgsolk3eOznkZg0=", + "dev": true + }, + "@types/mime": { + "version": "1.3.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha1-k+Jb+e51/g/YC1lLxP6w6GIRG1o=", + "dev": true + }, + "@types/morgan": { + "version": "1.9.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@types/morgan/-/morgan-1.9.3.tgz", + "integrity": "sha1-rgQYDf8CxDcxK8DPseKWAIay9UA=", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/node": { + "version": "17.0.9", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@types/node/-/node-17.0.9.tgz", + "integrity": "sha1-C38WGvtbHMElGNKbLNxxddVJBig=", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-L4u0QUNNFjs1+4/9zNcTiSf/uMA=", + "dev": true + }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha1-Y7t9Bn2xB8weRXwwO8JdUR/r9ss=", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.4", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha1-zWZ7z90CUhOq+3ylkVqTJZCs3Nw=", + "dev": true + }, + "@types/serve-static": { + "version": "1.13.10", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha1-9eDOh5fS18xevtpIpSyWxPpHqNk=", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha1-K/12fq4aaZb0Mv9+jX/HVnnAtqc=", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha1-9sYacF8P16auyqToGY8j2dwXnk8=", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha1-GmMZLYeI5cASgAump6RscFKI/RY=", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha1-gyqQDrREiEzemnytRn+BUA9eWrU=", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha1-ZNgdohn7u6HjvRv8dPboxOEKYq4=", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha1-8ygkHkHnsZnQsgwY6IQpxEMyleE=", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha1-Ie4GWntjXzGec48N1zv72igcCXo=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha1-ljkp6bvQVwnn4SJDoJkYCBKZJhQ=", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha1-zoFLRVdOk9drrh+yZEq5zdlSeqU=", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha1-0fi3ZDaefG5rrjUOhU3smlnwo/8=", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha1-rSBuv0v5WgWM6YgKjAksXeyBk9Y=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha1-hsXqMEhJdZt9iMR6MvTwOa48j3Y=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha1-ZXtMIgL0zzs0X4pMZGHIwkGJhfI=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha1-hspzRTT0F+m9PGfHocddi+QfsZk=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha1-0Mc77ajuxUJvEK6O9VzuXnCEwvA=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webpack-cli/configtest": { + "version": "1.1.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@webpack-cli/configtest/-/configtest-1.1.0.tgz", + "integrity": "sha1-g0K+8Lrft9/TtXbyV0q4DHJb4EM=", + "dev": true, + "requires": {} + }, + "@webpack-cli/info": { + "version": "1.4.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@webpack-cli/info/-/info-1.4.0.tgz", + "integrity": "sha1-uRecMierCcu7FJqnM0dfz5lDAiM=", + "dev": true, + "requires": { + "envinfo": "^7.7.3" + } + }, + "@webpack-cli/serve": { + "version": "1.6.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@webpack-cli/serve/-/serve-1.6.0.tgz", + "integrity": "sha1-LCdaoFyJXszrv8NM+yI8bovVkaI=", + "dev": true, + "requires": {} + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha1-7vAUoxRa5Hehy8AM0eVSM23Ot5A=", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha1-0pHGpOl5ibXGHZrPOWrk/hM6cY0=", + "dev": true + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha1-UxvHJlF6OytB+FACHGzBXqq1B80=", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "8.7.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha1-kJUf3g+PCd+TVJSB5fwUFEW3kc8=", + "dev": true + }, + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha1-uitZOc5iwjjbbZPYHJsRGym4Vek=", + "dev": true, + "requires": {} + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha1-MfKdpatuANHC0yms97WSlhTVAU0=", + "dev": true, + "requires": {} + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha1-wFV8CWrzLxBhmPT04qODU343hxY=", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha1-YCzUtG6EStTv/JKoARo8RuAjjcI=", + "dev": true + }, + "axios": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", + "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", + "dev": true, + "requires": { + "follow-redirects": "^1.14.4" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4=", + "dev": true + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "basic-auth": { + "version": "2.0.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha1-uZgnm/R844NEtPPPkW1Gebv1Hjo=", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=", + "dev": true + } + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha1-dfUC7q+f/eQvyYgpZFvk6na9ni0=", + "dev": true + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "body-parser": { + "version": "1.19.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/body-parser/-/body-parser-1.19.1.tgz", + "integrity": "sha1-FJmruqknSvPsyfbxA5bJlZQ+MdQ=", + "requires": { + "bytes": "3.1.1", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.9.6", + "raw-body": "2.4.2", + "type-is": "~1.6.18" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/braces/-/braces-3.0.2.tgz", + "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.19.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha1-SsBDWzWrZViWwx1TAYtt1enkyaM=", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha1-KxRqb9cugLT1XSVfNe1Zo6mkG9U=", + "dev": true + }, + "bytes": { + "version": "3.1.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha1-PwGCkctMutmsy25pcLypyIieh5o=" + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M=", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001300", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/caniuse-lite/-/caniuse-lite-1.0.30001300.tgz", + "integrity": "sha1-EatsV9Prb5ZMupUEAf0AoUZ4ZGg=", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha1-HPN8hwe5Mr0a8a4iwEMuKs0ZA70=", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha1-EBXs7UdB4V0GZkqVfbv1DQQeJqw=", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "dev": true + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha1-wZ/Zvbv4WUK0/ZechNz31fB8I4c=", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", + "dev": true + }, + "colorette": { + "version": "2.0.16", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha1-cTua+E/bAAE58EVGvUqT9ipQhdo=", + "dev": true + }, + "commander": { + "version": "2.20.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/commander/-/commander-2.20.3.tgz", + "integrity": "sha1-/UhehMA+tIgcIHIrpIA16FMa6zM=", + "dev": true + }, + "compare-versions": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", + "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concurrently": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.5.1.tgz", + "integrity": "sha512-FlSwNpGjWQfRwPLXvJ/OgysbBxPkWpiVjy1042b0U7on7S7qwwMIILRj7WTN1mTgqa582bG6NFuScOoh6Zgdag==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "date-fns": "^2.16.1", + "lodash": "^4.17.21", + "rxjs": "^6.6.3", + "spawn-command": "^0.0.2-1", + "supports-color": "^8.1.0", + "tree-kill": "^1.2.2", + "yargs": "^16.2.0" + }, + "dependencies": { + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", + "dev": true + }, + "console.table": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/console.table/-/console.table-0.10.0.tgz", + "integrity": "sha1-CRcCVYiHW+/XDPLv9L7yxuLXXQQ=", + "dev": true, + "requires": { + "easy-table": "1.1.0" + } + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha1-i4K076yCUSoCuwsdzsnSxejrW/4=", + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=" + }, + "cookie": { + "version": "0.4.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha1-r9cT/ibr0hupXOth+agRblClN9E=" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha1-2k/uhTxS9rHmk19BwaL8UL1KmYI=", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha1-9zqFudXUHQRVUcF34ogtSshXKKY=", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "date-fns": { + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.28.0.tgz", + "integrity": "sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/debug/-/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "requires": { + "ms": "2.0.0" + } + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha1-RNLqNnm49NT/ujPwPYZfwee/SVU=", + "dev": true + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "easy-table": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.1.0.tgz", + "integrity": "sha1-hvmrTBAvA3G3KXuSplHVgkvIy3M=", + "dev": true, + "requires": { + "wcwidth": ">=1.0.1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "electron-to-chromium": { + "version": "1.4.47", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/electron-to-chromium/-/electron-to-chromium-1.4.47.tgz", + "integrity": "sha1-XVU1zbyiuSZKvuTW6hIZlelVS74=", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "enhanced-resolve": { + "version": "5.8.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", + "integrity": "sha1-bVUtRlzOBCP1s9cYUR6lOCansvA=", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "dependencies": { + "tapable": { + "version": "2.2.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha1-GWenPvQGCoLxKrlq+G1S/bdu7KA=", + "dev": true + } + } + }, + "envinfo": { + "version": "7.8.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha1-Bjd+Pl9NN5/qesWS1a2JJ+DE1HU=", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-module-lexer": { + "version": "0.9.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha1-bxPbAMw4QXE32vdDZvU1yOtDjxk=", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha1-2M/ccACWXFoBdLSoLqpcBVJ0LkA=", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha1-54blmmbLkrP2wfsNUIqrF0hI9Iw=", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha1-eteWTWeauyi+5yzsY3WLHF0smSE=", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha1-LupSkHAvJquP5TcDcP+GyWXSESM=", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0=", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "events": { + "version": "3.3.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/events/-/events-3.3.0.tgz", + "integrity": "sha1-Mala0Kkk4tLEGagTrrLE6HjqdAA=", + "dev": true + }, + "execa": { + "version": "5.1.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/execa/-/execa-5.1.1.tgz", + "integrity": "sha1-+ArZy/Qpj3vR1MlVXCHpN0HEEd0=", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "express": { + "version": "4.17.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/express/-/express-4.17.2.tgz", + "integrity": "sha1-wYNp8mUpcxm+7U5VWHU8yME2TLM=", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.4.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.9.6", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.17.2", + "serve-static": "1.14.2", + "setprototypeof": "1.2.0", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + } + }, + "express-static-gzip": { + "version": "2.1.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/express-static-gzip/-/express-static-gzip-2.1.1.tgz", + "integrity": "sha1-7joOyj8QNIvNIUCV+7RvjQ+MtHE=", + "requires": { + "serve-static": "^1.14.1" + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM=", + "dev": true + }, + "fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true + }, + "fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha1-mZD306iMxan/0fF0V0UlFwDUl+I=", + "dev": true + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "requires": { + "pend": "~1.2.0" + } + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha1-t+fQAP/RGTjQ/bBTUG9uur6fWH0=", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "follow-redirects": { + "version": "1.14.7", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", + "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==", + "dev": true + }, + "fork-ts-checker-webpack-plugin": { + "version": "6.5.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.0.tgz", + "integrity": "sha1-AoKzNfpJWpfhZ/aQGPVm6n0qK14=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha1-ImmTZCiq1MFcfr6XeahL8LKoGBE=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha1-WVRGDHZKjaIJS6NVS/g55rmnyG0=", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-monkey": { + "version": "1.0.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha1-rjrJLVO7Mo7+DpodlUH2rY1I4tM=", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha1-ilJveLj99GI7cJ4Ll1xSwkwC/Ro=", + "dev": true, + "optional": true + }, + "full-icu": { + "version": "1.4.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/full-icu/-/full-icu-1.4.0.tgz", + "integrity": "sha1-w4eCXjhys5o1t/PZV2UHJtANa38=", + "requires": { + "yauzl": "^2.10.0" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha1-omLY7vZ6ztV8KFKtYWdSakPL97c=", + "dev": true + }, + "glob": { + "version": "7.2.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/glob/-/glob-7.2.0.tgz", + "integrity": "sha1-0VU1r3cy4C6Uj0xBYovZECk/YCM=", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ=", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha1-x1KXCHyFG5pXi9IX3VmpL1n+VG4=", + "dev": true + }, + "graceful-fs": { + "version": "4.2.9", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha1-BBsF30V1Xlh6JJQiebnRExRuHJY=", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/has/-/has-1.0.3.tgz", + "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "dev": true + }, + "http-errors": { + "version": "1.8.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha1-fD8oV3y8iiBziEVdvWIpXtB71ow=", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha1-3JH8ukLk0G5Kuu0zs+ejwC9RTqA=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha1-NxYsJfy566oublPVtNiM4X2eDCs=", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-local": { + "version": "3.1.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha1-tEed+KX9RPbNziQHBnVnYGPJXLQ=", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=" + }, + "inquirer": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.0.tgz", + "integrity": "sha512-0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.2.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + } + }, + "interpret": { + "version": "2.2.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha1-GnigtZZcQKVBbQB61vUK0nxBffk=", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha1-v/OFQ+64mEglB5/zoqjmy9RngbM=" + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.8.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha1-9Z/fynAdWHnQprEApAqhVgzichE=", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha1-ZPYeQsu7LuwgcanawLKLoeZdUIQ=", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha1-+sHj1TuXrVqdCunO8jifWBClwHc=", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "iterare": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iterare/-/iterare-1.2.1.tgz", + "integrity": "sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==", + "dev": true + }, + "jest-worker": { + "version": "27.4.6", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/jest-worker/-/jest-worker-27.4.6.tgz", + "integrity": "sha1-XS2T20GVZstoB1LKB5J4DnGzJz4=", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha1-zW/BfihQDP9WwbhsCn/UpUpzAFw=", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha1-GSA/tZmR35jjoocFDUZHzerzJJk=", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha1-fEeAWpQxmSjgV3dAXcEuH3pO4C0=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=", + "dev": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha1-vFWyY0eTxnnsZAMJTrE2mKbsCq4=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", + "dev": true + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha1-7KKE910pZQeTCdwK2SVauy68FjI=", + "dev": true + }, + "loader-runner": { + "version": "4.2.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha1-1wIjgNZtFMX7HUlriYZOvP1Hg4Q=", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ=", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "memfs": { + "version": "3.4.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/memfs/-/memfs-3.4.1.tgz", + "integrity": "sha1-t4CS9Gag3OBU1j05J1skxx0/EwU=", + "dev": true, + "requires": { + "fs-monkey": "1.0.3" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A=", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha1-iW1Rnf6dsl/OlM63pQCRm/iB6/k=", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/mime/-/mime-1.6.0.tgz", + "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=" + }, + "mime-db": { + "version": "1.51.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha1-2f9iRRhZsYNC2WCFDcPPt35j+ww=" + }, + "mime-types": { + "version": "2.1.34", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha1-WnEvnsFQNRGpRYA2QPr+CdN5PCQ=", + "requires": { + "mime-db": "1.51.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "morgan": { + "version": "1.10.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha1-CRd4q8H8R801CYJGU9rh+qtrF9c=", + "dev": true, + "requires": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/depd/-/depd-2.0.0.tgz", + "integrity": "sha1-tpYWPMdXVg0JzyLMj60Vcbeedt8=", + "dev": true + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs=" + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha1-tKr7k+OustgXTKU88WOrfXMIMF8=", + "dev": true + }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "node-releases": { + "version": "2.0.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha1-PR05XyBPHy8ppUNYuftnh2WtL8U=", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha1-t+zR5e1T2o43pV4cImnguX7XSOo=", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "object-hash": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha1-dysK5qqlJcOZ5Imt+tkMQD6zwo8=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4=", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "requires": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE=", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha1-o0KLtwiLOmApL2aRkni3wpetTwc=", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI=", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha1-x2/Gbe5UIxyWKyK8yKcs8vmXU80=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ=" + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha1-+8EUtgykKzDZ2vWFjkvWi77bZzU=", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha1-hO0BwKe6OAr+CdkKjBgNzZ0DBDs=", + "dev": true + }, + "pend": { + "version": "1.2.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha1-y1vcdP8/UYkiNur3nWi8RFZKuBw=", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha1-O6ODNzNkbZ0+SZWUbBNlpn+wekI=", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM=", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha1-8Z/mnOqzEe65S0LnDowgcPm6ECU=", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=", + "dev": true + }, + "qs": { + "version": "6.9.6", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/qs/-/qs-6.9.6.tgz", + "integrity": "sha1-Ju08gkOkMbKSSsqEzJBHHzXVoO4=" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha1-32+ENy8CcNxlzfYpE0mrekc9Tyo=", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE=" + }, + "raw-body": { + "version": "2.4.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/raw-body/-/raw-body-2.4.2.tgz", + "integrity": "sha1-uvPpwh7rztWd1lM6yHK3H3thyzI=", + "requires": { + "bytes": "3.1.1", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha1-dKNwvYVxFuJFspzJc0DNQxoCpsc=", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "rechoir": { + "version": "0.7.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha1-lHipahyhNbXoj8An8D7pLWxkVoY=", + "dev": true, + "requires": { + "resolve": "^1.9.0" + } + }, + "reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "resolve": { + "version": "1.21.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/resolve/-/resolve-1.21.0.tgz", + "integrity": "sha1-tRrcl/NHLmpc9ERNNLyda5A3WR8=", + "dev": true, + "requires": { + "is-core-module": "^2.8.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha1-DwB18bslRHZs9zumpuKt/ryxPy0=", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha1-w1IlhD3493bfIcV1V7wIfp39/Gk=", + "dev": true + } + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY=", + "dev": true + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true + }, + "rxjs": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.2.tgz", + "integrity": "sha512-PwDt186XaL3QN5qXj/H9DGyHhP3/RYYgZZwqBv9Tv8rsAaiwFH1IsJJlcgD37J7UW5a6O67qX0KWKS3/pu0m4w==", + "dev": true, + "requires": { + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "dev": true + } + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=" + }, + "schema-utils": { + "version": "2.7.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha1-FxUfdtjq5n+793lgwzxnatn078c=", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/semver/-/semver-7.3.5.tgz", + "integrity": "sha1-C2Ich5NI2JmOSw5L6Us/EuYBjvc=", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "send": { + "version": "0.17.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/send/-/send-0.17.2.tgz", + "integrity": "sha1-kmYi92YBxBgIASyL8WiP45BveCA=", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "1.8.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/ms/-/ms-2.1.3.tgz", + "integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=" + } + } + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha1-765diPRdeSQUHai1w6en5mP+/rg=", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-static": { + "version": "1.14.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha1-ci1ilLHWJibUG0OgE+zkWY0pK/o=", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.2" + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha1-ZsmiSnP5/CjL5msJ/tPTPcrxtCQ=" + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha1-jymBrZJTH1UDWwH7IwdppA4C76M=", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo=", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI=", + "dev": true + }, + "signal-exit": { + "version": "3.0.6", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha1-JOYwxLDwP+pEaivSmeYrSmyo0K8=", + "dev": true + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha1-OZO9hzv8SEecyp6jpUeDXHwVSzQ=", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha1-BP58f54e0tZiIzwoyys1ufY/bk8=", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha1-ibhS+y/L6Tb29LMYevsKEsGrWK0=", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha1-btpL00SjyUrqN21MwxvHcxEDngk=", + "dev": true + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha1-ofzMBrWNth/XpF2i2kT186Pme6I=", + "dev": true + }, + "terser": { + "version": "5.10.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/terser/-/terser-5.10.0.tgz", + "integrity": "sha1-uGOQgJwDiRBesKC2I5dWMJbdr8w=", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha1-UwL4FpAxc1ImVECS5kmB91F1A4M=", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "5.3.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/terser-webpack-plugin/-/terser-webpack-plugin-5.3.0.tgz", + "integrity": "sha1-IWQTJkhuz5HYBUFhyBbkZENbrp8=", + "dev": true, + "requires": { + "jest-worker": "^27.4.1", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.2" + }, + "dependencies": { + "schema-utils": { + "version": "3.1.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha1-vHTEtraZXB2I92qLd76nIZ4MgoE=", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha1-O+NDIaiKgg7RvYDfqjPkefu43TU=" + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "dev": true + }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true + }, + "ts-loader": { + "version": "9.2.6", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/ts-loader/-/ts-loader-9.2.6.tgz", + "integrity": "sha1-mTfE3QoePbu15DP4ECpmAcZhXXQ=", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + } + }, + "tslib": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", + "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==", + "dev": true + }, + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha1-TlUs0F3wlGfcvE73Od6J8s83wTE=", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typescript": { + "version": "4.5.4", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/typescript/-/typescript-4.5.4.tgz", + "integrity": "sha1-oX06AmO/XIcjucUvQ8UITt8Twug=", + "dev": true + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha1-daSYTv7cSwiXXFrrc/Uw0C3yVxc=", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha1-mxpSWVIlhZ5V9mnZKPiMbFfyp34=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "watchpack": { + "version": "2.3.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/watchpack/-/watchpack-2.3.1.tgz", + "integrity": "sha1-QgDZRHtAEVbuyndn7mEPiAm8nSU=", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "dev": true + }, + "webpack": { + "version": "5.66.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/webpack/-/webpack-5.66.0.tgz", + "integrity": "sha1-eJvzYof0B/ySs+LW+Xjd/xv8Lbs=", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.3", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.3.1", + "webpack-sources": "^3.2.2" + }, + "dependencies": { + "schema-utils": { + "version": "3.1.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha1-vHTEtraZXB2I92qLd76nIZ4MgoE=", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha1-GWenPvQGCoLxKrlq+G1S/bdu7KA=", + "dev": true + } + } + }, + "webpack-cli": { + "version": "4.9.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/webpack-cli/-/webpack-cli-4.9.1.tgz", + "integrity": "sha1-tkvoJeLRsTDyhcMUyqOxuppGMrM=", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.1.0", + "@webpack-cli/info": "^1.4.0", + "@webpack-cli/serve": "^1.6.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "execa": "^5.0.0", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/commander/-/commander-7.2.0.tgz", + "integrity": "sha1-o2y1fQtQHOEI5NIFWaFQo5HZerc=", + "dev": true + } + } + }, + "webpack-manifest-plugin": { + "version": "4.1.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz", + "integrity": "sha1-EPjb9HFP+TohXVpFvMQW2AUG+U8=", + "dev": true, + "requires": { + "tapable": "^2.0.0", + "webpack-sources": "^2.2.0" + }, + "dependencies": { + "tapable": { + "version": "2.2.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha1-GWenPvQGCoLxKrlq+G1S/bdu7KA=", + "dev": true + }, + "webpack-sources": { + "version": "2.3.1", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/webpack-sources/-/webpack-sources-2.3.1.tgz", + "integrity": "sha1-Vw3grxY5Sf4nIjPCzv4bVvdFEf0=", + "dev": true, + "requires": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + } + } + } + }, + "webpack-merge": { + "version": "5.8.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha1-Kznb8ir4d3atdEw5AiNzHTCmj2E=", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha1-LU2quEUf1LJAzCcFX/agwszqDN4=", + "dev": true + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/which/-/which-2.0.2.tgz", + "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wildcard": { + "version": "2.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha1-p30g5SAMb6qsl55LOq3Hs91/j+w=", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha1-IwHF/78StGfejaIzOkWeKeeSDks=", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://artifactory.tutu.ru:443/artifactory/api/npm/npm-common/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..7a12f42 --- /dev/null +++ b/package.json @@ -0,0 +1,45 @@ +{ + "name": "nodejs-api-boilerplate", + "version": "1.0.0", + "description": "Node.js API Boilerplate", + "license": "MIT", + "private": true, + "repository": { + "url": "https://github.com/bungu/nodejs-api-boilerplate" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "build": "./node_modules/.bin/webpack --mode=production --config=config/webpack/server.prod.js", + "dev:build": "./node_modules/.bin/webpack --mode=development --config=config/webpack/server.dev.js", + "docker:build": "docker build . -t bungubot/nodejs-api-boilerplate", + "docker:run": "docker run --name nodejs-api-boilerplate --rm -p 8080:8080 -it bungubot/nodejs-api-boilerplate", + "docgen": "rm -rf docs && npm run docgen:html && npm run docgen:md", + "docgen:html": "openapi-generator-cli generate -i ./openapi.json -o docs/html -g html -p=generateAliasAsModel=true --global-property skipFormModel=false", + "docgen:md": "openapi-generator-cli generate -i ./openapi.json -o docs/md -g markdown -p=generateAliasAsModel=true --global-property skipFormModel=false", + "start": "node --icu-data-dir=node_modules/full-icu dist/server.js" + }, + "devDependencies": { + "@openapitools/openapi-generator-cli": "^2.4.25", + "@types/express": "^4.17.13", + "@types/morgan": "^1.9.3", + "fork-ts-checker-webpack-plugin": "^6.5.0", + "morgan": "^1.10.0", + "terser-webpack-plugin": "^5.3.0", + "ts-loader": "^9.2.6", + "typescript": "^4.5.4", + "webpack": "^5.66.0", + "webpack-cli": "^4.9.1", + "webpack-manifest-plugin": "^4.1.1" + }, + "dependencies": { + "express": "^4.17.2", + "express-static-gzip": "^2.1.1", + "full-icu": "^1.4.0" + }, + "main": "dist/server.js", + "directories": { + "src": "src" + }, + "author": "Artem Nechunaev ", + "sideEffects": false +} diff --git a/src/api/index.ts b/src/api/index.ts new file mode 100644 index 0000000..d2a1952 --- /dev/null +++ b/src/api/index.ts @@ -0,0 +1,11 @@ +import { Router } from 'express'; +import notAllowedMiddleware from '../middlewares/invalidRequest'; +import V1Router from './v1'; + +const ApiRouter = Router(); + +ApiRouter.route('/').all(notAllowedMiddleware); + +ApiRouter.use('/v1', V1Router); + +export default ApiRouter; diff --git a/src/api/v1/creatures/index.ts b/src/api/v1/creatures/index.ts new file mode 100644 index 0000000..339954f --- /dev/null +++ b/src/api/v1/creatures/index.ts @@ -0,0 +1,41 @@ +import { Router } from 'express'; +import asyncHandler from '../../../lib/asyncHandler'; +import Creature, { CreatureKind } from '../../../models/Creature'; + +const CreaturesApi = Router(); + +CreaturesApi.route('/') + .get( + asyncHandler(async (_req, res) => { + // const { offset = '0', limit = '100' } = req.query; + + const creatureList = [ + new Creature(0, CreatureKind.Human, 'Artem', 'Well, hello there!'), + new Creature(1, CreatureKind.Dog, 'Clifford', 'Woof!'), + ]; + return res.status(200).json(creatureList); + }), + ) + .post( + asyncHandler(async (_req, res) => { + const creature = new Creature(0, CreatureKind.Human, 'Artem', 'Well, hello there!'); + + res.status(200).json(creature); + }), + ); + +CreaturesApi.route('/*') + .get( + asyncHandler(async (_req, res) => { + const creature = new Creature(0, CreatureKind.Human, 'Artem', 'Well, hello there!'); + return res.status(200).json(creature); + }), + ) + .post( + asyncHandler(async (_req, res) => { + const creature = new Creature(0, CreatureKind.Human, 'Artem', 'Well, hello there!'); + return res.status(200).json(creature); + }), + ); + +export default CreaturesApi; \ No newline at end of file diff --git a/src/api/v1/index.ts b/src/api/v1/index.ts new file mode 100644 index 0000000..3baaf27 --- /dev/null +++ b/src/api/v1/index.ts @@ -0,0 +1,10 @@ +import { Router } from 'express'; +import notAllowedMiddleware from '../../middlewares/invalidRequest'; +import Creatures from './creatures'; + +const V1Router = Router(); + +V1Router.route('/').all(notAllowedMiddleware); +V1Router.use('/creatures', Creatures); + +export default V1Router; diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..49a67e0 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,71 @@ +import * as morgan from 'morgan'; +import * as Express from 'express'; +import invalidRequest from './middlewares/invalidRequest'; +import errorRequestHandler from './middlewares/errorRequestHandler'; +import healthcheck from './middlewares/healthcheck'; +import openapiSchema from './middlewares/openapiSchema'; +import attachDBConnection from './middlewares/attachDBConnection'; +import getShutdownHandler from './lib/gracefulShutdown'; +import { connect as databaseConnect } from './lib/database'; +import Api from './api'; + +const PORT = process.env.PORT || 8080; +const HOST = process.env.HOST || '0.0.0.0'; +const DB_HOST = process.env.DB_HOST || '0.0.0.0:27017'; +const DB_USER = process.env.DB_USER || 'anonymous'; +const DB_ACCESS_TOKEN = process.env.DB_ACCESS_TOKEN || '1234567890'; +const app = Express(); +let shutdown: () => void = () => {}; + +databaseConnect(DB_HOST, DB_USER, DB_ACCESS_TOKEN) + .then(db => { + app.disable('x-powered-by'); + app.all('/healthcheck', healthcheck); + app.use(morgan('tiny')); + + // Static files + app.use('/', Express.static('static')); + app.use('/docs', Express.static('docs/html')); + app.use('/openapi.json', openapiSchema); + + // API + app.use('/api/v1/*', attachDBConnection(db)); + app.use('/api', Api); + + // Errors + app.use(errorRequestHandler); + app.use(invalidRequest); + + const server = app.listen(+PORT, HOST, function onAppStart() { + console.log(`==> Server @ http://${HOST}:${PORT}`); + }); + shutdown = getShutdownHandler(server); + }) + .catch(dbConnectionError => { + // retry or exit + console.error("==> Could not connect to database", dbConnectionError); + process.exit(1); + }); + + +process.on('SIGINT', function onSigInt () { + console.info('\n==> Got SIGINT. Graceful shutdown @ ' + (new Date()).toISOString()); + shutdown(); +}); + +process.on('SIGTERM', function onSigTerm () { + console.info('\n==> Got SIGTERM. Graceful shutdown @ ' + (new Date()).toISOString()); + shutdown(); +}); + +process.on('unhandledRejection', function unhandledRejectionHandler(reason, promise) { + console.error("Unhandled rejection at:\n", promise, "\n\nReason: ", reason); + process.exitCode = 1; + shutdown(); +}); + +process.on('uncaughtException', function uncaughtExceptionHandler(error) { + console.error("Uncaught exception:\n", error); + process.exitCode = 1; + shutdown(); +}); diff --git a/src/lib/asyncHandler.ts b/src/lib/asyncHandler.ts new file mode 100644 index 0000000..6406f16 --- /dev/null +++ b/src/lib/asyncHandler.ts @@ -0,0 +1,13 @@ +import { Request, Response, NextFunction, RequestHandler } from 'express'; + +function asyncHandler(handler: RequestHandler) { + return function asyncHandlerMiddleware( + req: Request, + res: Response, + next: NextFunction, + ) { + return Promise.resolve(handler(req, res, next)).catch(next); + }; +} + +export default asyncHandler; diff --git a/src/lib/database.ts b/src/lib/database.ts new file mode 100644 index 0000000..ee52b54 --- /dev/null +++ b/src/lib/database.ts @@ -0,0 +1,14 @@ +export function connect(host: string, user: string, accessToken: string) { + return new Promise((resolve) => { + // Don't forget to add retries! + // Sometimes database can't accept connections immediatly after start of container. + console.log(`==> Example DB mocked:\n\tHost: ${host}\n\tUser: ${user}\n\tAccess token: ${accessToken.split('').map(() => '*').join('')}`); + resolve({ + query(_q: string) { + return new Promise((_resolve, reject) => { + reject("Not implemented"); + }); + }, + }); + }); +} diff --git a/src/lib/errors.ts b/src/lib/errors.ts new file mode 100644 index 0000000..8925781 --- /dev/null +++ b/src/lib/errors.ts @@ -0,0 +1,103 @@ +/* eslint-disable max-classes-per-file */ +import { Request } from 'express'; + +export abstract class ServiceError extends Error { + public code: string = 'EUNKNOWN'; + public httpStatus: number = 500; + + public toJSON() { + return { + code: this.code, + name: this.name, + httpStatus: this.httpStatus, + message: this.message, + }; + } +} + +export class InvalidOptionError extends ServiceError { + constructor( + optionName: string, + where?: string, + expected?: string, + actually?: string, + ) { + let msg = `Invalid option '${optionName}'${ + where ? ` in ${where}` : '' + }.`; + + if (expected) { + msg += ` Expected ${expected}${ + actually ? `, but got \`${actually}\` instead` : '' + }.`; + } + + super(msg); + + this.name = 'InvalidOptionError'; + this.code = 'EINVALIDOPTION'; + this.httpStatus = 400; + } +} + +export class EmptyRequestError extends ServiceError { + constructor(fields: string) { + const msg = `There should be at least ${fields} fields in request body`; + + super(msg); + + this.name = 'EmptyRequestError'; + this.code = 'EEMPTYREQUEST'; + this.httpStatus = 400; + } +} + +export class NotUniqueError extends ServiceError { + constructor(thing: string, option?: string, optionValue?: string) { + const msg = `${thing}${ + option + ? ` with option ${option}${ + optionValue ? `=\`${optionValue}\`` : '' + }` + : '' + } already exists. Try to use another ${ + option ? `value for "${option}"` : 'one' + }.`; + + super(msg); + + this.name = 'NotUniqueError'; + this.code = 'ENOTUNIQUE'; + this.httpStatus = 409; + } +} + +export class NotFoundError extends ServiceError { + constructor(thing: string, optionName?: string, optionValue?: string) { + const msg = `${thing}${ + optionName + ? ` with ${optionName}${ + optionValue ? `=\`${optionValue}\`` : '' + }` + : '' + } was not found.`; + + super(msg); + + this.name = 'NotFoundError'; + this.code = 'ENOTFOUND'; + this.httpStatus = 404; + } +} + +export class NotAllowedError extends ServiceError { + constructor(req: Request) { + const msg = `Method ${req.method} ${req.originalUrl} is not allowed.`; + + super(msg); + + this.name = 'NotAllowedError'; + this.code = 'ENOTALLOWED'; + this.httpStatus = 405; + } +} diff --git a/src/lib/gracefulShutdown.ts b/src/lib/gracefulShutdown.ts new file mode 100644 index 0000000..63b8b1c --- /dev/null +++ b/src/lib/gracefulShutdown.ts @@ -0,0 +1,43 @@ +import { Server } from 'http'; + +function getShutdownHandler(server: Server): () => void { + let sockets: any = {}; + let nextSocketId = 0; + server.on('connection', function onServerConnection(socket) { + const socketId = nextSocketId++; + sockets[socketId] = socket; + + socket.once('close', function onSocketClose() { + delete sockets[socketId]; + }); + }); + + function shutdown() { + waitForSocketsToClose(10); + + server.close(function onServerClosed(err?: Error) { + if (err) { + console.error(err); + process.exitCode = 1; + } + process.exit(); + }); + } + + function waitForSocketsToClose(counter: number) { + if (counter > 0) { + console.log(`==> Waiting up to ${counter} ${counter !== 1 ? 'seconds' : 'second'} for all connections to close...`); + setTimeout(waitForSocketsToClose, 1000, counter - 1); + return; + } + + console.log("==> Forcing all connections to close now"); + for (const socketId in sockets) { + sockets[socketId].destroy(); + } + } + + return shutdown; +} + +export default getShutdownHandler; \ No newline at end of file diff --git a/src/middlewares/attachDBConnection.ts b/src/middlewares/attachDBConnection.ts new file mode 100644 index 0000000..bc77468 --- /dev/null +++ b/src/middlewares/attachDBConnection.ts @@ -0,0 +1,12 @@ +import { Request, Response, NextFunction } from 'express'; + +export default function attachDBConnection(connection: any) { + return function connectionMiddleware( + _req: Request, + res: Response, + next: NextFunction, + ) { + res.locals.connection = res.locals.connection || connection; + next(); + }; +} diff --git a/src/middlewares/errorRequestHandler.ts b/src/middlewares/errorRequestHandler.ts new file mode 100644 index 0000000..ae63fc9 --- /dev/null +++ b/src/middlewares/errorRequestHandler.ts @@ -0,0 +1,22 @@ +import { Request, Response, NextFunction } from 'express'; +import { ServiceError } from '../lib/errors'; + +export default function middlewareErrorRequestHandler( + error: Error | ServiceError, + _req: Request, + res: Response, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + _next: NextFunction, +) { + let status = 500; + + if (typeof (error as ServiceError).httpStatus === 'number') { + status = (error as ServiceError).httpStatus; + } + + if (status > 499) { + // eslint-disable-next-line no-console + console.error(error); + } + res.status(status).json({ error, message: error.message }); +} diff --git a/src/middlewares/healthcheck.ts b/src/middlewares/healthcheck.ts new file mode 100644 index 0000000..a93c26d --- /dev/null +++ b/src/middlewares/healthcheck.ts @@ -0,0 +1,6 @@ +import { Request, Response } from 'express'; + +export default function middlewareHealthcheck(_req: Request, res: Response) { + res.statusCode = 200; + res.send('ok'); +} diff --git a/src/middlewares/invalidRequest.ts b/src/middlewares/invalidRequest.ts new file mode 100644 index 0000000..1a75174 --- /dev/null +++ b/src/middlewares/invalidRequest.ts @@ -0,0 +1,6 @@ +import { Request } from 'express'; +import { NotAllowedError } from '../lib/errors'; + +export default function invalidRequestMiddleware(req: Request) { + throw new NotAllowedError(req); +} diff --git a/src/middlewares/openapiSchema.ts b/src/middlewares/openapiSchema.ts new file mode 100644 index 0000000..d414d8b --- /dev/null +++ b/src/middlewares/openapiSchema.ts @@ -0,0 +1,9 @@ +import { Request, Response } from 'express'; +import schema from '../../openapi.json'; + +export default function middlewareErrorRequestHandler( + _req: Request, + res: Response, +) { + res.json(schema); +} diff --git a/src/models/Creature.ts b/src/models/Creature.ts new file mode 100644 index 0000000..a543b63 --- /dev/null +++ b/src/models/Creature.ts @@ -0,0 +1,45 @@ +export enum CreatureKind { + Human, + Dog, +}; + +class Creature { + public id: number; + public kind: CreatureKind; + public name: string; + public greeting: string; + + constructor(id: number, kind: CreatureKind = CreatureKind.Human, name: string = "Unknown", greeting: string = "Hello!") { + this.id = id || 0; + this.kind = kind; + this.name = name; + this.greeting = greeting; + } + + public sayHello(): string { + return this.greeting; + } + + private getKindSlug(): string { + if (this.kind === CreatureKind.Human) { + return "Human"; + } + + return "Dog"; + } + + public toJSON() { + return { + id: this.id, + kind: this.getKindSlug(), + name: this.name, + greeting: this.greeting, + }; + } + + public toString(): string { + return JSON.stringify(this.toJSON()); + } +} + +export default Creature; diff --git a/static/favicon.ico b/static/favicon.ico new file mode 100644 index 0000000..76ac204 Binary files /dev/null and b/static/favicon.ico differ diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..4baae23 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + "target": "es5", + "module": "esnext", + "moduleResolution": "node", + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noImplicitReturns": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitAny": true, + "sourceMap": true, + "jsx": "react", + "allowJs": true, + "lib": [ + "es2018", + "dom" + ], + "baseUrl": ".", + "listFiles": true + }, + "exclude": [ + "node_modules", + "dist/**/*.js", + "config", + "static", + "!dist/public/manifest.json" + ] +}