From 044823a8693dcc2fd29322706afdd942ff3a5e62 Mon Sep 17 00:00:00 2001 From: Khuda Dad Nomani Date: Fri, 20 Oct 2023 17:41:15 +0100 Subject: [PATCH 01/24] initial commit --- examples/slack-reaction-listener/.gitignore | 2 + examples/slack-reaction-listener/README.md | 3 + .../slack-reaction-listener/asyncapi.yaml | 37 + .../functions/messageReceived.ts | 20 + .../slack-reaction-listener/glee.config.js | 7 + .../slack-reaction-listener/package-lock.json | 21439 ++++++++++++++++ examples/slack-reaction-listener/package.json | 15 + .../slack-reaction-listener/socket.io.html | 16 + .../slack-reaction-listener/tsconfig.json | 9 + src/lib/asyncapiFile.ts | 9 +- 10 files changed, 21556 insertions(+), 1 deletion(-) create mode 100644 examples/slack-reaction-listener/.gitignore create mode 100644 examples/slack-reaction-listener/README.md create mode 100644 examples/slack-reaction-listener/asyncapi.yaml create mode 100644 examples/slack-reaction-listener/functions/messageReceived.ts create mode 100644 examples/slack-reaction-listener/glee.config.js create mode 100644 examples/slack-reaction-listener/package-lock.json create mode 100644 examples/slack-reaction-listener/package.json create mode 100644 examples/slack-reaction-listener/socket.io.html create mode 100644 examples/slack-reaction-listener/tsconfig.json diff --git a/examples/slack-reaction-listener/.gitignore b/examples/slack-reaction-listener/.gitignore new file mode 100644 index 000000000..8a7d9cab2 --- /dev/null +++ b/examples/slack-reaction-listener/.gitignore @@ -0,0 +1,2 @@ +node_modules +.glee \ No newline at end of file diff --git a/examples/slack-reaction-listener/README.md b/examples/slack-reaction-listener/README.md new file mode 100644 index 000000000..33d864865 --- /dev/null +++ b/examples/slack-reaction-listener/README.md @@ -0,0 +1,3 @@ +# Dummy + +This is a dummy example mainly used to test functionalities. \ No newline at end of file diff --git a/examples/slack-reaction-listener/asyncapi.yaml b/examples/slack-reaction-listener/asyncapi.yaml new file mode 100644 index 000000000..ad44be0cc --- /dev/null +++ b/examples/slack-reaction-listener/asyncapi.yaml @@ -0,0 +1,37 @@ +asyncapi: 3.0.0 +info: + title: Slack Websocket API + version: 1.0.0 +servers: + slack: + host: wss-primary.slack.com + protocol: wss +channels: + "/": + address: /link/?ticket=1413e8d4-5bda-4007-88e0-e22e840e6070&app_id=b02112d9364cb2fee8a0ee048a920b8b4b0103cb03fab023b4e30f6ee2efb98f + bindings: + ws: {} + messages: + reactionAdded: + $ref: "#/components/messages/reactionAdded" + error: + $ref: "#/components/messages/error" +operations: + messageReceived: + action: receive + channel: + $ref: "#/channels/~1" + messages: + - $ref: "#/components/messages/reactionAdded" + - $ref: "#/components/messages/error" + +components: + messages: + reactionAdded: + payload: + type: object + error: + payload: + type: string +x-remoteServers: + - slack \ No newline at end of file diff --git a/examples/slack-reaction-listener/functions/messageReceived.ts b/examples/slack-reaction-listener/functions/messageReceived.ts new file mode 100644 index 000000000..2df1352ec --- /dev/null +++ b/examples/slack-reaction-listener/functions/messageReceived.ts @@ -0,0 +1,20 @@ + +enum EVENT_TYPE { + EVENTS_API = "events_api", + CONNECTED = "hello" +} + +export default async function ({payload}) { + const eventType: EVENT_TYPE = payload.type + + switch(eventType){ + case EVENT_TYPE.CONNECTED: + console.log(`connection established..`) + break + case EVENT_TYPE.EVENTS_API: + if(payload.payload.event.type === "reaction_added"){ + console.log(`user ${payload.payload.event.item_user} reacted with ${payload.payload.event.reaction}`) + } + break + } +} diff --git a/examples/slack-reaction-listener/glee.config.js b/examples/slack-reaction-listener/glee.config.js new file mode 100644 index 000000000..546e2ca23 --- /dev/null +++ b/examples/slack-reaction-listener/glee.config.js @@ -0,0 +1,7 @@ +export default async function () { + return { + docs: { + enabled: false + } + } +} \ No newline at end of file diff --git a/examples/slack-reaction-listener/package-lock.json b/examples/slack-reaction-listener/package-lock.json new file mode 100644 index 000000000..b5baef976 --- /dev/null +++ b/examples/slack-reaction-listener/package-lock.json @@ -0,0 +1,21439 @@ +{ + "name": "glee-example", + "version": "0.1.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "glee-example", + "version": "0.1.0", + "license": "Apache-2.0", + "dependencies": { + "@asyncapi/glee": "file:../.." + } + }, + "../..": { + "name": "@asyncapi/glee", + "version": "0.27.0", + "license": "Apache-2.0", + "dependencies": { + "@asyncapi/generator": "^1.13.1", + "@asyncapi/html-template": "^0.28.4", + "@asyncapi/markdown-template": "^1.3.3", + "@asyncapi/parser": "^v3.0.0-next-major-spec.7", + "@types/jest": "^27.4.0", + "@types/qs": "^6.9.7", + "ajv": "^6.12.6", + "async": "^3.2.0", + "better-ajv-errors": "^0.7.0", + "bufferutil": "^4.0.3", + "chalk": "^4.1.1", + "cross-spawn": "^7.0.3", + "debug": "^4.3.1", + "dotenv": "^10.0.0", + "dotenv-expand": "^5.1.0", + "emojis": "^1.0.10", + "eslint-plugin-github": "^4.3.5", + "eslint-plugin-security": "^1.4.0", + "got": "^12.5.3", + "kafkajs": "^2.2.3", + "mqtt": "^4.3.7", + "path-to-regexp": "^6.2.0", + "qs": "^6.11.0", + "redis": "^4.0.2", + "socket.io": "^4.1.2", + "terminal-image": "^2.0.0", + "typescript": "^4.5.4", + "uri-templates": "^0.2.0", + "utf-8-validate": "^5.0.5", + "uuid": "^8.3.2", + "walkdir": "^0.4.1", + "word-wrap": "^1.2.3", + "ws": "^7.4.6" + }, + "bin": { + "glee": "dist/cli/index.js" + }, + "devDependencies": { + "@tsconfig/node14": "^1.0.1", + "@types/async": "^3.2.11", + "@types/debug": "^4.1.7", + "@types/socket.io": "^3.0.2", + "@types/uri-templates": "^0.1.31", + "@types/ws": "^8.5.3", + "@typescript-eslint/eslint-plugin": "^5.9.0", + "@typescript-eslint/parser": "^5.9.0", + "all-contributors-cli": "^6.14.2", + "eslint": "^8.6.0", + "eslint-plugin-jest": "^23.8.2", + "eslint-plugin-sonarjs": "^0.19.0", + "fs-extra": "^10.1.0", + "jest": "^27.4.7", + "jest-extended": "^1.2.0", + "jsdoc-to-markdown": "^5.0.3", + "markdown-toc": "^1.2.0", + "rimraf": "^3.0.2", + "ts-jest": "^27.1.2", + "tsc-watch": "^4.5.0", + "typedoc": "^0.23.28", + "typedoc-plugin-markdown": "^3.11.8", + "unixify": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "../../node_modules/@apidevtools/json-schema-ref-parser": { + "version": "9.0.9", + "license": "MIT", + "dependencies": { + "@jsdevtools/ono": "^7.1.3", + "@types/json-schema": "^7.0.6", + "call-me-maybe": "^1.0.1", + "js-yaml": "^4.1.0" + } + }, + "../../node_modules/@apidevtools/json-schema-ref-parser/node_modules/js-yaml": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "../../node_modules/@asyncapi/avro-schema-parser": { + "version": "1.0.1", + "license": "Apache-2.0", + "dependencies": { + "avsc": "^5.7.3" + } + }, + "../../node_modules/@asyncapi/generator": { + "version": "1.9.3", + "license": "Apache-2.0", + "dependencies": { + "@asyncapi/avro-schema-parser": "^1.0.0", + "@asyncapi/generator-react-sdk": "^0.2.23", + "@asyncapi/openapi-schema-parser": "^2.0.1", + "@asyncapi/parser": "^1.15.0", + "@asyncapi/raml-dt-schema-parser": "^2.0.1", + "@npmcli/arborist": "^2.2.4", + "ajv": "^6.10.2", + "chokidar": "^3.4.0", + "commander": "^6.1.0", + "filenamify": "^4.1.0", + "fs.extra": "^1.3.2", + "global-dirs": "^3.0.0", + "jmespath": "^0.15.0", + "js-yaml": "^3.13.1", + "levenshtein-edit-distance": "^2.0.5", + "loglevel": "^1.6.8", + "markdown-it": "^12.3.2", + "minimatch": "^3.0.4", + "node-fetch": "^2.6.0", + "nunjucks": "^3.2.0", + "resolve-from": "^5.0.0", + "resolve-pkg": "^2.0.0", + "semver": "^7.3.2", + "simple-git": "^3.3.0", + "source-map-support": "^0.5.19", + "ts-node": "^9.1.1", + "typescript": "^4.2.2" + }, + "bin": { + "ag": "cli.js", + "asyncapi-generator": "cli.js" + }, + "engines": { + "node": ">12.16", + "npm": ">6.13.7" + } + }, + "../../node_modules/@asyncapi/generator-react-sdk": { + "version": "0.2.23", + "license": "Apache-2.0", + "dependencies": { + "@asyncapi/parser": "^1.13.0", + "@babel/core": "7.12.9", + "@babel/preset-env": "^7.12.7", + "@babel/preset-react": "^7.12.7", + "@rollup/plugin-babel": "^5.2.1", + "babel-plugin-source-map-support": "^2.1.3", + "prop-types": "^15.7.2", + "react": "^17.0.1", + "rollup": "^2.60.1", + "source-map-support": "^0.5.19" + } + }, + "../../node_modules/@asyncapi/openapi-schema-parser": { + "version": "2.0.1", + "license": "Apache-2.0", + "dependencies": { + "@openapi-contrib/openapi-schema-to-json-schema": "^3.0.0" + } + }, + "../../node_modules/@asyncapi/parser": { + "version": "1.15.0", + "license": "Apache-2.0", + "dependencies": { + "@apidevtools/json-schema-ref-parser": "^9.0.6", + "@asyncapi/specs": "^2.14.0", + "@fmvilas/pseudo-yaml-ast": "^0.3.1", + "ajv": "^6.10.1", + "js-yaml": "^3.13.1", + "json-to-ast": "^2.1.0", + "lodash.clonedeep": "^4.5.0", + "node-fetch": "^2.6.0", + "tiny-merge-patch": "^0.1.2" + } + }, + "../../node_modules/@asyncapi/raml-dt-schema-parser": { + "version": "2.0.1", + "license": "Apache-2.0", + "dependencies": { + "js-yaml": "^3.13.1", + "ramldt2jsonschema": "^1.1.0" + } + }, + "../../node_modules/@asyncapi/specs": { + "version": "2.14.0", + "license": "Apache-2.0" + }, + "../../node_modules/@babel/code-frame": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "../../node_modules/@babel/compat-data": { + "version": "7.17.0", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "../../node_modules/@babel/core": { + "version": "7.12.9", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "../../node_modules/@babel/core/node_modules/semver": { + "version": "5.7.1", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "../../node_modules/@babel/generator": { + "version": "7.17.0", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.17.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "../../node_modules/@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "../../node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "../../node_modules/@babel/helper-compilation-targets": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "../../node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "../../node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.17.1", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "../../node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.17.0", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "regexpu-core": "^5.0.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "../../node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.1", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "../../node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "version": "6.3.0", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "../../node_modules/@babel/helper-environment-visitor": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "../../node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "../../node_modules/@babel/helper-function-name": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "../../node_modules/@babel/helper-get-function-arity": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "../../node_modules/@babel/helper-hoist-variables": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "../../node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "../../node_modules/@babel/helper-module-imports": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "../../node_modules/@babel/helper-module-transforms": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "../../node_modules/@babel/helper-optimise-call-expression": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "../../node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "../../node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.16.8", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-wrap-function": "^7.16.8", + "@babel/types": "^7.16.8" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "../../node_modules/@babel/helper-replace-supers": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "../../node_modules/@babel/helper-simple-access": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "../../node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.16.0", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "../../node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "../../node_modules/@babel/helper-validator-identifier": { + "version": "7.16.7", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "../../node_modules/@babel/helper-validator-option": { + "version": "7.16.7", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "../../node_modules/@babel/helper-wrap-function": { + "version": "7.16.8", + "license": "MIT", + "dependencies": { + "@babel/helper-function-name": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "../../node_modules/@babel/helpers": { + "version": "7.17.2", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "../../node_modules/@babel/highlight": { + "version": "7.16.10", + "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/chalk": { + "version": "2.4.2", + "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/parser": { + "version": "7.17.0", + "license": "MIT", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "../../node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "../../node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "../../node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.16.8", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "../../node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.16.11", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.16.10", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-syntax-jsx": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-syntax-typescript": { + "version": "7.16.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.16.8", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-transform-classes": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-transform-destructuring": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-transform-for-of": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-transform-function-name": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-transform-literals": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.16.8", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.16.8", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "../../node_modules/@babel/plugin-transform-new-target": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-transform-object-super": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-transform-parameters": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-transform-property-literals": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-jsx": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-transform-regenerator": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "regenerator-transform": "^0.14.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-transform-spread": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-transform-template-literals": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/preset-env": { + "version": "7.16.11", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.16.8", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-async-generator-functions": "^7.16.8", + "@babel/plugin-proposal-class-properties": "^7.16.7", + "@babel/plugin-proposal-class-static-block": "^7.16.7", + "@babel/plugin-proposal-dynamic-import": "^7.16.7", + "@babel/plugin-proposal-export-namespace-from": "^7.16.7", + "@babel/plugin-proposal-json-strings": "^7.16.7", + "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", + "@babel/plugin-proposal-numeric-separator": "^7.16.7", + "@babel/plugin-proposal-object-rest-spread": "^7.16.7", + "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", + "@babel/plugin-proposal-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-private-methods": "^7.16.11", + "@babel/plugin-proposal-private-property-in-object": "^7.16.7", + "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.16.7", + "@babel/plugin-transform-async-to-generator": "^7.16.8", + "@babel/plugin-transform-block-scoped-functions": "^7.16.7", + "@babel/plugin-transform-block-scoping": "^7.16.7", + "@babel/plugin-transform-classes": "^7.16.7", + "@babel/plugin-transform-computed-properties": "^7.16.7", + "@babel/plugin-transform-destructuring": "^7.16.7", + "@babel/plugin-transform-dotall-regex": "^7.16.7", + "@babel/plugin-transform-duplicate-keys": "^7.16.7", + "@babel/plugin-transform-exponentiation-operator": "^7.16.7", + "@babel/plugin-transform-for-of": "^7.16.7", + "@babel/plugin-transform-function-name": "^7.16.7", + "@babel/plugin-transform-literals": "^7.16.7", + "@babel/plugin-transform-member-expression-literals": "^7.16.7", + "@babel/plugin-transform-modules-amd": "^7.16.7", + "@babel/plugin-transform-modules-commonjs": "^7.16.8", + "@babel/plugin-transform-modules-systemjs": "^7.16.7", + "@babel/plugin-transform-modules-umd": "^7.16.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.8", + "@babel/plugin-transform-new-target": "^7.16.7", + "@babel/plugin-transform-object-super": "^7.16.7", + "@babel/plugin-transform-parameters": "^7.16.7", + "@babel/plugin-transform-property-literals": "^7.16.7", + "@babel/plugin-transform-regenerator": "^7.16.7", + "@babel/plugin-transform-reserved-words": "^7.16.7", + "@babel/plugin-transform-shorthand-properties": "^7.16.7", + "@babel/plugin-transform-spread": "^7.16.7", + "@babel/plugin-transform-sticky-regex": "^7.16.7", + "@babel/plugin-transform-template-literals": "^7.16.7", + "@babel/plugin-transform-typeof-symbol": "^7.16.7", + "@babel/plugin-transform-unicode-escapes": "^7.16.7", + "@babel/plugin-transform-unicode-regex": "^7.16.7", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.16.8", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "core-js-compat": "^3.20.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.0", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "../../node_modules/@babel/preset-modules": { + "version": "0.1.5", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/preset-react": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-transform-react-display-name": "^7.16.7", + "@babel/plugin-transform-react-jsx": "^7.16.7", + "@babel/plugin-transform-react-jsx-development": "^7.16.7", + "@babel/plugin-transform-react-pure-annotations": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/@babel/runtime": { + "version": "7.17.2", + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "../../node_modules/@babel/template": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "../../node_modules/@babel/traverse": { + "version": "7.17.0", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.0", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.0", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "../../node_modules/@babel/types": { + "version": "7.17.0", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "../../node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "dev": true, + "license": "MIT" + }, + "../../node_modules/@eslint/eslintrc": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.1", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "../../node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.12.1", + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "4.0.6", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "../../node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "../../node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../node_modules/@fmvilas/pseudo-yaml-ast": { + "version": "0.3.1", + "license": "Apache-2.0", + "dependencies": { + "yaml-ast-parser": "0.0.43" + } + }, + "../../node_modules/@gar/promisify": { + "version": "1.1.2", + "license": "MIT" + }, + "../../node_modules/@humanwhocodes/config-array": { + "version": "0.9.3", + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "../../node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "license": "BSD-3-Clause" + }, + "../../node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", + "license": "ISC" + }, + "../../node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/@istanbuljs/load-nyc-config/node_modules/p-try": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "../../node_modules/@istanbuljs/load-nyc-config/node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/@jest/console": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "../../node_modules/@jest/core": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "../../node_modules/@jest/core/node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/@jest/core/node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/@jest/environment": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "../../node_modules/@jest/fake-timers": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "../../node_modules/@jest/globals": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "../../node_modules/@jest/reporters": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "../../node_modules/@jest/reporters/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/@jest/source-map": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "../../node_modules/@jest/source-map/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/@jest/test-result": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "../../node_modules/@jest/test-sequencer": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "../../node_modules/@jest/transform": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "../../node_modules/@jest/transform/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/@jest/types": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "../../node_modules/@jimp/bmp": { + "version": "0.16.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "bmp-js": "^0.1.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/@jimp/core": { + "version": "0.16.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "any-base": "^1.1.0", + "buffer": "^5.2.0", + "exif-parser": "^0.1.12", + "file-type": "^9.0.0", + "load-bmfont": "^1.3.1", + "mkdirp": "^0.5.1", + "phin": "^2.9.1", + "pixelmatch": "^4.0.2", + "tinycolor2": "^1.4.1" + } + }, + "../../node_modules/@jimp/core/node_modules/mkdirp": { + "version": "0.5.5", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "../../node_modules/@jimp/custom": { + "version": "0.16.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/core": "^0.16.1" + } + }, + "../../node_modules/@jimp/gif": { + "version": "0.16.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "gifwrap": "^0.9.2", + "omggif": "^1.0.9" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/@jimp/jpeg": { + "version": "0.16.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "jpeg-js": "0.4.2" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/@jimp/plugin-blit": { + "version": "0.16.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/@jimp/plugin-blur": { + "version": "0.16.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/@jimp/plugin-circle": { + "version": "0.16.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/@jimp/plugin-color": { + "version": "0.16.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "tinycolor2": "^1.4.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/@jimp/plugin-contain": { + "version": "0.16.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blit": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5", + "@jimp/plugin-scale": ">=0.3.5" + } + }, + "../../node_modules/@jimp/plugin-cover": { + "version": "0.16.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-crop": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5", + "@jimp/plugin-scale": ">=0.3.5" + } + }, + "../../node_modules/@jimp/plugin-crop": { + "version": "0.16.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/@jimp/plugin-displace": { + "version": "0.16.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/@jimp/plugin-dither": { + "version": "0.16.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/@jimp/plugin-fisheye": { + "version": "0.16.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/@jimp/plugin-flip": { + "version": "0.16.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-rotate": ">=0.3.5" + } + }, + "../../node_modules/@jimp/plugin-gaussian": { + "version": "0.16.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/@jimp/plugin-invert": { + "version": "0.16.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/@jimp/plugin-mask": { + "version": "0.16.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/@jimp/plugin-normalize": { + "version": "0.16.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/@jimp/plugin-print": { + "version": "0.16.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "load-bmfont": "^1.4.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blit": ">=0.3.5" + } + }, + "../../node_modules/@jimp/plugin-resize": { + "version": "0.16.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/@jimp/plugin-rotate": { + "version": "0.16.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blit": ">=0.3.5", + "@jimp/plugin-crop": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5" + } + }, + "../../node_modules/@jimp/plugin-scale": { + "version": "0.16.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5" + } + }, + "../../node_modules/@jimp/plugin-shadow": { + "version": "0.16.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blur": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5" + } + }, + "../../node_modules/@jimp/plugin-threshold": { + "version": "0.16.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-color": ">=0.8.0", + "@jimp/plugin-resize": ">=0.8.0" + } + }, + "../../node_modules/@jimp/plugins": { + "version": "0.16.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/plugin-blit": "^0.16.1", + "@jimp/plugin-blur": "^0.16.1", + "@jimp/plugin-circle": "^0.16.1", + "@jimp/plugin-color": "^0.16.1", + "@jimp/plugin-contain": "^0.16.1", + "@jimp/plugin-cover": "^0.16.1", + "@jimp/plugin-crop": "^0.16.1", + "@jimp/plugin-displace": "^0.16.1", + "@jimp/plugin-dither": "^0.16.1", + "@jimp/plugin-fisheye": "^0.16.1", + "@jimp/plugin-flip": "^0.16.1", + "@jimp/plugin-gaussian": "^0.16.1", + "@jimp/plugin-invert": "^0.16.1", + "@jimp/plugin-mask": "^0.16.1", + "@jimp/plugin-normalize": "^0.16.1", + "@jimp/plugin-print": "^0.16.1", + "@jimp/plugin-resize": "^0.16.1", + "@jimp/plugin-rotate": "^0.16.1", + "@jimp/plugin-scale": "^0.16.1", + "@jimp/plugin-shadow": "^0.16.1", + "@jimp/plugin-threshold": "^0.16.1", + "timm": "^1.6.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/@jimp/png": { + "version": "0.16.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "pngjs": "^3.3.3" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/@jimp/tiff": { + "version": "0.16.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "utif": "^2.0.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/@jimp/types": { + "version": "0.16.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/bmp": "^0.16.1", + "@jimp/gif": "^0.16.1", + "@jimp/jpeg": "^0.16.1", + "@jimp/png": "^0.16.1", + "@jimp/tiff": "^0.16.1", + "timm": "^1.6.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/@jimp/utils": { + "version": "0.16.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "regenerator-runtime": "^0.13.3" + } + }, + "../../node_modules/@jsdevtools/ono": { + "version": "7.1.3", + "license": "MIT" + }, + "../../node_modules/@kwsites/file-exists": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "debug": "^4.1.1" + } + }, + "../../node_modules/@kwsites/promise-deferred": { + "version": "1.1.1", + "license": "MIT" + }, + "../../node_modules/@node-redis/bloom": { + "version": "1.0.1", + "license": "MIT", + "peerDependencies": { + "@node-redis/client": "^1.0.0" + } + }, + "../../node_modules/@node-redis/client": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "cluster-key-slot": "1.1.0", + "generic-pool": "3.8.2", + "redis-parser": "3.0.0", + "yallist": "4.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "../../node_modules/@node-redis/graph": { + "version": "1.0.0", + "license": "MIT", + "peerDependencies": { + "@node-redis/client": "^1.0.0" + } + }, + "../../node_modules/@node-redis/json": { + "version": "1.0.2", + "license": "MIT", + "peerDependencies": { + "@node-redis/client": "^1.0.0" + } + }, + "../../node_modules/@node-redis/search": { + "version": "1.0.2", + "license": "MIT", + "peerDependencies": { + "@node-redis/client": "^1.0.0" + } + }, + "../../node_modules/@node-redis/time-series": { + "version": "1.0.1", + "license": "MIT", + "peerDependencies": { + "@node-redis/client": "^1.0.0" + } + }, + "../../node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "../../node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "../../node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "../../node_modules/@npmcli/arborist": { + "version": "2.10.0", + "license": "ISC", + "dependencies": { + "@isaacs/string-locale-compare": "^1.0.1", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/map-workspaces": "^1.0.2", + "@npmcli/metavuln-calculator": "^1.1.0", + "@npmcli/move-file": "^1.1.0", + "@npmcli/name-from-folder": "^1.0.1", + "@npmcli/node-gyp": "^1.0.1", + "@npmcli/package-json": "^1.0.1", + "@npmcli/run-script": "^1.8.2", + "bin-links": "^2.2.1", + "cacache": "^15.0.3", + "common-ancestor-path": "^1.0.1", + "json-parse-even-better-errors": "^2.3.1", + "json-stringify-nice": "^1.1.4", + "mkdirp": "^1.0.4", + "mkdirp-infer-owner": "^2.0.0", + "npm-install-checks": "^4.0.0", + "npm-package-arg": "^8.1.5", + "npm-pick-manifest": "^6.1.0", + "npm-registry-fetch": "^11.0.0", + "pacote": "^11.3.5", + "parse-conflict-json": "^1.1.1", + "proc-log": "^1.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^1.0.1", + "read-package-json-fast": "^2.0.2", + "readdir-scoped-modules": "^1.1.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "ssri": "^8.0.1", + "treeverse": "^1.0.4", + "walk-up-path": "^1.0.0" + }, + "bin": { + "arborist": "bin/index.js" + }, + "engines": { + "node": ">= 10" + } + }, + "../../node_modules/@npmcli/fs": { + "version": "1.1.1", + "license": "ISC", + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "../../node_modules/@npmcli/git": { + "version": "2.1.0", + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^1.3.2", + "lru-cache": "^6.0.0", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^6.1.1", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + } + }, + "../../node_modules/@npmcli/installed-package-contents": { + "version": "1.0.7", + "license": "ISC", + "dependencies": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "installed-package-contents": "index.js" + }, + "engines": { + "node": ">= 10" + } + }, + "../../node_modules/@npmcli/map-workspaces": { + "version": "1.0.4", + "license": "ISC", + "dependencies": { + "@npmcli/name-from-folder": "^1.0.1", + "glob": "^7.1.6", + "minimatch": "^3.0.4", + "read-package-json-fast": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "../../node_modules/@npmcli/metavuln-calculator": { + "version": "1.1.1", + "license": "ISC", + "dependencies": { + "cacache": "^15.0.5", + "pacote": "^11.1.11", + "semver": "^7.3.2" + } + }, + "../../node_modules/@npmcli/move-file": { + "version": "1.1.2", + "license": "MIT", + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "../../node_modules/@npmcli/name-from-folder": { + "version": "1.0.1", + "license": "ISC" + }, + "../../node_modules/@npmcli/node-gyp": { + "version": "1.0.3", + "license": "ISC" + }, + "../../node_modules/@npmcli/package-json": { + "version": "1.0.1", + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^2.3.1" + } + }, + "../../node_modules/@npmcli/promise-spawn": { + "version": "1.3.2", + "license": "ISC", + "dependencies": { + "infer-owner": "^1.0.4" + } + }, + "../../node_modules/@npmcli/run-script": { + "version": "1.8.6", + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^1.0.2", + "@npmcli/promise-spawn": "^1.3.2", + "node-gyp": "^7.1.0", + "read-package-json-fast": "^2.0.1" + } + }, + "../../node_modules/@openapi-contrib/openapi-schema-to-json-schema": { + "version": "3.1.1", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + } + }, + "../../node_modules/@rollup/plugin-babel": { + "version": "5.3.0", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "../../node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "../../node_modules/@sinonjs/commons": { + "version": "1.8.3", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "../../node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "../../node_modules/@socket.io/base64-arraybuffer": { + "version": "1.0.2", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "../../node_modules/@tootallnate/once": { + "version": "1.1.2", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "../../node_modules/@tsconfig/node14": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "../../node_modules/@types/async": { + "version": "3.2.12", + "dev": true, + "license": "MIT" + }, + "../../node_modules/@types/babel__core": { + "version": "7.1.18", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "../../node_modules/@types/babel__generator": { + "version": "7.6.4", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "../../node_modules/@types/babel__template": { + "version": "7.4.1", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "../../node_modules/@types/babel__traverse": { + "version": "7.14.2", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.3.0" + } + }, + "../../node_modules/@types/component-emitter": { + "version": "1.2.11", + "license": "MIT" + }, + "../../node_modules/@types/cookie": { + "version": "0.4.1", + "license": "MIT" + }, + "../../node_modules/@types/cors": { + "version": "2.8.12", + "license": "MIT" + }, + "../../node_modules/@types/debug": { + "version": "4.1.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "../../node_modules/@types/estree": { + "version": "0.0.39", + "license": "MIT" + }, + "../../node_modules/@types/graceful-fs": { + "version": "4.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "../../node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "dev": true, + "license": "MIT" + }, + "../../node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "../../node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "../../node_modules/@types/jest": { + "version": "27.4.0", + "license": "MIT", + "dependencies": { + "jest-diff": "^27.0.0", + "pretty-format": "^27.0.0" + } + }, + "../../node_modules/@types/json-schema": { + "version": "7.0.9", + "license": "MIT" + }, + "../../node_modules/@types/json5": { + "version": "0.0.29", + "license": "MIT" + }, + "../../node_modules/@types/linkify-it": { + "version": "3.0.2", + "dev": true, + "license": "MIT" + }, + "../../node_modules/@types/markdown-it": { + "version": "12.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + }, + "../../node_modules/@types/mdurl": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "../../node_modules/@types/ms": { + "version": "0.7.31", + "dev": true, + "license": "MIT" + }, + "../../node_modules/@types/node": { + "version": "17.0.17", + "license": "MIT" + }, + "../../node_modules/@types/prettier": { + "version": "2.4.4", + "dev": true, + "license": "MIT" + }, + "../../node_modules/@types/qs": { + "version": "6.9.7", + "license": "MIT" + }, + "../../node_modules/@types/socket.io": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "socket.io": "*" + } + }, + "../../node_modules/@types/stack-utils": { + "version": "2.0.1", + "dev": true, + "license": "MIT" + }, + "../../node_modules/@types/uri-templates": { + "version": "0.1.31", + "dev": true, + "license": "MIT" + }, + "../../node_modules/@types/yargs": { + "version": "16.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "../../node_modules/@types/yargs-parser": { + "version": "20.2.1", + "dev": true, + "license": "MIT" + }, + "../../node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.11.0", + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "5.11.0", + "@typescript-eslint/type-utils": "5.11.0", + "@typescript-eslint/utils": "5.11.0", + "debug": "^4.3.2", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.2.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "../../node_modules/@typescript-eslint/experimental-utils": { + "version": "2.34.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/typescript-estree": "2.34.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + } + }, + "../../node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "2.34.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "debug": "^4.1.1", + "eslint-visitor-keys": "^1.1.0", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "../../node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-utils": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "../../node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "../../node_modules/@typescript-eslint/parser": { + "version": "5.11.0", + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "5.11.0", + "@typescript-eslint/types": "5.11.0", + "@typescript-eslint/typescript-estree": "5.11.0", + "debug": "^4.3.2" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "../../node_modules/@typescript-eslint/scope-manager": { + "version": "5.11.0", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.11.0", + "@typescript-eslint/visitor-keys": "5.11.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "../../node_modules/@typescript-eslint/type-utils": { + "version": "5.11.0", + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "5.11.0", + "debug": "^4.3.2", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "../../node_modules/@typescript-eslint/types": { + "version": "5.11.0", + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "../../node_modules/@typescript-eslint/typescript-estree": { + "version": "5.11.0", + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "5.11.0", + "@typescript-eslint/visitor-keys": "5.11.0", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "../../node_modules/@typescript-eslint/utils": { + "version": "5.11.0", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.11.0", + "@typescript-eslint/types": "5.11.0", + "@typescript-eslint/typescript-estree": "5.11.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "../../node_modules/@typescript-eslint/visitor-keys": { + "version": "5.11.0", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.11.0", + "eslint-visitor-keys": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "../../node_modules/a-sync-waterfall": { + "version": "1.0.1", + "license": "MIT" + }, + "../../node_modules/abab": { + "version": "2.0.5", + "dev": true, + "license": "BSD-3-Clause" + }, + "../../node_modules/abbrev": { + "version": "1.1.1", + "license": "ISC" + }, + "../../node_modules/accepts": { + "version": "1.3.8", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "../../node_modules/acorn": { + "version": "8.7.0", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "../../node_modules/acorn-globals": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "../../node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "../../node_modules/acorn-jsx": { + "version": "5.3.2", + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "../../node_modules/acorn-walk": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "../../node_modules/agent-base": { + "version": "6.0.2", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "../../node_modules/agentkeepalive": { + "version": "4.2.0", + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "../../node_modules/aggregate-error": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/ajv": { + "version": "6.12.6", + "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/all-contributors-cli": { + "version": "6.20.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.6", + "async": "^3.0.1", + "chalk": "^4.0.0", + "didyoumean": "^1.2.1", + "inquirer": "^7.0.4", + "json-fixer": "^1.5.1", + "lodash": "^4.11.2", + "node-fetch": "^2.6.0", + "pify": "^5.0.0", + "yargs": "^15.0.1" + }, + "bin": { + "all-contributors": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "../../node_modules/all-contributors-cli/node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/all-contributors-cli/node_modules/ansi-styles": { + "version": "4.3.0", + "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/all-contributors-cli/node_modules/cliui": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "../../node_modules/all-contributors-cli/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "../../node_modules/all-contributors-cli/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "../../node_modules/all-contributors-cli/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/all-contributors-cli/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/all-contributors-cli/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/all-contributors-cli/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../node_modules/all-contributors-cli/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/all-contributors-cli/node_modules/p-try": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "../../node_modules/all-contributors-cli/node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/all-contributors-cli/node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/all-contributors-cli/node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/all-contributors-cli/node_modules/wrap-ansi": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/all-contributors-cli/node_modules/y18n": { + "version": "4.0.3", + "dev": true, + "license": "ISC" + }, + "../../node_modules/all-contributors-cli/node_modules/yargs": { + "version": "15.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/all-contributors-cli/node_modules/yargs-parser": { + "version": "18.1.3", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "../../node_modules/ansi-escape-sequences": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^3.0.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "../../node_modules/ansi-escape-sequences/node_modules/array-back": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "../../node_modules/ansi-escapes": { + "version": "4.3.2", + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../node_modules/ansi-red": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/ansi-regex": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/ansi-styles": { + "version": "3.2.1", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "../../node_modules/ansi-wrap": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/any-base": { + "version": "1.1.0", + "license": "MIT" + }, + "../../node_modules/anymatch": { + "version": "3.1.2", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "../../node_modules/app-path": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../node_modules/aproba": { + "version": "1.2.0", + "license": "ISC" + }, + "../../node_modules/are-we-there-yet": { + "version": "1.1.7", + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "../../node_modules/arg": { + "version": "4.1.3", + "license": "MIT" + }, + "../../node_modules/argparse": { + "version": "2.0.1", + "license": "Python-2.0" + }, + "../../node_modules/array-back": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/array-includes": { + "version": "3.1.4", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../../node_modules/array-range": { + "version": "1.0.1", + "license": "MIT" + }, + "../../node_modules/array-union": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/array.prototype.flat": { + "version": "1.2.5", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../../node_modules/asap": { + "version": "2.0.6", + "license": "MIT" + }, + "../../node_modules/asn1": { + "version": "0.2.6", + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "../../node_modules/assert-plus": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "../../node_modules/astral-regex": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/async": { + "version": "3.2.3", + "license": "MIT" + }, + "../../node_modules/asynckit": { + "version": "0.4.0", + "license": "MIT" + }, + "../../node_modules/autolinker": { + "version": "0.28.1", + "dev": true, + "license": "MIT", + "dependencies": { + "gulp-header": "^1.7.1" + } + }, + "../../node_modules/avsc": { + "version": "5.7.3", + "license": "MIT", + "engines": { + "node": ">=0.11" + } + }, + "../../node_modules/aws-sign2": { + "version": "0.7.0", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "../../node_modules/aws4": { + "version": "1.11.0", + "license": "MIT" + }, + "../../node_modules/babel-jest": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "../../node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "license": "MIT", + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "../../node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/babel-plugin-jest-hoist": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "../../node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.1", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.1", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.0", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "../../node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.5.2", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.1", + "core-js-compat": "^3.21.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.3.1", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../../node_modules/babel-plugin-source-map-support": { + "version": "2.1.3", + "license": "Artistic-2.0", + "dependencies": { + "@babel/helper-module-imports": "^7.10.4" + } + }, + "../../node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "../../node_modules/babel-preset-jest": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "../../node_modules/balanced-match": { + "version": "1.0.2", + "license": "MIT" + }, + "../../node_modules/base64-js": { + "version": "1.5.1", + "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/base64id": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "../../node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "../../node_modules/better-ajv-errors": { + "version": "0.7.0", + "license": "Apache-2.0", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@babel/runtime": "^7.0.0", + "chalk": "^2.4.1", + "core-js": "^3.2.1", + "json-to-ast": "^2.0.3", + "jsonpointer": "^4.0.1", + "leven": "^3.1.0" + }, + "peerDependencies": { + "ajv": "4.11.8 - 6" + } + }, + "../../node_modules/better-ajv-errors/node_modules/chalk": { + "version": "2.4.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "../../node_modules/bin-links": { + "version": "2.3.0", + "license": "ISC", + "dependencies": { + "cmd-shim": "^4.0.1", + "mkdirp-infer-owner": "^2.0.0", + "npm-normalize-package-bin": "^1.0.0", + "read-cmd-shim": "^2.0.0", + "rimraf": "^3.0.0", + "write-file-atomic": "^3.0.3" + }, + "engines": { + "node": ">=10" + } + }, + "../../node_modules/binary-extensions": { + "version": "2.2.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/bl": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "../../node_modules/bl/node_modules/readable-stream": { + "version": "3.6.0", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "../../node_modules/bluebird": { + "version": "3.7.2", + "dev": true, + "license": "MIT" + }, + "../../node_modules/bmp-js": { + "version": "0.1.0", + "license": "MIT" + }, + "../../node_modules/brace-expansion": { + "version": "1.1.11", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "../../node_modules/braces": { + "version": "3.0.2", + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/browser-process-hrtime": { + "version": "1.0.0", + "dev": true, + "license": "BSD-2-Clause" + }, + "../../node_modules/browserslist": { + "version": "4.19.1", + "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/bs-logger": { + "version": "0.2.6", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "../../node_modules/bser": { + "version": "2.1.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "../../node_modules/buffer": { + "version": "5.7.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "../../node_modules/buffer-equal": { + "version": "0.0.1", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "../../node_modules/buffer-from": { + "version": "1.1.2", + "license": "MIT" + }, + "../../node_modules/bufferutil": { + "version": "4.0.6", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "../../node_modules/builtins": { + "version": "1.0.3", + "license": "MIT" + }, + "../../node_modules/cacache": { + "version": "15.3.0", + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "../../node_modules/cache-point": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^4.0.0", + "fs-then-native": "^2.0.0", + "mkdirp2": "^1.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/call-bind": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../../node_modules/call-me-maybe": { + "version": "1.0.1", + "license": "MIT" + }, + "../../node_modules/callsites": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "../../node_modules/camelcase": { + "version": "5.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "../../node_modules/caniuse-lite": { + "version": "1.0.30001312", + "license": "CC-BY-4.0", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "../../node_modules/caseless": { + "version": "0.12.0", + "license": "Apache-2.0" + }, + "../../node_modules/catharsis": { + "version": "0.9.0", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.15" + }, + "engines": { + "node": ">= 10" + } + }, + "../../node_modules/chalk": { + "version": "4.1.2", + "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/chalk/node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "../../node_modules/chalk/node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "../../node_modules/chalk/node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "../../node_modules/chalk/node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/char-regex": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "../../node_modules/chardet": { + "version": "0.7.0", + "dev": true, + "license": "MIT" + }, + "../../node_modules/chokidar": { + "version": "3.5.3", + "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/chownr": { + "version": "2.0.0", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "../../node_modules/ci-info": { + "version": "3.3.0", + "dev": true, + "license": "MIT" + }, + "../../node_modules/cjs-module-lexer": { + "version": "1.2.2", + "dev": true, + "license": "MIT" + }, + "../../node_modules/clean-stack": { + "version": "2.2.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "../../node_modules/cli-cursor": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/cli-width": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 10" + } + }, + "../../node_modules/cliui": { + "version": "7.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "../../node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/cluster-key-slot": { + "version": "1.1.0", + "license": "APACHE-2.0", + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/cmd-shim": { + "version": "4.1.0", + "license": "ISC", + "dependencies": { + "mkdirp-infer-owner": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "../../node_modules/co": { + "version": "4.6.0", + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "../../node_modules/code-error-fragment": { + "version": "0.0.230", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "../../node_modules/code-point-at": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/coffee-script": { + "version": "1.12.7", + "dev": true, + "license": "MIT", + "bin": { + "cake": "bin/cake", + "coffee": "bin/coffee" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "../../node_modules/collect-all": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "stream-connect": "^1.0.2", + "stream-via": "^1.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/collect-v8-coverage": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "../../node_modules/color-convert": { + "version": "1.9.3", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "../../node_modules/color-name": { + "version": "1.1.3", + "license": "MIT" + }, + "../../node_modules/combined-stream": { + "version": "1.0.8", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "../../node_modules/command-line-args": { + "version": "5.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "../../node_modules/command-line-args/node_modules/array-back": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "../../node_modules/command-line-args/node_modules/typical": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/command-line-tool": { + "version": "0.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escape-sequences": "^4.0.0", + "array-back": "^2.0.0", + "command-line-args": "^5.0.0", + "command-line-usage": "^4.1.0", + "typical": "^2.6.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "../../node_modules/command-line-tool/node_modules/array-back": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "typical": "^2.6.1" + }, + "engines": { + "node": ">=4" + } + }, + "../../node_modules/command-line-usage": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escape-sequences": "^4.0.0", + "array-back": "^2.0.0", + "table-layout": "^0.4.2", + "typical": "^2.6.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "../../node_modules/command-line-usage/node_modules/array-back": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "typical": "^2.6.1" + }, + "engines": { + "node": ">=4" + } + }, + "../../node_modules/commander": { + "version": "6.2.1", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "../../node_modules/commist": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "leven": "^2.1.0", + "minimist": "^1.1.0" + } + }, + "../../node_modules/commist/node_modules/leven": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/common-ancestor-path": { + "version": "1.0.1", + "license": "ISC" + }, + "../../node_modules/common-sequence": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/component-emitter": { + "version": "1.3.0", + "license": "MIT" + }, + "../../node_modules/concat-map": { + "version": "0.0.1", + "license": "MIT" + }, + "../../node_modules/concat-stream": { + "version": "2.0.0", + "engines": [ + "node >= 6.0" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "../../node_modules/concat-stream/node_modules/readable-stream": { + "version": "3.6.0", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "../../node_modules/concat-with-sourcemaps": { + "version": "1.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "source-map": "^0.6.1" + } + }, + "../../node_modules/concat-with-sourcemaps/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/config-master": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "walk-back": "^2.0.1" + } + }, + "../../node_modules/config-master/node_modules/walk-back": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/console-control-strings": { + "version": "1.1.0", + "license": "ISC" + }, + "../../node_modules/convert-source-map": { + "version": "1.8.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "../../node_modules/cookie": { + "version": "0.4.2", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "../../node_modules/core-js": { + "version": "3.21.0", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "../../node_modules/core-js-compat": { + "version": "3.21.0", + "license": "MIT", + "dependencies": { + "browserslist": "^4.19.1", + "semver": "7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "../../node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "../../node_modules/core-util-is": { + "version": "1.0.3", + "license": "MIT" + }, + "../../node_modules/cors": { + "version": "2.8.5", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "../../node_modules/create-require": { + "version": "1.1.1", + "license": "MIT" + }, + "../../node_modules/cross-spawn": { + "version": "7.0.3", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "../../node_modules/cssom": { + "version": "0.4.4", + "dev": true, + "license": "MIT" + }, + "../../node_modules/cssstyle": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "dev": true, + "license": "MIT" + }, + "../../node_modules/cycled": { + "version": "1.2.0", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../node_modules/dashdash": { + "version": "1.14.1", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "../../node_modules/data-urls": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "../../node_modules/data-urls/node_modules/tr46": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/data-urls/node_modules/webidl-conversions": { + "version": "6.1.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=10.4" + } + }, + "../../node_modules/data-urls/node_modules/whatwg-url": { + "version": "8.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "../../node_modules/debug": { + "version": "4.3.3", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "../../node_modules/debuglog": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "../../node_modules/decamelize": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/decimal.js": { + "version": "10.3.1", + "dev": true, + "license": "MIT" + }, + "../../node_modules/decode-gif": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "array-range": "^1.0.1", + "omggif": "^1.0.10" + }, + "engines": { + "node": ">=10" + } + }, + "../../node_modules/dedent": { + "version": "0.7.0", + "dev": true, + "license": "MIT" + }, + "../../node_modules/deep-extend": { + "version": "0.6.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "../../node_modules/deep-is": { + "version": "0.1.4", + "license": "MIT" + }, + "../../node_modules/deepmerge": { + "version": "4.2.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/define-properties": { + "version": "1.1.3", + "license": "MIT", + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "../../node_modules/delay": { + "version": "4.4.1", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../node_modules/delayed-stream": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "../../node_modules/delegates": { + "version": "1.0.0", + "license": "MIT" + }, + "../../node_modules/depd": { + "version": "1.1.2", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "../../node_modules/detect-newline": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/dezalgo": { + "version": "1.0.3", + "license": "ISC", + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "../../node_modules/diacritics-map": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "../../node_modules/didyoumean": { + "version": "1.2.2", + "dev": true, + "license": "Apache-2.0" + }, + "../../node_modules/diff": { + "version": "4.0.2", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "../../node_modules/diff-sequences": { + "version": "27.5.1", + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "../../node_modules/dir-glob": { + "version": "3.0.1", + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/dmd": { + "version": "4.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^4.0.1", + "cache-point": "^1.0.0", + "common-sequence": "^2.0.0", + "file-set": "^3.0.0", + "handlebars": "^4.5.3", + "marked": "^0.7.0", + "object-get": "^2.1.0", + "reduce-flatten": "^3.0.0", + "reduce-unique": "^2.0.1", + "reduce-without": "^1.0.1", + "test-value": "^3.0.0", + "walk-back": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/dmd/node_modules/reduce-flatten": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/doctrine": { + "version": "2.1.0", + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/dom-walk": { + "version": "0.1.2" + }, + "../../node_modules/domexception": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/dotenv": { + "version": "10.0.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=10" + } + }, + "../../node_modules/dotenv-expand": { + "version": "5.1.0", + "license": "BSD-2-Clause" + }, + "../../node_modules/duplexer": { + "version": "0.1.2", + "dev": true, + "license": "MIT" + }, + "../../node_modules/duplexify": { + "version": "4.1.2", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.0" + } + }, + "../../node_modules/duplexify/node_modules/readable-stream": { + "version": "3.6.0", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "../../node_modules/ecc-jsbn": { + "version": "0.1.2", + "license": "MIT", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "../../node_modules/electron-to-chromium": { + "version": "1.4.68", + "license": "ISC" + }, + "../../node_modules/emittery": { + "version": "0.8.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "../../node_modules/emoji-regex": { + "version": "8.0.0", + "license": "MIT" + }, + "../../node_modules/emojis": { + "version": "1.0.10", + "license": "Fair" + }, + "../../node_modules/encoding": { + "version": "0.1.13", + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "../../node_modules/end-of-stream": { + "version": "1.4.4", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "../../node_modules/engine.io": { + "version": "6.1.2", + "license": "MIT", + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.0", + "ws": "~8.2.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "../../node_modules/engine.io-parser": { + "version": "5.0.3", + "license": "MIT", + "dependencies": { + "@socket.io/base64-arraybuffer": "~1.0.2" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "../../node_modules/engine.io/node_modules/ws": { + "version": "8.2.3", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "../../node_modules/entities": { + "version": "2.1.0", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "../../node_modules/env-paths": { + "version": "2.2.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "../../node_modules/err-code": { + "version": "2.0.3", + "license": "MIT" + }, + "../../node_modules/error-ex": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "../../node_modules/es-abstract": { + "version": "1.19.1", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../../node_modules/es-to-primitive": { + "version": "1.2.1", + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../../node_modules/escalade": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "../../node_modules/escape-string-regexp": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "../../node_modules/escodegen": { + "version": "2.0.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "../../node_modules/escodegen/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "../../node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "../../node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "../../node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "../../node_modules/escodegen/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "../../node_modules/eslint": { + "version": "8.9.0", + "license": "MIT", + "dependencies": { + "@eslint/eslintrc": "^1.1.0", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "../../node_modules/eslint-config-prettier": { + "version": "8.3.0", + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "../../node_modules/eslint-import-resolver-node": { + "version": "0.3.6", + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + } + }, + "../../node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "../../node_modules/eslint-module-utils": { + "version": "2.7.3", + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "find-up": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "../../node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "../../node_modules/eslint-plugin-escompat": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "browserslist": "^4.12.0" + }, + "peerDependencies": { + "eslint": ">=5.14.1" + } + }, + "../../node_modules/eslint-plugin-eslint-comments": { + "version": "3.2.0", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5", + "ignore": "^5.0.5" + }, + "engines": { + "node": ">=6.5.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "../../node_modules/eslint-plugin-filenames": { + "version": "1.3.2", + "license": "MIT", + "dependencies": { + "lodash.camelcase": "4.3.0", + "lodash.kebabcase": "4.1.1", + "lodash.snakecase": "4.1.1", + "lodash.upperfirst": "4.3.1" + }, + "peerDependencies": { + "eslint": "*" + } + }, + "../../node_modules/eslint-plugin-github": { + "version": "4.3.5", + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "^5.1.0", + "@typescript-eslint/parser": "^5.1.0", + "eslint-config-prettier": ">=8.0.0", + "eslint-plugin-escompat": "^3.1.0", + "eslint-plugin-eslint-comments": "^3.2.0", + "eslint-plugin-filenames": "^1.3.2", + "eslint-plugin-i18n-text": "^1.0.1", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-no-only-tests": "^2.6.0", + "eslint-plugin-prettier": "^3.3.1", + "eslint-rule-documentation": ">=1.0.0", + "prettier": "^2.2.1", + "svg-element-attributes": "^1.3.1" + }, + "bin": { + "eslint-ignore-errors": "bin/eslint-ignore-errors.js" + }, + "peerDependencies": { + "eslint": "^8.0.1" + } + }, + "../../node_modules/eslint-plugin-i18n-text": { + "version": "1.0.1", + "license": "MIT", + "peerDependencies": { + "eslint": ">=5.0.0" + } + }, + "../../node_modules/eslint-plugin-import": { + "version": "2.25.4", + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.2", + "has": "^1.0.3", + "is-core-module": "^2.8.0", + "is-glob": "^4.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.5", + "resolve": "^1.20.0", + "tsconfig-paths": "^3.12.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "../../node_modules/eslint-plugin-import/node_modules/debug": { + "version": "2.6.9", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "../../node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.0.0", + "license": "MIT" + }, + "../../node_modules/eslint-plugin-jest": { + "version": "23.20.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/experimental-utils": "^2.5.0" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "../../node_modules/eslint-plugin-no-only-tests": { + "version": "2.6.0", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "../../node_modules/eslint-plugin-prettier": { + "version": "3.4.1", + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "eslint": ">=5.0.0", + "prettier": ">=1.13.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "../../node_modules/eslint-plugin-security": { + "version": "1.4.0", + "license": "Apache-2.0", + "dependencies": { + "safe-regex": "^1.1.0" + } + }, + "../../node_modules/eslint-plugin-sonarjs": { + "version": "0.5.0", + "dev": true, + "license": "LGPL-3.0", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" + } + }, + "../../node_modules/eslint-rule-documentation": { + "version": "1.0.23", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "../../node_modules/eslint-scope": { + "version": "5.1.1", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "../../node_modules/eslint-utils": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "../../node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "../../node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "../../node_modules/eslint/node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/eslint/node_modules/doctrine": { + "version": "3.0.0", + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "../../node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../node_modules/eslint/node_modules/eslint-scope": { + "version": "7.1.1", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "../../node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "../../node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "../../node_modules/eslint/node_modules/globals": { + "version": "13.12.1", + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "../../node_modules/eslint/node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/eslint/node_modules/strip-json-comments": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../node_modules/espree": { + "version": "9.3.1", + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.7.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "../../node_modules/esprima": { + "version": "4.0.1", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "../../node_modules/esquery": { + "version": "1.4.0", + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "../../node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "../../node_modules/esrecurse": { + "version": "4.3.0", + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "../../node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "../../node_modules/estraverse": { + "version": "4.3.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "../../node_modules/estree-walker": { + "version": "1.0.1", + "license": "MIT" + }, + "../../node_modules/esutils": { + "version": "2.0.3", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/event-stream": { + "version": "3.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" + } + }, + "../../node_modules/event-stream/node_modules/split": { + "version": "0.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "../../node_modules/execa": { + "version": "5.1.1", + "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/exif-parser": { + "version": "0.1.12" + }, + "../../node_modules/exit": { + "version": "0.1.2", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "../../node_modules/expand-range": { + "version": "1.8.2", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/expand-range/node_modules/fill-range": { + "version": "2.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/expand-range/node_modules/is-number": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/expand-range/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/expect": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "../../node_modules/extend": { + "version": "3.0.2", + "license": "MIT" + }, + "../../node_modules/extend-shallow": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/external-editor": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "../../node_modules/external-editor/node_modules/iconv-lite": { + "version": "0.4.24", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/extsprintf": { + "version": "1.3.0", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "../../node_modules/fast-deep-equal": { + "version": "3.1.3", + "license": "MIT" + }, + "../../node_modules/fast-diff": { + "version": "1.2.0", + "license": "Apache-2.0" + }, + "../../node_modules/fast-glob": { + "version": "3.2.11", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "../../node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "license": "MIT" + }, + "../../node_modules/fast-levenshtein": { + "version": "2.0.6", + "license": "MIT" + }, + "../../node_modules/fastq": { + "version": "1.13.0", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "../../node_modules/fb-watchman": { + "version": "2.0.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "../../node_modules/figures": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../node_modules/file-entry-cache": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "../../node_modules/file-set": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^4.0.0", + "glob": "^7.1.5" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/file-type": { + "version": "9.0.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "../../node_modules/filename-reserved-regex": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "../../node_modules/filenamify": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.1", + "trim-repeated": "^1.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../node_modules/fill-range": { + "version": "7.0.1", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/find-replace": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^3.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "../../node_modules/find-replace/node_modules/array-back": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "../../node_modules/find-up": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "../../node_modules/flat-cache": { + "version": "3.0.4", + "license": "MIT", + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "../../node_modules/flatted": { + "version": "3.2.5", + "license": "ISC" + }, + "../../node_modules/for-in": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/foreachasync": { + "version": "3.0.0", + "license": "Apache2" + }, + "../../node_modules/forever-agent": { + "version": "0.6.1", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "../../node_modules/form-data": { + "version": "2.3.3", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "../../node_modules/from": { + "version": "0.1.7", + "dev": true, + "license": "MIT" + }, + "../../node_modules/fs-extra": { + "version": "0.6.4", + "dependencies": { + "jsonfile": "~1.0.1", + "mkdirp": "0.3.x", + "ncp": "~0.4.2", + "rimraf": "~2.2.0" + } + }, + "../../node_modules/fs-extra/node_modules/mkdirp": { + "version": "0.3.5", + "license": "MIT" + }, + "../../node_modules/fs-extra/node_modules/rimraf": { + "version": "2.2.8", + "license": "MIT", + "bin": { + "rimraf": "bin.js" + } + }, + "../../node_modules/fs-minipass": { + "version": "2.1.0", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "../../node_modules/fs-then-native": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "../../node_modules/fs.extra": { + "version": "1.3.2", + "dependencies": { + "fs-extra": "~0.6.1", + "mkdirp": "~0.3.5", + "walk": "^2.3.9" + }, + "engines": { + "node": "*" + } + }, + "../../node_modules/fs.extra/node_modules/mkdirp": { + "version": "0.3.5", + "license": "MIT" + }, + "../../node_modules/fs.realpath": { + "version": "1.0.0", + "license": "ISC" + }, + "../../node_modules/fsevents": { + "version": "2.3.2", + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "../../node_modules/function-bind": { + "version": "1.1.1", + "license": "MIT" + }, + "../../node_modules/functional-red-black-tree": { + "version": "1.0.1", + "license": "MIT" + }, + "../../node_modules/gauge": { + "version": "2.7.4", + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "../../node_modules/generic-pool": { + "version": "3.8.2", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "../../node_modules/gensync": { + "version": "1.0.0-beta.2", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "../../node_modules/get-caller-file": { + "version": "2.0.5", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "../../node_modules/get-intrinsic": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../../node_modules/get-package-type": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "../../node_modules/get-stream": { + "version": "6.0.1", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../node_modules/get-symbol-description": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../../node_modules/getpass": { + "version": "0.1.7", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "../../node_modules/gifwrap": { + "version": "0.9.2", + "license": "MIT", + "dependencies": { + "image-q": "^1.1.1", + "omggif": "^1.0.10" + } + }, + "../../node_modules/glob": { + "version": "7.2.0", + "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", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "../../node_modules/global": { + "version": "4.4.0", + "license": "MIT", + "dependencies": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "../../node_modules/global-dirs": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../node_modules/globals": { + "version": "11.12.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "../../node_modules/globby": { + "version": "11.1.0", + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../node_modules/graceful-fs": { + "version": "4.2.9", + "license": "ISC" + }, + "../../node_modules/grapheme-splitter": { + "version": "1.0.4", + "license": "MIT" + }, + "../../node_modules/gray-matter": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-red": "^0.1.1", + "coffee-script": "^1.12.4", + "extend-shallow": "^2.0.1", + "js-yaml": "^3.8.1", + "toml": "^2.3.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/gulp-header": { + "version": "1.8.12", + "dev": true, + "license": "MIT", + "dependencies": { + "concat-with-sourcemaps": "*", + "lodash.template": "^4.4.0", + "through2": "^2.0.0" + } + }, + "../../node_modules/handlebars": { + "version": "4.7.7", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "../../node_modules/handlebars/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/har-schema": { + "version": "2.0.0", + "license": "ISC", + "engines": { + "node": ">=4" + } + }, + "../../node_modules/har-validator": { + "version": "5.1.5", + "license": "MIT", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "../../node_modules/has": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "../../node_modules/has-bigints": { + "version": "1.0.1", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../../node_modules/has-flag": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "../../node_modules/has-symbols": { + "version": "1.0.2", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../../node_modules/has-tostringtag": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../../node_modules/has-unicode": { + "version": "2.0.1", + "license": "ISC" + }, + "../../node_modules/help-me": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "glob": "^7.1.6", + "readable-stream": "^3.6.0" + } + }, + "../../node_modules/help-me/node_modules/readable-stream": { + "version": "3.6.0", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "../../node_modules/hosted-git-info": { + "version": "4.1.0", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "../../node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "../../node_modules/html-escaper": { + "version": "2.0.2", + "dev": true, + "license": "MIT" + }, + "../../node_modules/http-cache-semantics": { + "version": "4.1.0", + "license": "BSD-2-Clause" + }, + "../../node_modules/http-proxy-agent": { + "version": "4.0.1", + "license": "MIT", + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "../../node_modules/http-signature": { + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "../../node_modules/https-proxy-agent": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "../../node_modules/human-signals": { + "version": "2.1.0", + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "../../node_modules/humanize-ms": { + "version": "1.2.1", + "license": "MIT", + "dependencies": { + "ms": "^2.0.0" + } + }, + "../../node_modules/iconv-lite": { + "version": "0.6.3", + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/ieee754": { + "version": "1.2.1", + "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": "BSD-3-Clause" + }, + "../../node_modules/ignore": { + "version": "5.2.0", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "../../node_modules/ignore-walk": { + "version": "3.0.4", + "license": "ISC", + "dependencies": { + "minimatch": "^3.0.4" + } + }, + "../../node_modules/image-q": { + "version": "1.1.1", + "license": "MIT", + "engines": { + "node": ">=0.9.0" + } + }, + "../../node_modules/import-fresh": { + "version": "3.3.0", + "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-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "../../node_modules/import-local": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../node_modules/imurmurhash": { + "version": "0.1.4", + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "../../node_modules/indent-string": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/infer-owner": { + "version": "1.0.4", + "license": "ISC" + }, + "../../node_modules/inflight": { + "version": "1.0.6", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "../../node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "../../node_modules/ini": { + "version": "2.0.0", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "../../node_modules/inquirer": { + "version": "7.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "../../node_modules/inquirer/node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/inquirer/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/inquirer/node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/inquirer/node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/internal-slot": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "../../node_modules/ip": { + "version": "1.1.5", + "license": "MIT" + }, + "../../node_modules/is-arrayish": { + "version": "0.2.1", + "dev": true, + "license": "MIT" + }, + "../../node_modules/is-bigint": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../../node_modules/is-binary-path": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/is-boolean-object": { + "version": "1.1.2", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../../node_modules/is-buffer": { + "version": "1.1.6", + "dev": true, + "license": "MIT" + }, + "../../node_modules/is-callable": { + "version": "1.2.4", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../../node_modules/is-core-module": { + "version": "2.8.1", + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../../node_modules/is-date-object": { + "version": "1.0.5", + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../../node_modules/is-extendable": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/is-extglob": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/is-function": { + "version": "1.0.2", + "license": "MIT" + }, + "../../node_modules/is-generator-fn": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "../../node_modules/is-glob": { + "version": "4.0.3", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/is-lambda": { + "version": "1.0.1", + "license": "MIT" + }, + "../../node_modules/is-negative-zero": { + "version": "2.0.2", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../../node_modules/is-number": { + "version": "7.0.0", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "../../node_modules/is-number-object": { + "version": "1.0.6", + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../../node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "../../node_modules/is-regex": { + "version": "1.1.4", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../../node_modules/is-shared-array-buffer": { + "version": "1.0.1", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../../node_modules/is-stream": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../node_modules/is-string": { + "version": "1.0.7", + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../../node_modules/is-symbol": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../../node_modules/is-typedarray": { + "version": "1.0.0", + "license": "MIT" + }, + "../../node_modules/is-weakref": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../../node_modules/isarray": { + "version": "1.0.0", + "license": "MIT" + }, + "../../node_modules/isexe": { + "version": "2.0.0", + "license": "ISC" + }, + "../../node_modules/isobject": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/isstream": { + "version": "0.1.2", + "license": "MIT" + }, + "../../node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/istanbul-lib-instrument": { + "version": "5.1.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "../../node_modules/istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "../../node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/istanbul-reports": { + "version": "3.1.4", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/iterm2-version": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "app-path": "^4.0.0", + "plist": "^3.0.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../node_modules/jest": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^27.5.1", + "import-local": "^3.0.2", + "jest-cli": "^27.5.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "../../node_modules/jest-changed-files": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "../../node_modules/jest-circus": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "../../node_modules/jest-config": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "../../node_modules/jest-config/node_modules/strip-json-comments": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../node_modules/jest-diff": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "../../node_modules/jest-docblock": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "../../node_modules/jest-each": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "../../node_modules/jest-environment-jsdom": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "../../node_modules/jest-environment-node": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "../../node_modules/jest-extended": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^26.6.2", + "jest-diff": "^27.2.5", + "jest-get-type": "^27.0.6", + "jest-matcher-utils": "^27.2.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "../../node_modules/jest-extended/node_modules/@jest/types": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "../../node_modules/jest-extended/node_modules/@types/yargs": { + "version": "15.0.14", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "../../node_modules/jest-extended/node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/jest-extended/node_modules/ansi-styles": { + "version": "4.3.0", + "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/jest-extended/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "../../node_modules/jest-extended/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "../../node_modules/jest-extended/node_modules/diff-sequences": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.14.2" + } + }, + "../../node_modules/jest-extended/node_modules/expect": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^26.6.2", + "ansi-styles": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "../../node_modules/jest-extended/node_modules/expect/node_modules/jest-diff": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "../../node_modules/jest-extended/node_modules/expect/node_modules/jest-get-type": { + "version": "26.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.14.2" + } + }, + "../../node_modules/jest-extended/node_modules/expect/node_modules/jest-matcher-utils": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "../../node_modules/jest-extended/node_modules/jest-message-util": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "../../node_modules/jest-extended/node_modules/jest-regex-util": { + "version": "26.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.14.2" + } + }, + "../../node_modules/jest-extended/node_modules/pretty-format": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "../../node_modules/jest-extended/node_modules/react-is": { + "version": "17.0.2", + "dev": true, + "license": "MIT" + }, + "../../node_modules/jest-get-type": { + "version": "27.5.1", + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "../../node_modules/jest-haste-map": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "../../node_modules/jest-jasmine2": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "../../node_modules/jest-leak-detector": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "../../node_modules/jest-matcher-utils": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "../../node_modules/jest-message-util": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "../../node_modules/jest-mock": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "../../node_modules/jest-pnp-resolver": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "../../node_modules/jest-regex-util": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "../../node_modules/jest-resolve": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "../../node_modules/jest-resolve-dependencies": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "../../node_modules/jest-runner": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "../../node_modules/jest-runtime": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "../../node_modules/jest-runtime/node_modules/strip-bom": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/jest-serializer": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "../../node_modules/jest-snapshot": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "../../node_modules/jest-util": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "../../node_modules/jest-validate": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "../../node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../node_modules/jest-watcher": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "../../node_modules/jest-worker": { + "version": "27.5.1", + "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/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "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/jest/node_modules/jest-cli": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "../../node_modules/jimp": { + "version": "0.16.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/custom": "^0.16.1", + "@jimp/plugins": "^0.16.1", + "@jimp/types": "^0.16.1", + "regenerator-runtime": "^0.13.3" + } + }, + "../../node_modules/jmespath": { + "version": "0.15.0", + "engines": { + "node": ">= 0.6.0" + } + }, + "../../node_modules/jpeg-js": { + "version": "0.4.2", + "license": "BSD-3-Clause" + }, + "../../node_modules/js-sdsl": { + "version": "2.1.4", + "license": "MIT" + }, + "../../node_modules/js-tokens": { + "version": "4.0.0", + "license": "MIT" + }, + "../../node_modules/js-yaml": { + "version": "3.14.1", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "../../node_modules/js-yaml/node_modules/argparse": { + "version": "1.0.10", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "../../node_modules/js2xmlparser": { + "version": "4.0.2", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "xmlcreate": "^2.0.4" + } + }, + "../../node_modules/jsbn": { + "version": "0.1.1", + "license": "MIT" + }, + "../../node_modules/jsdoc": { + "version": "3.6.10", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@babel/parser": "^7.9.4", + "@types/markdown-it": "^12.2.3", + "bluebird": "^3.7.2", + "catharsis": "^0.9.0", + "escape-string-regexp": "^2.0.0", + "js2xmlparser": "^4.0.2", + "klaw": "^4.0.1", + "markdown-it": "^12.3.2", + "markdown-it-anchor": "^8.4.1", + "marked": "^4.0.10", + "mkdirp": "^1.0.4", + "requizzle": "^0.2.3", + "strip-json-comments": "^3.1.0", + "taffydb": "2.6.2", + "underscore": "~1.13.2" + }, + "bin": { + "jsdoc": "jsdoc.js" + }, + "engines": { + "node": ">=8.15.0" + } + }, + "../../node_modules/jsdoc-api": { + "version": "5.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^4.0.0", + "cache-point": "^1.0.0", + "collect-all": "^1.0.3", + "file-set": "^2.0.1", + "fs-then-native": "^2.0.0", + "jsdoc": "^3.6.3", + "object-to-spawn-args": "^1.1.1", + "temp-path": "^1.0.0", + "walk-back": "^3.0.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "../../node_modules/jsdoc-api/node_modules/file-set": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^2.0.0", + "glob": "^7.1.3" + } + }, + "../../node_modules/jsdoc-api/node_modules/file-set/node_modules/array-back": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "typical": "^2.6.1" + }, + "engines": { + "node": ">=4" + } + }, + "../../node_modules/jsdoc-api/node_modules/walk-back": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "../../node_modules/jsdoc-parse": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^4.0.0", + "lodash.omit": "^4.5.0", + "lodash.pick": "^4.4.0", + "reduce-extract": "^1.0.0", + "sort-array": "^2.0.0", + "test-value": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/jsdoc-to-markdown": { + "version": "5.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^4.0.1", + "command-line-tool": "^0.8.0", + "config-master": "^3.1.0", + "dmd": "^4.0.5", + "jsdoc-api": "^5.0.4", + "jsdoc-parse": "^4.0.1", + "walk-back": "^4.0.0" + }, + "bin": { + "jsdoc2md": "bin/cli.js" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "../../node_modules/jsdoc/node_modules/escape-string-regexp": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/jsdoc/node_modules/marked": { + "version": "4.0.12", + "dev": true, + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, + "../../node_modules/jsdoc/node_modules/strip-json-comments": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../node_modules/jsdom": { + "version": "16.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "../../node_modules/jsdom/node_modules/form-data": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "../../node_modules/jsdom/node_modules/tough-cookie": { + "version": "4.0.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + }, + "engines": { + "node": ">=6" + } + }, + "../../node_modules/jsdom/node_modules/tr46": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/jsdom/node_modules/universalify": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "../../node_modules/jsdom/node_modules/webidl-conversions": { + "version": "6.1.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=10.4" + } + }, + "../../node_modules/jsdom/node_modules/whatwg-url": { + "version": "8.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "../../node_modules/jsesc": { + "version": "2.5.2", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "../../node_modules/json-fixer": { + "version": "1.6.13", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.14.6", + "chalk": "^4.1.2", + "pegjs": "^0.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "../../node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "license": "MIT" + }, + "../../node_modules/json-schema": { + "version": "0.4.0", + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "../../node_modules/json-schema-migrate": { + "version": "0.2.0", + "license": "MIT", + "dependencies": { + "ajv": "^5.0.0" + } + }, + "../../node_modules/json-schema-migrate/node_modules/ajv": { + "version": "5.5.2", + "license": "MIT", + "dependencies": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "../../node_modules/json-schema-migrate/node_modules/fast-deep-equal": { + "version": "1.1.0", + "license": "MIT" + }, + "../../node_modules/json-schema-migrate/node_modules/json-schema-traverse": { + "version": "0.3.1", + "license": "MIT" + }, + "../../node_modules/json-schema-traverse": { + "version": "0.4.1", + "license": "MIT" + }, + "../../node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "license": "MIT" + }, + "../../node_modules/json-stringify-nice": { + "version": "1.1.4", + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "../../node_modules/json-stringify-safe": { + "version": "5.0.1", + "license": "ISC" + }, + "../../node_modules/json-to-ast": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "code-error-fragment": "0.0.230", + "grapheme-splitter": "^1.0.4" + }, + "engines": { + "node": ">= 4" + } + }, + "../../node_modules/json5": { + "version": "2.2.0", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "../../node_modules/jsonc-parser": { + "version": "3.0.0", + "dev": true, + "license": "MIT" + }, + "../../node_modules/jsonfile": { + "version": "1.0.1" + }, + "../../node_modules/jsonparse": { + "version": "1.3.1", + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "../../node_modules/jsonpointer": { + "version": "4.1.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/jsprim": { + "version": "1.4.2", + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "../../node_modules/just-diff": { + "version": "3.1.1", + "license": "MIT" + }, + "../../node_modules/just-diff-apply": { + "version": "3.1.2", + "license": "MIT" + }, + "../../node_modules/kind-of": { + "version": "6.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/klaw": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14.0" + } + }, + "../../node_modules/kleur": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "../../node_modules/lazy-cache": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "set-getter": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/leven": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "../../node_modules/levenshtein-edit-distance": { + "version": "2.0.5", + "license": "MIT", + "bin": { + "levenshtein-edit-distance": "cli.js" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "../../node_modules/levn": { + "version": "0.4.1", + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "../../node_modules/lines-and-columns": { + "version": "1.2.4", + "dev": true, + "license": "MIT" + }, + "../../node_modules/linkify-it": { + "version": "3.0.3", + "license": "MIT", + "dependencies": { + "uc.micro": "^1.0.1" + } + }, + "../../node_modules/list-item": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "expand-range": "^1.8.1", + "extend-shallow": "^2.0.1", + "is-number": "^2.1.0", + "repeat-string": "^1.5.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/list-item/node_modules/is-number": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/list-item/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/load-bmfont": { + "version": "1.4.1", + "license": "MIT", + "dependencies": { + "buffer-equal": "0.0.1", + "mime": "^1.3.4", + "parse-bmfont-ascii": "^1.0.3", + "parse-bmfont-binary": "^1.0.5", + "parse-bmfont-xml": "^1.1.4", + "phin": "^2.9.1", + "xhr": "^2.0.1", + "xtend": "^4.0.0" + } + }, + "../../node_modules/locate-path": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "../../node_modules/lodash": { + "version": "4.17.21", + "license": "MIT" + }, + "../../node_modules/lodash._reinterpolate": { + "version": "3.0.0", + "dev": true, + "license": "MIT" + }, + "../../node_modules/lodash.camelcase": { + "version": "4.3.0", + "license": "MIT" + }, + "../../node_modules/lodash.clonedeep": { + "version": "4.5.0", + "license": "MIT" + }, + "../../node_modules/lodash.debounce": { + "version": "4.0.8", + "license": "MIT" + }, + "../../node_modules/lodash.kebabcase": { + "version": "4.1.1", + "license": "MIT" + }, + "../../node_modules/lodash.memoize": { + "version": "4.1.2", + "dev": true, + "license": "MIT" + }, + "../../node_modules/lodash.merge": { + "version": "4.6.2", + "license": "MIT" + }, + "../../node_modules/lodash.omit": { + "version": "4.5.0", + "dev": true, + "license": "MIT" + }, + "../../node_modules/lodash.padend": { + "version": "4.6.1", + "dev": true, + "license": "MIT" + }, + "../../node_modules/lodash.pick": { + "version": "4.4.0", + "dev": true, + "license": "MIT" + }, + "../../node_modules/lodash.snakecase": { + "version": "4.1.1", + "license": "MIT" + }, + "../../node_modules/lodash.template": { + "version": "4.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "../../node_modules/lodash.templatesettings": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash._reinterpolate": "^3.0.0" + } + }, + "../../node_modules/lodash.upperfirst": { + "version": "4.3.1", + "license": "MIT" + }, + "../../node_modules/log-update": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../node_modules/log-update/node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/log-update/node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "../../node_modules/log-update/node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "../../node_modules/log-update/node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "../../node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/log-update/node_modules/string-width": { + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/log-update/node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/loglevel": { + "version": "1.8.0", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/loglevel" + } + }, + "../../node_modules/loose-envify": { + "version": "1.4.0", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "../../node_modules/lru-cache": { + "version": "6.0.0", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "../../node_modules/lunr": { + "version": "2.3.9", + "dev": true, + "license": "MIT" + }, + "../../node_modules/make-dir": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "../../node_modules/make-error": { + "version": "1.3.6", + "license": "ISC" + }, + "../../node_modules/make-fetch-happen": { + "version": "9.1.0", + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "../../node_modules/makeerror": { + "version": "1.0.12", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "../../node_modules/map-stream": { + "version": "0.1.0", + "dev": true + }, + "../../node_modules/markdown-it": { + "version": "12.3.2", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "../../node_modules/markdown-it-anchor": { + "version": "8.4.1", + "dev": true, + "license": "Unlicense", + "peerDependencies": { + "@types/markdown-it": "*", + "markdown-it": "*" + } + }, + "../../node_modules/markdown-link": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/markdown-toc": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "concat-stream": "^1.5.2", + "diacritics-map": "^0.1.0", + "gray-matter": "^2.1.0", + "lazy-cache": "^2.0.2", + "list-item": "^1.1.1", + "markdown-link": "^0.1.1", + "minimist": "^1.2.0", + "mixin-deep": "^1.1.3", + "object.pick": "^1.2.0", + "remarkable": "^1.7.1", + "repeat-string": "^1.6.1", + "strip-color": "^0.1.0" + }, + "bin": { + "markdown-toc": "cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/markdown-toc/node_modules/concat-stream": { + "version": "1.6.2", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "../../node_modules/marked": { + "version": "0.7.0", + "dev": true, + "license": "MIT", + "bin": { + "marked": "bin/marked" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/math-random": { + "version": "1.0.4", + "dev": true, + "license": "MIT" + }, + "../../node_modules/mdurl": { + "version": "1.0.1", + "license": "MIT" + }, + "../../node_modules/merge-stream": { + "version": "2.0.0", + "license": "MIT" + }, + "../../node_modules/merge2": { + "version": "1.4.1", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "../../node_modules/micromatch": { + "version": "4.0.4", + "license": "MIT", + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "../../node_modules/mime": { + "version": "1.6.0", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "../../node_modules/mime-db": { + "version": "1.51.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "../../node_modules/mime-types": { + "version": "2.1.34", + "license": "MIT", + "dependencies": { + "mime-db": "1.51.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "../../node_modules/mimic-fn": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "../../node_modules/min-document": { + "version": "2.19.0", + "dependencies": { + "dom-walk": "^0.1.0" + } + }, + "../../node_modules/minimatch": { + "version": "3.1.1", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "../../node_modules/minimist": { + "version": "1.2.5", + "license": "MIT" + }, + "../../node_modules/minipass": { + "version": "3.1.6", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/minipass-collect": { + "version": "1.0.2", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "../../node_modules/minipass-fetch": { + "version": "1.4.1", + "license": "MIT", + "dependencies": { + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "encoding": "^0.1.12" + } + }, + "../../node_modules/minipass-flush": { + "version": "1.0.5", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "../../node_modules/minipass-json-stream": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "../../node_modules/minipass-pipeline": { + "version": "1.2.4", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/minipass-sized": { + "version": "1.0.3", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/minizlib": { + "version": "2.1.2", + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "../../node_modules/mixin-deep": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/mixin-deep/node_modules/is-plain-object": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/mixin-deep/node_modules/isobject": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/mkdirp": { + "version": "1.0.4", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "../../node_modules/mkdirp-infer-owner": { + "version": "2.0.0", + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "infer-owner": "^1.0.4", + "mkdirp": "^1.0.3" + }, + "engines": { + "node": ">=10" + } + }, + "../../node_modules/mkdirp2": { + "version": "1.0.5", + "dev": true, + "license": "MIT" + }, + "../../node_modules/mqtt": { + "version": "4.3.5", + "license": "MIT", + "dependencies": { + "commist": "^1.0.0", + "concat-stream": "^2.0.0", + "debug": "^4.1.1", + "duplexify": "^4.1.1", + "help-me": "^3.0.0", + "inherits": "^2.0.3", + "lru-cache": "^6.0.0", + "minimist": "^1.2.5", + "mqtt-packet": "^6.8.0", + "number-allocator": "^1.0.9", + "pump": "^3.0.0", + "readable-stream": "^3.6.0", + "reinterval": "^1.1.0", + "rfdc": "^1.3.0", + "split2": "^3.1.0", + "ws": "^7.5.5", + "xtend": "^4.0.2" + }, + "bin": { + "mqtt": "bin/mqtt.js", + "mqtt_pub": "bin/pub.js", + "mqtt_sub": "bin/sub.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "../../node_modules/mqtt-packet": { + "version": "6.10.0", + "license": "MIT", + "dependencies": { + "bl": "^4.0.2", + "debug": "^4.1.1", + "process-nextick-args": "^2.0.1" + } + }, + "../../node_modules/mqtt/node_modules/readable-stream": { + "version": "3.6.0", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "../../node_modules/ms": { + "version": "2.1.2", + "license": "MIT" + }, + "../../node_modules/mute-stream": { + "version": "0.0.8", + "dev": true, + "license": "ISC" + }, + "../../node_modules/natural-compare": { + "version": "1.4.0", + "license": "MIT" + }, + "../../node_modules/ncp": { + "version": "0.4.2", + "license": "MIT", + "bin": { + "ncp": "bin/ncp" + } + }, + "../../node_modules/negotiator": { + "version": "0.6.3", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "../../node_modules/neo-async": { + "version": "2.6.2", + "dev": true, + "license": "MIT" + }, + "../../node_modules/node-cleanup": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "../../node_modules/node-fetch": { + "version": "2.6.7", + "license": "MIT", + "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-gyp": { + "version": "7.1.2", + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.3", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "request": "^2.88.2", + "rimraf": "^3.0.2", + "semver": "^7.3.2", + "tar": "^6.0.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 10.12.0" + } + }, + "../../node_modules/node-gyp-build": { + "version": "4.3.0", + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "../../node_modules/node-int64": { + "version": "0.4.0", + "dev": true, + "license": "MIT" + }, + "../../node_modules/node-releases": { + "version": "2.0.2", + "license": "MIT" + }, + "../../node_modules/nopt": { + "version": "5.0.0", + "license": "ISC", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "../../node_modules/normalize-path": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/npm-bundled": { + "version": "1.1.2", + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "../../node_modules/npm-install-checks": { + "version": "4.0.0", + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": ">=10" + } + }, + "../../node_modules/npm-normalize-package-bin": { + "version": "1.0.1", + "license": "ISC" + }, + "../../node_modules/npm-package-arg": { + "version": "8.1.5", + "license": "ISC", + "dependencies": { + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "../../node_modules/npm-packlist": { + "version": "2.2.2", + "license": "ISC", + "dependencies": { + "glob": "^7.1.6", + "ignore-walk": "^3.0.3", + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "npm-packlist": "bin/index.js" + }, + "engines": { + "node": ">=10" + } + }, + "../../node_modules/npm-pick-manifest": { + "version": "6.1.1", + "license": "ISC", + "dependencies": { + "npm-install-checks": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^8.1.2", + "semver": "^7.3.4" + } + }, + "../../node_modules/npm-registry-fetch": { + "version": "11.0.0", + "license": "ISC", + "dependencies": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "../../node_modules/npm-run-path": { + "version": "4.0.1", + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/npmlog": { + "version": "4.1.2", + "license": "ISC", + "dependencies": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "../../node_modules/number-allocator": { + "version": "1.0.9", + "license": "MIT", + "dependencies": { + "debug": "^4.3.1", + "js-sdsl": "^2.1.2" + } + }, + "../../node_modules/number-is-nan": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/nunjucks": { + "version": "3.2.3", + "license": "BSD-2-Clause", + "dependencies": { + "a-sync-waterfall": "^1.0.0", + "asap": "^2.0.3", + "commander": "^5.1.0" + }, + "bin": { + "nunjucks-precompile": "bin/precompile" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "chokidar": "^3.3.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "../../node_modules/nunjucks/node_modules/commander": { + "version": "5.1.0", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "../../node_modules/nwsapi": { + "version": "2.2.0", + "dev": true, + "license": "MIT" + }, + "../../node_modules/oauth-sign": { + "version": "0.9.0", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "../../node_modules/object-assign": { + "version": "4.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/object-get": { + "version": "2.1.1", + "dev": true, + "license": "MIT" + }, + "../../node_modules/object-inspect": { + "version": "1.12.0", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../../node_modules/object-keys": { + "version": "1.1.1", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "../../node_modules/object-to-spawn-args": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "../../node_modules/object.assign": { + "version": "4.1.2", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../../node_modules/object.pick": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/object.pick/node_modules/isobject": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/object.values": { + "version": "1.1.5", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../../node_modules/omggif": { + "version": "1.0.10", + "license": "MIT" + }, + "../../node_modules/once": { + "version": "1.4.0", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "../../node_modules/onetime": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../node_modules/optionator": { + "version": "0.9.1", + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "../../node_modules/os-tmpdir": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/p-limit": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "../../node_modules/p-locate": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "../../node_modules/p-map": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../node_modules/p-try": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "../../node_modules/pacote": { + "version": "11.3.5", + "license": "ISC", + "dependencies": { + "@npmcli/git": "^2.1.0", + "@npmcli/installed-package-contents": "^1.0.6", + "@npmcli/promise-spawn": "^1.2.0", + "@npmcli/run-script": "^1.8.2", + "cacache": "^15.0.5", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.3", + "mkdirp": "^1.0.3", + "npm-package-arg": "^8.0.1", + "npm-packlist": "^2.1.4", + "npm-pick-manifest": "^6.0.0", + "npm-registry-fetch": "^11.0.0", + "promise-retry": "^2.0.1", + "read-package-json-fast": "^2.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.1.0" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "../../node_modules/pako": { + "version": "1.0.11", + "license": "(MIT AND Zlib)" + }, + "../../node_modules/parent-module": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "../../node_modules/parse-bmfont-ascii": { + "version": "1.0.6", + "license": "MIT" + }, + "../../node_modules/parse-bmfont-binary": { + "version": "1.0.6", + "license": "MIT" + }, + "../../node_modules/parse-bmfont-xml": { + "version": "1.1.4", + "license": "MIT", + "dependencies": { + "xml-parse-from-string": "^1.0.0", + "xml2js": "^0.4.5" + } + }, + "../../node_modules/parse-conflict-json": { + "version": "1.1.1", + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^2.3.0", + "just-diff": "^3.0.1", + "just-diff-apply": "^3.0.0" + } + }, + "../../node_modules/parse-headers": { + "version": "2.0.4", + "license": "MIT" + }, + "../../node_modules/parse-json": { + "version": "5.2.0", + "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/parse5": { + "version": "6.0.1", + "dev": true, + "license": "MIT" + }, + "../../node_modules/path-exists": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "../../node_modules/path-is-absolute": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/path-key": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/path-parse": { + "version": "1.0.7", + "license": "MIT" + }, + "../../node_modules/path-to-regexp": { + "version": "6.2.0", + "license": "MIT" + }, + "../../node_modules/path-type": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/pause-stream": { + "version": "0.0.11", + "dev": true, + "license": [ + "MIT", + "Apache2" + ], + "dependencies": { + "through": "~2.3" + } + }, + "../../node_modules/pegjs": { + "version": "0.10.0", + "dev": true, + "license": "MIT", + "bin": { + "pegjs": "bin/pegjs" + }, + "engines": { + "node": ">=0.10" + } + }, + "../../node_modules/performance-now": { + "version": "2.1.0", + "license": "MIT" + }, + "../../node_modules/phin": { + "version": "2.9.3", + "license": "MIT" + }, + "../../node_modules/picocolors": { + "version": "1.0.0", + "license": "ISC" + }, + "../../node_modules/picomatch": { + "version": "2.3.1", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "../../node_modules/pify": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../node_modules/pirates": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "../../node_modules/pixelmatch": { + "version": "4.0.2", + "license": "ISC", + "dependencies": { + "pngjs": "^3.0.0" + }, + "bin": { + "pixelmatch": "bin/pixelmatch" + } + }, + "../../node_modules/pkg-dir": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/pkg-dir/node_modules/p-try": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "../../node_modules/pkg-dir/node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/plist": { + "version": "3.0.4", + "license": "MIT", + "dependencies": { + "base64-js": "^1.5.1", + "xmlbuilder": "^9.0.7" + }, + "engines": { + "node": ">=6" + } + }, + "../../node_modules/plist/node_modules/xmlbuilder": { + "version": "9.0.7", + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "../../node_modules/pngjs": { + "version": "3.4.0", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "../../node_modules/prelude-ls": { + "version": "1.2.1", + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "../../node_modules/prettier": { + "version": "2.5.1", + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "../../node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "../../node_modules/pretty-format": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "../../node_modules/pretty-format/node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "../../node_modules/pretty-format/node_modules/react-is": { + "version": "17.0.2", + "license": "MIT" + }, + "../../node_modules/proc-log": { + "version": "1.0.0", + "license": "ISC" + }, + "../../node_modules/process": { + "version": "0.11.10", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "../../node_modules/process-nextick-args": { + "version": "2.0.1", + "license": "MIT" + }, + "../../node_modules/promise-all-reject-late": { + "version": "1.0.1", + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "../../node_modules/promise-call-limit": { + "version": "1.0.1", + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "../../node_modules/promise-inflight": { + "version": "1.0.1", + "license": "ISC" + }, + "../../node_modules/promise-retry": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "../../node_modules/prompts": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "../../node_modules/prop-types": { + "version": "15.8.1", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "../../node_modules/ps-tree": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "event-stream": "=3.3.4" + }, + "bin": { + "ps-tree": "bin/ps-tree.js" + }, + "engines": { + "node": ">= 0.10" + } + }, + "../../node_modules/psl": { + "version": "1.8.0", + "license": "MIT" + }, + "../../node_modules/pump": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "../../node_modules/punycode": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "../../node_modules/qs": { + "version": "6.11.0", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../../node_modules/queue-microtask": { + "version": "1.2.3", + "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/ramldt2jsonschema": { + "version": "1.2.3", + "license": "Apache-2.0", + "dependencies": { + "commander": "^5.0.0", + "js-yaml": "^3.14.0", + "json-schema-migrate": "^0.2.0", + "webapi-parser": "^0.5.0" + }, + "bin": { + "dt2js": "bin/dt2js.js", + "js2dt": "bin/js2dt.js" + } + }, + "../../node_modules/ramldt2jsonschema/node_modules/commander": { + "version": "5.1.0", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "../../node_modules/randomatic": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "../../node_modules/randomatic/node_modules/is-number": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/react": { + "version": "17.0.2", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/react-is": { + "version": "16.13.1", + "license": "MIT" + }, + "../../node_modules/read-cmd-shim": { + "version": "2.0.0", + "license": "ISC" + }, + "../../node_modules/read-package-json-fast": { + "version": "2.0.3", + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "../../node_modules/readable-stream": { + "version": "2.3.7", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "../../node_modules/readdir-scoped-modules": { + "version": "1.1.0", + "license": "ISC", + "dependencies": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "../../node_modules/readdirp": { + "version": "3.6.0", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "../../node_modules/redis": { + "version": "4.0.3", + "license": "MIT", + "workspaces": [ + "./packages/*" + ], + "dependencies": { + "@node-redis/bloom": "1.0.1", + "@node-redis/client": "1.0.3", + "@node-redis/graph": "1.0.0", + "@node-redis/json": "1.0.2", + "@node-redis/search": "1.0.2", + "@node-redis/time-series": "1.0.1" + } + }, + "../../node_modules/redis-errors": { + "version": "1.2.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "../../node_modules/redis-parser": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "redis-errors": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "../../node_modules/reduce-extract": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "test-value": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/reduce-extract/node_modules/array-back": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "typical": "^2.6.0" + }, + "engines": { + "node": ">=0.12.0" + } + }, + "../../node_modules/reduce-extract/node_modules/test-value": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^1.0.2", + "typical": "^2.4.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/reduce-flatten": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/reduce-unique": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "../../node_modules/reduce-without": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "test-value": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/reduce-without/node_modules/array-back": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "typical": "^2.6.0" + }, + "engines": { + "node": ">=0.12.0" + } + }, + "../../node_modules/reduce-without/node_modules/test-value": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^1.0.3", + "typical": "^2.6.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/regenerate": { + "version": "1.4.2", + "license": "MIT" + }, + "../../node_modules/regenerate-unicode-properties": { + "version": "10.0.1", + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "../../node_modules/regenerator-runtime": { + "version": "0.13.9", + "license": "MIT" + }, + "../../node_modules/regenerator-transform": { + "version": "0.14.5", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "../../node_modules/regexpp": { + "version": "3.2.0", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "../../node_modules/regexpu-core": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "../../node_modules/regjsgen": { + "version": "0.6.0", + "license": "MIT" + }, + "../../node_modules/regjsparser": { + "version": "0.8.4", + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "../../node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "bin": { + "jsesc": "bin/jsesc" + } + }, + "../../node_modules/reinterval": { + "version": "1.1.0", + "license": "MIT" + }, + "../../node_modules/remarkable": { + "version": "1.7.4", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.10", + "autolinker": "~0.28.0" + }, + "bin": { + "remarkable": "bin/remarkable.js" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "../../node_modules/remarkable/node_modules/argparse": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "../../node_modules/remove-trailing-separator": { + "version": "1.1.0", + "dev": true, + "license": "ISC" + }, + "../../node_modules/render-gif": { + "version": "2.0.4", + "license": "MIT", + "dependencies": { + "cycled": "^1.2.0", + "decode-gif": "^1.0.1", + "delay": "^4.3.0", + "jimp": "^0.14.0" + }, + "engines": { + "node": ">=10" + } + }, + "../../node_modules/render-gif/node_modules/@jimp/bmp": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "bmp-js": "^0.1.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/render-gif/node_modules/@jimp/core": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "any-base": "^1.1.0", + "buffer": "^5.2.0", + "exif-parser": "^0.1.12", + "file-type": "^9.0.0", + "load-bmfont": "^1.3.1", + "mkdirp": "^0.5.1", + "phin": "^2.9.1", + "pixelmatch": "^4.0.2", + "tinycolor2": "^1.4.1" + } + }, + "../../node_modules/render-gif/node_modules/@jimp/custom": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/core": "^0.14.0" + } + }, + "../../node_modules/render-gif/node_modules/@jimp/gif": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "gifwrap": "^0.9.2", + "omggif": "^1.0.9" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/render-gif/node_modules/@jimp/jpeg": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "jpeg-js": "^0.4.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/render-gif/node_modules/@jimp/plugin-blit": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/render-gif/node_modules/@jimp/plugin-blur": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/render-gif/node_modules/@jimp/plugin-circle": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/render-gif/node_modules/@jimp/plugin-color": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "tinycolor2": "^1.4.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/render-gif/node_modules/@jimp/plugin-contain": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blit": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5", + "@jimp/plugin-scale": ">=0.3.5" + } + }, + "../../node_modules/render-gif/node_modules/@jimp/plugin-cover": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-crop": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5", + "@jimp/plugin-scale": ">=0.3.5" + } + }, + "../../node_modules/render-gif/node_modules/@jimp/plugin-crop": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/render-gif/node_modules/@jimp/plugin-displace": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/render-gif/node_modules/@jimp/plugin-dither": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/render-gif/node_modules/@jimp/plugin-fisheye": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/render-gif/node_modules/@jimp/plugin-flip": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-rotate": ">=0.3.5" + } + }, + "../../node_modules/render-gif/node_modules/@jimp/plugin-gaussian": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/render-gif/node_modules/@jimp/plugin-invert": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/render-gif/node_modules/@jimp/plugin-mask": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/render-gif/node_modules/@jimp/plugin-normalize": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/render-gif/node_modules/@jimp/plugin-print": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "load-bmfont": "^1.4.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blit": ">=0.3.5" + } + }, + "../../node_modules/render-gif/node_modules/@jimp/plugin-resize": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/render-gif/node_modules/@jimp/plugin-rotate": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blit": ">=0.3.5", + "@jimp/plugin-crop": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5" + } + }, + "../../node_modules/render-gif/node_modules/@jimp/plugin-scale": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5" + } + }, + "../../node_modules/render-gif/node_modules/@jimp/plugin-shadow": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blur": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5" + } + }, + "../../node_modules/render-gif/node_modules/@jimp/plugin-threshold": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-color": ">=0.8.0", + "@jimp/plugin-resize": ">=0.8.0" + } + }, + "../../node_modules/render-gif/node_modules/@jimp/plugins": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/plugin-blit": "^0.14.0", + "@jimp/plugin-blur": "^0.14.0", + "@jimp/plugin-circle": "^0.14.0", + "@jimp/plugin-color": "^0.14.0", + "@jimp/plugin-contain": "^0.14.0", + "@jimp/plugin-cover": "^0.14.0", + "@jimp/plugin-crop": "^0.14.0", + "@jimp/plugin-displace": "^0.14.0", + "@jimp/plugin-dither": "^0.14.0", + "@jimp/plugin-fisheye": "^0.14.0", + "@jimp/plugin-flip": "^0.14.0", + "@jimp/plugin-gaussian": "^0.14.0", + "@jimp/plugin-invert": "^0.14.0", + "@jimp/plugin-mask": "^0.14.0", + "@jimp/plugin-normalize": "^0.14.0", + "@jimp/plugin-print": "^0.14.0", + "@jimp/plugin-resize": "^0.14.0", + "@jimp/plugin-rotate": "^0.14.0", + "@jimp/plugin-scale": "^0.14.0", + "@jimp/plugin-shadow": "^0.14.0", + "@jimp/plugin-threshold": "^0.14.0", + "timm": "^1.6.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/render-gif/node_modules/@jimp/png": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "pngjs": "^3.3.3" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/render-gif/node_modules/@jimp/tiff": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "utif": "^2.0.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/render-gif/node_modules/@jimp/types": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/bmp": "^0.14.0", + "@jimp/gif": "^0.14.0", + "@jimp/jpeg": "^0.14.0", + "@jimp/png": "^0.14.0", + "@jimp/tiff": "^0.14.0", + "timm": "^1.6.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "../../node_modules/render-gif/node_modules/@jimp/utils": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "regenerator-runtime": "^0.13.3" + } + }, + "../../node_modules/render-gif/node_modules/jimp": { + "version": "0.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/custom": "^0.14.0", + "@jimp/plugins": "^0.14.0", + "@jimp/types": "^0.14.0", + "regenerator-runtime": "^0.13.3" + } + }, + "../../node_modules/render-gif/node_modules/mkdirp": { + "version": "0.5.5", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "../../node_modules/repeat-element": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/repeat-string": { + "version": "1.6.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "../../node_modules/request": { + "version": "2.88.2", + "license": "Apache-2.0", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "../../node_modules/request/node_modules/qs": { + "version": "6.5.3", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.6" + } + }, + "../../node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "../../node_modules/require-directory": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/require-main-filename": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "../../node_modules/requizzle": { + "version": "0.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.14" + } + }, + "../../node_modules/resolve": { + "version": "1.22.0", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.8.1", + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/resolve-from": { + "version": "5.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/resolve-pkg": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/resolve.exports": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "../../node_modules/restore-cursor": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/ret": { + "version": "0.1.15", + "license": "MIT", + "engines": { + "node": ">=0.12" + } + }, + "../../node_modules/retry": { + "version": "0.12.0", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "../../node_modules/reusify": { + "version": "1.0.4", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "../../node_modules/rfdc": { + "version": "1.3.0", + "license": "MIT" + }, + "../../node_modules/rimraf": { + "version": "3.0.2", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "../../node_modules/rollup": { + "version": "2.67.2", + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "../../node_modules/run-async": { + "version": "2.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "../../node_modules/run-parallel": { + "version": "1.2.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "../../node_modules/rxjs": { + "version": "6.6.7", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "../../node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" + }, + "../../node_modules/safe-regex": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "ret": "~0.1.10" + } + }, + "../../node_modules/safer-buffer": { + "version": "2.1.2", + "license": "MIT" + }, + "../../node_modules/sax": { + "version": "1.2.4", + "license": "ISC" + }, + "../../node_modules/saxes": { + "version": "5.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "../../node_modules/semver": { + "version": "7.3.5", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "../../node_modules/set-blocking": { + "version": "2.0.0", + "license": "ISC" + }, + "../../node_modules/set-getter": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "to-object-path": "^0.3.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/shebang-command": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/shebang-regex": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/shiki": { + "version": "0.10.0", + "dev": true, + "license": "MIT", + "dependencies": { + "jsonc-parser": "^3.0.0", + "vscode-oniguruma": "^1.6.1", + "vscode-textmate": "5.2.0" + } + }, + "../../node_modules/side-channel": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../../node_modules/signal-exit": { + "version": "3.0.7", + "license": "ISC" + }, + "../../node_modules/simple-git": { + "version": "3.7.1", + "license": "MIT", + "dependencies": { + "@kwsites/file-exists": "^1.1.1", + "@kwsites/promise-deferred": "^1.1.1", + "debug": "^4.3.3" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/steveukx/" + } + }, + "../../node_modules/sisteransi": { + "version": "1.0.5", + "dev": true, + "license": "MIT" + }, + "../../node_modules/slash": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/slice-ansi": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "../../node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "../../node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "../../node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "../../node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/smart-buffer": { + "version": "4.2.0", + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "../../node_modules/socket.io": { + "version": "4.4.1", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.1.0", + "socket.io-adapter": "~2.3.3", + "socket.io-parser": "~4.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "../../node_modules/socket.io-adapter": { + "version": "2.3.3", + "license": "MIT" + }, + "../../node_modules/socket.io-parser": { + "version": "4.0.4", + "license": "MIT", + "dependencies": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "../../node_modules/socks": { + "version": "2.6.2", + "license": "MIT", + "dependencies": { + "ip": "^1.1.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "../../node_modules/socks-proxy-agent": { + "version": "6.1.1", + "license": "MIT", + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.1", + "socks": "^2.6.1" + }, + "engines": { + "node": ">= 10" + } + }, + "../../node_modules/sort-array": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^1.0.4", + "object-get": "^2.1.0", + "typical": "^2.6.0" + }, + "engines": { + "node": ">=4" + } + }, + "../../node_modules/sort-array/node_modules/array-back": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "typical": "^2.6.0" + }, + "engines": { + "node": ">=0.12.0" + } + }, + "../../node_modules/source-map": { + "version": "0.5.7", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/source-map-support": { + "version": "0.5.21", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "../../node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/split2": { + "version": "3.2.2", + "license": "ISC", + "dependencies": { + "readable-stream": "^3.0.0" + } + }, + "../../node_modules/split2/node_modules/readable-stream": { + "version": "3.6.0", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "../../node_modules/sprintf-js": { + "version": "1.0.3", + "license": "BSD-3-Clause" + }, + "../../node_modules/sshpk": { + "version": "1.17.0", + "license": "MIT", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/ssri": { + "version": "8.0.1", + "license": "ISC", + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "../../node_modules/stack-utils": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "../../node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/stream-combiner": { + "version": "0.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexer": "~0.1.1" + } + }, + "../../node_modules/stream-connect": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/stream-connect/node_modules/array-back": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "typical": "^2.6.0" + }, + "engines": { + "node": ">=0.12.0" + } + }, + "../../node_modules/stream-shift": { + "version": "1.0.1", + "license": "MIT" + }, + "../../node_modules/stream-via": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "../../node_modules/string-argv": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.19" + } + }, + "../../node_modules/string-length": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "../../node_modules/string-length/node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/string-length/node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/string-width": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/string.prototype.trimend": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../../node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../../node_modules/strip-ansi": { + "version": "3.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/strip-bom": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "../../node_modules/strip-color": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/strip-final-newline": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "../../node_modules/strip-outer": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/supports-color": { + "version": "5.5.0", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "../../node_modules/supports-hyperlinks": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/supports-hyperlinks/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../../node_modules/svg-element-attributes": { + "version": "1.3.1", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "../../node_modules/symbol-tree": { + "version": "3.2.4", + "dev": true, + "license": "MIT" + }, + "../../node_modules/table-layout": { + "version": "0.4.5", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^2.0.0", + "deep-extend": "~0.6.0", + "lodash.padend": "^4.6.1", + "typical": "^2.6.1", + "wordwrapjs": "^3.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "../../node_modules/table-layout/node_modules/array-back": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "typical": "^2.6.1" + }, + "engines": { + "node": ">=4" + } + }, + "../../node_modules/taffydb": { + "version": "2.6.2", + "dev": true + }, + "../../node_modules/tar": { + "version": "6.1.11", + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "../../node_modules/temp-path": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "../../node_modules/term-img": { + "version": "6.0.0", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^5.0.0", + "iterm2-version": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../node_modules/term-img/node_modules/ansi-escapes": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "type-fest": "^1.0.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../node_modules/term-img/node_modules/type-fest": { + "version": "1.4.0", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../node_modules/terminal-image": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.1", + "jimp": "^0.16.1", + "log-update": "^4.0.0", + "render-gif": "^2.0.4", + "term-img": "^6.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../node_modules/terminal-link": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../node_modules/test-exclude": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/test-value": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^2.0.0", + "typical": "^2.6.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "../../node_modules/test-value/node_modules/array-back": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "typical": "^2.6.1" + }, + "engines": { + "node": ">=4" + } + }, + "../../node_modules/text-table": { + "version": "0.2.0", + "license": "MIT" + }, + "../../node_modules/throat": { + "version": "6.0.1", + "dev": true, + "license": "MIT" + }, + "../../node_modules/through": { + "version": "2.3.8", + "dev": true, + "license": "MIT" + }, + "../../node_modules/through2": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "../../node_modules/timm": { + "version": "1.7.1", + "license": "MIT" + }, + "../../node_modules/tiny-merge-patch": { + "version": "0.1.2", + "license": "MIT" + }, + "../../node_modules/tinycolor2": { + "version": "1.4.2", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "../../node_modules/tmp": { + "version": "0.0.33", + "dev": true, + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "../../node_modules/tmpl": { + "version": "1.0.5", + "dev": true, + "license": "BSD-3-Clause" + }, + "../../node_modules/to-fast-properties": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "../../node_modules/to-object-path": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/to-regex-range": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "../../node_modules/toml": { + "version": "2.3.6", + "dev": true, + "license": "MIT" + }, + "../../node_modules/tough-cookie": { + "version": "2.5.0", + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "../../node_modules/tr46": { + "version": "0.0.3", + "license": "MIT" + }, + "../../node_modules/treeverse": { + "version": "1.0.4", + "license": "ISC" + }, + "../../node_modules/trim-repeated": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/ts-jest": { + "version": "27.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^27.0.0", + "json5": "2.x", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@types/jest": "^27.0.0", + "babel-jest": ">=27.0.0 <28", + "esbuild": "~0.14.0", + "jest": "^27.0.0", + "typescript": ">=3.8 <5.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@types/jest": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "../../node_modules/ts-node": { + "version": "9.1.1", + "license": "MIT", + "dependencies": { + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "typescript": ">=2.7" + } + }, + "../../node_modules/tsc-watch": { + "version": "4.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "node-cleanup": "^2.1.2", + "ps-tree": "^1.2.0", + "string-argv": "^0.1.1", + "strip-ansi": "^6.0.0" + }, + "bin": { + "tsc-watch": "index.js" + }, + "engines": { + "node": ">=8.17.0" + }, + "peerDependencies": { + "typescript": "*" + } + }, + "../../node_modules/tsc-watch/node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/tsc-watch/node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/tsconfig-paths": { + "version": "3.12.0", + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + } + }, + "../../node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "../../node_modules/tslib": { + "version": "1.14.1", + "license": "0BSD" + }, + "../../node_modules/tsutils": { + "version": "3.21.0", + "license": "MIT", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "../../node_modules/tunnel-agent": { + "version": "0.6.0", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "../../node_modules/tweetnacl": { + "version": "0.14.5", + "license": "Unlicense" + }, + "../../node_modules/type-check": { + "version": "0.4.0", + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "../../node_modules/type-detect": { + "version": "4.0.8", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "../../node_modules/type-fest": { + "version": "0.21.3", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../../node_modules/typedarray": { + "version": "0.0.6", + "license": "MIT" + }, + "../../node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "../../node_modules/typedoc": { + "version": "0.22.11", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "glob": "^7.2.0", + "lunr": "^2.3.9", + "marked": "^4.0.10", + "minimatch": "^3.0.4", + "shiki": "^0.10.0" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 12.10.0" + }, + "peerDependencies": { + "typescript": "4.0.x || 4.1.x || 4.2.x || 4.3.x || 4.4.x || 4.5.x" + } + }, + "../../node_modules/typedoc-plugin-markdown": { + "version": "3.11.13", + "dev": true, + "license": "MIT", + "dependencies": { + "handlebars": "^4.7.7" + }, + "peerDependencies": { + "typedoc": ">=0.22.0" + } + }, + "../../node_modules/typedoc/node_modules/marked": { + "version": "4.0.12", + "dev": true, + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, + "../../node_modules/typescript": { + "version": "4.5.5", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "../../node_modules/typical": { + "version": "2.6.1", + "dev": true, + "license": "MIT" + }, + "../../node_modules/uc.micro": { + "version": "1.0.6", + "license": "MIT" + }, + "../../node_modules/uglify-js": { + "version": "3.15.1", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "../../node_modules/unbox-primitive": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../../node_modules/underscore": { + "version": "1.13.2", + "dev": true, + "license": "MIT" + }, + "../../node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "../../node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "../../node_modules/unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "../../node_modules/unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "../../node_modules/unique-filename": { + "version": "1.1.1", + "license": "ISC", + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "../../node_modules/unique-slug": { + "version": "2.0.2", + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "../../node_modules/unixify": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "normalize-path": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/unixify/node_modules/normalize-path": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/uri-js": { + "version": "4.4.1", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "../../node_modules/uri-templates": { + "version": "0.2.0", + "license": "http://geraintluff.github.io/tv4/LICENSE.txt" + }, + "../../node_modules/utf-8-validate": { + "version": "5.0.8", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "../../node_modules/utif": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "pako": "^1.0.5" + } + }, + "../../node_modules/util-deprecate": { + "version": "1.0.2", + "license": "MIT" + }, + "../../node_modules/uuid": { + "version": "8.3.2", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "../../node_modules/v8-compile-cache": { + "version": "2.3.0", + "license": "MIT" + }, + "../../node_modules/v8-to-istanbul": { + "version": "8.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "../../node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.3", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "../../node_modules/validate-npm-package-name": { + "version": "3.0.0", + "license": "ISC", + "dependencies": { + "builtins": "^1.0.3" + } + }, + "../../node_modules/vary": { + "version": "1.1.2", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "../../node_modules/verror": { + "version": "1.10.0", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "../../node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "license": "MIT" + }, + "../../node_modules/vscode-oniguruma": { + "version": "1.6.1", + "dev": true, + "license": "MIT" + }, + "../../node_modules/vscode-textmate": { + "version": "5.2.0", + "dev": true, + "license": "MIT" + }, + "../../node_modules/w3c-hr-time": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "../../node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "../../node_modules/walk": { + "version": "2.3.15", + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "foreachasync": "^3.0.0" + } + }, + "../../node_modules/walk-back": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "../../node_modules/walk-up-path": { + "version": "1.0.0", + "license": "ISC" + }, + "../../node_modules/walkdir": { + "version": "0.4.1", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "../../node_modules/walker": { + "version": "1.0.8", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "../../node_modules/webapi-parser": { + "version": "0.5.0", + "license": "Apache-2.0", + "dependencies": { + "ajv": "6.5.2" + } + }, + "../../node_modules/webapi-parser/node_modules/ajv": { + "version": "6.5.2", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.1" + } + }, + "../../node_modules/webapi-parser/node_modules/fast-deep-equal": { + "version": "2.0.1", + "license": "MIT" + }, + "../../node_modules/webidl-conversions": { + "version": "3.0.1", + "license": "BSD-2-Clause" + }, + "../../node_modules/whatwg-encoding": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "../../node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.4.24", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/whatwg-mimetype": { + "version": "2.3.0", + "dev": true, + "license": "MIT" + }, + "../../node_modules/whatwg-url": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "../../node_modules/which": { + "version": "2.0.2", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "../../node_modules/which-boxed-primitive": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../../node_modules/which-module": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "../../node_modules/wide-align": { + "version": "1.1.5", + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "../../node_modules/word-wrap": { + "version": "1.2.3", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "../../node_modules/wordwrap": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "../../node_modules/wordwrapjs": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "reduce-flatten": "^1.0.1", + "typical": "^2.6.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "../../node_modules/wrap-ansi": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "../../node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "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/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "../../node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "../../node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/wrappy": { + "version": "1.0.2", + "license": "ISC" + }, + "../../node_modules/write-file-atomic": { + "version": "3.0.3", + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "../../node_modules/ws": { + "version": "7.5.7", + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "../../node_modules/xhr": { + "version": "2.6.0", + "license": "MIT", + "dependencies": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "../../node_modules/xml-name-validator": { + "version": "3.0.0", + "dev": true, + "license": "Apache-2.0" + }, + "../../node_modules/xml-parse-from-string": { + "version": "1.0.1", + "license": "MIT" + }, + "../../node_modules/xml2js": { + "version": "0.4.23", + "license": "MIT", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "../../node_modules/xmlbuilder": { + "version": "11.0.1", + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "../../node_modules/xmlchars": { + "version": "2.2.0", + "dev": true, + "license": "MIT" + }, + "../../node_modules/xmlcreate": { + "version": "2.0.4", + "dev": true, + "license": "Apache-2.0" + }, + "../../node_modules/xtend": { + "version": "4.0.2", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "../../node_modules/y18n": { + "version": "5.0.8", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "../../node_modules/yallist": { + "version": "4.0.0", + "license": "ISC" + }, + "../../node_modules/yaml-ast-parser": { + "version": "0.0.43", + "license": "Apache-2.0" + }, + "../../node_modules/yargs": { + "version": "16.2.0", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "../../node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "../../node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "../../node_modules/yn": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@asyncapi/glee": { + "resolved": "../..", + "link": true + } + }, + "dependencies": { + "@asyncapi/glee": { + "version": "file:../..", + "requires": { + "@asyncapi/generator": "^1.13.1", + "@asyncapi/html-template": "^0.28.4", + "@asyncapi/markdown-template": "^1.3.3", + "@asyncapi/parser": "^v3.0.0-next-major-spec.7", + "@tsconfig/node14": "^1.0.1", + "@types/async": "^3.2.11", + "@types/debug": "^4.1.7", + "@types/jest": "^27.4.0", + "@types/qs": "^6.9.7", + "@types/socket.io": "^3.0.2", + "@types/uri-templates": "^0.1.31", + "@types/ws": "^8.5.3", + "@typescript-eslint/eslint-plugin": "^5.9.0", + "@typescript-eslint/parser": "^5.9.0", + "ajv": "^6.12.6", + "all-contributors-cli": "^6.14.2", + "async": "^3.2.0", + "better-ajv-errors": "^0.7.0", + "bufferutil": "^4.0.3", + "chalk": "^4.1.1", + "cross-spawn": "^7.0.3", + "debug": "^4.3.1", + "dotenv": "^10.0.0", + "dotenv-expand": "^5.1.0", + "emojis": "^1.0.10", + "eslint": "^8.6.0", + "eslint-plugin-github": "^4.3.5", + "eslint-plugin-jest": "^23.8.2", + "eslint-plugin-security": "^1.4.0", + "eslint-plugin-sonarjs": "^0.19.0", + "fs-extra": "^10.1.0", + "got": "^12.5.3", + "jest": "^27.4.7", + "jest-extended": "^1.2.0", + "jsdoc-to-markdown": "^5.0.3", + "kafkajs": "^2.2.3", + "markdown-toc": "^1.2.0", + "mqtt": "^4.3.7", + "path-to-regexp": "^6.2.0", + "qs": "^6.11.0", + "redis": "^4.0.2", + "rimraf": "^3.0.2", + "socket.io": "^4.1.2", + "terminal-image": "^2.0.0", + "ts-jest": "^27.1.2", + "tsc-watch": "^4.5.0", + "typedoc": "^0.23.28", + "typedoc-plugin-markdown": "^3.11.8", + "typescript": "^4.5.4", + "unixify": "^1.0.0", + "uri-templates": "^0.2.0", + "utf-8-validate": "^5.0.5", + "uuid": "^8.3.2", + "walkdir": "^0.4.1", + "word-wrap": "^1.2.3", + "ws": "^7.4.6" + }, + "dependencies": { + "@apidevtools/json-schema-ref-parser": { + "version": "9.0.9", + "requires": { + "@jsdevtools/ono": "^7.1.3", + "@types/json-schema": "^7.0.6", + "call-me-maybe": "^1.0.1", + "js-yaml": "^4.1.0" + }, + "dependencies": { + "js-yaml": { + "version": "4.1.0", + "requires": { + "argparse": "^2.0.1" + } + } + } + }, + "@asyncapi/avro-schema-parser": { + "version": "1.0.1", + "requires": { + "avsc": "^5.7.3" + } + }, + "@asyncapi/generator": { + "version": "1.9.3", + "requires": { + "@asyncapi/avro-schema-parser": "^1.0.0", + "@asyncapi/generator-react-sdk": "^0.2.23", + "@asyncapi/openapi-schema-parser": "^2.0.1", + "@asyncapi/parser": "^1.15.0", + "@asyncapi/raml-dt-schema-parser": "^2.0.1", + "@npmcli/arborist": "^2.2.4", + "ajv": "^6.10.2", + "chokidar": "^3.4.0", + "commander": "^6.1.0", + "filenamify": "^4.1.0", + "fs.extra": "^1.3.2", + "global-dirs": "^3.0.0", + "jmespath": "^0.15.0", + "js-yaml": "^3.13.1", + "levenshtein-edit-distance": "^2.0.5", + "loglevel": "^1.6.8", + "markdown-it": "^12.3.2", + "minimatch": "^3.0.4", + "node-fetch": "^2.6.0", + "nunjucks": "^3.2.0", + "resolve-from": "^5.0.0", + "resolve-pkg": "^2.0.0", + "semver": "^7.3.2", + "simple-git": "^3.3.0", + "source-map-support": "^0.5.19", + "ts-node": "^9.1.1", + "typescript": "^4.2.2" + } + }, + "@asyncapi/generator-react-sdk": { + "version": "0.2.23", + "requires": { + "@asyncapi/parser": "^1.13.0", + "@babel/core": "7.12.9", + "@babel/preset-env": "^7.12.7", + "@babel/preset-react": "^7.12.7", + "@rollup/plugin-babel": "^5.2.1", + "babel-plugin-source-map-support": "^2.1.3", + "prop-types": "^15.7.2", + "react": "^17.0.1", + "rollup": "^2.60.1", + "source-map-support": "^0.5.19" + } + }, + "@asyncapi/openapi-schema-parser": { + "version": "2.0.1", + "requires": { + "@openapi-contrib/openapi-schema-to-json-schema": "^3.0.0" + } + }, + "@asyncapi/parser": { + "version": "1.15.0", + "requires": { + "@apidevtools/json-schema-ref-parser": "^9.0.6", + "@asyncapi/specs": "^2.14.0", + "@fmvilas/pseudo-yaml-ast": "^0.3.1", + "ajv": "^6.10.1", + "js-yaml": "^3.13.1", + "json-to-ast": "^2.1.0", + "lodash.clonedeep": "^4.5.0", + "node-fetch": "^2.6.0", + "tiny-merge-patch": "^0.1.2" + } + }, + "@asyncapi/raml-dt-schema-parser": { + "version": "2.0.1", + "requires": { + "js-yaml": "^3.13.1", + "ramldt2jsonschema": "^1.1.0" + } + }, + "@asyncapi/specs": { + "version": "2.14.0" + }, + "@babel/code-frame": { + "version": "7.16.7", + "requires": { + "@babel/highlight": "^7.16.7" + } + }, + "@babel/compat-data": { + "version": "7.17.0" + }, + "@babel/core": { + "version": "7.12.9", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1" + } + } + }, + "@babel/generator": { + "version": "7.17.0", + "requires": { + "@babel/types": "^7.17.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.16.7", + "requires": { + "@babel/helper-explode-assignable-expression": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.16.7", + "requires": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0" + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.17.1", + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.17.0", + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "regexpu-core": "^5.0.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.3.1", + "requires": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "dependencies": { + "semver": { + "version": "6.3.0" + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.16.7", + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.16.7", + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-function-name": { + "version": "7.16.7", + "requires": { + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.16.7", + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.16.7", + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.16.7", + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-module-imports": { + "version": "7.16.7", + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-module-transforms": { + "version": "7.16.7", + "requires": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.16.7", + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.16.7" + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.16.8", + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-wrap-function": "^7.16.8", + "@babel/types": "^7.16.8" + } + }, + "@babel/helper-replace-supers": { + "version": "7.16.7", + "requires": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-simple-access": { + "version": "7.16.7", + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.16.0", + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.16.7", + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.16.7" + }, + "@babel/helper-validator-option": { + "version": "7.16.7" + }, + "@babel/helper-wrap-function": { + "version": "7.16.8", + "requires": { + "@babel/helper-function-name": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8" + } + }, + "@babel/helpers": { + "version": "7.17.2", + "requires": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0" + } + }, + "@babel/highlight": { + "version": "7.16.10", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "@babel/parser": { + "version": "7.17.0" + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.16.7", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.16.7", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.7" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.16.8", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.16.7", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.16.7", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.16.7", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.16.7", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.16.7", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.16.7", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.16.7", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.16.7", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.16.7", + "requires": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.16.7" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.16.7", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.16.7", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.16.11", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.10", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.16.7", + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.16.7", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.16.7", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.16.7", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.16.7", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.16.8", + "requires": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.16.7", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.16.7", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.16.7", + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.16.7", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.16.7", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.16.7", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.16.7", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.16.7", + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.16.7", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.16.7", + "requires": { + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.16.7", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.16.7", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.16.7", + "requires": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.16.8", + "requires": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.16.7", + "requires": { + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.16.7", + "requires": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.16.8", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.16.7", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.16.7", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.16.7", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.16.7", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.16.7", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.16.7", + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-jsx": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.16.7", + "requires": { + "@babel/plugin-transform-react-jsx": "^7.16.7" + } + }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.16.7", + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.16.7", + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.16.7", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.16.7", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.16.7", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.16.7", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.16.7", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.16.7", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.16.7", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.16.7", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/preset-env": { + "version": "7.16.11", + "requires": { + "@babel/compat-data": "^7.16.8", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-async-generator-functions": "^7.16.8", + "@babel/plugin-proposal-class-properties": "^7.16.7", + "@babel/plugin-proposal-class-static-block": "^7.16.7", + "@babel/plugin-proposal-dynamic-import": "^7.16.7", + "@babel/plugin-proposal-export-namespace-from": "^7.16.7", + "@babel/plugin-proposal-json-strings": "^7.16.7", + "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", + "@babel/plugin-proposal-numeric-separator": "^7.16.7", + "@babel/plugin-proposal-object-rest-spread": "^7.16.7", + "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", + "@babel/plugin-proposal-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-private-methods": "^7.16.11", + "@babel/plugin-proposal-private-property-in-object": "^7.16.7", + "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.16.7", + "@babel/plugin-transform-async-to-generator": "^7.16.8", + "@babel/plugin-transform-block-scoped-functions": "^7.16.7", + "@babel/plugin-transform-block-scoping": "^7.16.7", + "@babel/plugin-transform-classes": "^7.16.7", + "@babel/plugin-transform-computed-properties": "^7.16.7", + "@babel/plugin-transform-destructuring": "^7.16.7", + "@babel/plugin-transform-dotall-regex": "^7.16.7", + "@babel/plugin-transform-duplicate-keys": "^7.16.7", + "@babel/plugin-transform-exponentiation-operator": "^7.16.7", + "@babel/plugin-transform-for-of": "^7.16.7", + "@babel/plugin-transform-function-name": "^7.16.7", + "@babel/plugin-transform-literals": "^7.16.7", + "@babel/plugin-transform-member-expression-literals": "^7.16.7", + "@babel/plugin-transform-modules-amd": "^7.16.7", + "@babel/plugin-transform-modules-commonjs": "^7.16.8", + "@babel/plugin-transform-modules-systemjs": "^7.16.7", + "@babel/plugin-transform-modules-umd": "^7.16.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.8", + "@babel/plugin-transform-new-target": "^7.16.7", + "@babel/plugin-transform-object-super": "^7.16.7", + "@babel/plugin-transform-parameters": "^7.16.7", + "@babel/plugin-transform-property-literals": "^7.16.7", + "@babel/plugin-transform-regenerator": "^7.16.7", + "@babel/plugin-transform-reserved-words": "^7.16.7", + "@babel/plugin-transform-shorthand-properties": "^7.16.7", + "@babel/plugin-transform-spread": "^7.16.7", + "@babel/plugin-transform-sticky-regex": "^7.16.7", + "@babel/plugin-transform-template-literals": "^7.16.7", + "@babel/plugin-transform-typeof-symbol": "^7.16.7", + "@babel/plugin-transform-unicode-escapes": "^7.16.7", + "@babel/plugin-transform-unicode-regex": "^7.16.7", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.16.8", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "core-js-compat": "^3.20.2", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0" + } + } + }, + "@babel/preset-modules": { + "version": "0.1.5", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/preset-react": { + "version": "7.16.7", + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-transform-react-display-name": "^7.16.7", + "@babel/plugin-transform-react-jsx": "^7.16.7", + "@babel/plugin-transform-react-jsx-development": "^7.16.7", + "@babel/plugin-transform-react-pure-annotations": "^7.16.7" + } + }, + "@babel/runtime": { + "version": "7.17.2", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.16.7", + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/traverse": { + "version": "7.17.0", + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.0", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.0", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.17.0", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "dev": true + }, + "@eslint/eslintrc": { + "version": "1.1.0", + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.1", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "13.12.1", + "requires": { + "type-fest": "^0.20.2" + } + }, + "ignore": { + "version": "4.0.6" + }, + "js-yaml": { + "version": "4.1.0", + "requires": { + "argparse": "^2.0.1" + } + }, + "strip-json-comments": { + "version": "3.1.1" + }, + "type-fest": { + "version": "0.20.2" + } + } + }, + "@fmvilas/pseudo-yaml-ast": { + "version": "0.3.1", + "requires": { + "yaml-ast-parser": "0.0.43" + } + }, + "@gar/promisify": { + "version": "1.1.2" + }, + "@humanwhocodes/config-array": { + "version": "0.9.3", + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1" + }, + "@isaacs/string-locale-compare": { + "version": "1.1.0" + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "dev": true + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "dev": true + }, + "@jest/console": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + } + }, + "@jest/core": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "@jest/environment": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + } + }, + "@jest/fake-timers": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + } + }, + "@jest/globals": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + } + }, + "@jest/reporters": { + "version": "27.5.1", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "dev": true + } + } + }, + "@jest/source-map": { + "version": "27.5.1", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "dev": true + } + } + }, + "@jest/test-result": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + } + }, + "@jest/transform": { + "version": "27.5.1", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "dev": true + } + } + }, + "@jest/types": { + "version": "27.5.1", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@jimp/bmp": { + "version": "0.16.1", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "bmp-js": "^0.1.0" + } + }, + "@jimp/core": { + "version": "0.16.1", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "any-base": "^1.1.0", + "buffer": "^5.2.0", + "exif-parser": "^0.1.12", + "file-type": "^9.0.0", + "load-bmfont": "^1.3.1", + "mkdirp": "^0.5.1", + "phin": "^2.9.1", + "pixelmatch": "^4.0.2", + "tinycolor2": "^1.4.1" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.5", + "requires": { + "minimist": "^1.2.5" + } + } + } + }, + "@jimp/custom": { + "version": "0.16.1", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/core": "^0.16.1" + } + }, + "@jimp/gif": { + "version": "0.16.1", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "gifwrap": "^0.9.2", + "omggif": "^1.0.9" + } + }, + "@jimp/jpeg": { + "version": "0.16.1", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "jpeg-js": "0.4.2" + } + }, + "@jimp/plugin-blit": { + "version": "0.16.1", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-blur": { + "version": "0.16.1", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-circle": { + "version": "0.16.1", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-color": { + "version": "0.16.1", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "tinycolor2": "^1.4.1" + } + }, + "@jimp/plugin-contain": { + "version": "0.16.1", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-cover": { + "version": "0.16.1", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-crop": { + "version": "0.16.1", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-displace": { + "version": "0.16.1", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-dither": { + "version": "0.16.1", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-fisheye": { + "version": "0.16.1", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-flip": { + "version": "0.16.1", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-gaussian": { + "version": "0.16.1", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-invert": { + "version": "0.16.1", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-mask": { + "version": "0.16.1", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-normalize": { + "version": "0.16.1", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-print": { + "version": "0.16.1", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "load-bmfont": "^1.4.0" + } + }, + "@jimp/plugin-resize": { + "version": "0.16.1", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-rotate": { + "version": "0.16.1", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-scale": { + "version": "0.16.1", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-shadow": { + "version": "0.16.1", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-threshold": { + "version": "0.16.1", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugins": { + "version": "0.16.1", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/plugin-blit": "^0.16.1", + "@jimp/plugin-blur": "^0.16.1", + "@jimp/plugin-circle": "^0.16.1", + "@jimp/plugin-color": "^0.16.1", + "@jimp/plugin-contain": "^0.16.1", + "@jimp/plugin-cover": "^0.16.1", + "@jimp/plugin-crop": "^0.16.1", + "@jimp/plugin-displace": "^0.16.1", + "@jimp/plugin-dither": "^0.16.1", + "@jimp/plugin-fisheye": "^0.16.1", + "@jimp/plugin-flip": "^0.16.1", + "@jimp/plugin-gaussian": "^0.16.1", + "@jimp/plugin-invert": "^0.16.1", + "@jimp/plugin-mask": "^0.16.1", + "@jimp/plugin-normalize": "^0.16.1", + "@jimp/plugin-print": "^0.16.1", + "@jimp/plugin-resize": "^0.16.1", + "@jimp/plugin-rotate": "^0.16.1", + "@jimp/plugin-scale": "^0.16.1", + "@jimp/plugin-shadow": "^0.16.1", + "@jimp/plugin-threshold": "^0.16.1", + "timm": "^1.6.1" + } + }, + "@jimp/png": { + "version": "0.16.1", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "pngjs": "^3.3.3" + } + }, + "@jimp/tiff": { + "version": "0.16.1", + "requires": { + "@babel/runtime": "^7.7.2", + "utif": "^2.0.1" + } + }, + "@jimp/types": { + "version": "0.16.1", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/bmp": "^0.16.1", + "@jimp/gif": "^0.16.1", + "@jimp/jpeg": "^0.16.1", + "@jimp/png": "^0.16.1", + "@jimp/tiff": "^0.16.1", + "timm": "^1.6.1" + } + }, + "@jimp/utils": { + "version": "0.16.1", + "requires": { + "@babel/runtime": "^7.7.2", + "regenerator-runtime": "^0.13.3" + } + }, + "@jsdevtools/ono": { + "version": "7.1.3" + }, + "@kwsites/file-exists": { + "version": "1.1.1", + "requires": { + "debug": "^4.1.1" + } + }, + "@kwsites/promise-deferred": { + "version": "1.1.1" + }, + "@node-redis/bloom": { + "version": "1.0.1", + "requires": {} + }, + "@node-redis/client": { + "version": "1.0.3", + "requires": { + "cluster-key-slot": "1.1.0", + "generic-pool": "3.8.2", + "redis-parser": "3.0.0", + "yallist": "4.0.0" + } + }, + "@node-redis/graph": { + "version": "1.0.0", + "requires": {} + }, + "@node-redis/json": { + "version": "1.0.2", + "requires": {} + }, + "@node-redis/search": { + "version": "1.0.2", + "requires": {} + }, + "@node-redis/time-series": { + "version": "1.0.1", + "requires": {} + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5" + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@npmcli/arborist": { + "version": "2.10.0", + "requires": { + "@isaacs/string-locale-compare": "^1.0.1", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/map-workspaces": "^1.0.2", + "@npmcli/metavuln-calculator": "^1.1.0", + "@npmcli/move-file": "^1.1.0", + "@npmcli/name-from-folder": "^1.0.1", + "@npmcli/node-gyp": "^1.0.1", + "@npmcli/package-json": "^1.0.1", + "@npmcli/run-script": "^1.8.2", + "bin-links": "^2.2.1", + "cacache": "^15.0.3", + "common-ancestor-path": "^1.0.1", + "json-parse-even-better-errors": "^2.3.1", + "json-stringify-nice": "^1.1.4", + "mkdirp": "^1.0.4", + "mkdirp-infer-owner": "^2.0.0", + "npm-install-checks": "^4.0.0", + "npm-package-arg": "^8.1.5", + "npm-pick-manifest": "^6.1.0", + "npm-registry-fetch": "^11.0.0", + "pacote": "^11.3.5", + "parse-conflict-json": "^1.1.1", + "proc-log": "^1.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^1.0.1", + "read-package-json-fast": "^2.0.2", + "readdir-scoped-modules": "^1.1.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "ssri": "^8.0.1", + "treeverse": "^1.0.4", + "walk-up-path": "^1.0.0" + } + }, + "@npmcli/fs": { + "version": "1.1.1", + "requires": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "@npmcli/git": { + "version": "2.1.0", + "requires": { + "@npmcli/promise-spawn": "^1.3.2", + "lru-cache": "^6.0.0", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^6.1.1", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + } + }, + "@npmcli/installed-package-contents": { + "version": "1.0.7", + "requires": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "@npmcli/map-workspaces": { + "version": "1.0.4", + "requires": { + "@npmcli/name-from-folder": "^1.0.1", + "glob": "^7.1.6", + "minimatch": "^3.0.4", + "read-package-json-fast": "^2.0.1" + } + }, + "@npmcli/metavuln-calculator": { + "version": "1.1.1", + "requires": { + "cacache": "^15.0.5", + "pacote": "^11.1.11", + "semver": "^7.3.2" + } + }, + "@npmcli/move-file": { + "version": "1.1.2", + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "@npmcli/name-from-folder": { + "version": "1.0.1" + }, + "@npmcli/node-gyp": { + "version": "1.0.3" + }, + "@npmcli/package-json": { + "version": "1.0.1", + "requires": { + "json-parse-even-better-errors": "^2.3.1" + } + }, + "@npmcli/promise-spawn": { + "version": "1.3.2", + "requires": { + "infer-owner": "^1.0.4" + } + }, + "@npmcli/run-script": { + "version": "1.8.6", + "requires": { + "@npmcli/node-gyp": "^1.0.2", + "@npmcli/promise-spawn": "^1.3.2", + "node-gyp": "^7.1.0", + "read-package-json-fast": "^2.0.1" + } + }, + "@openapi-contrib/openapi-schema-to-json-schema": { + "version": "3.1.1", + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "@rollup/plugin-babel": { + "version": "5.3.0", + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + } + }, + "@sinonjs/commons": { + "version": "1.8.3", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "8.1.0", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@socket.io/base64-arraybuffer": { + "version": "1.0.2" + }, + "@tootallnate/once": { + "version": "1.1.2" + }, + "@tsconfig/node14": { + "version": "1.0.1", + "dev": true + }, + "@types/async": { + "version": "3.2.12", + "dev": true + }, + "@types/babel__core": { + "version": "7.1.18", + "devOptional": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.4", + "devOptional": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.1", + "devOptional": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.14.2", + "devOptional": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/component-emitter": { + "version": "1.2.11" + }, + "@types/cookie": { + "version": "0.4.1" + }, + "@types/cors": { + "version": "2.8.12" + }, + "@types/debug": { + "version": "4.1.7", + "dev": true, + "requires": { + "@types/ms": "*" + } + }, + "@types/estree": { + "version": "0.0.39" + }, + "@types/graceful-fs": { + "version": "4.1.5", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.4", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/jest": { + "version": "27.4.0", + "requires": { + "jest-diff": "^27.0.0", + "pretty-format": "^27.0.0" + } + }, + "@types/json-schema": { + "version": "7.0.9" + }, + "@types/json5": { + "version": "0.0.29" + }, + "@types/linkify-it": { + "version": "3.0.2", + "dev": true + }, + "@types/markdown-it": { + "version": "12.2.3", + "dev": true, + "requires": { + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + }, + "@types/mdurl": { + "version": "1.0.2", + "dev": true + }, + "@types/ms": { + "version": "0.7.31", + "dev": true + }, + "@types/node": { + "version": "17.0.17" + }, + "@types/prettier": { + "version": "2.4.4", + "dev": true + }, + "@types/qs": { + "version": "6.9.7" + }, + "@types/socket.io": { + "version": "3.0.2", + "dev": true, + "requires": { + "socket.io": "*" + } + }, + "@types/stack-utils": { + "version": "2.0.1", + "dev": true + }, + "@types/uri-templates": { + "version": "0.1.31", + "dev": true + }, + "@types/yargs": { + "version": "16.0.4", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "20.2.1", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.11.0", + "requires": { + "@typescript-eslint/scope-manager": "5.11.0", + "@typescript-eslint/type-utils": "5.11.0", + "@typescript-eslint/utils": "5.11.0", + "debug": "^4.3.2", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.2.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "2.34.0", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/typescript-estree": "2.34.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + }, + "dependencies": { + "@typescript-eslint/typescript-estree": { + "version": "2.34.0", + "dev": true, + "requires": { + "debug": "^4.1.1", + "eslint-visitor-keys": "^1.1.0", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "dev": true + } + } + }, + "@typescript-eslint/parser": { + "version": "5.11.0", + "requires": { + "@typescript-eslint/scope-manager": "5.11.0", + "@typescript-eslint/types": "5.11.0", + "@typescript-eslint/typescript-estree": "5.11.0", + "debug": "^4.3.2" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.11.0", + "requires": { + "@typescript-eslint/types": "5.11.0", + "@typescript-eslint/visitor-keys": "5.11.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.11.0", + "requires": { + "@typescript-eslint/utils": "5.11.0", + "debug": "^4.3.2", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.11.0" + }, + "@typescript-eslint/typescript-estree": { + "version": "5.11.0", + "requires": { + "@typescript-eslint/types": "5.11.0", + "@typescript-eslint/visitor-keys": "5.11.0", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/utils": { + "version": "5.11.0", + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.11.0", + "@typescript-eslint/types": "5.11.0", + "@typescript-eslint/typescript-estree": "5.11.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.11.0", + "requires": { + "@typescript-eslint/types": "5.11.0", + "eslint-visitor-keys": "^3.0.0" + } + }, + "a-sync-waterfall": { + "version": "1.0.1" + }, + "abab": { + "version": "2.0.5", + "dev": true + }, + "abbrev": { + "version": "1.1.1" + }, + "accepts": { + "version": "1.3.8", + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "8.7.0" + }, + "acorn-globals": { + "version": "6.0.0", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "dev": true + } + } + }, + "acorn-jsx": { + "version": "5.3.2", + "requires": {} + }, + "acorn-walk": { + "version": "7.2.0", + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.2.0", + "requires": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + } + }, + "aggregate-error": { + "version": "3.1.0", + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "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" + } + }, + "all-contributors-cli": { + "version": "6.20.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.6", + "async": "^3.0.1", + "chalk": "^4.0.0", + "didyoumean": "^1.2.1", + "inquirer": "^7.0.4", + "json-fixer": "^1.5.1", + "lodash": "^4.11.2", + "node-fetch": "^2.6.0", + "pify": "^5.0.0", + "yargs": "^15.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "cliui": { + "version": "6.0.0", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "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", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "dev": true + }, + "yargs": { + "version": "15.4.1", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "ansi-escape-sequences": { + "version": "4.1.0", + "dev": true, + "requires": { + "array-back": "^3.0.1" + }, + "dependencies": { + "array-back": { + "version": "3.1.0", + "dev": true + } + } + }, + "ansi-escapes": { + "version": "4.3.2", + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-red": { + "version": "0.1.1", + "dev": true, + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-regex": { + "version": "2.1.1" + }, + "ansi-styles": { + "version": "3.2.1", + "requires": { + "color-convert": "^1.9.0" + } + }, + "ansi-wrap": { + "version": "0.1.0", + "dev": true + }, + "any-base": { + "version": "1.1.0" + }, + "anymatch": { + "version": "3.1.2", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "app-path": { + "version": "4.0.0", + "requires": { + "execa": "^5.0.0" + } + }, + "aproba": { + "version": "1.2.0" + }, + "are-we-there-yet": { + "version": "1.1.7", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "arg": { + "version": "4.1.3" + }, + "argparse": { + "version": "2.0.1" + }, + "array-back": { + "version": "4.0.2", + "dev": true + }, + "array-includes": { + "version": "3.1.4", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + } + }, + "array-range": { + "version": "1.0.1" + }, + "array-union": { + "version": "2.1.0" + }, + "array.prototype.flat": { + "version": "1.2.5", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0" + } + }, + "asap": { + "version": "2.0.6" + }, + "asn1": { + "version": "0.2.6", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0" + }, + "astral-regex": { + "version": "2.0.0" + }, + "async": { + "version": "3.2.3" + }, + "asynckit": { + "version": "0.4.0" + }, + "autolinker": { + "version": "0.28.1", + "dev": true, + "requires": { + "gulp-header": "^1.7.1" + } + }, + "avsc": { + "version": "5.7.3" + }, + "aws-sign2": { + "version": "0.7.0" + }, + "aws4": { + "version": "1.11.0" + }, + "babel-jest": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "27.5.1", + "dev": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.3.1", + "requires": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.1", + "semver": "^6.1.1" + }, + "dependencies": { + "semver": { + "version": "6.3.0" + } + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.5.2", + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.1", + "core-js-compat": "^3.21.0" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.3.1", + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.1" + } + }, + "babel-plugin-source-map-support": { + "version": "2.1.3", + "requires": { + "@babel/helper-module-imports": "^7.10.4" + } + }, + "babel-preset-current-node-syntax": { + "version": "1.0.1", + "dev": true, + "requires": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + } + }, + "babel-preset-jest": { + "version": "27.5.1", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "balanced-match": { + "version": "1.0.2" + }, + "base64-js": { + "version": "1.5.1" + }, + "base64id": { + "version": "2.0.0" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "better-ajv-errors": { + "version": "0.7.0", + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/runtime": "^7.0.0", + "chalk": "^2.4.1", + "core-js": "^3.2.1", + "json-to-ast": "^2.0.3", + "jsonpointer": "^4.0.1", + "leven": "^3.1.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "bin-links": { + "version": "2.3.0", + "requires": { + "cmd-shim": "^4.0.1", + "mkdirp-infer-owner": "^2.0.0", + "npm-normalize-package-bin": "^1.0.0", + "read-cmd-shim": "^2.0.0", + "rimraf": "^3.0.0", + "write-file-atomic": "^3.0.3" + } + }, + "binary-extensions": { + "version": "2.2.0" + }, + "bl": { + "version": "4.1.0", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "bluebird": { + "version": "3.7.2", + "dev": true + }, + "bmp-js": { + "version": "0.1.0" + }, + "brace-expansion": { + "version": "1.1.11", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-process-hrtime": { + "version": "1.0.0", + "dev": true + }, + "browserslist": { + "version": "4.19.1", + "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" + } + }, + "bs-logger": { + "version": "0.2.6", + "dev": true, + "requires": { + "fast-json-stable-stringify": "2.x" + } + }, + "bser": { + "version": "2.1.1", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer": { + "version": "5.7.1", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-equal": { + "version": "0.0.1" + }, + "buffer-from": { + "version": "1.1.2" + }, + "bufferutil": { + "version": "4.0.6", + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "builtins": { + "version": "1.0.3" + }, + "cacache": { + "version": "15.3.0", + "requires": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + } + }, + "cache-point": { + "version": "1.0.0", + "dev": true, + "requires": { + "array-back": "^4.0.0", + "fs-then-native": "^2.0.0", + "mkdirp2": "^1.0.4" + } + }, + "call-bind": { + "version": "1.0.2", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "call-me-maybe": { + "version": "1.0.1" + }, + "callsites": { + "version": "3.1.0" + }, + "camelcase": { + "version": "5.3.1", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001312" + }, + "caseless": { + "version": "0.12.0" + }, + "catharsis": { + "version": "0.9.0", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, + "chalk": { + "version": "4.1.2", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4" + }, + "has-flag": { + "version": "4.0.0" + }, + "supports-color": { + "version": "7.2.0", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "char-regex": { + "version": "1.0.2", + "dev": true + }, + "chardet": { + "version": "0.7.0", + "dev": true + }, + "chokidar": { + "version": "3.5.3", + "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" + } + }, + "chownr": { + "version": "2.0.0" + }, + "ci-info": { + "version": "3.3.0", + "dev": true + }, + "cjs-module-lexer": { + "version": "1.2.2", + "dev": true + }, + "clean-stack": { + "version": "2.2.0" + }, + "cli-cursor": { + "version": "3.1.0", + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-width": { + "version": "3.0.0", + "dev": true + }, + "cliui": { + "version": "7.0.4", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "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", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "cluster-key-slot": { + "version": "1.1.0" + }, + "cmd-shim": { + "version": "4.1.0", + "requires": { + "mkdirp-infer-owner": "^2.0.0" + } + }, + "co": { + "version": "4.6.0" + }, + "code-error-fragment": { + "version": "0.0.230" + }, + "code-point-at": { + "version": "1.1.0" + }, + "coffee-script": { + "version": "1.12.7", + "dev": true + }, + "collect-all": { + "version": "1.0.4", + "dev": true, + "requires": { + "stream-connect": "^1.0.2", + "stream-via": "^1.0.4" + } + }, + "collect-v8-coverage": { + "version": "1.0.1", + "dev": true + }, + "color-convert": { + "version": "1.9.3", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3" + }, + "combined-stream": { + "version": "1.0.8", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "command-line-args": { + "version": "5.2.1", + "dev": true, + "requires": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + }, + "dependencies": { + "array-back": { + "version": "3.1.0", + "dev": true + }, + "typical": { + "version": "4.0.0", + "dev": true + } + } + }, + "command-line-tool": { + "version": "0.8.0", + "dev": true, + "requires": { + "ansi-escape-sequences": "^4.0.0", + "array-back": "^2.0.0", + "command-line-args": "^5.0.0", + "command-line-usage": "^4.1.0", + "typical": "^2.6.1" + }, + "dependencies": { + "array-back": { + "version": "2.0.0", + "dev": true, + "requires": { + "typical": "^2.6.1" + } + } + } + }, + "command-line-usage": { + "version": "4.1.0", + "dev": true, + "requires": { + "ansi-escape-sequences": "^4.0.0", + "array-back": "^2.0.0", + "table-layout": "^0.4.2", + "typical": "^2.6.1" + }, + "dependencies": { + "array-back": { + "version": "2.0.0", + "dev": true, + "requires": { + "typical": "^2.6.1" + } + } + } + }, + "commander": { + "version": "6.2.1" + }, + "commist": { + "version": "1.1.0", + "requires": { + "leven": "^2.1.0", + "minimist": "^1.1.0" + }, + "dependencies": { + "leven": { + "version": "2.1.0" + } + } + }, + "common-ancestor-path": { + "version": "1.0.1" + }, + "common-sequence": { + "version": "2.0.2", + "dev": true + }, + "component-emitter": { + "version": "1.3.0" + }, + "concat-map": { + "version": "0.0.1" + }, + "concat-stream": { + "version": "2.0.0", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "concat-with-sourcemaps": { + "version": "1.1.0", + "dev": true, + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "dev": true + } + } + }, + "config-master": { + "version": "3.1.0", + "dev": true, + "requires": { + "walk-back": "^2.0.1" + }, + "dependencies": { + "walk-back": { + "version": "2.0.1", + "dev": true + } + } + }, + "console-control-strings": { + "version": "1.1.0" + }, + "convert-source-map": { + "version": "1.8.0", + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.4.2" + }, + "core-js": { + "version": "3.21.0" + }, + "core-js-compat": { + "version": "3.21.0", + "requires": { + "browserslist": "^4.19.1", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0" + } + } + }, + "core-util-is": { + "version": "1.0.3" + }, + "cors": { + "version": "2.8.5", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "create-require": { + "version": "1.1.1" + }, + "cross-spawn": { + "version": "7.0.3", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "cssom": { + "version": "0.4.4", + "dev": true + }, + "cssstyle": { + "version": "2.3.0", + "dev": true, + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "dev": true + } + } + }, + "cycled": { + "version": "1.2.0" + }, + "dashdash": { + "version": "1.14.1", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-urls": { + "version": "2.0.0", + "dev": true, + "requires": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "dependencies": { + "tr46": { + "version": "2.1.0", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "webidl-conversions": { + "version": "6.1.0", + "dev": true + }, + "whatwg-url": { + "version": "8.7.0", + "dev": true, + "requires": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + } + } + } + }, + "debug": { + "version": "4.3.3", + "requires": { + "ms": "2.1.2" + } + }, + "debuglog": { + "version": "1.0.1" + }, + "decamelize": { + "version": "1.2.0", + "dev": true + }, + "decimal.js": { + "version": "10.3.1", + "dev": true + }, + "decode-gif": { + "version": "1.0.1", + "requires": { + "array-range": "^1.0.1", + "omggif": "^1.0.10" + } + }, + "dedent": { + "version": "0.7.0", + "dev": true + }, + "deep-extend": { + "version": "0.6.0", + "dev": true + }, + "deep-is": { + "version": "0.1.4" + }, + "deepmerge": { + "version": "4.2.2", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "requires": { + "object-keys": "^1.0.12" + } + }, + "delay": { + "version": "4.4.1" + }, + "delayed-stream": { + "version": "1.0.0" + }, + "delegates": { + "version": "1.0.0" + }, + "depd": { + "version": "1.1.2" + }, + "detect-newline": { + "version": "3.1.0", + "dev": true + }, + "dezalgo": { + "version": "1.0.3", + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "diacritics-map": { + "version": "0.1.0", + "dev": true + }, + "didyoumean": { + "version": "1.2.2", + "dev": true + }, + "diff": { + "version": "4.0.2" + }, + "diff-sequences": { + "version": "27.5.1" + }, + "dir-glob": { + "version": "3.0.1", + "requires": { + "path-type": "^4.0.0" + } + }, + "dmd": { + "version": "4.0.6", + "dev": true, + "requires": { + "array-back": "^4.0.1", + "cache-point": "^1.0.0", + "common-sequence": "^2.0.0", + "file-set": "^3.0.0", + "handlebars": "^4.5.3", + "marked": "^0.7.0", + "object-get": "^2.1.0", + "reduce-flatten": "^3.0.0", + "reduce-unique": "^2.0.1", + "reduce-without": "^1.0.1", + "test-value": "^3.0.0", + "walk-back": "^4.0.0" + }, + "dependencies": { + "reduce-flatten": { + "version": "3.0.1", + "dev": true + } + } + }, + "doctrine": { + "version": "2.1.0", + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-walk": { + "version": "0.1.2" + }, + "domexception": { + "version": "2.0.1", + "dev": true, + "requires": { + "webidl-conversions": "^5.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "5.0.0", + "dev": true + } + } + }, + "dotenv": { + "version": "10.0.0" + }, + "dotenv-expand": { + "version": "5.1.0" + }, + "duplexer": { + "version": "0.1.2", + "dev": true + }, + "duplexify": { + "version": "4.1.2", + "requires": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "electron-to-chromium": { + "version": "1.4.68" + }, + "emittery": { + "version": "0.8.1", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0" + }, + "emojis": { + "version": "1.0.10" + }, + "encoding": { + "version": "0.1.13", + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + } + }, + "end-of-stream": { + "version": "1.4.4", + "requires": { + "once": "^1.4.0" + } + }, + "engine.io": { + "version": "6.1.2", + "requires": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.0", + "ws": "~8.2.3" + }, + "dependencies": { + "ws": { + "version": "8.2.3", + "requires": {} + } + } + }, + "engine.io-parser": { + "version": "5.0.3", + "requires": { + "@socket.io/base64-arraybuffer": "~1.0.2" + } + }, + "entities": { + "version": "2.1.0" + }, + "env-paths": { + "version": "2.2.1" + }, + "err-code": { + "version": "2.0.3" + }, + "error-ex": { + "version": "1.3.2", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.19.1", + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escalade": { + "version": "3.1.1" + }, + "escape-string-regexp": { + "version": "1.0.5" + }, + "escodegen": { + "version": "2.0.0", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "dev": true + }, + "levn": { + "version": "0.3.0", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "optionator": { + "version": "0.8.3", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "prelude-ls": { + "version": "1.1.2", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "dev": true, + "optional": true + }, + "type-check": { + "version": "0.3.2", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + } + } + }, + "eslint": { + "version": "8.9.0", + "requires": { + "@eslint/eslintrc": "^1.1.0", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1" + }, + "doctrine": { + "version": "3.0.0", + "requires": { + "esutils": "^2.0.2" + } + }, + "escape-string-regexp": { + "version": "4.0.0" + }, + "eslint-scope": { + "version": "7.1.1", + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0" + }, + "glob-parent": { + "version": "6.0.2", + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.12.1", + "requires": { + "type-fest": "^0.20.2" + } + }, + "js-yaml": { + "version": "4.1.0", + "requires": { + "argparse": "^2.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-json-comments": { + "version": "3.1.1" + }, + "type-fest": { + "version": "0.20.2" + } + } + }, + "eslint-config-prettier": { + "version": "8.3.0", + "requires": {} + }, + "eslint-import-resolver-node": { + "version": "0.3.6", + "requires": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-module-utils": { + "version": "2.7.3", + "requires": { + "debug": "^3.2.7", + "find-up": "^2.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-plugin-escompat": { + "version": "3.1.0", + "requires": { + "browserslist": "^4.12.0" + } + }, + "eslint-plugin-eslint-comments": { + "version": "3.2.0", + "requires": { + "escape-string-regexp": "^1.0.5", + "ignore": "^5.0.5" + } + }, + "eslint-plugin-filenames": { + "version": "1.3.2", + "requires": { + "lodash.camelcase": "4.3.0", + "lodash.kebabcase": "4.1.1", + "lodash.snakecase": "4.1.1", + "lodash.upperfirst": "4.3.1" + } + }, + "eslint-plugin-github": { + "version": "4.3.5", + "requires": { + "@typescript-eslint/eslint-plugin": "^5.1.0", + "@typescript-eslint/parser": "^5.1.0", + "eslint-config-prettier": ">=8.0.0", + "eslint-plugin-escompat": "^3.1.0", + "eslint-plugin-eslint-comments": "^3.2.0", + "eslint-plugin-filenames": "^1.3.2", + "eslint-plugin-i18n-text": "^1.0.1", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-no-only-tests": "^2.6.0", + "eslint-plugin-prettier": "^3.3.1", + "eslint-rule-documentation": ">=1.0.0", + "prettier": "^2.2.1", + "svg-element-attributes": "^1.3.1" + } + }, + "eslint-plugin-i18n-text": { + "version": "1.0.1", + "requires": {} + }, + "eslint-plugin-import": { + "version": "2.25.4", + "requires": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.2", + "has": "^1.0.3", + "is-core-module": "^2.8.0", + "is-glob": "^4.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.5", + "resolve": "^1.20.0", + "tsconfig-paths": "^3.12.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0" + } + } + }, + "eslint-plugin-jest": { + "version": "23.20.0", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "^2.5.0" + } + }, + "eslint-plugin-no-only-tests": { + "version": "2.6.0" + }, + "eslint-plugin-prettier": { + "version": "3.4.1", + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-plugin-security": { + "version": "1.4.0", + "requires": { + "safe-regex": "^1.1.0" + } + }, + "eslint-plugin-sonarjs": { + "version": "0.5.0", + "dev": true, + "requires": {} + }, + "eslint-rule-documentation": { + "version": "1.0.23" + }, + "eslint-scope": { + "version": "5.1.1", + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0" + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0" + }, + "espree": { + "version": "9.3.1", + "requires": { + "acorn": "^8.7.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.3.0" + } + }, + "esprima": { + "version": "4.0.1" + }, + "esquery": { + "version": "1.4.0", + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0" + } + } + }, + "esrecurse": { + "version": "4.3.0", + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0" + } + } + }, + "estraverse": { + "version": "4.3.0" + }, + "estree-walker": { + "version": "1.0.1" + }, + "esutils": { + "version": "2.0.3" + }, + "event-stream": { + "version": "3.3.4", + "dev": true, + "requires": { + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" + }, + "dependencies": { + "split": { + "version": "0.3.3", + "dev": true, + "requires": { + "through": "2" + } + } + } + }, + "execa": { + "version": "5.1.1", + "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" + } + }, + "exif-parser": { + "version": "0.1.12" + }, + "exit": { + "version": "0.1.2", + "dev": true + }, + "expand-range": { + "version": "1.8.2", + "dev": true, + "requires": { + "fill-range": "^2.1.0" + }, + "dependencies": { + "fill-range": { + "version": "2.2.4", + "dev": true, + "requires": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + } + }, + "is-number": { + "version": "2.1.0", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "kind-of": { + "version": "3.2.2", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "expect": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + } + }, + "extend": { + "version": "3.0.2" + }, + "extend-shallow": { + "version": "2.0.1", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "external-editor": { + "version": "3.1.0", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "extsprintf": { + "version": "1.3.0" + }, + "fast-deep-equal": { + "version": "3.1.3" + }, + "fast-diff": { + "version": "1.2.0" + }, + "fast-glob": { + "version": "3.2.11", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0" + }, + "fast-levenshtein": { + "version": "2.0.6" + }, + "fastq": { + "version": "1.13.0", + "requires": { + "reusify": "^1.0.4" + } + }, + "fb-watchman": { + "version": "2.0.1", + "dev": true, + "requires": { + "bser": "2.1.1" + } + }, + "figures": { + "version": "3.2.0", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "requires": { + "flat-cache": "^3.0.4" + } + }, + "file-set": { + "version": "3.0.0", + "dev": true, + "requires": { + "array-back": "^4.0.0", + "glob": "^7.1.5" + } + }, + "file-type": { + "version": "9.0.0" + }, + "filename-reserved-regex": { + "version": "2.0.0" + }, + "filenamify": { + "version": "4.3.0", + "requires": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.1", + "trim-repeated": "^1.0.0" + } + }, + "fill-range": { + "version": "7.0.1", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-replace": { + "version": "3.0.0", + "dev": true, + "requires": { + "array-back": "^3.0.1" + }, + "dependencies": { + "array-back": { + "version": "3.1.0", + "dev": true + } + } + }, + "find-up": { + "version": "2.1.0", + "requires": { + "locate-path": "^2.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.5" + }, + "for-in": { + "version": "1.0.2", + "dev": true + }, + "foreachasync": { + "version": "3.0.0" + }, + "forever-agent": { + "version": "0.6.1" + }, + "form-data": { + "version": "2.3.3", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "from": { + "version": "0.1.7", + "dev": true + }, + "fs-extra": { + "version": "0.6.4", + "requires": { + "jsonfile": "~1.0.1", + "mkdirp": "0.3.x", + "ncp": "~0.4.2", + "rimraf": "~2.2.0" + }, + "dependencies": { + "mkdirp": { + "version": "0.3.5" + }, + "rimraf": { + "version": "2.2.8" + } + } + }, + "fs-minipass": { + "version": "2.1.0", + "requires": { + "minipass": "^3.0.0" + } + }, + "fs-then-native": { + "version": "2.0.0", + "dev": true + }, + "fs.extra": { + "version": "1.3.2", + "requires": { + "fs-extra": "~0.6.1", + "mkdirp": "~0.3.5", + "walk": "^2.3.9" + }, + "dependencies": { + "mkdirp": { + "version": "0.3.5" + } + } + }, + "fs.realpath": { + "version": "1.0.0" + }, + "fsevents": { + "version": "2.3.2", + "optional": true + }, + "function-bind": { + "version": "1.1.1" + }, + "functional-red-black-tree": { + "version": "1.0.1" + }, + "gauge": { + "version": "2.7.4", + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "generic-pool": { + "version": "3.8.2" + }, + "gensync": { + "version": "1.0.0-beta.2" + }, + "get-caller-file": { + "version": "2.0.5", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.1", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-package-type": { + "version": "0.1.0", + "dev": true + }, + "get-stream": { + "version": "6.0.1" + }, + "get-symbol-description": { + "version": "1.0.0", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "getpass": { + "version": "0.1.7", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "gifwrap": { + "version": "0.9.2", + "requires": { + "image-q": "^1.1.1", + "omggif": "^1.0.10" + } + }, + "glob": { + "version": "7.2.0", + "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", + "requires": { + "is-glob": "^4.0.1" + } + }, + "global": { + "version": "4.4.0", + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "global-dirs": { + "version": "3.0.0", + "requires": { + "ini": "2.0.0" + } + }, + "globals": { + "version": "11.12.0" + }, + "globby": { + "version": "11.1.0", + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.9" + }, + "grapheme-splitter": { + "version": "1.0.4" + }, + "gray-matter": { + "version": "2.1.1", + "dev": true, + "requires": { + "ansi-red": "^0.1.1", + "coffee-script": "^1.12.4", + "extend-shallow": "^2.0.1", + "js-yaml": "^3.8.1", + "toml": "^2.3.2" + } + }, + "gulp-header": { + "version": "1.8.12", + "dev": true, + "requires": { + "concat-with-sourcemaps": "*", + "lodash.template": "^4.4.0", + "through2": "^2.0.0" + } + }, + "handlebars": { + "version": "4.7.7", + "dev": true, + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "dev": true + } + } + }, + "har-schema": { + "version": "2.0.0" + }, + "har-validator": { + "version": "5.1.5", + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.1" + }, + "has-flag": { + "version": "3.0.0" + }, + "has-symbols": { + "version": "1.0.2" + }, + "has-tostringtag": { + "version": "1.0.0", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "has-unicode": { + "version": "2.0.1" + }, + "help-me": { + "version": "3.0.0", + "requires": { + "glob": "^7.1.6", + "readable-stream": "^3.6.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "hosted-git-info": { + "version": "4.1.0", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "html-encoding-sniffer": { + "version": "2.0.1", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.5" + } + }, + "html-escaper": { + "version": "2.0.2", + "dev": true + }, + "http-cache-semantics": { + "version": "4.1.0" + }, + "http-proxy-agent": { + "version": "4.0.1", + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "http-signature": { + "version": "1.2.0", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-proxy-agent": { + "version": "5.0.0", + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-signals": { + "version": "2.1.0" + }, + "humanize-ms": { + "version": "1.2.1", + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.6.3", + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "ieee754": { + "version": "1.2.1" + }, + "ignore": { + "version": "5.2.0" + }, + "ignore-walk": { + "version": "3.0.4", + "requires": { + "minimatch": "^3.0.4" + } + }, + "image-q": { + "version": "1.1.1" + }, + "import-fresh": { + "version": "3.3.0", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0" + } + } + }, + "import-local": { + "version": "3.1.0", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4" + }, + "indent-string": { + "version": "4.0.0" + }, + "infer-owner": { + "version": "1.0.4" + }, + "inflight": { + "version": "1.0.6", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4" + }, + "ini": { + "version": "2.0.0" + }, + "inquirer": { + "version": "7.3.3", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "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", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "internal-slot": { + "version": "1.0.3", + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "ip": { + "version": "1.1.5" + }, + "is-arrayish": { + "version": "0.2.1", + "dev": true + }, + "is-bigint": { + "version": "1.0.4", + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "dev": true + }, + "is-callable": { + "version": "1.2.4" + }, + "is-core-module": { + "version": "2.8.1", + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "dev": true + }, + "is-extglob": { + "version": "2.1.1" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-function": { + "version": "1.0.2" + }, + "is-generator-fn": { + "version": "2.1.0", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-lambda": { + "version": "1.0.1" + }, + "is-negative-zero": { + "version": "2.0.2" + }, + "is-number": { + "version": "7.0.0" + }, + "is-number-object": { + "version": "1.0.6", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-potential-custom-element-name": { + "version": "1.0.1", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.1" + }, + "is-stream": { + "version": "2.0.1" + }, + "is-string": { + "version": "1.0.7", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typedarray": { + "version": "1.0.0" + }, + "is-weakref": { + "version": "1.0.2", + "requires": { + "call-bind": "^1.0.2" + } + }, + "isarray": { + "version": "1.0.0" + }, + "isexe": { + "version": "2.0.0" + }, + "isobject": { + "version": "2.1.0", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "isstream": { + "version": "0.1.2" + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "5.1.0", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "3.1.4", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "iterm2-version": { + "version": "5.0.0", + "requires": { + "app-path": "^4.0.0", + "plist": "^3.0.2" + } + }, + "jest": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/core": "^27.5.1", + "import-local": "^3.0.2", + "jest-cli": "^27.5.1" + }, + "dependencies": { + "jest-cli": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + } + } + } + }, + "jest-changed-files": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + } + }, + "jest-circus": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + } + }, + "jest-config": { + "version": "27.5.1", + "dev": true, + "requires": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "strip-json-comments": { + "version": "3.1.1", + "dev": true + } + } + }, + "jest-diff": { + "version": "27.5.1", + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + } + }, + "jest-docblock": { + "version": "27.5.1", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + } + }, + "jest-environment-jsdom": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" + } + }, + "jest-environment-node": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + } + }, + "jest-extended": { + "version": "1.2.1", + "dev": true, + "requires": { + "expect": "^26.6.2", + "jest-diff": "^27.2.5", + "jest-get-type": "^27.0.6", + "jest-matcher-utils": "^27.2.4" + }, + "dependencies": { + "@jest/types": { + "version": "26.6.2", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "15.0.14", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-regex": { + "version": "5.0.1", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "diff-sequences": { + "version": "26.6.2", + "dev": true + }, + "expect": { + "version": "26.6.2", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "ansi-styles": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0" + }, + "dependencies": { + "jest-diff": { + "version": "26.6.2", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + } + }, + "jest-get-type": { + "version": "26.3.0", + "dev": true + }, + "jest-matcher-utils": { + "version": "26.6.2", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + } + } + } + }, + "jest-message-util": { + "version": "26.6.2", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.2" + } + }, + "jest-regex-util": { + "version": "26.0.0", + "dev": true + }, + "pretty-format": { + "version": "26.6.2", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + } + }, + "react-is": { + "version": "17.0.2", + "dev": true + } + } + }, + "jest-get-type": { + "version": "27.5.1" + }, + "jest-haste-map": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + } + }, + "jest-jasmine2": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "throat": "^6.0.1" + } + }, + "jest-leak-detector": { + "version": "27.5.1", + "dev": true, + "requires": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + } + }, + "jest-matcher-utils": { + "version": "27.5.1", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + } + }, + "jest-message-util": { + "version": "27.5.1", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*" + } + }, + "jest-pnp-resolver": { + "version": "1.2.2", + "dev": true, + "requires": {} + }, + "jest-regex-util": { + "version": "27.5.1", + "dev": true + }, + "jest-resolve": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + } + }, + "jest-resolve-dependencies": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + } + }, + "jest-runner": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + } + }, + "jest-runtime": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "4.0.0", + "dev": true + } + } + }, + "jest-serializer": { + "version": "27.5.1", + "dev": true, + "requires": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + } + }, + "jest-snapshot": { + "version": "27.5.1", + "dev": true, + "requires": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + } + }, + "jest-util": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-validate": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + }, + "dependencies": { + "camelcase": { + "version": "6.3.0", + "dev": true + } + } + }, + "jest-watcher": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + } + }, + "jest-worker": { + "version": "27.5.1", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jimp": { + "version": "0.16.1", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/custom": "^0.16.1", + "@jimp/plugins": "^0.16.1", + "@jimp/types": "^0.16.1", + "regenerator-runtime": "^0.13.3" + } + }, + "jmespath": { + "version": "0.15.0" + }, + "jpeg-js": { + "version": "0.4.2" + }, + "js-sdsl": { + "version": "2.1.4" + }, + "js-tokens": { + "version": "4.0.0" + }, + "js-yaml": { + "version": "3.14.1", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "requires": { + "sprintf-js": "~1.0.2" + } + } + } + }, + "js2xmlparser": { + "version": "4.0.2", + "dev": true, + "requires": { + "xmlcreate": "^2.0.4" + } + }, + "jsbn": { + "version": "0.1.1" + }, + "jsdoc": { + "version": "3.6.10", + "dev": true, + "requires": { + "@babel/parser": "^7.9.4", + "@types/markdown-it": "^12.2.3", + "bluebird": "^3.7.2", + "catharsis": "^0.9.0", + "escape-string-regexp": "^2.0.0", + "js2xmlparser": "^4.0.2", + "klaw": "^4.0.1", + "markdown-it": "^12.3.2", + "markdown-it-anchor": "^8.4.1", + "marked": "^4.0.10", + "mkdirp": "^1.0.4", + "requizzle": "^0.2.3", + "strip-json-comments": "^3.1.0", + "taffydb": "2.6.2", + "underscore": "~1.13.2" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "dev": true + }, + "marked": { + "version": "4.0.12", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "dev": true + } + } + }, + "jsdoc-api": { + "version": "5.0.4", + "dev": true, + "requires": { + "array-back": "^4.0.0", + "cache-point": "^1.0.0", + "collect-all": "^1.0.3", + "file-set": "^2.0.1", + "fs-then-native": "^2.0.0", + "jsdoc": "^3.6.3", + "object-to-spawn-args": "^1.1.1", + "temp-path": "^1.0.0", + "walk-back": "^3.0.1" + }, + "dependencies": { + "file-set": { + "version": "2.0.1", + "dev": true, + "requires": { + "array-back": "^2.0.0", + "glob": "^7.1.3" + }, + "dependencies": { + "array-back": { + "version": "2.0.0", + "dev": true, + "requires": { + "typical": "^2.6.1" + } + } + } + }, + "walk-back": { + "version": "3.0.1", + "dev": true + } + } + }, + "jsdoc-parse": { + "version": "4.0.1", + "dev": true, + "requires": { + "array-back": "^4.0.0", + "lodash.omit": "^4.5.0", + "lodash.pick": "^4.4.0", + "reduce-extract": "^1.0.0", + "sort-array": "^2.0.0", + "test-value": "^3.0.0" + } + }, + "jsdoc-to-markdown": { + "version": "5.0.3", + "dev": true, + "requires": { + "array-back": "^4.0.1", + "command-line-tool": "^0.8.0", + "config-master": "^3.1.0", + "dmd": "^4.0.5", + "jsdoc-api": "^5.0.4", + "jsdoc-parse": "^4.0.1", + "walk-back": "^4.0.0" + } + }, + "jsdom": { + "version": "16.7.0", + "dev": true, + "requires": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "form-data": { + "version": "3.0.1", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "tough-cookie": { + "version": "4.0.0", + "dev": true, + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + } + }, + "tr46": { + "version": "2.1.0", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "universalify": { + "version": "0.1.2", + "dev": true + }, + "webidl-conversions": { + "version": "6.1.0", + "dev": true + }, + "whatwg-url": { + "version": "8.7.0", + "dev": true, + "requires": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + } + } + } + }, + "jsesc": { + "version": "2.5.2" + }, + "json-fixer": { + "version": "1.6.13", + "dev": true, + "requires": { + "@babel/runtime": "^7.14.6", + "chalk": "^4.1.2", + "pegjs": "^0.10.0" + } + }, + "json-parse-even-better-errors": { + "version": "2.3.1" + }, + "json-schema": { + "version": "0.4.0" + }, + "json-schema-migrate": { + "version": "0.2.0", + "requires": { + "ajv": "^5.0.0" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "fast-deep-equal": { + "version": "1.1.0" + }, + "json-schema-traverse": { + "version": "0.3.1" + } + } + }, + "json-schema-traverse": { + "version": "0.4.1" + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1" + }, + "json-stringify-nice": { + "version": "1.1.4" + }, + "json-stringify-safe": { + "version": "5.0.1" + }, + "json-to-ast": { + "version": "2.1.0", + "requires": { + "code-error-fragment": "0.0.230", + "grapheme-splitter": "^1.0.4" + } + }, + "json5": { + "version": "2.2.0", + "requires": { + "minimist": "^1.2.5" + } + }, + "jsonc-parser": { + "version": "3.0.0", + "dev": true + }, + "jsonfile": { + "version": "1.0.1" + }, + "jsonparse": { + "version": "1.3.1" + }, + "jsonpointer": { + "version": "4.1.0" + }, + "jsprim": { + "version": "1.4.2", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "just-diff": { + "version": "3.1.1" + }, + "just-diff-apply": { + "version": "3.1.2" + }, + "kind-of": { + "version": "6.0.3", + "dev": true + }, + "klaw": { + "version": "4.0.1", + "dev": true + }, + "kleur": { + "version": "3.0.3", + "dev": true + }, + "lazy-cache": { + "version": "2.0.2", + "dev": true, + "requires": { + "set-getter": "^0.1.0" + } + }, + "leven": { + "version": "3.1.0" + }, + "levenshtein-edit-distance": { + "version": "2.0.5" + }, + "levn": { + "version": "0.4.1", + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lines-and-columns": { + "version": "1.2.4", + "dev": true + }, + "linkify-it": { + "version": "3.0.3", + "requires": { + "uc.micro": "^1.0.1" + } + }, + "list-item": { + "version": "1.1.1", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "extend-shallow": "^2.0.1", + "is-number": "^2.1.0", + "repeat-string": "^1.5.2" + }, + "dependencies": { + "is-number": { + "version": "2.1.0", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "kind-of": { + "version": "3.2.2", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "load-bmfont": { + "version": "1.4.1", + "requires": { + "buffer-equal": "0.0.1", + "mime": "^1.3.4", + "parse-bmfont-ascii": "^1.0.3", + "parse-bmfont-binary": "^1.0.5", + "parse-bmfont-xml": "^1.1.4", + "phin": "^2.9.1", + "xhr": "^2.0.1", + "xtend": "^4.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.21" + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "dev": true + }, + "lodash.camelcase": { + "version": "4.3.0" + }, + "lodash.clonedeep": { + "version": "4.5.0" + }, + "lodash.debounce": { + "version": "4.0.8" + }, + "lodash.kebabcase": { + "version": "4.1.1" + }, + "lodash.memoize": { + "version": "4.1.2", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2" + }, + "lodash.omit": { + "version": "4.5.0", + "dev": true + }, + "lodash.padend": { + "version": "4.6.1", + "dev": true + }, + "lodash.pick": { + "version": "4.4.0", + "dev": true + }, + "lodash.snakecase": { + "version": "4.1.1" + }, + "lodash.template": { + "version": "4.5.0", + "dev": true, + "requires": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "lodash.templatesettings": { + "version": "4.2.0", + "dev": true, + "requires": { + "lodash._reinterpolate": "^3.0.0" + } + }, + "lodash.upperfirst": { + "version": "4.3.1" + }, + "log-update": { + "version": "4.0.0", + "requires": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1" + }, + "ansi-styles": { + "version": "4.3.0", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4" + }, + "is-fullwidth-code-point": { + "version": "3.0.0" + }, + "string-width": { + "version": "4.2.3", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "loglevel": { + "version": "1.8.0" + }, + "loose-envify": { + "version": "1.4.0", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "requires": { + "yallist": "^4.0.0" + } + }, + "lunr": { + "version": "2.3.9", + "dev": true + }, + "make-dir": { + "version": "3.1.0", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "dev": true + } + } + }, + "make-error": { + "version": "1.3.6" + }, + "make-fetch-happen": { + "version": "9.1.0", + "requires": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + } + }, + "makeerror": { + "version": "1.0.12", + "dev": true, + "requires": { + "tmpl": "1.0.5" + } + }, + "map-stream": { + "version": "0.1.0", + "dev": true + }, + "markdown-it": { + "version": "12.3.2", + "requires": { + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + } + }, + "markdown-it-anchor": { + "version": "8.4.1", + "dev": true, + "requires": {} + }, + "markdown-link": { + "version": "0.1.1", + "dev": true + }, + "markdown-toc": { + "version": "1.2.0", + "dev": true, + "requires": { + "concat-stream": "^1.5.2", + "diacritics-map": "^0.1.0", + "gray-matter": "^2.1.0", + "lazy-cache": "^2.0.2", + "list-item": "^1.1.1", + "markdown-link": "^0.1.1", + "minimist": "^1.2.0", + "mixin-deep": "^1.1.3", + "object.pick": "^1.2.0", + "remarkable": "^1.7.1", + "repeat-string": "^1.6.1", + "strip-color": "^0.1.0" + }, + "dependencies": { + "concat-stream": { + "version": "1.6.2", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + } + } + }, + "marked": { + "version": "0.7.0", + "dev": true + }, + "math-random": { + "version": "1.0.4", + "dev": true + }, + "mdurl": { + "version": "1.0.1" + }, + "merge-stream": { + "version": "2.0.0" + }, + "merge2": { + "version": "1.4.1" + }, + "micromatch": { + "version": "4.0.4", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "mime": { + "version": "1.6.0" + }, + "mime-db": { + "version": "1.51.0" + }, + "mime-types": { + "version": "2.1.34", + "requires": { + "mime-db": "1.51.0" + } + }, + "mimic-fn": { + "version": "2.1.0" + }, + "min-document": { + "version": "2.19.0", + "requires": { + "dom-walk": "^0.1.0" + } + }, + "minimatch": { + "version": "3.1.1", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5" + }, + "minipass": { + "version": "3.1.6", + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass-collect": { + "version": "1.0.2", + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-fetch": { + "version": "1.4.1", + "requires": { + "encoding": "^0.1.12", + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-json-stream": { + "version": "1.0.1", + "requires": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-sized": { + "version": "1.0.3", + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "mixin-deep": { + "version": "1.3.2", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "is-plain-object": { + "version": "2.0.4", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "isobject": { + "version": "3.0.1", + "dev": true + } + } + }, + "mkdirp": { + "version": "1.0.4" + }, + "mkdirp-infer-owner": { + "version": "2.0.0", + "requires": { + "chownr": "^2.0.0", + "infer-owner": "^1.0.4", + "mkdirp": "^1.0.3" + } + }, + "mkdirp2": { + "version": "1.0.5", + "dev": true + }, + "mqtt": { + "version": "4.3.5", + "requires": { + "commist": "^1.0.0", + "concat-stream": "^2.0.0", + "debug": "^4.1.1", + "duplexify": "^4.1.1", + "help-me": "^3.0.0", + "inherits": "^2.0.3", + "lru-cache": "^6.0.0", + "minimist": "^1.2.5", + "mqtt-packet": "^6.8.0", + "number-allocator": "^1.0.9", + "pump": "^3.0.0", + "readable-stream": "^3.6.0", + "reinterval": "^1.1.0", + "rfdc": "^1.3.0", + "split2": "^3.1.0", + "ws": "^7.5.5", + "xtend": "^4.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "mqtt-packet": { + "version": "6.10.0", + "requires": { + "bl": "^4.0.2", + "debug": "^4.1.1", + "process-nextick-args": "^2.0.1" + } + }, + "ms": { + "version": "2.1.2" + }, + "mute-stream": { + "version": "0.0.8", + "dev": true + }, + "natural-compare": { + "version": "1.4.0" + }, + "ncp": { + "version": "0.4.2" + }, + "negotiator": { + "version": "0.6.3" + }, + "neo-async": { + "version": "2.6.2", + "dev": true + }, + "node-cleanup": { + "version": "2.1.2", + "dev": true + }, + "node-fetch": { + "version": "2.6.7", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "node-gyp": { + "version": "7.1.2", + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.3", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "request": "^2.88.2", + "rimraf": "^3.0.2", + "semver": "^7.3.2", + "tar": "^6.0.2", + "which": "^2.0.2" + } + }, + "node-gyp-build": { + "version": "4.3.0" + }, + "node-int64": { + "version": "0.4.0", + "dev": true + }, + "node-releases": { + "version": "2.0.2" + }, + "nopt": { + "version": "5.0.0", + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "3.0.0" + }, + "npm-bundled": { + "version": "1.1.2", + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-install-checks": { + "version": "4.0.0", + "requires": { + "semver": "^7.1.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1" + }, + "npm-package-arg": { + "version": "8.1.5", + "requires": { + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-packlist": { + "version": "2.2.2", + "requires": { + "glob": "^7.1.6", + "ignore-walk": "^3.0.3", + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-pick-manifest": { + "version": "6.1.1", + "requires": { + "npm-install-checks": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^8.1.2", + "semver": "^7.3.4" + } + }, + "npm-registry-fetch": { + "version": "11.0.0", + "requires": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + } + }, + "npm-run-path": { + "version": "4.0.1", + "requires": { + "path-key": "^3.0.0" + } + }, + "npmlog": { + "version": "4.1.2", + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-allocator": { + "version": "1.0.9", + "requires": { + "debug": "^4.3.1", + "js-sdsl": "^2.1.2" + } + }, + "number-is-nan": { + "version": "1.0.1" + }, + "nunjucks": { + "version": "3.2.3", + "requires": { + "a-sync-waterfall": "^1.0.0", + "asap": "^2.0.3", + "commander": "^5.1.0" + }, + "dependencies": { + "commander": { + "version": "5.1.0" + } + } + }, + "nwsapi": { + "version": "2.2.0", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0" + }, + "object-assign": { + "version": "4.1.1" + }, + "object-get": { + "version": "2.1.1", + "dev": true + }, + "object-inspect": { + "version": "1.12.0" + }, + "object-keys": { + "version": "1.1.1" + }, + "object-to-spawn-args": { + "version": "1.1.1", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "dev": true, + "requires": { + "isobject": "^3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "dev": true + } + } + }, + "object.values": { + "version": "1.1.5", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "omggif": { + "version": "1.0.10" + }, + "once": { + "version": "1.4.0", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "optionator": { + "version": "0.9.1", + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-map": { + "version": "4.0.0", + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-try": { + "version": "1.0.0" + }, + "pacote": { + "version": "11.3.5", + "requires": { + "@npmcli/git": "^2.1.0", + "@npmcli/installed-package-contents": "^1.0.6", + "@npmcli/promise-spawn": "^1.2.0", + "@npmcli/run-script": "^1.8.2", + "cacache": "^15.0.5", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.3", + "mkdirp": "^1.0.3", + "npm-package-arg": "^8.0.1", + "npm-packlist": "^2.1.4", + "npm-pick-manifest": "^6.0.0", + "npm-registry-fetch": "^11.0.0", + "promise-retry": "^2.0.1", + "read-package-json-fast": "^2.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.1.0" + } + }, + "pako": { + "version": "1.0.11" + }, + "parent-module": { + "version": "1.0.1", + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-bmfont-ascii": { + "version": "1.0.6" + }, + "parse-bmfont-binary": { + "version": "1.0.6" + }, + "parse-bmfont-xml": { + "version": "1.1.4", + "requires": { + "xml-parse-from-string": "^1.0.0", + "xml2js": "^0.4.5" + } + }, + "parse-conflict-json": { + "version": "1.1.1", + "requires": { + "json-parse-even-better-errors": "^2.3.0", + "just-diff": "^3.0.1", + "just-diff-apply": "^3.0.0" + } + }, + "parse-headers": { + "version": "2.0.4" + }, + "parse-json": { + "version": "5.2.0", + "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" + } + }, + "parse5": { + "version": "6.0.1", + "dev": true + }, + "path-exists": { + "version": "3.0.0" + }, + "path-is-absolute": { + "version": "1.0.1" + }, + "path-key": { + "version": "3.1.1" + }, + "path-parse": { + "version": "1.0.7" + }, + "path-to-regexp": { + "version": "6.2.0" + }, + "path-type": { + "version": "4.0.0" + }, + "pause-stream": { + "version": "0.0.11", + "dev": true, + "requires": { + "through": "~2.3" + } + }, + "pegjs": { + "version": "0.10.0", + "dev": true + }, + "performance-now": { + "version": "2.1.0" + }, + "phin": { + "version": "2.9.3" + }, + "picocolors": { + "version": "1.0.0" + }, + "picomatch": { + "version": "2.3.1" + }, + "pify": { + "version": "5.0.0", + "dev": true + }, + "pirates": { + "version": "4.0.5", + "dev": true + }, + "pixelmatch": { + "version": "4.0.2", + "requires": { + "pngjs": "^3.0.0" + } + }, + "pkg-dir": { + "version": "4.2.0", + "dev": true, + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "dev": true + } + } + }, + "plist": { + "version": "3.0.4", + "requires": { + "base64-js": "^1.5.1", + "xmlbuilder": "^9.0.7" + }, + "dependencies": { + "xmlbuilder": { + "version": "9.0.7" + } + } + }, + "pngjs": { + "version": "3.4.0" + }, + "prelude-ls": { + "version": "1.2.1" + }, + "prettier": { + "version": "2.5.1" + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "requires": { + "fast-diff": "^1.1.2" + } + }, + "pretty-format": { + "version": "27.5.1", + "requires": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1" + }, + "ansi-styles": { + "version": "5.2.0" + }, + "react-is": { + "version": "17.0.2" + } + } + }, + "proc-log": { + "version": "1.0.0" + }, + "process": { + "version": "0.11.10" + }, + "process-nextick-args": { + "version": "2.0.1" + }, + "promise-all-reject-late": { + "version": "1.0.1" + }, + "promise-call-limit": { + "version": "1.0.1" + }, + "promise-inflight": { + "version": "1.0.1" + }, + "promise-retry": { + "version": "2.0.1", + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, + "prompts": { + "version": "2.4.2", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, + "prop-types": { + "version": "15.8.1", + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "ps-tree": { + "version": "1.2.0", + "dev": true, + "requires": { + "event-stream": "=3.3.4" + } + }, + "psl": { + "version": "1.8.0" + }, + "pump": { + "version": "3.0.0", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1" + }, + "qs": { + "version": "6.11.0", + "requires": { + "side-channel": "^1.0.4" + } + }, + "queue-microtask": { + "version": "1.2.3" + }, + "ramldt2jsonschema": { + "version": "1.2.3", + "requires": { + "commander": "^5.0.0", + "js-yaml": "^3.14.0", + "json-schema-migrate": "^0.2.0", + "webapi-parser": "^0.5.0" + }, + "dependencies": { + "commander": { + "version": "5.1.0" + } + } + }, + "randomatic": { + "version": "3.1.1", + "dev": true, + "requires": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "dev": true + } + } + }, + "react": { + "version": "17.0.2", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "react-is": { + "version": "16.13.1" + }, + "read-cmd-shim": { + "version": "2.0.0" + }, + "read-package-json-fast": { + "version": "2.0.3", + "requires": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "readable-stream": { + "version": "2.3.7", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdir-scoped-modules": { + "version": "1.1.0", + "requires": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "readdirp": { + "version": "3.6.0", + "requires": { + "picomatch": "^2.2.1" + } + }, + "redis": { + "version": "4.0.3", + "requires": { + "@node-redis/bloom": "1.0.1", + "@node-redis/client": "1.0.3", + "@node-redis/graph": "1.0.0", + "@node-redis/json": "1.0.2", + "@node-redis/search": "1.0.2", + "@node-redis/time-series": "1.0.1" + } + }, + "redis-errors": { + "version": "1.2.0" + }, + "redis-parser": { + "version": "3.0.0", + "requires": { + "redis-errors": "^1.0.0" + } + }, + "reduce-extract": { + "version": "1.0.0", + "dev": true, + "requires": { + "test-value": "^1.0.1" + }, + "dependencies": { + "array-back": { + "version": "1.0.4", + "dev": true, + "requires": { + "typical": "^2.6.0" + } + }, + "test-value": { + "version": "1.1.0", + "dev": true, + "requires": { + "array-back": "^1.0.2", + "typical": "^2.4.2" + } + } + } + }, + "reduce-flatten": { + "version": "1.0.1", + "dev": true + }, + "reduce-unique": { + "version": "2.0.1", + "dev": true + }, + "reduce-without": { + "version": "1.0.1", + "dev": true, + "requires": { + "test-value": "^2.0.0" + }, + "dependencies": { + "array-back": { + "version": "1.0.4", + "dev": true, + "requires": { + "typical": "^2.6.0" + } + }, + "test-value": { + "version": "2.1.0", + "dev": true, + "requires": { + "array-back": "^1.0.3", + "typical": "^2.6.0" + } + } + } + }, + "regenerate": { + "version": "1.4.2" + }, + "regenerate-unicode-properties": { + "version": "10.0.1", + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.13.9" + }, + "regenerator-transform": { + "version": "0.14.5", + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regexpp": { + "version": "3.2.0" + }, + "regexpu-core": { + "version": "5.0.1", + "requires": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + } + }, + "regjsgen": { + "version": "0.6.0" + }, + "regjsparser": { + "version": "0.8.4", + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0" + } + } + }, + "reinterval": { + "version": "1.1.0" + }, + "remarkable": { + "version": "1.7.4", + "dev": true, + "requires": { + "argparse": "^1.0.10", + "autolinker": "~0.28.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + } + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "dev": true + }, + "render-gif": { + "version": "2.0.4", + "requires": { + "cycled": "^1.2.0", + "decode-gif": "^1.0.1", + "delay": "^4.3.0", + "jimp": "^0.14.0" + }, + "dependencies": { + "@jimp/bmp": { + "version": "0.14.0", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "bmp-js": "^0.1.0" + } + }, + "@jimp/core": { + "version": "0.14.0", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "any-base": "^1.1.0", + "buffer": "^5.2.0", + "exif-parser": "^0.1.12", + "file-type": "^9.0.0", + "load-bmfont": "^1.3.1", + "mkdirp": "^0.5.1", + "phin": "^2.9.1", + "pixelmatch": "^4.0.2", + "tinycolor2": "^1.4.1" + } + }, + "@jimp/custom": { + "version": "0.14.0", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/core": "^0.14.0" + } + }, + "@jimp/gif": { + "version": "0.14.0", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "gifwrap": "^0.9.2", + "omggif": "^1.0.9" + } + }, + "@jimp/jpeg": { + "version": "0.14.0", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "jpeg-js": "^0.4.0" + } + }, + "@jimp/plugin-blit": { + "version": "0.14.0", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-blur": { + "version": "0.14.0", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-circle": { + "version": "0.14.0", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-color": { + "version": "0.14.0", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "tinycolor2": "^1.4.1" + } + }, + "@jimp/plugin-contain": { + "version": "0.14.0", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-cover": { + "version": "0.14.0", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-crop": { + "version": "0.14.0", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-displace": { + "version": "0.14.0", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-dither": { + "version": "0.14.0", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-fisheye": { + "version": "0.14.0", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-flip": { + "version": "0.14.0", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-gaussian": { + "version": "0.14.0", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-invert": { + "version": "0.14.0", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-mask": { + "version": "0.14.0", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-normalize": { + "version": "0.14.0", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-print": { + "version": "0.14.0", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "load-bmfont": "^1.4.0" + } + }, + "@jimp/plugin-resize": { + "version": "0.14.0", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-rotate": { + "version": "0.14.0", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-scale": { + "version": "0.14.0", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-shadow": { + "version": "0.14.0", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-threshold": { + "version": "0.14.0", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugins": { + "version": "0.14.0", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/plugin-blit": "^0.14.0", + "@jimp/plugin-blur": "^0.14.0", + "@jimp/plugin-circle": "^0.14.0", + "@jimp/plugin-color": "^0.14.0", + "@jimp/plugin-contain": "^0.14.0", + "@jimp/plugin-cover": "^0.14.0", + "@jimp/plugin-crop": "^0.14.0", + "@jimp/plugin-displace": "^0.14.0", + "@jimp/plugin-dither": "^0.14.0", + "@jimp/plugin-fisheye": "^0.14.0", + "@jimp/plugin-flip": "^0.14.0", + "@jimp/plugin-gaussian": "^0.14.0", + "@jimp/plugin-invert": "^0.14.0", + "@jimp/plugin-mask": "^0.14.0", + "@jimp/plugin-normalize": "^0.14.0", + "@jimp/plugin-print": "^0.14.0", + "@jimp/plugin-resize": "^0.14.0", + "@jimp/plugin-rotate": "^0.14.0", + "@jimp/plugin-scale": "^0.14.0", + "@jimp/plugin-shadow": "^0.14.0", + "@jimp/plugin-threshold": "^0.14.0", + "timm": "^1.6.1" + } + }, + "@jimp/png": { + "version": "0.14.0", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "pngjs": "^3.3.3" + } + }, + "@jimp/tiff": { + "version": "0.14.0", + "requires": { + "@babel/runtime": "^7.7.2", + "utif": "^2.0.1" + } + }, + "@jimp/types": { + "version": "0.14.0", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/bmp": "^0.14.0", + "@jimp/gif": "^0.14.0", + "@jimp/jpeg": "^0.14.0", + "@jimp/png": "^0.14.0", + "@jimp/tiff": "^0.14.0", + "timm": "^1.6.1" + } + }, + "@jimp/utils": { + "version": "0.14.0", + "requires": { + "@babel/runtime": "^7.7.2", + "regenerator-runtime": "^0.13.3" + } + }, + "jimp": { + "version": "0.14.0", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/custom": "^0.14.0", + "@jimp/plugins": "^0.14.0", + "@jimp/types": "^0.14.0", + "regenerator-runtime": "^0.13.3" + } + }, + "mkdirp": { + "version": "0.5.5", + "requires": { + "minimist": "^1.2.5" + } + } + } + }, + "repeat-element": { + "version": "1.1.4", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "dev": true + }, + "request": { + "version": "2.88.2", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "qs": { + "version": "6.5.3" + }, + "uuid": { + "version": "3.4.0" + } + } + }, + "require-directory": { + "version": "2.1.1", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "dev": true + }, + "requizzle": { + "version": "0.2.3", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "resolve": { + "version": "1.22.0", + "requires": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + } + }, + "resolve-from": { + "version": "5.0.0" + }, + "resolve-pkg": { + "version": "2.0.0", + "requires": { + "resolve-from": "^5.0.0" + } + }, + "resolve.exports": { + "version": "1.1.0", + "dev": true + }, + "restore-cursor": { + "version": "3.1.0", + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15" + }, + "retry": { + "version": "0.12.0" + }, + "reusify": { + "version": "1.0.4" + }, + "rfdc": { + "version": "1.3.0" + }, + "rimraf": { + "version": "3.0.2", + "requires": { + "glob": "^7.1.3" + } + }, + "rollup": { + "version": "2.67.2", + "requires": { + "fsevents": "~2.3.2" + } + }, + "run-async": { + "version": "2.4.1", + "dev": true + }, + "run-parallel": { + "version": "1.2.0", + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rxjs": { + "version": "6.6.7", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "safe-buffer": { + "version": "5.1.2" + }, + "safe-regex": { + "version": "1.1.0", + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2" + }, + "sax": { + "version": "1.2.4" + }, + "saxes": { + "version": "5.0.1", + "dev": true, + "requires": { + "xmlchars": "^2.2.0" + } + }, + "semver": { + "version": "7.3.5", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "set-blocking": { + "version": "2.0.0" + }, + "set-getter": { + "version": "0.1.1", + "dev": true, + "requires": { + "to-object-path": "^0.3.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0" + }, + "shiki": { + "version": "0.10.0", + "dev": true, + "requires": { + "jsonc-parser": "^3.0.0", + "vscode-oniguruma": "^1.6.1", + "vscode-textmate": "5.2.0" + } + }, + "side-channel": { + "version": "1.0.4", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7" + }, + "simple-git": { + "version": "3.7.1", + "requires": { + "@kwsites/file-exists": "^1.1.1", + "@kwsites/promise-deferred": "^1.1.1", + "debug": "^4.3.3" + } + }, + "sisteransi": { + "version": "1.0.5", + "dev": true + }, + "slash": { + "version": "3.0.0" + }, + "slice-ansi": { + "version": "4.0.0", + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4" + }, + "is-fullwidth-code-point": { + "version": "3.0.0" + } + } + }, + "smart-buffer": { + "version": "4.2.0" + }, + "socket.io": { + "version": "4.4.1", + "requires": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.1.0", + "socket.io-adapter": "~2.3.3", + "socket.io-parser": "~4.0.4" + } + }, + "socket.io-adapter": { + "version": "2.3.3" + }, + "socket.io-parser": { + "version": "4.0.4", + "requires": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + } + }, + "socks": { + "version": "2.6.2", + "requires": { + "ip": "^1.1.5", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "6.1.1", + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.1", + "socks": "^2.6.1" + } + }, + "sort-array": { + "version": "2.0.0", + "dev": true, + "requires": { + "array-back": "^1.0.4", + "object-get": "^2.1.0", + "typical": "^2.6.0" + }, + "dependencies": { + "array-back": { + "version": "1.0.4", + "dev": true, + "requires": { + "typical": "^2.6.0" + } + } + } + }, + "source-map": { + "version": "0.5.7" + }, + "source-map-support": { + "version": "0.5.21", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1" + } + } + }, + "split2": { + "version": "3.2.2", + "requires": { + "readable-stream": "^3.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "sprintf-js": { + "version": "1.0.3" + }, + "sshpk": { + "version": "1.17.0", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "8.0.1", + "requires": { + "minipass": "^3.1.1" + } + }, + "stack-utils": { + "version": "2.0.5", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "dev": true + } + } + }, + "stream-combiner": { + "version": "0.0.4", + "dev": true, + "requires": { + "duplexer": "~0.1.1" + } + }, + "stream-connect": { + "version": "1.0.2", + "dev": true, + "requires": { + "array-back": "^1.0.2" + }, + "dependencies": { + "array-back": { + "version": "1.0.4", + "dev": true, + "requires": { + "typical": "^2.6.0" + } + } + } + }, + "stream-shift": { + "version": "1.0.1" + }, + "stream-via": { + "version": "1.0.4", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "string-argv": { + "version": "0.1.2", + "dev": true + }, + "string-length": { + "version": "4.0.2", + "dev": true, + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "string-width": { + "version": "1.0.2", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string.prototype.trimend": { + "version": "1.0.4", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "strip-ansi": { + "version": "3.0.1", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "3.0.0" + }, + "strip-color": { + "version": "0.1.0", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0" + }, + "strip-outer": { + "version": "1.0.1", + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, + "supports-color": { + "version": "5.5.0", + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-hyperlinks": { + "version": "2.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0" + }, + "svg-element-attributes": { + "version": "1.3.1" + }, + "symbol-tree": { + "version": "3.2.4", + "dev": true + }, + "table-layout": { + "version": "0.4.5", + "dev": true, + "requires": { + "array-back": "^2.0.0", + "deep-extend": "~0.6.0", + "lodash.padend": "^4.6.1", + "typical": "^2.6.1", + "wordwrapjs": "^3.0.0" + }, + "dependencies": { + "array-back": { + "version": "2.0.0", + "dev": true, + "requires": { + "typical": "^2.6.1" + } + } + } + }, + "taffydb": { + "version": "2.6.2", + "dev": true + }, + "tar": { + "version": "6.1.11", + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + } + }, + "temp-path": { + "version": "1.0.0", + "dev": true + }, + "term-img": { + "version": "6.0.0", + "requires": { + "ansi-escapes": "^5.0.0", + "iterm2-version": "^5.0.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "5.0.0", + "requires": { + "type-fest": "^1.0.2" + } + }, + "type-fest": { + "version": "1.4.0" + } + } + }, + "terminal-image": { + "version": "2.0.0", + "requires": { + "chalk": "^4.1.1", + "jimp": "^0.16.1", + "log-update": "^4.0.0", + "render-gif": "^2.0.4", + "term-img": "^6.0.0" + } + }, + "terminal-link": { + "version": "2.1.1", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + } + }, + "test-exclude": { + "version": "6.0.0", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "test-value": { + "version": "3.0.0", + "dev": true, + "requires": { + "array-back": "^2.0.0", + "typical": "^2.6.1" + }, + "dependencies": { + "array-back": { + "version": "2.0.0", + "dev": true, + "requires": { + "typical": "^2.6.1" + } + } + } + }, + "text-table": { + "version": "0.2.0" + }, + "throat": { + "version": "6.0.1", + "dev": true + }, + "through": { + "version": "2.3.8", + "dev": true + }, + "through2": { + "version": "2.0.5", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "timm": { + "version": "1.7.1" + }, + "tiny-merge-patch": { + "version": "0.1.2" + }, + "tinycolor2": { + "version": "1.4.2" + }, + "tmp": { + "version": "0.0.33", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "tmpl": { + "version": "1.0.5", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0" + }, + "to-object-path": { + "version": "0.3.0", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex-range": { + "version": "5.0.1", + "requires": { + "is-number": "^7.0.0" + } + }, + "toml": { + "version": "2.3.6", + "dev": true + }, + "tough-cookie": { + "version": "2.5.0", + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tr46": { + "version": "0.0.3" + }, + "treeverse": { + "version": "1.0.4" + }, + "trim-repeated": { + "version": "1.0.0", + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, + "ts-jest": { + "version": "27.1.3", + "dev": true, + "requires": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^27.0.0", + "json5": "2.x", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" + } + }, + "ts-node": { + "version": "9.1.1", + "requires": { + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + } + }, + "tsc-watch": { + "version": "4.6.0", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "node-cleanup": "^2.1.2", + "ps-tree": "^1.2.0", + "string-argv": "^0.1.1", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "tsconfig-paths": { + "version": "3.12.0", + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "tslib": { + "version": "1.14.1" + }, + "tsutils": { + "version": "3.21.0", + "requires": { + "tslib": "^1.8.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5" + }, + "type-check": { + "version": "0.4.0", + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-detect": { + "version": "4.0.8", + "dev": true + }, + "type-fest": { + "version": "0.21.3" + }, + "typedarray": { + "version": "0.0.6" + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typedoc": { + "version": "0.22.11", + "dev": true, + "requires": { + "glob": "^7.2.0", + "lunr": "^2.3.9", + "marked": "^4.0.10", + "minimatch": "^3.0.4", + "shiki": "^0.10.0" + }, + "dependencies": { + "marked": { + "version": "4.0.12", + "dev": true + } + } + }, + "typedoc-plugin-markdown": { + "version": "3.11.13", + "dev": true, + "requires": { + "handlebars": "^4.7.7" + } + }, + "typescript": { + "version": "4.5.5" + }, + "typical": { + "version": "2.6.1", + "dev": true + }, + "uc.micro": { + "version": "1.0.6" + }, + "uglify-js": { + "version": "3.15.1", + "dev": true, + "optional": true + }, + "unbox-primitive": { + "version": "1.0.1", + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + } + }, + "underscore": { + "version": "1.13.2", + "dev": true + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0" + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.0.0" + }, + "unicode-property-aliases-ecmascript": { + "version": "2.0.0" + }, + "unique-filename": { + "version": "1.1.1", + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unixify": { + "version": "1.0.0", + "dev": true, + "requires": { + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "uri-js": { + "version": "4.4.1", + "requires": { + "punycode": "^2.1.0" + } + }, + "uri-templates": { + "version": "0.2.0" + }, + "utf-8-validate": { + "version": "5.0.8", + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "utif": { + "version": "2.0.1", + "requires": { + "pako": "^1.0.5" + } + }, + "util-deprecate": { + "version": "1.0.2" + }, + "uuid": { + "version": "8.3.2" + }, + "v8-compile-cache": { + "version": "2.3.0" + }, + "v8-to-istanbul": { + "version": "8.1.1", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "dev": true + } + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "requires": { + "builtins": "^1.0.3" + } + }, + "vary": { + "version": "1.1.2" + }, + "verror": { + "version": "1.10.0", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2" + } + } + }, + "vscode-oniguruma": { + "version": "1.6.1", + "dev": true + }, + "vscode-textmate": { + "version": "5.2.0", + "dev": true + }, + "w3c-hr-time": { + "version": "1.0.2", + "dev": true, + "requires": { + "browser-process-hrtime": "^1.0.0" + } + }, + "w3c-xmlserializer": { + "version": "2.0.0", + "dev": true, + "requires": { + "xml-name-validator": "^3.0.0" + } + }, + "walk": { + "version": "2.3.15", + "requires": { + "foreachasync": "^3.0.0" + } + }, + "walk-back": { + "version": "4.0.0", + "dev": true + }, + "walk-up-path": { + "version": "1.0.0" + }, + "walkdir": { + "version": "0.4.1" + }, + "walker": { + "version": "1.0.8", + "dev": true, + "requires": { + "makeerror": "1.0.12" + } + }, + "webapi-parser": { + "version": "0.5.0", + "requires": { + "ajv": "6.5.2" + }, + "dependencies": { + "ajv": { + "version": "6.5.2", + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.1" + } + }, + "fast-deep-equal": { + "version": "2.0.1" + } + } + }, + "webidl-conversions": { + "version": "3.0.1" + }, + "whatwg-encoding": { + "version": "1.0.5", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "whatwg-mimetype": { + "version": "2.3.0", + "dev": true + }, + "whatwg-url": { + "version": "5.0.0", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "which": { + "version": "2.0.2", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-module": { + "version": "2.0.0", + "dev": true + }, + "wide-align": { + "version": "1.1.5", + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "word-wrap": { + "version": "1.2.3" + }, + "wordwrap": { + "version": "1.0.0", + "dev": true + }, + "wordwrapjs": { + "version": "3.0.0", + "dev": true, + "requires": { + "reduce-flatten": "^1.0.1", + "typical": "^2.6.1" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "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", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "wrappy": { + "version": "1.0.2" + }, + "write-file-atomic": { + "version": "3.0.3", + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "7.5.7", + "requires": {} + }, + "xhr": { + "version": "2.6.0", + "requires": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "xml-name-validator": { + "version": "3.0.0", + "dev": true + }, + "xml-parse-from-string": { + "version": "1.0.1" + }, + "xml2js": { + "version": "0.4.23", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1" + }, + "xmlchars": { + "version": "2.2.0", + "dev": true + }, + "xmlcreate": { + "version": "2.0.4", + "dev": true + }, + "xtend": { + "version": "4.0.2" + }, + "y18n": { + "version": "5.0.8", + "dev": true + }, + "yallist": { + "version": "4.0.0" + }, + "yaml-ast-parser": { + "version": "0.0.43" + }, + "yargs": { + "version": "16.2.0", + "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" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "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", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "yargs-parser": { + "version": "20.2.9", + "dev": true + }, + "yn": { + "version": "3.1.1" + } + } + } + } +} diff --git a/examples/slack-reaction-listener/package.json b/examples/slack-reaction-listener/package.json new file mode 100644 index 000000000..ef8e883b8 --- /dev/null +++ b/examples/slack-reaction-listener/package.json @@ -0,0 +1,15 @@ +{ + "name": "glee-example", + "version": "0.1.0", + "description": "An example of the AsyncAPI Glee framework", + "type": "module", + "scripts": { + "dev": "glee dev", + "start": "glee start" + }, + "author": "Fran Mendez", + "license": "Apache-2.0", + "dependencies": { + "@asyncapi/glee": "file:../.." + } +} diff --git a/examples/slack-reaction-listener/socket.io.html b/examples/slack-reaction-listener/socket.io.html new file mode 100644 index 000000000..ca1f23a6b --- /dev/null +++ b/examples/slack-reaction-listener/socket.io.html @@ -0,0 +1,16 @@ + + \ No newline at end of file diff --git a/examples/slack-reaction-listener/tsconfig.json b/examples/slack-reaction-listener/tsconfig.json new file mode 100644 index 000000000..b17930b3e --- /dev/null +++ b/examples/slack-reaction-listener/tsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "allowJs": true, + "target": "es6", + "esModuleInterop": true, + "moduleResolution": "node", + "module":"es2020" + } +} \ No newline at end of file diff --git a/src/lib/asyncapiFile.ts b/src/lib/asyncapiFile.ts index d6118b668..8836c389a 100644 --- a/src/lib/asyncapiFile.ts +++ b/src/lib/asyncapiFile.ts @@ -1,12 +1,19 @@ import { readFile } from 'fs/promises' import { AsyncAPIDocumentInterface as AsyncAPIDocument, Parser, toAsyncAPIDocument} from '@asyncapi/parser' import { getConfigs } from './configs.js' +import { logError } from './logger.js' export async function getParsedAsyncAPI(): Promise { const { ASYNCAPI_FILE_PATH } = getConfigs() const asyncapiFileContent = await readFile(ASYNCAPI_FILE_PATH, 'utf-8') const parser = new Parser() - const {document} = await parser.parse(asyncapiFileContent) + const { document, diagnostics } = await parser.parse(asyncapiFileContent) + if (!document) { + const errorMessage = 'Failed to parse the AsyncAPI document.' + logError(new Error(errorMessage)) + console.error(diagnostics) + process.exit(1) + } return toAsyncAPIDocument(document) } From 62b7076052891f728d7345a19bc557f25052a466 Mon Sep 17 00:00:00 2001 From: Khuda Dad Nomani Date: Wed, 25 Oct 2023 12:56:29 +0100 Subject: [PATCH 02/24] initial commit From 1ada3d4283657e7021547387b1ba4663fa878e5e Mon Sep 17 00:00:00 2001 From: Khuda Dad Nomani Date: Mon, 30 Oct 2023 18:07:26 +0000 Subject: [PATCH 03/24] initial draft --- .../slack-reaction-listener/asyncapi.yaml | 126 +++++++++++++++-- .../functions/messageReceived.ts | 20 --- .../functions/openAIResponse.ts | 25 ++++ .../functions/reactionAdded.ts | 24 ++++ .../slack-reaction-listener/package-lock.json | 12 +- src/adapters/http/client.ts | 31 +++-- src/adapters/mqtt/index.ts | 3 +- src/adapters/ws/client.ts | 36 +++-- src/index.ts | 43 +++--- src/lib/adapter.ts | 16 ++- src/lib/functions.ts | 129 +++++++++--------- src/lib/index.d.ts | 22 +-- src/lib/lifecycleEvents.ts | 11 +- src/lib/message.ts | 62 ++++----- src/lib/util.ts | 69 +++++++++- src/lib/wsHttpAuth.ts | 6 +- src/middlewares/existsInAsyncAPI.ts | 5 +- 17 files changed, 430 insertions(+), 210 deletions(-) delete mode 100644 examples/slack-reaction-listener/functions/messageReceived.ts create mode 100644 examples/slack-reaction-listener/functions/openAIResponse.ts create mode 100644 examples/slack-reaction-listener/functions/reactionAdded.ts diff --git a/examples/slack-reaction-listener/asyncapi.yaml b/examples/slack-reaction-listener/asyncapi.yaml index ad44be0cc..123c55f64 100644 --- a/examples/slack-reaction-listener/asyncapi.yaml +++ b/examples/slack-reaction-listener/asyncapi.yaml @@ -3,30 +3,138 @@ info: title: Slack Websocket API version: 1.0.0 servers: - slack: + OpenAI: + host: api.openai.com + protocol: https + Slack: host: wss-primary.slack.com protocol: wss + Slack_HTTP: + host: slack.com + protocol: https channels: - "/": - address: /link/?ticket=1413e8d4-5bda-4007-88e0-e22e840e6070&app_id=b02112d9364cb2fee8a0ee048a920b8b4b0103cb03fab023b4e30f6ee2efb98f - bindings: - ws: {} + slackResponse: + bindings: + http: + method: post + address: /api/chat.postMessage + servers: + - $ref: "#/servers/Slack_HTTP" + messages: + slackResponse: + $ref: "#/components/messages/slackResponse" + OpenAISent: + bindings: + http: + method: post + servers: + - $ref: "#/servers/OpenAI" + address: /v1/chat/completions + messages: + OpenAIRequest: + $ref: "#/components/messages/OpenAIRequest" + slackReceive: + servers: + - $ref: "#/servers/Slack" + address: /link/?ticket={ticket}&app_id={app_id} + parameters: + ticket: + default: 35338c0f-ffcc-4325-b8d4-7c9e556c0ecf + app_id: + default: b02112d9364cb2fee8a0ee048a920b8b4b0103cb03fab023b4e30f6ee2efb98f messages: reactionAdded: $ref: "#/components/messages/reactionAdded" error: $ref: "#/components/messages/error" operations: - messageReceived: + slackResponse: + + action: send + channel: + $ref: "#/channels/OpenAISent" + messages: + - $ref: "#/components/messages/slackResponse" + openAIResponse: + action: receive + channel: + $ref: "#/channels/OpenAISent" + messages: + - $ref: "#/components/messages/OpenAIResponse" + reply: + channel: + $ref: "#/channels/slackResponse" + reactionAdded: + reply: + channel: + $ref: "#/channels/OpenAISent" action: receive channel: - $ref: "#/channels/~1" + $ref: "#/channels/slackReceive" messages: - $ref: "#/components/messages/reactionAdded" - $ref: "#/components/messages/error" components: messages: + slackResponse: + payload: + type: object + properties: + channel: + type: string + text: + type: string + OpenAIRequest: + payload: + type: object + properties: + model: + type: string + enum: ["gpt-3.5-turbo", "gpt-3.5-turbo-16k", "text-davinci-002"] + messages: + type: array + items: + type: object + properties: + role: + type: string + enum: ["user"] + content: + type: string + temperature: + type: number + minimum: 0.0 + maximum: 1.0 + required: + - model + - messages + - temperature + OpenAIResponse: + payload: + type: object + properties: + choices: + type: array + items: + type: object + properties: + finish_reason: + type: string + enum: ['stop'] + message: + type: object + properties: + content: + type: string + role: + type: string + enum: ['assistant'] + required: + - finish_reason + - message + required: + - choices reactionAdded: payload: type: object @@ -34,4 +142,6 @@ components: payload: type: string x-remoteServers: - - slack \ No newline at end of file + - Slack_HTTP + - Slack + - OpenAI \ No newline at end of file diff --git a/examples/slack-reaction-listener/functions/messageReceived.ts b/examples/slack-reaction-listener/functions/messageReceived.ts deleted file mode 100644 index 2df1352ec..000000000 --- a/examples/slack-reaction-listener/functions/messageReceived.ts +++ /dev/null @@ -1,20 +0,0 @@ - -enum EVENT_TYPE { - EVENTS_API = "events_api", - CONNECTED = "hello" -} - -export default async function ({payload}) { - const eventType: EVENT_TYPE = payload.type - - switch(eventType){ - case EVENT_TYPE.CONNECTED: - console.log(`connection established..`) - break - case EVENT_TYPE.EVENTS_API: - if(payload.payload.event.type === "reaction_added"){ - console.log(`user ${payload.payload.event.item_user} reacted with ${payload.payload.event.reaction}`) - } - break - } -} diff --git a/examples/slack-reaction-listener/functions/openAIResponse.ts b/examples/slack-reaction-listener/functions/openAIResponse.ts new file mode 100644 index 000000000..eba47145f --- /dev/null +++ b/examples/slack-reaction-listener/functions/openAIResponse.ts @@ -0,0 +1,25 @@ +import { GleeFunction } from "@asyncapi/glee" + +const myFunction: GleeFunction = async (event) => { + const { payload } = event.request.request; + const slack_event = payload?.payload?.event + + if (!slack_event) return + + const thread_ts = slack_event.item.ts + const channel = slack_event.item.channel + const text = event.payload.choices[0].message.content + + + return { + payload: { + channel, thread_ts, text + }, + headers: { + Authorization: `Bearer ${process.env.SLACK_HTTP}`, + } + } + +} + +export default myFunction \ No newline at end of file diff --git a/examples/slack-reaction-listener/functions/reactionAdded.ts b/examples/slack-reaction-listener/functions/reactionAdded.ts new file mode 100644 index 000000000..ca2f1ae55 --- /dev/null +++ b/examples/slack-reaction-listener/functions/reactionAdded.ts @@ -0,0 +1,24 @@ +import { GleeFunction } from "@asyncapi/glee" +enum EVENT_TYPE { + EVENTS_API = "events_api", + CONNECTED = "hello" +} +const myFunction: GleeFunction = async ({ payload }) => { + const reaction = payload?.payload?.event?.reaction + if (!reaction) return + return { + headers: { + 'Authorization': `Bearer ${process.env.CHAT_API}` + }, + + payload: { + model: "gpt-3.5-turbo", + messages: [{ "role": "user", "content": `Someone reacted with "${reaction}" to my message on Slack, write something fun and short to them.` }], + temperature: 0.7 + } + } + + +} + +export default myFunction \ No newline at end of file diff --git a/examples/slack-reaction-listener/package-lock.json b/examples/slack-reaction-listener/package-lock.json index b5baef976..526e73a53 100644 --- a/examples/slack-reaction-listener/package-lock.json +++ b/examples/slack-reaction-listener/package-lock.json @@ -17,9 +17,9 @@ "version": "0.27.0", "license": "Apache-2.0", "dependencies": { - "@asyncapi/generator": "^1.13.1", - "@asyncapi/html-template": "^0.28.4", - "@asyncapi/markdown-template": "^1.3.3", + "@asyncapi/generator": "^1.14.1", + "@asyncapi/html-template": "^1.0.0", + "@asyncapi/markdown-template": "^1.4.0", "@asyncapi/parser": "^v3.0.0-next-major-spec.7", "@types/jest": "^27.4.0", "@types/qs": "^6.9.7", @@ -13082,9 +13082,9 @@ "@asyncapi/glee": { "version": "file:../..", "requires": { - "@asyncapi/generator": "^1.13.1", - "@asyncapi/html-template": "^0.28.4", - "@asyncapi/markdown-template": "^1.3.3", + "@asyncapi/generator": "^1.14.1", + "@asyncapi/html-template": "^1.0.0", + "@asyncapi/markdown-template": "^1.4.0", "@asyncapi/parser": "^v3.0.0-next-major-spec.7", "@tsconfig/node14": "^1.0.1", "@types/async": "^3.2.11", diff --git a/src/adapters/http/client.ts b/src/adapters/http/client.ts index f0f3312d9..6db3bcf21 100644 --- a/src/adapters/http/client.ts +++ b/src/adapters/http/client.ts @@ -1,9 +1,10 @@ -import got from 'got' +import got, { Method } from 'got' import http from 'http' import Adapter from '../../lib/adapter.js' import GleeMessage from '../../lib/message.js' import { clientAuthConfig } from '../../lib/userAuth.js' import GleeAuth from '../../lib/wsHttpAuth.js' +import { logWarningMessage } from '../../lib/logger.js' class HttpClientAdapter extends Adapter { name(): string { @@ -20,7 +21,7 @@ class HttpClientAdapter extends Adapter { } async send(message: GleeMessage): Promise { - let headers = {} + let headers = message.headers const authConfig = await clientAuthConfig(this.serverName) const serverUrl = this.serverUrlExpanded for (const channelName of this.channelNames) { @@ -30,15 +31,15 @@ class HttpClientAdapter extends Adapter { const isChannelServers = !channelServers.length || channelServers.includes(message.serverName) if (httpChannelBinding && isChannelServers) { - const method = httpChannelBinding.json().method - let url = new URL( serverUrl + this.parsedAsyncAPI.channels().get(channelName).address()) + const method: Method = httpChannelBinding.json().method + let url = new URL(serverUrl + this.parsedAsyncAPI.channels().get(channelName).address()) const gleeAuth = new GleeAuth( this.AsyncAPIServer, this.parsedAsyncAPI, this.serverName, authConfig ) - const body: any = message.payload + let body: any = message.payload let query: { [key: string]: string } | { [key: string]: string[] } = message.query @@ -52,30 +53,40 @@ class HttpClientAdapter extends Adapter { url = modedAuth.url.href query = modedAuth.query } - + if (!!body && !this.shouldMethodHaveBody(method)) { + logWarningMessage(`"${method}" can't have a body. please make sure you are using the correct http method for '${channelName}' channel. ignoring the body...`) + body = undefined + } + console.log("sending the request: ") got({ method, url, json: body, - searchParams: JSON.parse(JSON.stringify(query)), - headers, + searchParams: !!query ? JSON.parse(JSON.stringify(query)) : undefined, + headers: headers, }) .then((res) => { - const msg = this.createMessage(channelName, res.body) + console.log(message) + const msg = this.createMessage(message, channelName, res.body) this.emit('message', msg, http) }) .catch((err) => { + console.error(err) this.emit('error', err) }) } } } - private createMessage(channelName: string, payload: any) { + private createMessage(requestMessage: GleeMessage, channelName: string, payload: any) { return new GleeMessage({ + request: requestMessage, payload: JSON.parse(JSON.stringify(payload)), channel: channelName, }) } + private shouldMethodHaveBody(method: Method) { + return ["post", "put", "patch"].includes(method.toLocaleLowerCase()) + } } export default HttpClientAdapter diff --git a/src/adapters/mqtt/index.ts b/src/adapters/mqtt/index.ts index 1b85d449e..f932f9095 100644 --- a/src/adapters/mqtt/index.ts +++ b/src/adapters/mqtt/index.ts @@ -54,7 +54,7 @@ class MqttAdapter extends Adapter { securityRequirements.forEach(security => { for (const sec of security) { const securityType = sec.type().toLocaleLowerCase() - switch(securityType){ + switch (securityType) { case SecurityTypes.USER_PASSWORD: userAndPasswordSecurityReq = sec break @@ -255,7 +255,6 @@ class MqttAdapter extends Adapter { _customAckHandler(channel, message, mqttPacket, done) { const msg = this._createMessage(mqttPacket as IPublishPacket) - console.log('Hello World') msg.on('processing:successful', () => done(MQTT_SUCCESS_REASON)) msg.on('processing:failed', () => done(MQTT_UNSPECIFIED_ERROR_REASON)) diff --git a/src/adapters/ws/client.ts b/src/adapters/ws/client.ts index 263844fb8..7b7f6b91a 100644 --- a/src/adapters/ws/client.ts +++ b/src/adapters/ws/client.ts @@ -4,7 +4,9 @@ import GleeMessage from '../../lib/message.js' import ws from 'ws' import { clientAuthConfig } from '../../lib/userAuth.js' import GleeAuth from '../../lib/wsHttpAuth.js' - +import { applyAddressParameters } from '../../lib/util.js' +import Debug from 'debug' +const debug = Debug("glee:ws:client") interface Client { channel: string client: ws @@ -29,7 +31,8 @@ class WsClientAdapter extends Adapter { private async _connect(): Promise { const channelsOnThisServer = this.getWsChannels() - for (const channel of channelsOnThisServer) { + debug("connecting to ", this.serverName) + for (const channelName of channelsOnThisServer) { let headers = {} const authConfig = await clientAuthConfig(this.serverName) const gleeAuth = new GleeAuth( @@ -38,16 +41,21 @@ class WsClientAdapter extends Adapter { this.serverName, authConfig ) - let url = new URL(this.AsyncAPIServer.url() + this.parsedAsyncAPI.channels().get(channel).address()) + + const protocol = this.AsyncAPIServer.protocol() + const serverHost = this.AsyncAPIServer.host() + const channel = this.parsedAsyncAPI.channels().get(channelName); + const channelAddress = applyAddressParameters(channel); + let url = new URL(`${protocol}://${serverHost}${channelAddress}`) if (authConfig) { const modedAuth = await gleeAuth.processClientAuth(url, headers, {}) headers = modedAuth.headers url = modedAuth.url } this.clients.push({ - channel, + channel: channelName, client: new ws(url, { headers }), - binding: this.parsedAsyncAPI.channels().get(channel).bindings().get('ws'), + binding: this.parsedAsyncAPI.channels().get(channelName).bindings().get('ws'), }) } @@ -77,18 +85,16 @@ class WsClientAdapter extends Adapter { private getWsChannels() { const channels = [] for (const channel of this.channelNames) { - if (this.parsedAsyncAPI.channels().get(channel).bindings().get('ws')) { - if (this.parsedAsyncAPI.channels().get(channel).servers().all().length !== 0) { // NOSONAR - if ( - this.parsedAsyncAPI - .channels().get(channel) - .servers().get(this.serverName) - ) { - channels.push(channel) - } - } else { + if (this.parsedAsyncAPI.channels().get(channel).servers().all().length !== 0) { // NOSONAR + if ( + this.parsedAsyncAPI + .channels().get(channel) + .servers().get(this.serverName) + ) { channels.push(channel) } + } else { + channels.push(channel) } } diff --git a/src/index.ts b/src/index.ts index c2d9e5fd9..e269690ab 100755 --- a/src/index.ts +++ b/src/index.ts @@ -59,7 +59,6 @@ export default async function GleeAppInitializer() { await registerAuth(GLEE_AUTH_DIR) const parsedAsyncAPI = await getParsedAsyncAPI() - const channelNames = getChannelNames(parsedAsyncAPI) const app = new Glee(config) @@ -76,32 +75,26 @@ export default async function GleeAppInitializer() { app.use(errorLogger) app.useOutbound(errorLogger) await generateDocs(parsedAsyncAPI, config, null) - - channelNames.forEach((channelName) => { - const channel = parsedAsyncAPI.channels().get(channelName) - channel.operations().filterByReceive().forEach(operation => { - const operationId = operation.operationId() - - if (operationId) { - const schema = { - oneOf: operation.messages().filterByReceive().map(m => m.payload().json()) - } as any - app.use(channelName, validate(schema), (event, next) => { - triggerFunction({ - app, - operationId, - message: event - }).then(next).catch(next) - }) - } + parsedAsyncAPI.operations().filterByReceive().forEach(operation => { + const channel = operation.channels()[0] // operation can have only one channel. https://github.com/asyncapi/parser-js/issues/884 + const schema = { + oneOf: operation.messages().filterByReceive().map(m => m.payload().json()) + } as any + app.use(channel.id(), validate(schema), (event, next) => { + triggerFunction({ + app, + operation, + message: event + }).then(next).catch(next) }) + }) - channel.operations().filterBySend().forEach(operation => { - const schema = { - oneOf: operation.messages().filterBySend().map(m => m.payload().json()) - } as any - app.useOutbound(channelName, validate(schema), json2string) - }) + parsedAsyncAPI.operations().filterBySend().forEach(operation => { + const channel = operation.channels()[0] // operation can have only one channel. https://github.com/asyncapi/parser-js/issues/884 + const schema = { + oneOf: operation.messages().filterBySend().map(m => m.payload().json()) + } as any + app.useOutbound(channel.address(), validate(schema), json2string) }) app.on('adapter:auth', async (e: AuthEvent) => { diff --git a/src/lib/adapter.ts b/src/lib/adapter.ts index ec4fc4e8f..23c094861 100644 --- a/src/lib/adapter.ts +++ b/src/lib/adapter.ts @@ -1,5 +1,5 @@ /* eslint-disable security/detect-object-injection */ -import { AsyncAPIDocumentInterface as AsyncAPIDocument, ServerInterface as Server } from '@asyncapi/parser' +import { AsyncAPIDocumentInterface as AsyncAPIDocument, ServerInterface } from '@asyncapi/parser' import EventEmitter from 'events' import uriTemplates from 'uri-templates' import GleeConnection from './connection.js' @@ -11,7 +11,7 @@ import { AuthProps } from './index.js' export type EnrichedEvent = { connection?: GleeConnection serverName: string - server: Server + server: ServerInterface } export type AuthEvent = { @@ -24,9 +24,10 @@ export type AuthEvent = { class GleeAdapter extends EventEmitter { private _glee: Glee private _serverName: string - private _AsyncAPIServer: Server + private _AsyncAPIServer: ServerInterface private _parsedAsyncAPI: AsyncAPIDocument private _channelNames: string[] + private _operationIds: string[] private _channelAddresses: string[] private _connections: GleeConnection[] private _serverUrlExpanded: string @@ -42,7 +43,7 @@ class GleeAdapter extends EventEmitter { constructor( glee: Glee, serverName: string, - server: Server, + server: ServerInterface, parsedAsyncAPI: AsyncAPIDocument ) { super() @@ -54,6 +55,7 @@ class GleeAdapter extends EventEmitter { this._parsedAsyncAPI = parsedAsyncAPI this._channelNames = this._parsedAsyncAPI.channels().all().map(e => e.id()) this._channelAddresses = this._parsedAsyncAPI.channels().all().map(c => c.address()) + this._operationIds = this._parsedAsyncAPI.operations().all().map(o => o.operationId()) this._connections = [] const uriTemplateValues = new Map() @@ -184,7 +186,7 @@ class GleeAdapter extends EventEmitter { return this._serverName } - get AsyncAPIServer(): Server { + get AsyncAPIServer(): ServerInterface { return this._AsyncAPIServer } @@ -196,6 +198,10 @@ class GleeAdapter extends EventEmitter { return this._channelNames } + get operationIds(): string[] { + return this._operationIds + } + get channelAddresses(): string[] { return this._channelAddresses } diff --git a/src/lib/functions.ts b/src/lib/functions.ts index 1bc8cafbf..9c2aa70ea 100644 --- a/src/lib/functions.ts +++ b/src/lib/functions.ts @@ -4,24 +4,26 @@ import walkdir from 'walkdir' import { getConfigs } from './configs.js' import { logWarningMessage, logError } from './logger.js' import GleeMessage from './message.js' -import { GleeFunction } from './index.js' +import { GleeFunction, GleeFunctionReturn } from './index.js' import Glee from './glee.js' import { gleeMessageToFunctionEvent, validateData, isRemoteServer, + extractExpressionValueFromMessage, } from './util.js' import { pathToFileURL } from 'url' import GleeError from '../errors/glee-error.js' import { getParsedAsyncAPI } from './asyncapiFile.js' import Debug from 'debug' +import { AsyncAPIDocumentInterface, OperationInterface } from '@asyncapi/parser' const debug = Debug('glee:functions') interface FunctionInfo { run: GleeFunction } -const OutboundMessageSchema = { +const FunctionReturnSchema = { type: 'object', properties: { payload: {}, @@ -30,26 +32,9 @@ const OutboundMessageSchema = { propertyNames: { type: 'string' }, additionalProperties: { type: 'string' }, }, - channel: { type: 'string' }, - server: { type: 'string' }, query: { type: 'object' }, }, } -const FunctionReturnSchema = { - type: ['object', 'null'], - properties: { - send: { - type: 'array', - items: OutboundMessageSchema, - }, - reply: { - type: 'array', - items: OutboundMessageSchema, - }, - }, - additionalProperties: false, - anyOf: [{ required: ['send'] }, { required: ['reply'] }], -} const { GLEE_DIR, GLEE_FUNCTIONS_DIR } = getConfigs() export const functions: Map = new Map() @@ -58,7 +43,7 @@ export async function register(dir: string) { debug(`Attempting to register functions from directory: ${dir}`) try { const statsDir = await stat(dir) - if (!statsDir.isDirectory()){ + if (!statsDir.isDirectory()) { debug('Provided path is not a directory. Skipping.') return } @@ -95,82 +80,98 @@ export async function register(dir: string) { export async function trigger({ app, - operationId, + operation, message, }: { app: Glee - operationId: string + operation: OperationInterface message: GleeMessage }) { try { - debug(`Triggering function for operation ID: ${operationId}`) - const parsedAsyncAPI = await getParsedAsyncAPI() - const operationFunction = functions.get(operationId) - if(!operationFunction){ - const errMsg = `Failed to trigger function: No function registered for operation ID "${operationId}". please make sure you have a function named: "${operationId}(.js|.ts)" in your functions directory.` - logError(new Error(errMsg ), { - highlightedWords: [`"${operationId}"`], - }) - return + debug(`Triggering function for operation ID: ${operation.id()}`) + const parsedAsyncAPI = await getParsedAsyncAPI() + message.operation = operation + const operationFunction = functions.get(operation.id()) + if (!operationFunction) { + const errMsg = `Failed to trigger function: No function registered for operation ID "${operation.id()}". please make sure you have a function named: "${operation.id()}(.js|.ts)" in your functions directory.` + throw Error(errMsg) } let functionResult = await operationFunction.run(gleeMessageToFunctionEvent(message, app)) - if (functionResult === undefined) functionResult = null const { humanReadableError, errors, isValid } = validateData( functionResult, FunctionReturnSchema ) - if (!isValid) { - debug(`Function ${operationId} returned invalid data.`) const err = new GleeError({ humanReadableError, errors, }) - err.message = `Function ${operationId} returned invalid data.` - + err.message = `Function ${operation.id()} returned invalid data.` logError(err, { - highlightedWords: [operationId], + highlightedWords: [operation.id()], }) - return } - - functionResult?.send?.forEach((msg) => { - const localServerProtocols = ['ws', 'wss', 'http', 'https'] - const serverProtocol = parsedAsyncAPI.servers().get(msg.server || message.serverName).protocol().toLocaleLowerCase() - const isBroadcast = - localServerProtocols.includes(serverProtocol) && - !isRemoteServer(parsedAsyncAPI, msg.server) + const replyMessage = createReply(functionResult, message, parsedAsyncAPI) + const replyChannel = parsedAsyncAPI.channels().get(replyMessage.channel) + replyChannel.servers().forEach((server) => { + replyMessage.serverName = server.id() app.send( - new GleeMessage({ - payload: msg.payload, - query: msg.query, - headers: msg.headers, - channel: msg.channel || message.channel, - serverName: msg.server, - broadcast: isBroadcast, - }) + replyMessage ) }) - - functionResult?.reply?.forEach((msg) => { - message.reply({ - payload: msg.payload, - headers: msg.headers, - channel: msg.channel, - }) - }) } catch (err) { if (err.code === 'ERR_MODULE_NOT_FOUND') { const functionsPath = relative(GLEE_DIR, GLEE_FUNCTIONS_DIR) - const missingFile = relative(GLEE_FUNCTIONS_DIR, `${operationId}.js`) + const missingFile = relative(GLEE_FUNCTIONS_DIR, `${operation.id()}.js`) const missingPath = join(functionsPath, missingFile) logWarningMessage(`Missing function file ${missingPath}.`, { highlightedWords: [missingPath], }) } else { - throw err + logError(err) + return + } + } +} + +function createReply(functionResult: void | GleeFunctionReturn, message: GleeMessage, parsedAsyncAPI: AsyncAPIDocumentInterface): GleeMessage { + const operation = message.operation + const reply = operation.reply() + if (!functionResult && !reply) { + return + } + if (!functionResult && reply) { + const errMsg = `Operation ${operation.id()} needs to return a response. please make sure your function returns the approprait reply.` + throw Error(errMsg) + } + if (functionResult && !reply) { + const warningMsg = `Operation ${operation.id()} doesn't have a reply field. the return result from your function will be ignored.` + logWarningMessage(warningMsg) + return + } + + const localServerProtocols = ['ws', 'wss', 'http', 'https'] + const serverProtocol = parsedAsyncAPI.servers().get(message.serverName).protocol().toLocaleLowerCase() + const isBroadcast = localServerProtocols.includes(serverProtocol) && + !isRemoteServer(parsedAsyncAPI, message.serverName) + + let replyChannel = parsedAsyncAPI.channels().all().filter((c) => c.address() === reply.channel().address())[0] + const replyAddress = reply.address() + if (replyAddress) { + const channelAddress = extractExpressionValueFromMessage(this, replyAddress.location()) + if (!channelAddress) { + throw Error(`cannot parse the ${replyAddress.location()} from your message.`) + } + const channel = parsedAsyncAPI.allChannels().filter((c) => c.address === channelAddress)[0] + if (!channel) { + throw Error(`cannot find a channel with the address of "${channelAddress}" in your AsyncAPI file.`) } + replyChannel = channel } -} \ No newline at end of file + + return new GleeMessage({ ...functionResult, channel: replyChannel.id(), request: message, broadcast: isBroadcast }); + + +} diff --git a/src/lib/index.d.ts b/src/lib/index.d.ts index 28c2ea146..503283cde 100644 --- a/src/lib/index.d.ts +++ b/src/lib/index.d.ts @@ -1,8 +1,9 @@ -import { AsyncAPIDocumentInterface as AsyncAPIDocument } from '@asyncapi/parser' +import { AsyncAPIDocumentInterface as AsyncAPIDocument, ChannelInterface } from '@asyncapi/parser' import GleeAdapter from './adapter.js' import GleeClusterAdapter from './cluster.js' import GleeConnection from './connection.js' import Glee from './glee.js' +import type GleeMessage from './message.js' type WebSocketServerType = 'native' | 'socket.io' type HttpServerType = 'native' @@ -112,12 +113,16 @@ export type GleeConfig = { } export type GleeFunctionReturn = { + payload?: any + query?: QueryParam + headers?: { [key: string]: string } +} + +export type GleeLifecycleReturn = { send?: GleeFunctionReturnSend[] - reply?: GleeFunctionReturnReply[] - broadcast?: GleeFunctionReturnBroadcast[] } -export type GleeFunctionEvent = { +export type GleeLifecycleEvent = { glee: Glee serverName: string connection?: GleeConnection @@ -126,6 +131,10 @@ export type GleeFunctionEvent = { headers?: { [key: string]: string } channel?: string } +export type GleeFunctionEvent = GleeLifecycleEvent & { + request: GleeMessage + +} export type GleeAuthFunctionEvent = { glee: Glee @@ -143,12 +152,9 @@ export type GleeFunctionReturnSend = { server?: string } -export type GleeFunctionReturnReply = GleeFunctionReturnSend -export type GleeFunctionReturnBroadcast = GleeFunctionReturnSend - export type GleeFunction = ( event: GleeFunctionEvent -) => Promise +) => Promise export type GleeAuthFunction = ( event: GleeAuthFunctionEvent diff --git a/src/lib/lifecycleEvents.ts b/src/lib/lifecycleEvents.ts index 3d1a984ae..5fbdfdb68 100644 --- a/src/lib/lifecycleEvents.ts +++ b/src/lib/lifecycleEvents.ts @@ -1,9 +1,8 @@ import { stat } from 'fs/promises' import walkdir from 'walkdir' import { - GleeFunctionEvent, - GleeFunctionReturn, - GleeFunctionReturnSend, + GleeLifecycleEvent, + GleeLifecycleReturn } from './index.js' import { logInfoMessage } from './logger.js' import GleeMessage from './message.js' @@ -11,7 +10,7 @@ import { arrayHasDuplicates } from './util.js' import { pathToFileURL } from 'url' interface IEvent { - fn: (event: GleeFunctionEvent) => GleeFunctionReturn + fn: (event: GleeLifecycleEvent) => GleeLifecycleReturn channels: string[] servers: string[] } @@ -57,7 +56,7 @@ export async function register(dir: string) { } } -export async function run(lifecycleEvent: string, params: GleeFunctionEvent) { +export async function run(lifecycleEvent: string, params: GleeLifecycleEvent) { if (!Array.isArray(events.get(lifecycleEvent))) return try { @@ -87,7 +86,7 @@ export async function run(lifecycleEvent: string, params: GleeFunctionEvent) { const responses = await Promise.all(handlers.map((info) => info.fn(params))) responses.forEach((res) => { - res?.send?.forEach((event: GleeFunctionReturnSend) => { + res?.send?.forEach((event) => { try { params.glee.send( new GleeMessage({ diff --git a/src/lib/message.ts b/src/lib/message.ts index efa436692..f2904ec96 100644 --- a/src/lib/message.ts +++ b/src/lib/message.ts @@ -1,5 +1,6 @@ import EventEmitter from 'events' import GleeConnection from './connection.js' +import { OperationInterface } from '@asyncapi/parser' type MessageHeaders = { [key: string]: any } type QueryParam = { [key: string]: string } | { [key: string]: string[] } @@ -8,6 +9,7 @@ interface IGleeMessageConstructor { payload?: any headers?: MessageHeaders channel?: string + request?: GleeMessage serverName?: string connection?: GleeConnection broadcast?: boolean @@ -30,6 +32,8 @@ class GleeMessage extends EventEmitter { private _connection: GleeConnection private _broadcast: boolean private _inbound: boolean + private _request: GleeMessage + private _operation: OperationInterface private _outbound: boolean private _cluster: boolean private _params: { [key: string]: string } @@ -43,6 +47,7 @@ class GleeMessage extends EventEmitter { * @param {Object} [options.headers] Message headers. * @param {String} [options.channel] Message channel. * @param {String} [options.serverName] The name of the associated AsyncAPI server. + * @param {GleeMessage} [options.request] The request that this message is created for as a reply. * @param {GleeConnection} [options.connection] The connection through which the message will be sent or has been received. * @param {Boolean} [options.broadcast=false] Whether the message should be broadcasted or not. * @param {Boolean} [options.cluster=false] Whether the message is from a cluster adapter or not. @@ -54,6 +59,7 @@ class GleeMessage extends EventEmitter { channel, serverName, connection, + request, broadcast = false, cluster = false, query, @@ -68,6 +74,7 @@ class GleeMessage extends EventEmitter { if (broadcast) this._broadcast = !!broadcast if (cluster) this._cluster = cluster if (query) this._query = query + if (request) this._request = request } get payload(): any { @@ -78,6 +85,27 @@ class GleeMessage extends EventEmitter { this._payload = value } + hasRequest(): boolean { + return !!this._request + } + + set request(value: GleeMessage) { + this._request = value + } + + get request() { + return this._request + } + + get operation(): OperationInterface { + return this._operation + } + + set operation(value: OperationInterface) { + this._operation = value + } + + get headers(): { [key: string]: string } { return this._headers } @@ -137,40 +165,6 @@ class GleeMessage extends EventEmitter { set query(value: QueryParam) { this._query = value } - /** - * Sends the message back to the server/broker. - * - * @param {Object} options - * @param {Any} [options.payload] The new message payload. Pass falsy value if you don't want to change it. - * @param {Object|null} [options.headers] The new message headers. Pass null if you want to remove them. - * @param {String} [options.channel] The channel where the reply should go to. - * @param {Object} [options.query] The new message query parameters. Pass a falsy value if you don't want to change them. - */ - reply({ payload, headers, channel, query }: IReply) { - if (payload) this._payload = payload - - if (query) this._query = query - - if (headers !== undefined) { - if (headers === null) { - this._headers = undefined - } else { - this._headers = headers - } - } - - if (channel !== undefined) { - if (typeof channel === 'string') { - this._channel = channel - } else { - return console.error( - 'GleeMessage.reply(): when specified, "channel" must be a string.' - ) - } - } - - this.send() - } /** * Makes the message suitable only for the inbound pipeline. diff --git a/src/lib/util.ts b/src/lib/util.ts index 3128efbd9..4e4db299f 100644 --- a/src/lib/util.ts +++ b/src/lib/util.ts @@ -1,4 +1,4 @@ -import { AsyncAPIDocumentInterface as AsyncAPIDocument } from '@asyncapi/parser' +import { AsyncAPIDocumentInterface as AsyncAPIDocument, ChannelInterface } from '@asyncapi/parser' import Ajv from 'ajv' import betterAjvErrors from 'better-ajv-errors' import { pathToRegexp } from 'path-to-regexp' @@ -54,6 +54,7 @@ export const duplicateMessage = (message: GleeMessage): GleeMessage => { payload: message.payload, headers: message.headers, channel: message.channel, + request: message.request, serverName: message.serverName, connection: message.connection, broadcast: message.broadcast, @@ -127,6 +128,7 @@ export const gleeMessageToFunctionEvent = ( payload: message.payload, query: message.query, headers: message.headers, + request: message.request, channel: message.channel, connection: message.connection, serverName: message.serverName, @@ -157,3 +159,68 @@ export const resolveFunctions = async (object: any) => { } } } + + +function jsonPointer(obj: any, pointer: string): any { + const parts = pointer.split('/').slice(1); + let current = obj; + + for (const part of parts) { + if (current === null || typeof current !== 'object') { + return undefined; + } + current = current[part]; + } + + return current; +} + +export function extractExpressionValueFromMessage(message: { headers: any, payload: any }, expression: string): any { + + // Parse the expression + const match = expression.match(/^\$message\.(header|payload)(#.*)?$/); + if (!match) { + throw new Error(`${expression} is invalid.`); + } + + const source = match[1]; + const fragment = match[2] ? match[2].slice(1) : undefined; + const headers = message.headers + const payload = message.payload + // Extract value based on source and fragment + if (source === 'header') { + return fragment ? jsonPointer(headers, fragment) : headers; + } else if (source === 'payload') { + return fragment ? jsonPointer(payload, fragment) : payload; + } else { + throw new Error(`${expression} source should be "header" or "fragment"`); + } +} + +export function applyAddressParameters(channel: ChannelInterface, headers?: any, payload?: any) { + let address = channel.address() + const parameters = channel.parameters() + for (const parameter of parameters) { + const location = parameter.location() + const doesExistInAddress = address.includes(`{${parameter.id()}}`); + if (!doesExistInAddress) continue + let parameterValue: string + if (location) { + if (payload || headers) { + parameterValue = extractExpressionValueFromMessage({ headers, payload }, location) + if (!parameterValue) { + throw Error(`tried to parse parameter "${parameter.id()}" from ${location} but failed.`); + } + } + } else { + parameterValue = parameter.json().default + } + if (!parameterValue) { + throw Error(`parsing parameter "${parameter.id()}" value failed. please make sure it exists in your header/payload or in default field of the parameter.`); + } + + address = address.replace(`{${parameter.id()}}`, parameterValue) + } + + return address +} \ No newline at end of file diff --git a/src/lib/wsHttpAuth.ts b/src/lib/wsHttpAuth.ts index 09d049a9f..f3b097f21 100644 --- a/src/lib/wsHttpAuth.ts +++ b/src/lib/wsHttpAuth.ts @@ -1,4 +1,4 @@ -import { AsyncAPIDocumentInterface as AsyncAPIDocument, SecuritySchemeInterface as SecurityScheme, ServerInterface as Server } from '@asyncapi/parser' +import { AsyncAPIDocumentInterface as AsyncAPIDocument, SecuritySchemeInterface as SecurityScheme, ServerInterface } from '@asyncapi/parser' import { resolveFunctions } from './util.js' import { EventEmitter } from 'events' import { HttpAuthConfig, WsAuthConfig, AuthProps } from './index.js' @@ -7,7 +7,7 @@ class GleeAuth extends EventEmitter { private secReqs: { [key: string]: SecurityScheme }[] private parsedAsyncAPI: AsyncAPIDocument private serverName: string - private AsyncAPIServer: Server + private AsyncAPIServer: ServerInterface private authConfig: WsAuthConfig | HttpAuthConfig private auth: { [key: string]: string } | { [key: string]: string[] } @@ -15,7 +15,7 @@ class GleeAuth extends EventEmitter { * Instantiates authentication. */ constructor( - AsyncAPIServer: Server, + AsyncAPIServer: ServerInterface, parsedAsyncAPI: AsyncAPIDocument, serverName: string, authConfig? diff --git a/src/middlewares/existsInAsyncAPI.ts b/src/middlewares/existsInAsyncAPI.ts index 7d79fdc0b..883f366fd 100644 --- a/src/middlewares/existsInAsyncAPI.ts +++ b/src/middlewares/existsInAsyncAPI.ts @@ -4,9 +4,8 @@ import GleeMessage from '../lib/message.js' export default (asyncapi: AsyncAPIDocument) => (event: GleeMessage, next: MiddlewareCallback) => { - if (typeof event.channel !== 'string') - {return next(new Error(`Invalid channel name: ${event.channel}.`))} - if (asyncapi.channels().get(event.channel)) return next() + if (typeof event.channel !== 'string') { return next(new Error(`Invalid channel name: ${event.channel}.`)) } + if (asyncapi.channels().all().filter((channel) => channel.address() === event.channel)) return next() next( new Error(`Channel ${event.channel} is not defined in the AsyncAPI file.`) ) From 8b97e9675057b7169f94f7eecafaebd0de8d3f7e Mon Sep 17 00:00:00 2001 From: Khuda Dad Nomani Date: Wed, 1 Nov 2023 17:00:30 +0000 Subject: [PATCH 04/24] use better names for channels and operations --- .../slack-reaction-listener/asyncapi.yaml | 65 +++++++++---------- ...eactionAdded.ts => HandleSlackReaction.ts} | 7 +- ...openAIResponse.ts => ReceiveFromOpenAI.ts} | 0 package-lock.json | 4 +- src/adapters/http/client.ts | 3 +- src/adapters/mqtt/index.ts | 1 - src/lib/functions.ts | 42 ++++++------ src/lib/glee.ts | 1 - 8 files changed, 58 insertions(+), 65 deletions(-) rename examples/slack-reaction-listener/functions/{reactionAdded.ts => HandleSlackReaction.ts} (73%) rename examples/slack-reaction-listener/functions/{openAIResponse.ts => ReceiveFromOpenAI.ts} (100%) diff --git a/examples/slack-reaction-listener/asyncapi.yaml b/examples/slack-reaction-listener/asyncapi.yaml index 123c55f64..b777b9c54 100644 --- a/examples/slack-reaction-listener/asyncapi.yaml +++ b/examples/slack-reaction-listener/asyncapi.yaml @@ -3,78 +3,77 @@ info: title: Slack Websocket API version: 1.0.0 servers: - OpenAI: + OpenAI_HTTPS: host: api.openai.com protocol: https - Slack: + Slack_WebSocket: host: wss-primary.slack.com protocol: wss - Slack_HTTP: + Slack_HTTPS: host: slack.com protocol: https channels: - slackResponse: + SlackPostMessage: bindings: http: method: post address: /api/chat.postMessage servers: - - $ref: "#/servers/Slack_HTTP" + - $ref: "#/servers/Slack_HTTPS" messages: slackResponse: $ref: "#/components/messages/slackResponse" - OpenAISent: + OpenAICompletion: bindings: http: method: post servers: - - $ref: "#/servers/OpenAI" + - $ref: "#/servers/OpenAI_HTTPS" address: /v1/chat/completions messages: OpenAIRequest: $ref: "#/components/messages/OpenAIRequest" - slackReceive: + SlackEventStream: servers: - - $ref: "#/servers/Slack" + - $ref: "#/servers/Slack_WebSocket" address: /link/?ticket={ticket}&app_id={app_id} parameters: + # the ticket parameter should be added as a security parameter, but it doesn't work in glee. https://github.com/asyncapi/glee/issues/556 ticket: - default: 35338c0f-ffcc-4325-b8d4-7c9e556c0ecf + default: 584f36b9-65c8-4683-bd5a-5da0965317b1 app_id: default: b02112d9364cb2fee8a0ee048a920b8b4b0103cb03fab023b4e30f6ee2efb98f messages: - reactionAdded: - $ref: "#/components/messages/reactionAdded" - error: - $ref: "#/components/messages/error" + SlackReactionAdded: + $ref: "#/components/messages/SlackReactionAdded" + GenericErrorPayload: + $ref: "#/components/messages/GenericErrorPayload" operations: - slackResponse: - + SendToOpenAI: action: send channel: - $ref: "#/channels/OpenAISent" + $ref: "#/channels/OpenAICompletion" messages: - $ref: "#/components/messages/slackResponse" - openAIResponse: + ReceiveFromOpenAI: action: receive channel: - $ref: "#/channels/OpenAISent" + $ref: "#/channels/OpenAICompletion" messages: - - $ref: "#/components/messages/OpenAIResponse" + - $ref: "#/components/messages/OpenAICompletionResponse" reply: channel: - $ref: "#/channels/slackResponse" - reactionAdded: + $ref: "#/channels/SlackPostMessage" + HandleSlackReaction: reply: channel: - $ref: "#/channels/OpenAISent" + $ref: "#/channels/OpenAICompletion" action: receive channel: - $ref: "#/channels/slackReceive" + $ref: "#/channels/SlackEventStream" messages: - - $ref: "#/components/messages/reactionAdded" - - $ref: "#/components/messages/error" - + - $ref: "#/components/messages/SlackReactionAdded" + - $ref: "#/components/messages/GenericErrorPayload" components: messages: slackResponse: @@ -110,7 +109,7 @@ components: - model - messages - temperature - OpenAIResponse: + OpenAICompletionResponse: payload: type: object properties: @@ -135,13 +134,13 @@ components: - message required: - choices - reactionAdded: + SlackReactionAdded: payload: type: object - error: + GenericErrorPayload: payload: type: string x-remoteServers: - - Slack_HTTP - - Slack - - OpenAI \ No newline at end of file + - Slack_HTTPS + - Slack_WebSocket + - OpenAI_HTTPS \ No newline at end of file diff --git a/examples/slack-reaction-listener/functions/reactionAdded.ts b/examples/slack-reaction-listener/functions/HandleSlackReaction.ts similarity index 73% rename from examples/slack-reaction-listener/functions/reactionAdded.ts rename to examples/slack-reaction-listener/functions/HandleSlackReaction.ts index ca2f1ae55..a44e9e7b9 100644 --- a/examples/slack-reaction-listener/functions/reactionAdded.ts +++ b/examples/slack-reaction-listener/functions/HandleSlackReaction.ts @@ -1,8 +1,5 @@ import { GleeFunction } from "@asyncapi/glee" -enum EVENT_TYPE { - EVENTS_API = "events_api", - CONNECTED = "hello" -} + const myFunction: GleeFunction = async ({ payload }) => { const reaction = payload?.payload?.event?.reaction if (!reaction) return @@ -13,7 +10,7 @@ const myFunction: GleeFunction = async ({ payload }) => { payload: { model: "gpt-3.5-turbo", - messages: [{ "role": "user", "content": `Someone reacted with "${reaction}" to my message on Slack, write something fun and short to them.` }], + messages: [{ "role": "user", "content": `Someone reacted with "${reaction}" emoji to my message on Slack, write something fun and short to them.` }], temperature: 0.7 } } diff --git a/examples/slack-reaction-listener/functions/openAIResponse.ts b/examples/slack-reaction-listener/functions/ReceiveFromOpenAI.ts similarity index 100% rename from examples/slack-reaction-listener/functions/openAIResponse.ts rename to examples/slack-reaction-listener/functions/ReceiveFromOpenAI.ts diff --git a/package-lock.json b/package-lock.json index bf97edff0..ec68628c5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@asyncapi/glee", - "version": "0.26.11", + "version": "0.27.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@asyncapi/glee", - "version": "0.26.11", + "version": "0.27.0", "license": "Apache-2.0", "dependencies": { "@asyncapi/generator": "^1.14.1", diff --git a/src/adapters/http/client.ts b/src/adapters/http/client.ts index 6db3bcf21..6eded33f9 100644 --- a/src/adapters/http/client.ts +++ b/src/adapters/http/client.ts @@ -62,11 +62,10 @@ class HttpClientAdapter extends Adapter { method, url, json: body, - searchParams: !!query ? JSON.parse(JSON.stringify(query)) : undefined, + searchParams: query ? JSON.parse(JSON.stringify(query)) : undefined, headers: headers, }) .then((res) => { - console.log(message) const msg = this.createMessage(message, channelName, res.body) this.emit('message', msg, http) }) diff --git a/src/adapters/mqtt/index.ts b/src/adapters/mqtt/index.ts index f932f9095..63322befd 100644 --- a/src/adapters/mqtt/index.ts +++ b/src/adapters/mqtt/index.ts @@ -140,7 +140,6 @@ class MqttAdapter extends Adapter { private subscribe(channels: string[]) { channels.forEach((channel) => { const binding = this.parsedAsyncAPI.channels().get(channel).bindings().get('mqtt')?.value() - console.log(binding) this.client.subscribe(channel, { qos: binding?.qos ? binding.qos : 0, }, (err, granted) => { diff --git a/src/lib/functions.ts b/src/lib/functions.ts index 9c2aa70ea..eb3829c5d 100644 --- a/src/lib/functions.ts +++ b/src/lib/functions.ts @@ -48,13 +48,12 @@ export async function register(dir: string) { return } } catch (e) { - debug(`Error while checking directory: ${e}`) + debug(`Error while checking directory...`) throw e } try { const files = await walkdir.async(dir, { return_object: true }) - debug(`Found function files: ${Object.keys(files)}`) return await Promise.all( Object.keys(files).map(async (filePath) => { @@ -97,23 +96,9 @@ export async function trigger({ const errMsg = `Failed to trigger function: No function registered for operation ID "${operation.id()}". please make sure you have a function named: "${operation.id()}(.js|.ts)" in your functions directory.` throw Error(errMsg) } - let functionResult = await operationFunction.run(gleeMessageToFunctionEvent(message, app)) - const { humanReadableError, errors, isValid } = validateData( - functionResult, - FunctionReturnSchema - ) - if (!isValid) { - const err = new GleeError({ - humanReadableError, - errors, - }) - err.message = `Function ${operation.id()} returned invalid data.` - logError(err, { - highlightedWords: [operation.id()], - }) - return - } + const functionResult = await operationFunction.run(gleeMessageToFunctionEvent(message, app)) const replyMessage = createReply(functionResult, message, parsedAsyncAPI) + if (!replyMessage) return const replyChannel = parsedAsyncAPI.channels().get(replyMessage.channel) replyChannel.servers().forEach((server) => { replyMessage.serverName = server.id() @@ -143,15 +128,30 @@ function createReply(functionResult: void | GleeFunctionReturn, message: GleeMes return } if (!functionResult && reply) { - const errMsg = `Operation ${operation.id()} needs to return a response. please make sure your function returns the approprait reply.` - throw Error(errMsg) + const warningMsg = `Operation ${operation.id()} needs to return a response. please make sure your function returns the approprait reply.` + logWarningMessage(warningMsg) + return } if (functionResult && !reply) { const warningMsg = `Operation ${operation.id()} doesn't have a reply field. the return result from your function will be ignored.` logWarningMessage(warningMsg) return } - + const { humanReadableError, errors, isValid } = validateData( + functionResult, + FunctionReturnSchema + ) + if (!isValid) { + const err = new GleeError({ + humanReadableError, + errors, + }) + err.message = `Function ${operation.id()} returned invalid data.` + logError(err, { + highlightedWords: [operation.id()], + }) + return + } const localServerProtocols = ['ws', 'wss', 'http', 'https'] const serverProtocol = parsedAsyncAPI.servers().get(message.serverName).protocol().toLocaleLowerCase() const isBroadcast = localServerProtocols.includes(serverProtocol) && diff --git a/src/lib/glee.ts b/src/lib/glee.ts index 5ced27758..b53f12068 100644 --- a/src/lib/glee.ts +++ b/src/lib/glee.ts @@ -265,7 +265,6 @@ export default class Glee extends EventEmitter { if (middlewares === this._router.getOutboundMiddlewares()) { debug('Outbound pipeline finished. Sending message...') - debug(msg) this._adapters.forEach((a: AdapterRecord) => { if ( a.instance && From 224391c50e49c8a36687e2c8beffba413d1abb6b Mon Sep 17 00:00:00 2001 From: Khuda Dad Nomani Date: Fri, 3 Nov 2023 11:35:01 +0000 Subject: [PATCH 05/24] add readme --- examples/slack-reaction-listener/README.md | 67 ++++++++++++++++++- .../slack-reaction-listener/asyncapi.yaml | 8 +-- 2 files changed, 66 insertions(+), 9 deletions(-) diff --git a/examples/slack-reaction-listener/README.md b/examples/slack-reaction-listener/README.md index 33d864865..2f8358906 100644 --- a/examples/slack-reaction-listener/README.md +++ b/examples/slack-reaction-listener/README.md @@ -1,3 +1,66 @@ -# Dummy +Given the additional details about the project's functionality and the environment variables, I'll adjust the README to reflect this information. -This is a dummy example mainly used to test functionalities. \ No newline at end of file +```markdown +# Slack Websocket API + +This Slack Websocket API leverages the AsyncAPI specification to connect Slack with OpenAI's AI models. When a user reacts to a message on Slack, this API sends the reaction to OpenAI's server. ChatGPT then crafts a fun response, which is posted as a reply to the message thread on Slack. + +## Table of Contents + +- [Overview](#overview) +- [Prerequisites](#prerequisites) +- [Configuration](#configuration) +- [Installation](#installation) +- [Usage](#usage) +- [Environment Variables](#environment-variables) +- [API Documentation](#api-documentation) +- [Contributing](#contributing) +- [License](#license) + +## Overview + +The API listens for reaction events in Slack, processes them through OpenAI's API to generate responses, and sends those back to Slack as a threaded message. + +## Prerequisites + +- Node.js (version 12 or higher) +- A Slack app with permissions to read reactions and post messages +- Access to OpenAI API + +## Configuration + +Before running the project, you must update the `asyncapi.yaml` file with the current `ticket` and `app_id` for the Slack WebSocket connection: + +```yaml +channels: + SlackEventStream: + address: /link/?ticket=[ticket]&app_id=[app_id] +``` + +Replace `[ticket]` and `[app_id]` with the respective values for your Slack app. + +## Usage + +Set the environment variables by creating a `.env` file in the root of the project: + +```plaintext +SLACK_HTTP=xoxb-********** +CHAT_API=openai_token +``` + +Start the API server with: + +```sh +npm run dev +``` + +The API will now listen for Slack reaction events, interact with OpenAI, and post responses on Slack. + +## Environment Variables + +The following environment variables are necessary for the API to function: + +- `SLACK_HTTP`: Your Slack app's OAuth token. +- `CHAT_API`: Your OpenAI API key. + +Ensure these are set in your `.env` file or your deployment environment. \ No newline at end of file diff --git a/examples/slack-reaction-listener/asyncapi.yaml b/examples/slack-reaction-listener/asyncapi.yaml index b777b9c54..4e2790aab 100644 --- a/examples/slack-reaction-listener/asyncapi.yaml +++ b/examples/slack-reaction-listener/asyncapi.yaml @@ -36,13 +36,7 @@ channels: SlackEventStream: servers: - $ref: "#/servers/Slack_WebSocket" - address: /link/?ticket={ticket}&app_id={app_id} - parameters: - # the ticket parameter should be added as a security parameter, but it doesn't work in glee. https://github.com/asyncapi/glee/issues/556 - ticket: - default: 584f36b9-65c8-4683-bd5a-5da0965317b1 - app_id: - default: b02112d9364cb2fee8a0ee048a920b8b4b0103cb03fab023b4e30f6ee2efb98f + address: /link/?ticket=bad69799-5b-4df6-941d-272c57c35cc1&app_id=b02112d9364cbb03ee2efb98f messages: SlackReactionAdded: $ref: "#/components/messages/SlackReactionAdded" From a49882346c404005d7cb99623cac59a21a192592 Mon Sep 17 00:00:00 2001 From: Khuda Dad Nomani Date: Fri, 3 Nov 2023 11:37:46 +0000 Subject: [PATCH 06/24] update readme --- examples/slack-reaction-listener/README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/examples/slack-reaction-listener/README.md b/examples/slack-reaction-listener/README.md index 2f8358906..fc46a868a 100644 --- a/examples/slack-reaction-listener/README.md +++ b/examples/slack-reaction-listener/README.md @@ -1,6 +1,3 @@ -Given the additional details about the project's functionality and the environment variables, I'll adjust the README to reflect this information. - -```markdown # Slack Websocket API This Slack Websocket API leverages the AsyncAPI specification to connect Slack with OpenAI's AI models. When a user reacts to a message on Slack, this API sends the reaction to OpenAI's server. ChatGPT then crafts a fun response, which is posted as a reply to the message thread on Slack. From ac4c281b3f008dd87156bf061e20763bf2810ba2 Mon Sep 17 00:00:00 2001 From: Khuda Dad Nomani Date: Mon, 6 Nov 2023 16:54:42 +0000 Subject: [PATCH 07/24] re-enable send --- examples/slack-reaction-listener/README.md | 6 +- .../slack-reaction-listener/asyncapi.yaml | 29 +++- .../functions/HandleSlackReaction.ts | 29 +++- .../functions/ReceiveFromOpenAI.ts | 19 ++- src/adapters/http/client.ts | 8 +- src/adapters/ws/client.ts | 5 +- src/index.ts | 8 +- src/lib/functions.ts | 154 ++++++++++++------ src/lib/index.d.ts | 22 ++- src/lib/lifecycleEvents.ts | 7 +- 10 files changed, 188 insertions(+), 99 deletions(-) diff --git a/examples/slack-reaction-listener/README.md b/examples/slack-reaction-listener/README.md index fc46a868a..b24695fdf 100644 --- a/examples/slack-reaction-listener/README.md +++ b/examples/slack-reaction-listener/README.md @@ -7,12 +7,8 @@ This Slack Websocket API leverages the AsyncAPI specification to connect Slack w - [Overview](#overview) - [Prerequisites](#prerequisites) - [Configuration](#configuration) -- [Installation](#installation) - [Usage](#usage) - [Environment Variables](#environment-variables) -- [API Documentation](#api-documentation) -- [Contributing](#contributing) -- [License](#license) ## Overview @@ -60,4 +56,4 @@ The following environment variables are necessary for the API to function: - `SLACK_HTTP`: Your Slack app's OAuth token. - `CHAT_API`: Your OpenAI API key. -Ensure these are set in your `.env` file or your deployment environment. \ No newline at end of file +Ensure these are set in your environment. \ No newline at end of file diff --git a/examples/slack-reaction-listener/asyncapi.yaml b/examples/slack-reaction-listener/asyncapi.yaml index 4e2790aab..132d30069 100644 --- a/examples/slack-reaction-listener/asyncapi.yaml +++ b/examples/slack-reaction-listener/asyncapi.yaml @@ -1,6 +1,6 @@ asyncapi: 3.0.0 info: - title: Slack Websocket API + title: Slack Websocket and OpenAI API version: 1.0.0 servers: OpenAI_HTTPS: @@ -36,13 +36,30 @@ channels: SlackEventStream: servers: - $ref: "#/servers/Slack_WebSocket" - address: /link/?ticket=bad69799-5b-4df6-941d-272c57c35cc1&app_id=b02112d9364cbb03ee2efb98f + address: /link/?ticket={ticket}&app_id={app_id} + parameters: + ticket: + default: a2f0a4e5-cce3-4423-babb-045c2ab5aa50 + app_id: + default: b02112d9364cb2fee8a0ee048a920b8b4b0103cb03fab023b4e30f6ee2efb98f messages: SlackReactionAdded: $ref: "#/components/messages/SlackReactionAdded" GenericErrorPayload: $ref: "#/components/messages/GenericErrorPayload" operations: + sentSlackMessage: + action: send + channel: + $ref: "#/channels/SlackPostMessage" + messages: + - $ref: "#/components/messages/slackResponse" + AckEvent: + action: send + channel: + $ref: "#/channels/SlackEventStream" + messages: + - $ref: "#/components/messages/slackAckEvent" SendToOpenAI: action: send channel: @@ -61,7 +78,7 @@ operations: HandleSlackReaction: reply: channel: - $ref: "#/channels/OpenAICompletion" + $ref: "#/channels/SlackEventStream" action: receive channel: $ref: "#/channels/SlackEventStream" @@ -70,6 +87,12 @@ operations: - $ref: "#/components/messages/GenericErrorPayload" components: messages: + slackAckEvent: + payload: + type: object + properties: + envelope_id: + type: string slackResponse: payload: type: object diff --git a/examples/slack-reaction-listener/functions/HandleSlackReaction.ts b/examples/slack-reaction-listener/functions/HandleSlackReaction.ts index a44e9e7b9..7bb53f428 100644 --- a/examples/slack-reaction-listener/functions/HandleSlackReaction.ts +++ b/examples/slack-reaction-listener/functions/HandleSlackReaction.ts @@ -1,18 +1,29 @@ import { GleeFunction } from "@asyncapi/glee" const myFunction: GleeFunction = async ({ payload }) => { + const { envelope_id } = payload const reaction = payload?.payload?.event?.reaction if (!reaction) return return { - headers: { - 'Authorization': `Bearer ${process.env.CHAT_API}` - }, - - payload: { - model: "gpt-3.5-turbo", - messages: [{ "role": "user", "content": `Someone reacted with "${reaction}" emoji to my message on Slack, write something fun and short to them.` }], - temperature: 0.7 - } + reply: [ + { + payload: { + envelope_id + } + } + ], + send: [{ + server: "OpenAI_HTTPS", + channel: "OpenAICompletion", + headers: { + 'Authorization': `Bearer ${process.env.CHAT_API}` + }, + payload: { + model: "gpt-3.5-turbo", + messages: [{ "role": "user", "content": `Someone reacted with "${reaction}" emoji to my message on Slack, write something fun and short to them.` }], + temperature: 0.7 + } + }] } diff --git a/examples/slack-reaction-listener/functions/ReceiveFromOpenAI.ts b/examples/slack-reaction-listener/functions/ReceiveFromOpenAI.ts index eba47145f..7d1f5111b 100644 --- a/examples/slack-reaction-listener/functions/ReceiveFromOpenAI.ts +++ b/examples/slack-reaction-listener/functions/ReceiveFromOpenAI.ts @@ -1,7 +1,7 @@ import { GleeFunction } from "@asyncapi/glee" const myFunction: GleeFunction = async (event) => { - const { payload } = event.request.request; + const { payload } = event.request.request const slack_event = payload?.payload?.event if (!slack_event) return @@ -12,14 +12,17 @@ const myFunction: GleeFunction = async (event) => { return { - payload: { - channel, thread_ts, text - }, - headers: { - Authorization: `Bearer ${process.env.SLACK_HTTP}`, - } + send: [{ + channel: "SlackPostMessage", + server: "Slack_HTTPS", + payload: { + channel, thread_ts, text + }, + headers: { + Authorization: `Bearer ${process.env.SLACK_HTTP}`, + } + }] } - } export default myFunction \ No newline at end of file diff --git a/src/adapters/http/client.ts b/src/adapters/http/client.ts index 6eded33f9..f246a1959 100644 --- a/src/adapters/http/client.ts +++ b/src/adapters/http/client.ts @@ -53,17 +53,17 @@ class HttpClientAdapter extends Adapter { url = modedAuth.url.href query = modedAuth.query } - if (!!body && !this.shouldMethodHaveBody(method)) { + if (body && !this.shouldMethodHaveBody(method)) { logWarningMessage(`"${method}" can't have a body. please make sure you are using the correct http method for '${channelName}' channel. ignoring the body...`) body = undefined } - console.log("sending the request: ") + got({ method, url, - json: body, + body, searchParams: query ? JSON.parse(JSON.stringify(query)) : undefined, - headers: headers, + headers: { ...headers, "Content-Type": "application/json" }, }) .then((res) => { const msg = this.createMessage(message, channelName, res.body) diff --git a/src/adapters/ws/client.ts b/src/adapters/ws/client.ts index 7b7f6b91a..cb8264a84 100644 --- a/src/adapters/ws/client.ts +++ b/src/adapters/ws/client.ts @@ -44,8 +44,8 @@ class WsClientAdapter extends Adapter { const protocol = this.AsyncAPIServer.protocol() const serverHost = this.AsyncAPIServer.host() - const channel = this.parsedAsyncAPI.channels().get(channelName); - const channelAddress = applyAddressParameters(channel); + const channel = this.parsedAsyncAPI.channels().get(channelName) + const channelAddress = applyAddressParameters(channel) let url = new URL(`${protocol}://${serverHost}${channelAddress}`) if (authConfig) { const modedAuth = await gleeAuth.processClientAuth(url, headers, {}) @@ -60,6 +60,7 @@ class WsClientAdapter extends Adapter { } for (const { client, channel } of this.clients) { + console.log("openning a connection for channel: ", channel) client.on('open', () => { this.emit('connect', { name: this.name(), diff --git a/src/index.ts b/src/index.ts index e269690ab..1f29eacca 100755 --- a/src/index.ts +++ b/src/index.ts @@ -27,7 +27,7 @@ import generateDocs from './lib/docs.js' import errorLogger from './middlewares/errorLogger.js' import validateConnection from './middlewares/validateConnection.js' import { initializeConfigs } from './lib/configs.js' -import { getChannelNames, getParsedAsyncAPI } from './lib/asyncapiFile.js' +import { getParsedAsyncAPI } from './lib/asyncapiFile.js' import { getSelectedServerNames } from './lib/servers.js' import { EnrichedEvent, AuthEvent } from './lib/adapter.js' import { ClusterEvent } from './lib/cluster.js' @@ -76,7 +76,7 @@ export default async function GleeAppInitializer() { app.useOutbound(errorLogger) await generateDocs(parsedAsyncAPI, config, null) parsedAsyncAPI.operations().filterByReceive().forEach(operation => { - const channel = operation.channels()[0] // operation can have only one channel. https://github.com/asyncapi/parser-js/issues/884 + const channel = operation.channels()[0] // operation can have only one channel. const schema = { oneOf: operation.messages().filterByReceive().map(m => m.payload().json()) } as any @@ -90,11 +90,11 @@ export default async function GleeAppInitializer() { }) parsedAsyncAPI.operations().filterBySend().forEach(operation => { - const channel = operation.channels()[0] // operation can have only one channel. https://github.com/asyncapi/parser-js/issues/884 + const channel = operation.channels()[0] // operation can have only one channel. const schema = { oneOf: operation.messages().filterBySend().map(m => m.payload().json()) } as any - app.useOutbound(channel.address(), validate(schema), json2string) + app.useOutbound(channel.id(), validate(schema), json2string) }) app.on('adapter:auth', async (e: AuthEvent) => { diff --git a/src/lib/functions.ts b/src/lib/functions.ts index eb3829c5d..383938c7d 100644 --- a/src/lib/functions.ts +++ b/src/lib/functions.ts @@ -4,7 +4,7 @@ import walkdir from 'walkdir' import { getConfigs } from './configs.js' import { logWarningMessage, logError } from './logger.js' import GleeMessage from './message.js' -import { GleeFunction, GleeFunctionReturn } from './index.js' +import { GleeFunction, GleeFunctionReturnReply } from './index.js' import Glee from './glee.js' import { gleeMessageToFunctionEvent, @@ -16,26 +16,54 @@ import { pathToFileURL } from 'url' import GleeError from '../errors/glee-error.js' import { getParsedAsyncAPI } from './asyncapiFile.js' import Debug from 'debug' -import { AsyncAPIDocumentInterface, OperationInterface } from '@asyncapi/parser' +import { AsyncAPIDocumentInterface, ChannelInterface, OperationInterface } from '@asyncapi/parser' const debug = Debug('glee:functions') interface FunctionInfo { run: GleeFunction } -const FunctionReturnSchema = { +const HeadersSchema = { + type: 'object', + propertyNames: { type: 'string' }, + additionalProperties: { type: 'string' }, +} + +const ReplyMessageSchema = { type: 'object', properties: { payload: {}, - headers: { - type: 'object', - propertyNames: { type: 'string' }, - additionalProperties: { type: 'string' }, - }, + headers: HeadersSchema, query: { type: 'object' }, }, } +const SendMessageSchema = { + type: 'object', + properties: { + payload: {}, + headers: HeadersSchema, + channel: { type: 'string' }, + server: { type: 'string' }, + query: { type: 'object' }, + }, +} +const FunctionReturnSchema = { + type: ['object', 'null'], + properties: { + send: { + type: 'array', + items: SendMessageSchema, + }, + reply: { + type: 'array', + items: ReplyMessageSchema, + }, + }, + additionalProperties: false, + anyOf: [{ required: ['send'] }, { required: ['reply'] }], +} + const { GLEE_DIR, GLEE_FUNCTIONS_DIR } = getConfigs() export const functions: Map = new Map() @@ -87,25 +115,78 @@ export async function trigger({ message: GleeMessage }) { try { - debug(`Triggering function for operation ID: ${operation.id()}`) const parsedAsyncAPI = await getParsedAsyncAPI() message.operation = operation const operationFunction = functions.get(operation.id()) if (!operationFunction) { const errMsg = `Failed to trigger function: No function registered for operation ID "${operation.id()}". please make sure you have a function named: "${operation.id()}(.js|.ts)" in your functions directory.` - throw Error(errMsg) + logError(new Error(errMsg), { + highlightedWords: [`"${operation.id()}"`], + }) + return } - const functionResult = await operationFunction.run(gleeMessageToFunctionEvent(message, app)) - const replyMessage = createReply(functionResult, message, parsedAsyncAPI) - if (!replyMessage) return - const replyChannel = parsedAsyncAPI.channels().get(replyMessage.channel) - replyChannel.servers().forEach((server) => { - replyMessage.serverName = server.id() + let functionResult = await operationFunction.run(gleeMessageToFunctionEvent(message, app)) + if (!functionResult) functionResult = null + const { humanReadableError, errors, isValid } = validateData( + functionResult, + FunctionReturnSchema + ) + + if (!isValid) { + const err = new GleeError({ + humanReadableError, + errors, + }) + err.message = `Function ${operation.id()} returned invalid data.` + logError(err, { + highlightedWords: [operation.id()], + }) + + return + } + + functionResult?.send?.forEach((msg) => { + const localServerProtocols = ['ws', 'wss', 'http', 'https'] + const serverProtocol = parsedAsyncAPI.servers().get(msg.server || message.serverName).protocol().toLocaleLowerCase() + const isBroadcast = + localServerProtocols.includes(serverProtocol) && + !isRemoteServer(parsedAsyncAPI, msg.server) + const channel = parsedAsyncAPI.channels().get(msg.channel || message.channel) + if (!hasSendOperation(channel)) { + const warnMessage = `Send operation not allowed: The channel "${channel.id()}" does not support "send" operations. Please ensure a "send" operation is defined for this channel in your AsyncAPI specification. The current message will not be processed.` + logWarningMessage(warnMessage, { highlightedWords: [channel.id()] }) + return + } + const outboundMessage = new GleeMessage({ + request: message, + payload: msg.payload, + query: msg.query, + headers: msg.headers, + channel: msg.channel || message.channel, + serverName: msg.server, + broadcast: isBroadcast, + }) app.send( - replyMessage + outboundMessage ) }) + + functionResult?.reply?.forEach((reply) => { + const replyMessage = createReply(reply, message, parsedAsyncAPI) + if (!replyMessage) return + const replyChannel = parsedAsyncAPI.channels().get(replyMessage.channel) + if (!hasSendOperation(replyChannel)) { + const warnMessage = `Send operation not allowed: The channel ${replyChannel.id()} does not support send operations. Please ensure a send operation is defined for this channel in your AsyncAPI file. The current message will not be processed.` + logWarningMessage(warnMessage, { highlightedWords: [replyChannel.id(), "send"] }) + } + replyChannel.servers().forEach((server) => { + replyMessage.serverName = server.id() + app.send( + replyMessage + ) + }) + }) } catch (err) { if (err.code === 'ERR_MODULE_NOT_FOUND') { const functionsPath = relative(GLEE_DIR, GLEE_FUNCTIONS_DIR) @@ -121,41 +202,14 @@ export async function trigger({ } } -function createReply(functionResult: void | GleeFunctionReturn, message: GleeMessage, parsedAsyncAPI: AsyncAPIDocumentInterface): GleeMessage { +function createReply(functionReply: GleeFunctionReturnReply, message: GleeMessage, parsedAsyncAPI: AsyncAPIDocumentInterface): GleeMessage { const operation = message.operation const reply = operation.reply() - if (!functionResult && !reply) { - return - } - if (!functionResult && reply) { - const warningMsg = `Operation ${operation.id()} needs to return a response. please make sure your function returns the approprait reply.` - logWarningMessage(warningMsg) - return - } - if (functionResult && !reply) { + if (!reply) { const warningMsg = `Operation ${operation.id()} doesn't have a reply field. the return result from your function will be ignored.` logWarningMessage(warningMsg) return } - const { humanReadableError, errors, isValid } = validateData( - functionResult, - FunctionReturnSchema - ) - if (!isValid) { - const err = new GleeError({ - humanReadableError, - errors, - }) - err.message = `Function ${operation.id()} returned invalid data.` - logError(err, { - highlightedWords: [operation.id()], - }) - return - } - const localServerProtocols = ['ws', 'wss', 'http', 'https'] - const serverProtocol = parsedAsyncAPI.servers().get(message.serverName).protocol().toLocaleLowerCase() - const isBroadcast = localServerProtocols.includes(serverProtocol) && - !isRemoteServer(parsedAsyncAPI, message.serverName) let replyChannel = parsedAsyncAPI.channels().all().filter((c) => c.address() === reply.channel().address())[0] const replyAddress = reply.address() @@ -171,7 +225,9 @@ function createReply(functionResult: void | GleeFunctionReturn, message: GleeMes replyChannel = channel } - return new GleeMessage({ ...functionResult, channel: replyChannel.id(), request: message, broadcast: isBroadcast }); - - + return new GleeMessage({ ...functionReply, channel: replyChannel.id(), request: message }) } + +const hasSendOperation = (channel: ChannelInterface): boolean => { + return channel.operations().filterBySend().length > 0 +} \ No newline at end of file diff --git a/src/lib/index.d.ts b/src/lib/index.d.ts index 503283cde..04400fe67 100644 --- a/src/lib/index.d.ts +++ b/src/lib/index.d.ts @@ -1,4 +1,4 @@ -import { AsyncAPIDocumentInterface as AsyncAPIDocument, ChannelInterface } from '@asyncapi/parser' +import { AsyncAPIDocumentInterface as AsyncAPIDocument } from '@asyncapi/parser' import GleeAdapter from './adapter.js' import GleeClusterAdapter from './cluster.js' import GleeConnection from './connection.js' @@ -113,16 +113,13 @@ export type GleeConfig = { } export type GleeFunctionReturn = { - payload?: any - query?: QueryParam - headers?: { [key: string]: string } -} - -export type GleeLifecycleReturn = { send?: GleeFunctionReturnSend[] + reply?: GleeFunctionReturnReply[] + broadcast?: GleeFunctionReturnBroadcast[] } -export type GleeLifecycleEvent = { +export type GleeFunctionEvent = { + request: GleeMessage glee: Glee serverName: string connection?: GleeConnection @@ -131,10 +128,8 @@ export type GleeLifecycleEvent = { headers?: { [key: string]: string } channel?: string } -export type GleeFunctionEvent = GleeLifecycleEvent & { - request: GleeMessage -} +export type GleeLifecycleEvent = Omit export type GleeAuthFunctionEvent = { glee: Glee @@ -152,9 +147,12 @@ export type GleeFunctionReturnSend = { server?: string } +export type GleeFunctionReturnReply = Omit +export type GleeFunctionReturnBroadcast = GleeFunctionReturnSend + export type GleeFunction = ( event: GleeFunctionEvent -) => Promise +) => Promise export type GleeAuthFunction = ( event: GleeAuthFunctionEvent diff --git a/src/lib/lifecycleEvents.ts b/src/lib/lifecycleEvents.ts index 5fbdfdb68..46660299d 100644 --- a/src/lib/lifecycleEvents.ts +++ b/src/lib/lifecycleEvents.ts @@ -2,7 +2,8 @@ import { stat } from 'fs/promises' import walkdir from 'walkdir' import { GleeLifecycleEvent, - GleeLifecycleReturn + GleeFunctionReturn, + GleeFunctionReturnSend, } from './index.js' import { logInfoMessage } from './logger.js' import GleeMessage from './message.js' @@ -10,7 +11,7 @@ import { arrayHasDuplicates } from './util.js' import { pathToFileURL } from 'url' interface IEvent { - fn: (event: GleeLifecycleEvent) => GleeLifecycleReturn + fn: (event: GleeLifecycleEvent) => GleeFunctionReturn channels: string[] servers: string[] } @@ -86,7 +87,7 @@ export async function run(lifecycleEvent: string, params: GleeLifecycleEvent) { const responses = await Promise.all(handlers.map((info) => info.fn(params))) responses.forEach((res) => { - res?.send?.forEach((event) => { + res?.send?.forEach((event: GleeFunctionReturnSend) => { try { params.glee.send( new GleeMessage({ From a7cca8b0b1be587be3296e5240c8cb5f68ab6b03 Mon Sep 17 00:00:00 2001 From: Khuda Dad Nomani Date: Thu, 9 Nov 2023 11:55:44 +0000 Subject: [PATCH 08/24] refactor --- src/lib/util.ts | 80 ++++++++++++++++------------- src/middlewares/existsInAsyncAPI.ts | 6 ++- 2 files changed, 48 insertions(+), 38 deletions(-) diff --git a/src/lib/util.ts b/src/lib/util.ts index 4e4db299f..a51acf807 100644 --- a/src/lib/util.ts +++ b/src/lib/util.ts @@ -1,4 +1,4 @@ -import { AsyncAPIDocumentInterface as AsyncAPIDocument, ChannelInterface } from '@asyncapi/parser' +import { AsyncAPIDocumentInterface as AsyncAPIDocument, ChannelInterface, ChannelParameterInterface, MessageInterface } from '@asyncapi/parser' import Ajv from 'ajv' import betterAjvErrors from 'better-ajv-errors' import { pathToRegexp } from 'path-to-regexp' @@ -162,65 +162,73 @@ export const resolveFunctions = async (object: any) => { function jsonPointer(obj: any, pointer: string): any { - const parts = pointer.split('/').slice(1); - let current = obj; + const parts = pointer.split('/').slice(1) + let current = obj for (const part of parts) { if (current === null || typeof current !== 'object') { - return undefined; + return undefined } - current = current[part]; + current = current[part] } - return current; + return current } export function extractExpressionValueFromMessage(message: { headers: any, payload: any }, expression: string): any { // Parse the expression - const match = expression.match(/^\$message\.(header|payload)(#.*)?$/); + const match = expression.match(/^\$message\.(header|payload)(#.*)?$/) if (!match) { - throw new Error(`${expression} is invalid.`); + throw new Error(`${expression} is invalid.`) } - const source = match[1]; - const fragment = match[2] ? match[2].slice(1) : undefined; - const headers = message.headers - const payload = message.payload + const source = match[1] + const fragment = match[2] ? match[2].slice(1) : undefined + const headers = message?.headers + const payload = message?.payload // Extract value based on source and fragment if (source === 'header') { - return fragment ? jsonPointer(headers, fragment) : headers; + return fragment ? jsonPointer(headers, fragment) : headers } else if (source === 'payload') { - return fragment ? jsonPointer(payload, fragment) : payload; + return fragment ? jsonPointer(payload, fragment) : payload } else { - throw new Error(`${expression} source should be "header" or "fragment"`); + throw new Error(`${expression} source should be "header" or "fragment"`) } } -export function applyAddressParameters(channel: ChannelInterface, headers?: any, payload?: any) { +export function applyAddressParameters(channel: ChannelInterface, message?: GleeMessage): string { let address = channel.address() const parameters = channel.parameters() for (const parameter of parameters) { - const location = parameter.location() - const doesExistInAddress = address.includes(`{${parameter.id()}}`); - if (!doesExistInAddress) continue - let parameterValue: string - if (location) { - if (payload || headers) { - parameterValue = extractExpressionValueFromMessage({ headers, payload }, location) - if (!parameterValue) { - throw Error(`tried to parse parameter "${parameter.id()}" from ${location} but failed.`); - } - } - } else { - parameterValue = parameter.json().default - } - if (!parameterValue) { - throw Error(`parsing parameter "${parameter.id()}" value failed. please make sure it exists in your header/payload or in default field of the parameter.`); - } - - address = address.replace(`{${parameter.id()}}`, parameterValue) + address = substituteParameterInAddress(parameter, address, message) } + return address +} +const substituteParameterInAddress = (parameter: ChannelParameterInterface, address: string, message: GleeMessage): string => { + const doesExistInAddress = address.includes(`{${parameter.id()}}`) + if (!doesExistInAddress) return address + const parameterValue = getParamValue(parameter, message) + if (!parameterValue) { + throw Error(`parsing parameter "${parameter.id()}" value failed. please make sure it exists in your header/payload or in default field of the parameter.`) + } + address = address.replace(`{${parameter.id()}}`, parameterValue) return address -} \ No newline at end of file +} + +const getParamValue = (parameter: ChannelParameterInterface, message: GleeMessage): string | null => { + const location = parameter.location() + if (location) return getParamFromLocation(location, message) + else return parameter.json().default +} + +function getParamFromLocation(location: string, message: GleeMessage) { + if (message.payload || message.headers) { + const parameterValue = extractExpressionValueFromMessage(message, location) + if (!parameterValue) { + throw Error(`tried to parse a parameter from ${location} but failed.`) + } + return parameterValue + } +} diff --git a/src/middlewares/existsInAsyncAPI.ts b/src/middlewares/existsInAsyncAPI.ts index 883f366fd..ad61aaf47 100644 --- a/src/middlewares/existsInAsyncAPI.ts +++ b/src/middlewares/existsInAsyncAPI.ts @@ -4,8 +4,10 @@ import GleeMessage from '../lib/message.js' export default (asyncapi: AsyncAPIDocument) => (event: GleeMessage, next: MiddlewareCallback) => { - if (typeof event.channel !== 'string') { return next(new Error(`Invalid channel name: ${event.channel}.`)) } - if (asyncapi.channels().all().filter((channel) => channel.address() === event.channel)) return next() + if (typeof event.channel !== 'string') { + return next(new Error(`Invalid channel name: ${event.channel}.`)) + } + if (asyncapi.channels().get(event.channel)) return next() next( new Error(`Channel ${event.channel} is not defined in the AsyncAPI file.`) ) From b21459746f17be530b32f367d5d58ac6d66c8fd6 Mon Sep 17 00:00:00 2001 From: Khuda Dad Nomani Date: Thu, 9 Nov 2023 13:25:34 +0000 Subject: [PATCH 09/24] add tests --- src/lib/util.ts | 20 ++++++----- test/lib/message.test.ts | 28 ++-------------- test/lib/util.test.ts | 71 ++++++++++++++++++++++++++++++++++++++-- 3 files changed, 82 insertions(+), 37 deletions(-) diff --git a/src/lib/util.ts b/src/lib/util.ts index a51acf807..c836ff6c9 100644 --- a/src/lib/util.ts +++ b/src/lib/util.ts @@ -5,6 +5,7 @@ import { pathToRegexp } from 'path-to-regexp' import Glee from './glee.js' import { GleeFunctionEvent } from './index.js' import GleeMessage from './message.js' +import { logWarningMessage } from './logger.js' interface IValidateDataReturn { errors?: void | betterAjvErrors.IOutputError[] @@ -210,6 +211,7 @@ const substituteParameterInAddress = (parameter: ChannelParameterInterface, addr const doesExistInAddress = address.includes(`{${parameter.id()}}`) if (!doesExistInAddress) return address const parameterValue = getParamValue(parameter, message) + console.log(parameterValue) if (!parameterValue) { throw Error(`parsing parameter "${parameter.id()}" value failed. please make sure it exists in your header/payload or in default field of the parameter.`) } @@ -219,16 +221,18 @@ const substituteParameterInAddress = (parameter: ChannelParameterInterface, addr const getParamValue = (parameter: ChannelParameterInterface, message: GleeMessage): string | null => { const location = parameter.location() - if (location) return getParamFromLocation(location, message) - else return parameter.json().default + if (!location) return parameter.json().default + const paramFromLocation = getParamFromLocation(location, message) + console.log({ paramFromLocation }) + if (!paramFromLocation) { + logWarningMessage(`tried to parse param from ${location} but failed: using the default param.`) + return parameter.json().default + } + return paramFromLocation } function getParamFromLocation(location: string, message: GleeMessage) { - if (message.payload || message.headers) { - const parameterValue = extractExpressionValueFromMessage(message, location) - if (!parameterValue) { - throw Error(`tried to parse a parameter from ${location} but failed.`) - } - return parameterValue + if ((message.payload || message.headers) && location) { + return extractExpressionValueFromMessage(message, location) } } diff --git a/test/lib/message.test.ts b/test/lib/message.test.ts index b12bdeb90..f5f45b881 100644 --- a/test/lib/message.test.ts +++ b/test/lib/message.test.ts @@ -5,7 +5,7 @@ describe('GleeMessage', () => { describe('headers', () => { it('sets the headers', () => { const message = new GleeMessage({}) - const headers = message.headers = {'header': 'value'} + const headers = message.headers = { 'header': 'value' } expect(message.headers).toEqual(headers) }) }) @@ -13,32 +13,8 @@ describe('GleeMessage', () => { describe('params', () => { it('sets the params', () => { const message = new GleeMessage({}) - const params = message.params = {'param': 'value'} + const params = message.params = { 'param': 'value' } expect(message.params).toEqual(params) }) }) - - describe('reply', () => { - it('prepares and emits the message as reply', done => { - const message = new GleeMessage({}) - const replyDetails = { - payload: 'This is a reply', - headers: { - reply: true - }, - channel: 'fake/reply' - } - - message.on('send', reply => { - expect(reply).toBeInstanceOf(GleeMessage) - expect(reply.payload).toBe(replyDetails.payload) - expect(reply.headers).toEqual(replyDetails.headers) - expect(reply.channel).toBe(replyDetails.channel) - - done() - }) - - message.reply(replyDetails) - }) - }) }) \ No newline at end of file diff --git a/test/lib/util.test.ts b/test/lib/util.test.ts index ca88c3be6..30bb51c17 100644 --- a/test/lib/util.test.ts +++ b/test/lib/util.test.ts @@ -2,6 +2,8 @@ import 'jest-extended' import * as util from '../../src/lib/util.js' import GleeMessage from '../../src/lib/message.js' import Glee from '../../src/lib/glee.js' +import { Channel } from '@asyncapi/parser/esm/models/v3/channel.js' +import { Message } from '@asyncapi/parser/esm/models/v3/message.js' describe('util', () => { describe('getParams', () => { @@ -20,11 +22,11 @@ describe('util', () => { describe('arrayHasDuplicates', () => { it('returns false for no duplicates', () => { - expect(util.arrayHasDuplicates([1,2,3,4])).toBeFalse() + expect(util.arrayHasDuplicates([1, 2, 3, 4])).toBeFalse() }) it('returns true for duplicates', () => { - expect(util.arrayHasDuplicates([1,2,2,3,4])).toBeTrue() + expect(util.arrayHasDuplicates([1, 2, 2, 3, 4])).toBeTrue() }) }) @@ -49,4 +51,67 @@ describe('util', () => { expect(functionEvent.glee).toBe(glee) }) }) -}) \ No newline at end of file + + describe('extractExpressionValueFromMessage', () => { + it('extracts value from message headers', () => { + const message = { headers: { 'x-header': 'header value' }, payload: {} } + const expression = '$message.header#/x-header' + expect(util.extractExpressionValueFromMessage(message, expression)).toBe('header value') + }) + + it('extracts value from message payload', () => { + const message = { headers: {}, payload: { key: 'payload value' } } + const expression = '$message.payload#/key' + expect(util.extractExpressionValueFromMessage(message, expression)).toBe('payload value') + }) + + it('throws error for invalid expression', () => { + const message = { headers: {}, payload: {} } + const expression = '$invalid.expression' + expect(() => util.extractExpressionValueFromMessage(message, expression)).toThrowError('is invalid') + }) + }) + + describe('applyAddressParameters', () => { + const mockChannelParameter = { + id: () => 'param', + location: () => '$message.header#/param', // includes location as a function + json: () => ({ default: '123' }) + } + + const mockChannel = { + address: () => 'http://api/{param}', + parameters: () => [mockChannelParameter] + } as Channel + + const mockMessage = { + headers: { param: '456' }, + payload: {} + } as unknown as GleeMessage + it('replaces parameters in the address with values from message', () => { + const result = util.applyAddressParameters(mockChannel, mockMessage) + expect(result).toBe('http://api/456') // Assuming that '456' is the intended substitution from the headers + }) + + it('uses default value when parameter is not found in message', () => { + const mockMessageWithNoParam = { + headers: {}, + payload: {} + } as unknown as GleeMessage + const result = util.applyAddressParameters(mockChannel, mockMessageWithNoParam) + expect(result).toBe('http://api/123') // The default value '123' should be used + }) + + it('throws an error when a required parameter is missing and no default is provided', () => { + const mockChannelWithNoDefault = { + address: () => 'http://api/{param}', + parameters: () => [{ id: () => 'param', json: () => ({}) }] // No default value provided + } as Channel + const mockMessageWithNoParam = { + headers: {}, + payload: {} + } as GleeMessage + expect(() => util.applyAddressParameters(mockChannelWithNoDefault, mockMessageWithNoParam)).toThrow() + }) + }) +}) From 8b3000c0d7ac78acf7149aa378720a8df24da33c Mon Sep 17 00:00:00 2001 From: Khuda Dad Nomani Date: Fri, 10 Nov 2023 13:15:30 +0000 Subject: [PATCH 10/24] remove warnings --- src/lib/functions.ts | 34 +++++++++------------------------- 1 file changed, 9 insertions(+), 25 deletions(-) diff --git a/src/lib/functions.ts b/src/lib/functions.ts index 383938c7d..9623df8b8 100644 --- a/src/lib/functions.ts +++ b/src/lib/functions.ts @@ -152,34 +152,22 @@ export async function trigger({ const isBroadcast = localServerProtocols.includes(serverProtocol) && !isRemoteServer(parsedAsyncAPI, msg.server) - const channel = parsedAsyncAPI.channels().get(msg.channel || message.channel) - if (!hasSendOperation(channel)) { - const warnMessage = `Send operation not allowed: The channel "${channel.id()}" does not support "send" operations. Please ensure a "send" operation is defined for this channel in your AsyncAPI specification. The current message will not be processed.` - logWarningMessage(warnMessage, { highlightedWords: [channel.id()] }) - return - } - const outboundMessage = new GleeMessage({ - request: message, - payload: msg.payload, - query: msg.query, - headers: msg.headers, - channel: msg.channel || message.channel, - serverName: msg.server, - broadcast: isBroadcast, - }) app.send( - outboundMessage - ) + new GleeMessage({ + request: message, + payload: msg.payload, + query: msg.query, + headers: msg.headers, + channel: msg.channel || message.channel, + serverName: msg.server, + broadcast: isBroadcast, + })) }) functionResult?.reply?.forEach((reply) => { const replyMessage = createReply(reply, message, parsedAsyncAPI) if (!replyMessage) return const replyChannel = parsedAsyncAPI.channels().get(replyMessage.channel) - if (!hasSendOperation(replyChannel)) { - const warnMessage = `Send operation not allowed: The channel ${replyChannel.id()} does not support send operations. Please ensure a send operation is defined for this channel in your AsyncAPI file. The current message will not be processed.` - logWarningMessage(warnMessage, { highlightedWords: [replyChannel.id(), "send"] }) - } replyChannel.servers().forEach((server) => { replyMessage.serverName = server.id() app.send( @@ -226,8 +214,4 @@ function createReply(functionReply: GleeFunctionReturnReply, message: GleeMessag } return new GleeMessage({ ...functionReply, channel: replyChannel.id(), request: message }) -} - -const hasSendOperation = (channel: ChannelInterface): boolean => { - return channel.operations().filterBySend().length > 0 } \ No newline at end of file From 202176f1b164ee95fbecae0d4f4e107196551eb7 Mon Sep 17 00:00:00 2001 From: Khuda Dad Nomani <32505158+KhudaDad414@users.noreply.github.com> Date: Wed, 15 Nov 2023 10:54:22 +0000 Subject: [PATCH 11/24] Update src/adapters/http/client.ts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fran Méndez --- src/adapters/http/client.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/adapters/http/client.ts b/src/adapters/http/client.ts index f246a1959..92d9fc596 100644 --- a/src/adapters/http/client.ts +++ b/src/adapters/http/client.ts @@ -54,7 +54,7 @@ class HttpClientAdapter extends Adapter { query = modedAuth.query } if (body && !this.shouldMethodHaveBody(method)) { - logWarningMessage(`"${method}" can't have a body. please make sure you are using the correct http method for '${channelName}' channel. ignoring the body...`) + logWarningMessage(`"${method}" can't have a body. Please make sure you are using the correct HTTP method for the '${channelName}' channel. Ignoring the body...`) body = undefined } From 494d8a7b2bbb4091b53b3258dd73a17c44cbfd85 Mon Sep 17 00:00:00 2001 From: Khuda Dad Nomani <32505158+KhudaDad414@users.noreply.github.com> Date: Wed, 15 Nov 2023 10:55:28 +0000 Subject: [PATCH 12/24] Update src/lib/adapter.ts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fran Méndez --- src/lib/adapter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/adapter.ts b/src/lib/adapter.ts index 23c094861..44ca88822 100644 --- a/src/lib/adapter.ts +++ b/src/lib/adapter.ts @@ -55,7 +55,7 @@ class GleeAdapter extends EventEmitter { this._parsedAsyncAPI = parsedAsyncAPI this._channelNames = this._parsedAsyncAPI.channels().all().map(e => e.id()) this._channelAddresses = this._parsedAsyncAPI.channels().all().map(c => c.address()) - this._operationIds = this._parsedAsyncAPI.operations().all().map(o => o.operationId()) + this._operationIds = this._parsedAsyncAPI.operations().all().map(o => o.id()) this._connections = [] const uriTemplateValues = new Map() From 73e20300c13a9e36ba191b43b7c678d921e9e950 Mon Sep 17 00:00:00 2001 From: Khuda Dad Nomani <32505158+KhudaDad414@users.noreply.github.com> Date: Wed, 15 Nov 2023 10:57:09 +0000 Subject: [PATCH 13/24] Update src/lib/functions.ts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fran Méndez --- src/lib/functions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/functions.ts b/src/lib/functions.ts index 9623df8b8..02fa9a303 100644 --- a/src/lib/functions.ts +++ b/src/lib/functions.ts @@ -191,7 +191,7 @@ export async function trigger({ } function createReply(functionReply: GleeFunctionReturnReply, message: GleeMessage, parsedAsyncAPI: AsyncAPIDocumentInterface): GleeMessage { - const operation = message.operation + const { operation } = message const reply = operation.reply() if (!reply) { const warningMsg = `Operation ${operation.id()} doesn't have a reply field. the return result from your function will be ignored.` From 02555cb36460cf061e48240998773ef6d034feb7 Mon Sep 17 00:00:00 2001 From: Khuda Dad Nomani <32505158+KhudaDad414@users.noreply.github.com> Date: Wed, 15 Nov 2023 10:57:17 +0000 Subject: [PATCH 14/24] Update src/lib/functions.ts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fran Méndez --- src/lib/functions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/functions.ts b/src/lib/functions.ts index 02fa9a303..5221bd923 100644 --- a/src/lib/functions.ts +++ b/src/lib/functions.ts @@ -194,7 +194,7 @@ function createReply(functionReply: GleeFunctionReturnReply, message: GleeMessag const { operation } = message const reply = operation.reply() if (!reply) { - const warningMsg = `Operation ${operation.id()} doesn't have a reply field. the return result from your function will be ignored.` + const warningMsg = `Operation ${operation.id()} doesn't have a reply field. The returned result from your function will be ignored.` logWarningMessage(warningMsg) return } From 8e5a1a148927e4fcff07b166285eb4dc60f1e264 Mon Sep 17 00:00:00 2001 From: Khuda Dad Nomani <32505158+KhudaDad414@users.noreply.github.com> Date: Wed, 15 Nov 2023 10:57:57 +0000 Subject: [PATCH 15/24] Update src/lib/functions.ts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fran Méndez --- src/lib/functions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/functions.ts b/src/lib/functions.ts index 5221bd923..cce1c2a51 100644 --- a/src/lib/functions.ts +++ b/src/lib/functions.ts @@ -208,7 +208,7 @@ function createReply(functionReply: GleeFunctionReturnReply, message: GleeMessag } const channel = parsedAsyncAPI.allChannels().filter((c) => c.address === channelAddress)[0] if (!channel) { - throw Error(`cannot find a channel with the address of "${channelAddress}" in your AsyncAPI file.`) + throw Error(`Cannot find a channel with the address "${channelAddress}" in your AsyncAPI file.`) } replyChannel = channel } From e585f17cad2862d488bd02d04b3846c78c2845d5 Mon Sep 17 00:00:00 2001 From: Khuda Dad Nomani Date: Wed, 15 Nov 2023 11:19:42 +0000 Subject: [PATCH 16/24] final touches --- examples/slack-reaction-listener/asyncapi.yaml | 12 +++++++++--- package-lock.json | 4 ++-- src/adapters/ws/client.ts | 1 - src/lib/functions.ts | 2 +- src/lib/message.ts | 2 +- src/middlewares/existsInAsyncAPI.ts | 5 ++--- test/lib/util.test.ts | 1 - 7 files changed, 15 insertions(+), 12 deletions(-) diff --git a/examples/slack-reaction-listener/asyncapi.yaml b/examples/slack-reaction-listener/asyncapi.yaml index 132d30069..b57d58a01 100644 --- a/examples/slack-reaction-listener/asyncapi.yaml +++ b/examples/slack-reaction-listener/asyncapi.yaml @@ -6,7 +6,7 @@ servers: OpenAI_HTTPS: host: api.openai.com protocol: https - Slack_WebSocket: + Slack_WebSocFket: host: wss-primary.slack.com protocol: wss Slack_HTTPS: @@ -22,7 +22,13 @@ channels: - $ref: "#/servers/Slack_HTTPS" messages: slackResponse: - $ref: "#/components/messages/slackResponse" + payload: + type: object + properties: + channel: + type: string + text: + type: string OpenAICompletion: bindings: http: @@ -39,7 +45,7 @@ channels: address: /link/?ticket={ticket}&app_id={app_id} parameters: ticket: - default: a2f0a4e5-cce3-4423-babb-045c2ab5aa50 + default: 7700d8b4-e854-45172c-9cd65b7b1a92 app_id: default: b02112d9364cb2fee8a0ee048a920b8b4b0103cb03fab023b4e30f6ee2efb98f messages: diff --git a/package-lock.json b/package-lock.json index 599d518b0..1368b543d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@asyncapi/glee", - "version": "0.28.0", + "version": "0.28.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@asyncapi/glee", - "version": "0.28.0", + "version": "0.28.1", "license": "Apache-2.0", "dependencies": { "@asyncapi/generator": "^1.14.1", diff --git a/src/adapters/ws/client.ts b/src/adapters/ws/client.ts index cb8264a84..ffa8d6cf7 100644 --- a/src/adapters/ws/client.ts +++ b/src/adapters/ws/client.ts @@ -60,7 +60,6 @@ class WsClientAdapter extends Adapter { } for (const { client, channel } of this.clients) { - console.log("openning a connection for channel: ", channel) client.on('open', () => { this.emit('connect', { name: this.name(), diff --git a/src/lib/functions.ts b/src/lib/functions.ts index cce1c2a51..073ba3bbe 100644 --- a/src/lib/functions.ts +++ b/src/lib/functions.ts @@ -16,7 +16,7 @@ import { pathToFileURL } from 'url' import GleeError from '../errors/glee-error.js' import { getParsedAsyncAPI } from './asyncapiFile.js' import Debug from 'debug' -import { AsyncAPIDocumentInterface, ChannelInterface, OperationInterface } from '@asyncapi/parser' +import { AsyncAPIDocumentInterface, OperationInterface } from '@asyncapi/parser' const debug = Debug('glee:functions') interface FunctionInfo { diff --git a/src/lib/message.ts b/src/lib/message.ts index f2904ec96..3cd6ea2b1 100644 --- a/src/lib/message.ts +++ b/src/lib/message.ts @@ -47,7 +47,7 @@ class GleeMessage extends EventEmitter { * @param {Object} [options.headers] Message headers. * @param {String} [options.channel] Message channel. * @param {String} [options.serverName] The name of the associated AsyncAPI server. - * @param {GleeMessage} [options.request] The request that this message is created for as a reply. + * @param {GleeMessage} [options.request] If this message is a reply, the parent message that this message is created for as a reply. * @param {GleeConnection} [options.connection] The connection through which the message will be sent or has been received. * @param {Boolean} [options.broadcast=false] Whether the message should be broadcasted or not. * @param {Boolean} [options.cluster=false] Whether the message is from a cluster adapter or not. diff --git a/src/middlewares/existsInAsyncAPI.ts b/src/middlewares/existsInAsyncAPI.ts index ad61aaf47..7d79fdc0b 100644 --- a/src/middlewares/existsInAsyncAPI.ts +++ b/src/middlewares/existsInAsyncAPI.ts @@ -4,9 +4,8 @@ import GleeMessage from '../lib/message.js' export default (asyncapi: AsyncAPIDocument) => (event: GleeMessage, next: MiddlewareCallback) => { - if (typeof event.channel !== 'string') { - return next(new Error(`Invalid channel name: ${event.channel}.`)) - } + if (typeof event.channel !== 'string') + {return next(new Error(`Invalid channel name: ${event.channel}.`))} if (asyncapi.channels().get(event.channel)) return next() next( new Error(`Channel ${event.channel} is not defined in the AsyncAPI file.`) diff --git a/test/lib/util.test.ts b/test/lib/util.test.ts index 30bb51c17..2311de0de 100644 --- a/test/lib/util.test.ts +++ b/test/lib/util.test.ts @@ -3,7 +3,6 @@ import * as util from '../../src/lib/util.js' import GleeMessage from '../../src/lib/message.js' import Glee from '../../src/lib/glee.js' import { Channel } from '@asyncapi/parser/esm/models/v3/channel.js' -import { Message } from '@asyncapi/parser/esm/models/v3/message.js' describe('util', () => { describe('getParams', () => { From 9e99f905ae24600bf0ea1bc0e3a761bb0ab8e0bd Mon Sep 17 00:00:00 2001 From: Khuda Dad Nomani Date: Wed, 15 Nov 2023 16:48:03 +0000 Subject: [PATCH 17/24] modify reply generation --- .../slack-reaction-listener/asyncapi.yaml | 6 +- src/index.ts | 12 ++-- src/lib/functions.ts | 57 +++++++++++-------- src/lib/message.ts | 10 ++-- src/lib/util.ts | 1 + 5 files changed, 50 insertions(+), 36 deletions(-) diff --git a/examples/slack-reaction-listener/asyncapi.yaml b/examples/slack-reaction-listener/asyncapi.yaml index b57d58a01..9c04346f7 100644 --- a/examples/slack-reaction-listener/asyncapi.yaml +++ b/examples/slack-reaction-listener/asyncapi.yaml @@ -6,7 +6,7 @@ servers: OpenAI_HTTPS: host: api.openai.com protocol: https - Slack_WebSocFket: + Slack_WebSocket: host: wss-primary.slack.com protocol: wss Slack_HTTPS: @@ -45,9 +45,9 @@ channels: address: /link/?ticket={ticket}&app_id={app_id} parameters: ticket: - default: 7700d8b4-e854-45172c-9cd65b7b1a92 + default: 5a271cc5-80c7-d-bbd0-fd8a62d5767a app_id: - default: b02112d9364cb2fee8a0ee048a920b8b4b0103cb03fab023b4e30f6ee2efb98f + default: b02112d9364cb2fee8a0a920b8b4b0103cb03fab023b4e30f6ee2efb98f messages: SlackReactionAdded: $ref: "#/components/messages/SlackReactionAdded" diff --git a/src/index.ts b/src/index.ts index 1f29eacca..0c1f2deb2 100755 --- a/src/index.ts +++ b/src/index.ts @@ -77,10 +77,12 @@ export default async function GleeAppInitializer() { await generateDocs(parsedAsyncAPI, config, null) parsedAsyncAPI.operations().filterByReceive().forEach(operation => { const channel = operation.channels()[0] // operation can have only one channel. + const messagesSchemas = operation.messages().filterByReceive().map(m => m.payload().json()).filter(schema => !!schema) const schema = { - oneOf: operation.messages().filterByReceive().map(m => m.payload().json()) + oneOf: messagesSchemas } as any - app.use(channel.id(), validate(schema), (event, next) => { + if (messagesSchemas.length > 0) app.use(channel.id(), validate(schema)) + app.use(channel.id(), (event, next) => { triggerFunction({ app, operation, @@ -91,10 +93,12 @@ export default async function GleeAppInitializer() { parsedAsyncAPI.operations().filterBySend().forEach(operation => { const channel = operation.channels()[0] // operation can have only one channel. + const messagesSchemas = operation.messages().filterBySend().map(m => m.payload().json()).filter(schema => !!schema) const schema = { - oneOf: operation.messages().filterBySend().map(m => m.payload().json()) + oneOf: messagesSchemas } as any - app.useOutbound(channel.id(), validate(schema), json2string) + if (messagesSchemas.length > 0) app.useOutbound(channel.id(), validate(schema)) + app.useOutbound(channel.id(), json2string) }) app.on('adapter:auth', async (e: AuthEvent) => { diff --git a/src/lib/functions.ts b/src/lib/functions.ts index 073ba3bbe..4fb3061c5 100644 --- a/src/lib/functions.ts +++ b/src/lib/functions.ts @@ -152,28 +152,39 @@ export async function trigger({ const isBroadcast = localServerProtocols.includes(serverProtocol) && !isRemoteServer(parsedAsyncAPI, msg.server) - app.send( - new GleeMessage({ - request: message, - payload: msg.payload, - query: msg.query, - headers: msg.headers, - channel: msg.channel || message.channel, - serverName: msg.server, - broadcast: isBroadcast, - })) + const channelName = msg.channel || message.channel + const operations = parsedAsyncAPI.channels().get(channelName).operations().filterBySend() + operations.forEach(operation => { + app.send( + new GleeMessage({ + operation, + request: message, + payload: msg.payload, + query: msg.query, + headers: msg.headers, + channel: channelName, + serverName: msg.server, + broadcast: isBroadcast, + })) + }) }) functionResult?.reply?.forEach((reply) => { - const replyMessage = createReply(reply, message, parsedAsyncAPI) - if (!replyMessage) return - const replyChannel = parsedAsyncAPI.channels().get(replyMessage.channel) - replyChannel.servers().forEach((server) => { - replyMessage.serverName = server.id() - app.send( - replyMessage - ) + const replyMessages = createReplies(reply, message, parsedAsyncAPI) + console.log({ replyMessages }) + if (replyMessages || replyMessages.length < 1) { + return + } + replyMessages.forEach(replyMessage => { + const replyChannel = parsedAsyncAPI.channels().get(replyMessage.channel) + replyChannel.servers().forEach((server) => { + replyMessage.serverName = server.id() + app.send( + replyMessage + ) + }) }) + }) } catch (err) { if (err.code === 'ERR_MODULE_NOT_FOUND') { @@ -190,11 +201,11 @@ export async function trigger({ } } -function createReply(functionReply: GleeFunctionReturnReply, message: GleeMessage, parsedAsyncAPI: AsyncAPIDocumentInterface): GleeMessage { - const { operation } = message +function createReplies(functionReply: GleeFunctionReturnReply, message: GleeMessage, parsedAsyncAPI: AsyncAPIDocumentInterface): GleeMessage[] { + const operation = message.operation const reply = operation.reply() if (!reply) { - const warningMsg = `Operation ${operation.id()} doesn't have a reply field. The returned result from your function will be ignored.` + const warningMsg = `Operation ${operation.id()} doesn't have a reply field. the return result from your function will be ignored.` logWarningMessage(warningMsg) return } @@ -208,10 +219,10 @@ function createReply(functionReply: GleeFunctionReturnReply, message: GleeMessag } const channel = parsedAsyncAPI.allChannels().filter((c) => c.address === channelAddress)[0] if (!channel) { - throw Error(`Cannot find a channel with the address "${channelAddress}" in your AsyncAPI file.`) + throw Error(`cannot find a channel with the address of "${channelAddress}" in your AsyncAPI file.`) } replyChannel = channel } - return new GleeMessage({ ...functionReply, channel: replyChannel.id(), request: message }) + return replyChannel.operations().filterBySend().map(operation => new GleeMessage({ ...functionReply, channel: replyChannel.id(), request: message, operation })) } \ No newline at end of file diff --git a/src/lib/message.ts b/src/lib/message.ts index 3cd6ea2b1..efc1bbd26 100644 --- a/src/lib/message.ts +++ b/src/lib/message.ts @@ -9,6 +9,7 @@ interface IGleeMessageConstructor { payload?: any headers?: MessageHeaders channel?: string + operation?: OperationInterface request?: GleeMessage serverName?: string connection?: GleeConnection @@ -17,12 +18,6 @@ interface IGleeMessageConstructor { query?: QueryParam } -interface IReply { - payload?: any - headers?: { [key: string]: any } - channel?: string - query?: QueryParam -} class GleeMessage extends EventEmitter { private _payload: any @@ -47,6 +42,7 @@ class GleeMessage extends EventEmitter { * @param {Object} [options.headers] Message headers. * @param {String} [options.channel] Message channel. * @param {String} [options.serverName] The name of the associated AsyncAPI server. + * @param {OperationInterface} [options.operation] The operation that this message belongs to. * @param {GleeMessage} [options.request] If this message is a reply, the parent message that this message is created for as a reply. * @param {GleeConnection} [options.connection] The connection through which the message will be sent or has been received. * @param {Boolean} [options.broadcast=false] Whether the message should be broadcasted or not. @@ -58,6 +54,7 @@ class GleeMessage extends EventEmitter { headers, channel, serverName, + operation, connection, request, broadcast = false, @@ -75,6 +72,7 @@ class GleeMessage extends EventEmitter { if (cluster) this._cluster = cluster if (query) this._query = query if (request) this._request = request + if (operation) this._operation = operation } get payload(): any { diff --git a/src/lib/util.ts b/src/lib/util.ts index c836ff6c9..22db462b1 100644 --- a/src/lib/util.ts +++ b/src/lib/util.ts @@ -52,6 +52,7 @@ export const getParams = ( */ export const duplicateMessage = (message: GleeMessage): GleeMessage => { const newMessage = new GleeMessage({ + operation: message.operation, payload: message.payload, headers: message.headers, channel: message.channel, From c383d35022348eb5a9b5bbd116e6ea219d4351de Mon Sep 17 00:00:00 2001 From: Khuda Dad Nomani Date: Fri, 17 Nov 2023 14:02:19 +0000 Subject: [PATCH 18/24] fix reply checking logic --- src/lib/functions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/functions.ts b/src/lib/functions.ts index 4fb3061c5..bbb7ac6b9 100644 --- a/src/lib/functions.ts +++ b/src/lib/functions.ts @@ -172,7 +172,7 @@ export async function trigger({ functionResult?.reply?.forEach((reply) => { const replyMessages = createReplies(reply, message, parsedAsyncAPI) console.log({ replyMessages }) - if (replyMessages || replyMessages.length < 1) { + if (!(replyMessages && replyMessages.length > 0)) { return } replyMessages.forEach(replyMessage => { From ef0ba2d2b5e624a745287103b5a7813a17682fdf Mon Sep 17 00:00:00 2001 From: Khuda Dad Nomani <32505158+KhudaDad414@users.noreply.github.com> Date: Mon, 20 Nov 2023 11:37:30 +0000 Subject: [PATCH 19/24] Update src/lib/functions.ts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fran Méndez --- src/lib/functions.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/lib/functions.ts b/src/lib/functions.ts index bbb7ac6b9..c6c28b0c6 100644 --- a/src/lib/functions.ts +++ b/src/lib/functions.ts @@ -171,7 +171,6 @@ export async function trigger({ functionResult?.reply?.forEach((reply) => { const replyMessages = createReplies(reply, message, parsedAsyncAPI) - console.log({ replyMessages }) if (!(replyMessages && replyMessages.length > 0)) { return } From 5c7bd6b4d112f7148ab2d5b382be777d41898f98 Mon Sep 17 00:00:00 2001 From: Khuda Dad Nomani <32505158+KhudaDad414@users.noreply.github.com> Date: Mon, 20 Nov 2023 11:49:50 +0000 Subject: [PATCH 20/24] Update src/lib/functions.ts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fran Méndez --- src/lib/functions.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lib/functions.ts b/src/lib/functions.ts index c6c28b0c6..684fed94c 100644 --- a/src/lib/functions.ts +++ b/src/lib/functions.ts @@ -171,7 +171,8 @@ export async function trigger({ functionResult?.reply?.forEach((reply) => { const replyMessages = createReplies(reply, message, parsedAsyncAPI) - if (!(replyMessages && replyMessages.length > 0)) { + const hasReplyMessages = replyMessages && replyMessages.length > 0 + if (!hasReplyMessages) { return } replyMessages.forEach(replyMessage => { From ab29311d1b3d700409010bef65744347014ac165 Mon Sep 17 00:00:00 2001 From: Khuda Dad Nomani Date: Mon, 20 Nov 2023 12:43:25 +0000 Subject: [PATCH 21/24] add receive operation --- examples/slack-reaction-listener/asyncapi.yaml | 8 ++++++-- .../functions/receiveSlackConfirmation.ts | 7 +++++++ examples/slack-reaction-listener/package-lock.json | 10 +++++----- 3 files changed, 18 insertions(+), 7 deletions(-) create mode 100644 examples/slack-reaction-listener/functions/receiveSlackConfirmation.ts diff --git a/examples/slack-reaction-listener/asyncapi.yaml b/examples/slack-reaction-listener/asyncapi.yaml index 9c04346f7..35d2f67fd 100644 --- a/examples/slack-reaction-listener/asyncapi.yaml +++ b/examples/slack-reaction-listener/asyncapi.yaml @@ -45,9 +45,9 @@ channels: address: /link/?ticket={ticket}&app_id={app_id} parameters: ticket: - default: 5a271cc5-80c7-d-bbd0-fd8a62d5767a + default: 38408ed1-5d39--82f0-6e1214dae1 app_id: - default: b02112d9364cb2fee8a0a920b8b4b0103cb03fab023b4e30f6ee2efb98f + default: b02112d9364cb2fee8a0a920b8bcb03fab023b4e30f6ee2efb98f messages: SlackReactionAdded: $ref: "#/components/messages/SlackReactionAdded" @@ -60,6 +60,10 @@ operations: $ref: "#/channels/SlackPostMessage" messages: - $ref: "#/components/messages/slackResponse" + receiveSlackConfirmation: + action: receive + channel: + $ref: "#/channels/SlackPostMessage" AckEvent: action: send channel: diff --git a/examples/slack-reaction-listener/functions/receiveSlackConfirmation.ts b/examples/slack-reaction-listener/functions/receiveSlackConfirmation.ts new file mode 100644 index 000000000..415ca2423 --- /dev/null +++ b/examples/slack-reaction-listener/functions/receiveSlackConfirmation.ts @@ -0,0 +1,7 @@ +const myFunction = async ({ payload }) => { + if (payload.ok) { + console.log("everything went smoothly.") + } +} + +export default myFunction \ No newline at end of file diff --git a/examples/slack-reaction-listener/package-lock.json b/examples/slack-reaction-listener/package-lock.json index 526e73a53..2af97f51d 100644 --- a/examples/slack-reaction-listener/package-lock.json +++ b/examples/slack-reaction-listener/package-lock.json @@ -14,13 +14,13 @@ }, "../..": { "name": "@asyncapi/glee", - "version": "0.27.0", + "version": "0.28.4", "license": "Apache-2.0", "dependencies": { - "@asyncapi/generator": "^1.14.1", + "@asyncapi/generator": "^1.14.3", "@asyncapi/html-template": "^1.0.0", "@asyncapi/markdown-template": "^1.4.0", - "@asyncapi/parser": "^v3.0.0-next-major-spec.7", + "@asyncapi/parser": "^3.0.0-next-major-spec.12", "@types/jest": "^27.4.0", "@types/qs": "^6.9.7", "ajv": "^6.12.6", @@ -13082,10 +13082,10 @@ "@asyncapi/glee": { "version": "file:../..", "requires": { - "@asyncapi/generator": "^1.14.1", + "@asyncapi/generator": "^1.14.3", "@asyncapi/html-template": "^1.0.0", "@asyncapi/markdown-template": "^1.4.0", - "@asyncapi/parser": "^v3.0.0-next-major-spec.7", + "@asyncapi/parser": "^3.0.0-next-major-spec.12", "@tsconfig/node14": "^1.0.1", "@types/async": "^3.2.11", "@types/debug": "^4.1.7", From ddb5af3770a75c87dd0fe9f5c441c943c15b56c4 Mon Sep 17 00:00:00 2001 From: Khuda Dad Nomani Date: Mon, 20 Nov 2023 12:50:52 +0000 Subject: [PATCH 22/24] Empty commit From 1155325efe6b9b84cd36288a0561665b6f7ec2df Mon Sep 17 00:00:00 2001 From: Khuda Dad Nomani Date: Mon, 20 Nov 2023 12:53:41 +0000 Subject: [PATCH 23/24] fix for sonar --- test/lib/util.test.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/lib/util.test.ts b/test/lib/util.test.ts index 2311de0de..88ba72967 100644 --- a/test/lib/util.test.ts +++ b/test/lib/util.test.ts @@ -79,7 +79,7 @@ describe('util', () => { } const mockChannel = { - address: () => 'http://api/{param}', + address: () => 'https://api/{param}', parameters: () => [mockChannelParameter] } as Channel @@ -89,7 +89,7 @@ describe('util', () => { } as unknown as GleeMessage it('replaces parameters in the address with values from message', () => { const result = util.applyAddressParameters(mockChannel, mockMessage) - expect(result).toBe('http://api/456') // Assuming that '456' is the intended substitution from the headers + expect(result).toBe('https://api/456') // Assuming that '456' is the intended substitution from the headers }) it('uses default value when parameter is not found in message', () => { @@ -98,12 +98,12 @@ describe('util', () => { payload: {} } as unknown as GleeMessage const result = util.applyAddressParameters(mockChannel, mockMessageWithNoParam) - expect(result).toBe('http://api/123') // The default value '123' should be used + expect(result).toBe('https://api/123') // The default value '123' should be used }) it('throws an error when a required parameter is missing and no default is provided', () => { const mockChannelWithNoDefault = { - address: () => 'http://api/{param}', + address: () => 'https://api/{param}', parameters: () => [{ id: () => 'param', json: () => ({}) }] // No default value provided } as Channel const mockMessageWithNoParam = { From 10cc240f8d5ffa98073adf6c3ddfa61138a3b793 Mon Sep 17 00:00:00 2001 From: Khuda Dad Nomani Date: Mon, 20 Nov 2023 13:05:54 +0000 Subject: [PATCH 24/24] fix eslint warnings --- .eslintrc | 1 + src/lib/util.ts | 4 ++- src/registerAdapters.ts | 72 +++++++++++++++++++++++------------------ 3 files changed, 44 insertions(+), 33 deletions(-) diff --git a/.eslintrc b/.eslintrc index 2e80833bc..02bbf610b 100644 --- a/.eslintrc +++ b/.eslintrc @@ -18,6 +18,7 @@ "error", "multi-line" ], + "security/detect-non-literal-fs-filename": "off", "@typescript-eslint/no-explicit-any": "off", "semi": [ "warn", diff --git a/src/lib/util.ts b/src/lib/util.ts index 22db462b1..1f43ba4b1 100644 --- a/src/lib/util.ts +++ b/src/lib/util.ts @@ -1,4 +1,4 @@ -import { AsyncAPIDocumentInterface as AsyncAPIDocument, ChannelInterface, ChannelParameterInterface, MessageInterface } from '@asyncapi/parser' +import { AsyncAPIDocumentInterface as AsyncAPIDocument, ChannelInterface, ChannelParameterInterface } from '@asyncapi/parser' import Ajv from 'ajv' import betterAjvErrors from 'better-ajv-errors' import { pathToRegexp } from 'path-to-regexp' @@ -171,6 +171,7 @@ function jsonPointer(obj: any, pointer: string): any { if (current === null || typeof current !== 'object') { return undefined } + // eslint-disable-next-line current = current[part] } @@ -180,6 +181,7 @@ function jsonPointer(obj: any, pointer: string): any { export function extractExpressionValueFromMessage(message: { headers: any, payload: any }, expression: string): any { // Parse the expression + // eslint-disable-next-line const match = expression.match(/^\$message\.(header|payload)(#.*)?$/) if (!match) { throw new Error(`${expression} is invalid.`) diff --git a/src/registerAdapters.ts b/src/registerAdapters.ts index c31a20ef2..fb3562ebe 100644 --- a/src/registerAdapters.ts +++ b/src/registerAdapters.ts @@ -57,38 +57,7 @@ function registerAdapterForServer( } else if (['amqp', 'amqps'].includes(protocol)) { // TODO: Implement AMQP support } else if (['ws', 'wss'].includes(protocol)) { - const configWsAdapter = config?.ws?.server?.adapter - if (remoteServers && remoteServers.includes(serverName)) { - app.addAdapter(WebsocketClientAdapter, { - serverName, - server, - parsedAsyncAPI, - }) - } else { - if (!configWsAdapter || configWsAdapter === 'native') { - app.addAdapter(WebSocketServerAdapter, { - serverName, - server, - parsedAsyncAPI, - }) - } else if (configWsAdapter === 'socket.io') { - app.addAdapter(SocketIOAdapter, { - serverName, - server, - parsedAsyncAPI, - }) - } else if (typeof configWsAdapter === 'object') { - app.addAdapter(configWsAdapter, { - serverName, - server, - parsedAsyncAPI, - }) - } else { - throw new Error( - `Unknown value for websocket.adapter found in glee.config.js: ${config.ws.server.adapter}. Allowed values are 'native-websocket', 'socket.io', or a reference to a custom Glee adapter.` - ) - } - } + registerWebsocketsAdapter(serverName, server, app, parsedAsyncAPI, config, remoteServers) } else if (['http', 'https'].includes(protocol)) { if (remoteServers && remoteServers.includes(serverName)) { app.addAdapter(HttpClientAdapter, { @@ -123,3 +92,42 @@ function registerAdapterForCluster( throw new Error(`Unknown value for cluster.adapter in glee.config.js`) } } +function registerWebsocketsAdapter(serverName: string, + server: ServerInterface, + app: Glee, + parsedAsyncAPI: AsyncAPIDocument, + config: GleeConfig, remoteServers) { + const configWsAdapter = config?.ws?.server?.adapter + if (remoteServers && remoteServers.includes(serverName)) { + app.addAdapter(WebsocketClientAdapter, { + serverName, + server, + parsedAsyncAPI, + }) + } else { + if (!configWsAdapter || configWsAdapter === 'native') { + app.addAdapter(WebSocketServerAdapter, { + serverName, + server, + parsedAsyncAPI, + }) + } else if (configWsAdapter === 'socket.io') { + app.addAdapter(SocketIOAdapter, { + serverName, + server, + parsedAsyncAPI, + }) + } else if (typeof configWsAdapter === 'object') { + app.addAdapter(configWsAdapter, { + serverName, + server, + parsedAsyncAPI, + }) + } else { + throw new Error( + `Unknown value for websocket.adapter found in glee.config.js: ${config.ws.server.adapter}. Allowed values are 'native-websocket', 'socket.io', or a reference to a custom Glee adapter.` + ) + } + } +} +