diff --git a/.eslintrc.yaml b/.eslintrc.yaml index bee85a5..8067507 100644 --- a/.eslintrc.yaml +++ b/.eslintrc.yaml @@ -7,3 +7,4 @@ plugins: rules: '@typescript-eslint/no-unused-vars': ['error', { 'argsIgnorePattern': '^_' }] no-warning-comments: warn + '@typescript-eslint/no-inferrable-types': 'off' diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 7d84efd..0000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "blogpost"] - path = blogpost - url = git@gist.github.com:b195090daa8ed343254b90f73f6e911f diff --git a/Dockerfile b/Dockerfile index 29d80cd..83837be 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,3 +1,4 @@ +# syntax=docker/dockerfile:1.4 ARG WORKDIR=/mixxx-launchpad ARG UID=65532 @@ -11,11 +12,9 @@ COPY <<-EOF $WORKDIR/.npmrc cache=$WORKDIR/.npm EOF COPY package.json package-lock.json . -COPY packages/mixxx/package.json packages/mixxx/package.json -COPY packages/app/package.json packages/app/package.json -COPY packages/mk1/package.json packages/mk1/package.json -COPY packages/mk2/package.json packages/mk2/package.json -COPY packages/mini-mk3/package.json packages/mini-mk3/package.json +RUN --mount=type=bind,target=/docker-context \ + cd /docker-context/; \ + find . -name "package.json" -mindepth 3 -maxdepth 3 -exec cp --parents "{}" $WORKDIR/ \; RUN --mount=type=cache,target=$WORKDIR/.npm,uid=$UID npm ci FROM deps as build diff --git a/Makefile b/Makefile index 1aa50ff..8972bbd 100644 --- a/Makefile +++ b/Makefile @@ -24,6 +24,7 @@ builddir ?= ./dist version ?= $(shell jq -r .version package.json) scriptFiles = $(shell ls packages/*/!(node_modules)/**/*.ts) +#scriptFiles = $(shell find . -name 'controller.json' -or -name '*.ts' -not -path "*/dist/*" -not -path "*/node_modules/*" -print | cut -d/ -f2- | xargs) mappingFiles = $(package) packages/$(1)/controller.json scripts/template.xml.ejs targets := $(shell jq -r '.controllers | join (" ")' package.json) diff --git a/README.MD b/README.MD index d2b0d5a..6ac8b24 100644 --- a/README.MD +++ b/README.MD @@ -1,6 +1,6 @@ -# mixxx-launchpad +# mixxx-launch -Flexible and customizable controller mapping for Novation Launchpad family of controllers. +Flexible and customizable controller mapping for Novation Launch[Pad|Control] family of controllers. [![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/dszakallas/mixxx-launchpad)](https://github.com/dszakallas/mixxx-launchpad/releases/latest) ![GitHub Workflow Status](https://img.shields.io/github/workflow/status/dszakallas/mixxx-launchpad/Test%20&%20Release) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release) ![License](https://img.shields.io/github/license/dszakallas/mixxx-launchpad) @@ -23,6 +23,18 @@ Flexible and customizable controller mapping for Novation Launchpad family of co - Launchpad Mini Mk3 - Launchpad Mk2 - Launchpad Mk1 + - LaunchControl XL MK2 (experimental) + +## Controller setup instructions + +### Launchpad Mini Mk3 + +Mini Mk3 has to be put in "Programmer" mode to get MIDI access to all 9x9 instead of only inner 8x8 in "Live" mode. Push and hold "Session" for about a second, "LED" screen shows up, then push "Stop Solo Mute" button, "Programmer" shows up. + +### LaunchControl XL MK2 + +Support is experimental, under active development and any existing mapping may change in future versions. Feedback +and PRs are welcome. ## How to get started diff --git a/babel.config.js b/babel.config.js index ac6f073..343bf63 100644 --- a/babel.config.js +++ b/babel.config.js @@ -2,7 +2,7 @@ export default { targets: 'node 10.0', presets: ['@babel/preset-typescript', ['@babel/preset-env', { modules: false }]], plugins: [ - ['@babel/plugin-transform-arrow-functions'], // FIXME work around Qt bug in arrow functions https://bugreports.qt.io/browse/QTBUG-95677 + ['@babel/plugin-transform-arrow-functions'], // work around Qt bug in arrow functions https://bugreports.qt.io/browse/QTBUG-95677 ['@babel/plugin-transform-runtime', { corejs: 3, regenerator: false, absoluteRuntime: true }], ], } diff --git a/blogpost b/blogpost deleted file mode 160000 index b5032e0..0000000 --- a/blogpost +++ /dev/null @@ -1 +0,0 @@ -Subproject commit b5032e03f3b4ae2dcdc442efce3da5c26e5c804c diff --git a/package-lock.json b/package-lock.json index c974bd4..a4fe93a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,19 +1,22 @@ { - "name": "@mixxx-launchpad/project", + "name": "@mixxx-launch/project", "version": "0.0.0-development", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "@mixxx-launchpad/project", + "name": "@mixxx-launch/project", "version": "0.0.0-development", "license": "MIT", "workspaces": [ - "packages/app", + "packages/common", "packages/mixxx", - "packages/mk1", - "packages/mk2", - "packages/mini-mk3" + "packages/launchpad-common", + "packages/launchpad-mk1", + "packages/launchpad-mk2", + "packages/launchpad-mini-mk3", + "packages/launchcontrol-common", + "packages/launchcontrol-xl-mk2" ], "devDependencies": { "@babel/core": "^7.9.0", @@ -42,9 +45,8 @@ }, "node_modules/@ampproject/remapping": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.1.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -55,9 +57,8 @@ }, "node_modules/@babel/code-frame": { "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", - "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/highlight": "^7.18.6" }, @@ -67,18 +68,16 @@ }, "node_modules/@babel/compat-data": { "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz", - "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.0.tgz", - "integrity": "sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA==", "dev": true, + "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.18.6", @@ -106,9 +105,8 @@ }, "node_modules/@babel/generator": { "version": "7.21.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.1.tgz", - "integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.21.0", "@jridgewell/gen-mapping": "^0.3.2", @@ -121,9 +119,8 @@ }, "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -135,9 +132,8 @@ }, "node_modules/@babel/helper-annotate-as-pure": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.18.6" }, @@ -147,9 +143,8 @@ }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-explode-assignable-expression": "^7.18.6", "@babel/types": "^7.18.9" @@ -160,9 +155,8 @@ }, "node_modules/@babel/helper-compilation-targets": { "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", - "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/compat-data": "^7.20.5", "@babel/helper-validator-option": "^7.18.6", @@ -179,9 +173,8 @@ }, "node_modules/@babel/helper-create-class-features-plugin": { "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.0.tgz", - "integrity": "sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", @@ -201,9 +194,8 @@ }, "node_modules/@babel/helper-create-regexp-features-plugin": { "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.0.tgz", - "integrity": "sha512-N+LaFW/auRSWdx7SHD/HiARwXQju1vXTW4fKr4u5SgBUTm51OKEjKgj+cs00ggW3kEvNqwErnlwuq7Y3xBe4eg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "regexpu-core": "^5.3.1" @@ -217,9 +209,8 @@ }, "node_modules/@babel/helper-define-polyfill-provider": { "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.17.7", "@babel/helper-plugin-utils": "^7.16.7", @@ -234,18 +225,16 @@ }, "node_modules/@babel/helper-environment-visitor": { "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-explode-assignable-expression": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.18.6" }, @@ -255,9 +244,8 @@ }, "node_modules/@babel/helper-function-name": { "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/template": "^7.20.7", "@babel/types": "^7.21.0" @@ -268,9 +256,8 @@ }, "node_modules/@babel/helper-hoist-variables": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.18.6" }, @@ -280,9 +267,8 @@ }, "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz", - "integrity": "sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.21.0" }, @@ -292,9 +278,8 @@ }, "node_modules/@babel/helper-module-imports": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.18.6" }, @@ -304,9 +289,8 @@ }, "node_modules/@babel/helper-module-transforms": { "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", - "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", @@ -323,9 +307,8 @@ }, "node_modules/@babel/helper-optimise-call-expression": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.18.6" }, @@ -335,18 +318,16 @@ }, "node_modules/@babel/helper-plugin-utils": { "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", @@ -362,9 +343,8 @@ }, "node_modules/@babel/helper-replace-supers": { "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", - "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-member-expression-to-functions": "^7.20.7", @@ -379,9 +359,8 @@ }, "node_modules/@babel/helper-simple-access": { "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.20.2" }, @@ -391,9 +370,8 @@ }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.20.0" }, @@ -403,9 +381,8 @@ }, "node_modules/@babel/helper-split-export-declaration": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.18.6" }, @@ -415,36 +392,32 @@ }, "node_modules/@babel/helper-string-parser": { "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", - "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-function-name": "^7.19.0", "@babel/template": "^7.18.10", @@ -457,9 +430,8 @@ }, "node_modules/@babel/helpers": { "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", - "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/template": "^7.20.7", "@babel/traverse": "^7.21.0", @@ -471,9 +443,8 @@ }, "node_modules/@babel/highlight": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", @@ -485,9 +456,8 @@ }, "node_modules/@babel/parser": { "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.2.tgz", - "integrity": "sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==", "dev": true, + "license": "MIT", "bin": { "parser": "bin/babel-parser.js" }, @@ -497,9 +467,8 @@ }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -512,9 +481,8 @@ }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", - "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", @@ -529,9 +497,8 @@ }, "node_modules/@babel/plugin-proposal-async-generator-functions": { "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-plugin-utils": "^7.20.2", @@ -547,9 +514,8 @@ }, "node_modules/@babel/plugin-proposal-class-properties": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -563,9 +529,8 @@ }, "node_modules/@babel/plugin-proposal-class-static-block": { "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz", - "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.21.0", "@babel/helper-plugin-utils": "^7.20.2", @@ -580,9 +545,8 @@ }, "node_modules/@babel/plugin-proposal-dynamic-import": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-dynamic-import": "^7.8.3" @@ -596,9 +560,8 @@ }, "node_modules/@babel/plugin-proposal-export-namespace-from": { "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" @@ -612,9 +575,8 @@ }, "node_modules/@babel/plugin-proposal-json-strings": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-json-strings": "^7.8.3" @@ -628,9 +590,8 @@ }, "node_modules/@babel/plugin-proposal-logical-assignment-operators": { "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", - "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" @@ -644,9 +605,8 @@ }, "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" @@ -660,9 +620,8 @@ }, "node_modules/@babel/plugin-proposal-numeric-separator": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-numeric-separator": "^7.10.4" @@ -676,9 +635,8 @@ }, "node_modules/@babel/plugin-proposal-object-rest-spread": { "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/compat-data": "^7.20.5", "@babel/helper-compilation-targets": "^7.20.7", @@ -695,9 +653,8 @@ }, "node_modules/@babel/plugin-proposal-optional-catch-binding": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" @@ -711,9 +668,8 @@ }, "node_modules/@babel/plugin-proposal-optional-chaining": { "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", - "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", @@ -728,9 +684,8 @@ }, "node_modules/@babel/plugin-proposal-private-methods": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -744,9 +699,8 @@ }, "node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz", - "integrity": "sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-create-class-features-plugin": "^7.21.0", @@ -762,9 +716,8 @@ }, "node_modules/@babel/plugin-proposal-unicode-property-regex": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -778,9 +731,8 @@ }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -790,9 +742,8 @@ }, "node_modules/@babel/plugin-syntax-class-properties": { "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -802,9 +753,8 @@ }, "node_modules/@babel/plugin-syntax-class-static-block": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -817,9 +767,8 @@ }, "node_modules/@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -829,9 +778,8 @@ }, "node_modules/@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" }, @@ -841,9 +789,8 @@ }, "node_modules/@babel/plugin-syntax-import-assertions": { "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", - "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.19.0" }, @@ -856,9 +803,8 @@ }, "node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -868,9 +814,8 @@ }, "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -880,9 +825,8 @@ }, "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -892,9 +836,8 @@ }, "node_modules/@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -904,9 +847,8 @@ }, "node_modules/@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -916,9 +858,8 @@ }, "node_modules/@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -928,9 +869,8 @@ }, "node_modules/@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -940,9 +880,8 @@ }, "node_modules/@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -955,9 +894,8 @@ }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -970,9 +908,8 @@ }, "node_modules/@babel/plugin-syntax-typescript": { "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", - "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.19.0" }, @@ -985,9 +922,8 @@ }, "node_modules/@babel/plugin-transform-arrow-functions": { "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", - "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2" }, @@ -1000,9 +936,8 @@ }, "node_modules/@babel/plugin-transform-async-to-generator": { "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", - "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.18.6", "@babel/helper-plugin-utils": "^7.20.2", @@ -1017,9 +952,8 @@ }, "node_modules/@babel/plugin-transform-block-scoped-functions": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1032,9 +966,8 @@ }, "node_modules/@babel/plugin-transform-block-scoping": { "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz", - "integrity": "sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2" }, @@ -1047,9 +980,8 @@ }, "node_modules/@babel/plugin-transform-classes": { "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz", - "integrity": "sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-compilation-targets": "^7.20.7", @@ -1070,9 +1002,8 @@ }, "node_modules/@babel/plugin-transform-computed-properties": { "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", - "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/template": "^7.20.7" @@ -1086,9 +1017,8 @@ }, "node_modules/@babel/plugin-transform-destructuring": { "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.7.tgz", - "integrity": "sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2" }, @@ -1101,9 +1031,8 @@ }, "node_modules/@babel/plugin-transform-dotall-regex": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1117,9 +1046,8 @@ }, "node_modules/@babel/plugin-transform-duplicate-keys": { "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -1132,9 +1060,8 @@ }, "node_modules/@babel/plugin-transform-exponentiation-operator": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1148,9 +1075,8 @@ }, "node_modules/@babel/plugin-transform-for-of": { "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz", - "integrity": "sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2" }, @@ -1163,9 +1089,8 @@ }, "node_modules/@babel/plugin-transform-function-name": { "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.18.9", "@babel/helper-function-name": "^7.18.9", @@ -1180,9 +1105,8 @@ }, "node_modules/@babel/plugin-transform-literals": { "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -1195,9 +1119,8 @@ }, "node_modules/@babel/plugin-transform-member-expression-literals": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1210,9 +1133,8 @@ }, "node_modules/@babel/plugin-transform-modules-amd": { "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", - "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.20.11", "@babel/helper-plugin-utils": "^7.20.2" @@ -1226,9 +1148,8 @@ }, "node_modules/@babel/plugin-transform-modules-commonjs": { "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz", - "integrity": "sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.21.2", "@babel/helper-plugin-utils": "^7.20.2", @@ -1243,9 +1164,8 @@ }, "node_modules/@babel/plugin-transform-modules-systemjs": { "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", - "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-module-transforms": "^7.20.11", @@ -1261,9 +1181,8 @@ }, "node_modules/@babel/plugin-transform-modules-umd": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1277,9 +1196,8 @@ }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", - "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.20.5", "@babel/helper-plugin-utils": "^7.20.2" @@ -1293,9 +1211,8 @@ }, "node_modules/@babel/plugin-transform-new-target": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1308,9 +1225,8 @@ }, "node_modules/@babel/plugin-transform-object-super": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/helper-replace-supers": "^7.18.6" @@ -1324,9 +1240,8 @@ }, "node_modules/@babel/plugin-transform-parameters": { "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz", - "integrity": "sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2" }, @@ -1339,9 +1254,8 @@ }, "node_modules/@babel/plugin-transform-property-literals": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1354,9 +1268,8 @@ }, "node_modules/@babel/plugin-transform-regenerator": { "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", - "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "regenerator-transform": "^0.15.1" @@ -1370,9 +1283,8 @@ }, "node_modules/@babel/plugin-transform-reserved-words": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1385,9 +1297,8 @@ }, "node_modules/@babel/plugin-transform-runtime": { "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.21.0.tgz", - "integrity": "sha512-ReY6pxwSzEU0b3r2/T/VhqMKg/AkceBT19X0UptA3/tYi5Pe2eXgEUH+NNMC5nok6c6XQz5tyVTUpuezRfSMSg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.18.6", "@babel/helper-plugin-utils": "^7.20.2", @@ -1405,9 +1316,8 @@ }, "node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1420,9 +1330,8 @@ }, "node_modules/@babel/plugin-transform-spread": { "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", - "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" @@ -1436,9 +1345,8 @@ }, "node_modules/@babel/plugin-transform-sticky-regex": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1451,9 +1359,8 @@ }, "node_modules/@babel/plugin-transform-template-literals": { "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -1466,9 +1373,8 @@ }, "node_modules/@babel/plugin-transform-typeof-symbol": { "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -1481,9 +1387,8 @@ }, "node_modules/@babel/plugin-transform-typescript": { "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.0.tgz", - "integrity": "sha512-xo///XTPp3mDzTtrqXoBlK9eiAYW3wv9JXglcn/u1bi60RW11dEUxIgA8cbnDhutS1zacjMRmAwxE0gMklLnZg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.21.0", "@babel/helper-plugin-utils": "^7.20.2", @@ -1498,9 +1403,8 @@ }, "node_modules/@babel/plugin-transform-unicode-escapes": { "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -1513,9 +1417,8 @@ }, "node_modules/@babel/plugin-transform-unicode-regex": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1529,9 +1432,8 @@ }, "node_modules/@babel/preset-env": { "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", - "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/compat-data": "^7.20.1", "@babel/helper-compilation-targets": "^7.20.0", @@ -1618,9 +1520,8 @@ }, "node_modules/@babel/preset-modules": { "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", @@ -1634,9 +1535,8 @@ }, "node_modules/@babel/preset-typescript": { "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.21.0.tgz", - "integrity": "sha512-myc9mpoVA5m1rF8K8DgLEatOYFDpwC+RkMkjZ0Du6uI62YvDe8uxIEYVs/VCdSJ097nlALiU/yBC7//3nI+hNg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-validator-option": "^7.21.0", @@ -1651,15 +1551,13 @@ }, "node_modules/@babel/regjsgen": { "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@babel/runtime": { "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", - "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", "dev": true, + "license": "MIT", "dependencies": { "regenerator-runtime": "^0.13.11" }, @@ -1669,8 +1567,7 @@ }, "node_modules/@babel/runtime-corejs3": { "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.21.0.tgz", - "integrity": "sha512-TDD4UJzos3JJtM+tHX+w2Uc+KWj7GV+VKKFdMVd2Rx8sdA19hcc3P3AHFYd5LVOw+pYuSd5lICC3gm52B6Rwxw==", + "license": "MIT", "dependencies": { "core-js-pure": "^3.25.1", "regenerator-runtime": "^0.13.11" @@ -1681,20 +1578,17 @@ }, "node_modules/@babel/runtime-corejs3/node_modules/regenerator-runtime": { "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + "license": "MIT" }, "node_modules/@babel/runtime/node_modules/regenerator-runtime": { "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@babel/template": { "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.18.6", "@babel/parser": "^7.20.7", @@ -1706,9 +1600,8 @@ }, "node_modules/@babel/traverse": { "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.2.tgz", - "integrity": "sha512-ts5FFU/dSUPS13tv8XiEObDu9K+iagEKME9kAbaP7r0Y9KtZJZ+NGndDvWoRAYNpeWafbpFeki3q9QoMD6gxyw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.18.6", "@babel/generator": "^7.21.1", @@ -1727,9 +1620,8 @@ }, "node_modules/@babel/types": { "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.2.tgz", - "integrity": "sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.19.4", "@babel/helper-validator-identifier": "^7.19.1", @@ -1741,9 +1633,8 @@ }, "node_modules/@colors/colors": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.1.90" @@ -1751,9 +1642,8 @@ }, "node_modules/@eslint-community/eslint-utils": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.2.0.tgz", - "integrity": "sha512-gB8T4H4DEfX2IV9zGDJPOBgP1e/DbfCPDTtEqUMckpvzS1OYtva8JdFYBqMwYk7xAQ429WGF/UPqn8uQ//h2vQ==", "dev": true, + "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.3.0" }, @@ -1766,27 +1656,24 @@ }, "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@eslint-community/regexpp": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.0.tgz", - "integrity": "sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.1.tgz", - "integrity": "sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -1807,9 +1694,8 @@ }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -1822,9 +1708,8 @@ }, "node_modules/@eslint/eslintrc/node_modules/type-fest": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -1834,18 +1719,16 @@ }, "node_modules/@eslint/js": { "version": "8.36.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.36.0.tgz", - "integrity": "sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==", "dev": true, + "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", @@ -1857,9 +1740,8 @@ }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -1870,15 +1752,13 @@ }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@jridgewell/gen-mapping": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.0.0", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -1889,63 +1769,70 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "3.1.0", "@jridgewell/sourcemap-codec": "1.4.14" } }, - "node_modules/@mixxx-launchpad/app": { - "resolved": "packages/app", + "node_modules/@mixxx-launch/common": { + "resolved": "packages/common", "link": true }, - "node_modules/@mixxx-launchpad/mini-mk3": { - "resolved": "packages/mini-mk3", + "node_modules/@mixxx-launch/launchcontrol-common": { + "resolved": "packages/launchcontrol-common", "link": true }, - "node_modules/@mixxx-launchpad/mixxx": { - "resolved": "packages/mixxx", + "node_modules/@mixxx-launch/launchcontrol-xl-mk2": { + "resolved": "packages/launchcontrol-xl-mk2", + "link": true + }, + "node_modules/@mixxx-launch/launchpad-common": { + "resolved": "packages/launchpad-common", + "link": true + }, + "node_modules/@mixxx-launch/launchpad-mini-mk3": { + "resolved": "packages/launchpad-mini-mk3", + "link": true + }, + "node_modules/@mixxx-launch/launchpad-mk1": { + "resolved": "packages/launchpad-mk1", "link": true }, - "node_modules/@mixxx-launchpad/mk1": { - "resolved": "packages/mk1", + "node_modules/@mixxx-launch/launchpad-mk2": { + "resolved": "packages/launchpad-mk2", "link": true }, - "node_modules/@mixxx-launchpad/mk2": { - "resolved": "packages/mk2", + "node_modules/@mixxx-launch/mixxx": { + "resolved": "packages/mixxx", "link": true }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -1956,18 +1843,16 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -1978,9 +1863,8 @@ }, "node_modules/@octokit/auth-token": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.3.tgz", - "integrity": "sha512-/aFM2M4HVDBT/jjDBa84sJniv1t9Gm/rLkalaz9htOm+L+8JMj1k9w0CkUdcxNyNxZPlTxKPVko+m1VlM58ZVA==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/types": "^9.0.0" }, @@ -1990,9 +1874,8 @@ }, "node_modules/@octokit/core": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.0.tgz", - "integrity": "sha512-AgvDRUg3COpR82P7PBdGZF/NNqGmtMq2NiPqeSsDIeCfYFOZ9gddqWNQHnFdEUf+YwOj4aZYmJnlPp7OXmDIDg==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/auth-token": "^3.0.0", "@octokit/graphql": "^5.0.0", @@ -2008,9 +1891,8 @@ }, "node_modules/@octokit/endpoint": { "version": "7.0.5", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.5.tgz", - "integrity": "sha512-LG4o4HMY1Xoaec87IqQ41TQ+glvIeTKqfjkCEmt5AIwDZJwQeVZFIEYXrYY6yLwK+pAScb9Gj4q+Nz2qSw1roA==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/types": "^9.0.0", "is-plain-object": "^5.0.0", @@ -2022,9 +1904,8 @@ }, "node_modules/@octokit/graphql": { "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.5.tgz", - "integrity": "sha512-Qwfvh3xdqKtIznjX9lz2D458r7dJPP8l6r4GQkIdWQouZwHQK0mVT88uwiU2bdTU2OtT1uOlKpRciUWldpG0yQ==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/request": "^6.0.0", "@octokit/types": "^9.0.0", @@ -2036,15 +1917,13 @@ }, "node_modules/@octokit/openapi-types": { "version": "16.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-16.0.0.tgz", - "integrity": "sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@octokit/plugin-paginate-rest": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.0.0.tgz", - "integrity": "sha512-Sq5VU1PfT6/JyuXPyt04KZNVsFOSBaYOAq2QRZUwzVlI10KFvcbUo8lR258AAQL1Et60b0WuVik+zOWKLuDZxw==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/types": "^9.0.0" }, @@ -2057,18 +1936,16 @@ }, "node_modules/@octokit/plugin-request-log": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", - "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", "dev": true, + "license": "MIT", "peerDependencies": { "@octokit/core": ">=3" } }, "node_modules/@octokit/plugin-rest-endpoint-methods": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.0.1.tgz", - "integrity": "sha512-pnCaLwZBudK5xCdrR823xHGNgqOzRnJ/mpC/76YPpNP7DybdsJtP7mdOwh+wYZxK5jqeQuhu59ogMI4NRlBUvA==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/types": "^9.0.0", "deprecation": "^2.3.1" @@ -2082,9 +1959,8 @@ }, "node_modules/@octokit/request": { "version": "6.2.3", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.3.tgz", - "integrity": "sha512-TNAodj5yNzrrZ/VxP+H5HiYaZep0H3GU0O7PaF+fhDrt8FPrnkei9Aal/txsN/1P7V3CPiThG0tIvpPDYUsyAA==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/endpoint": "^7.0.0", "@octokit/request-error": "^3.0.0", @@ -2099,9 +1975,8 @@ }, "node_modules/@octokit/request-error": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", - "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/types": "^9.0.0", "deprecation": "^2.0.0", @@ -2113,9 +1988,8 @@ }, "node_modules/@octokit/rest": { "version": "19.0.7", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.7.tgz", - "integrity": "sha512-HRtSfjrWmWVNp2uAkEpQnuGMJsu/+dBr47dRc5QVgsCbnIc1+GFEaoKBWkYG+zjrsHpSqcAElMio+n10c0b5JA==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/core": "^4.1.0", "@octokit/plugin-paginate-rest": "^6.0.0", @@ -2128,27 +2002,24 @@ }, "node_modules/@octokit/types": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.0.0.tgz", - "integrity": "sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/openapi-types": "^16.0.0" } }, "node_modules/@pnpm/config.env-replace": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.22.0" } }, "node_modules/@pnpm/network.ca-file": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "4.2.10" }, @@ -2158,9 +2029,8 @@ }, "node_modules/@pnpm/npm-conf": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.1.1.tgz", - "integrity": "sha512-yfRcuupmxxeDOSxvw4g+wFCrGiPD0L32f5WMzqMXp7Rl93EOCdFiDcaSNnZ10Up9GdNqkj70UTa8hfhPFphaZA==", "dev": true, + "license": "MIT", "dependencies": { "@pnpm/config.env-replace": "^1.1.0", "@pnpm/network.ca-file": "^1.0.1", @@ -2172,9 +2042,8 @@ }, "node_modules/@rollup/plugin-babel": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.0.3.tgz", - "integrity": "sha512-fKImZKppa1A/gX73eg4JGo+8kQr/q1HBQaCGKECZ0v4YBBv3lFqi14+7xyApECzvkLTHCifx+7ntcrvtBIRcpg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.18.6", "@rollup/pluginutils": "^5.0.1" @@ -2198,9 +2067,8 @@ }, "node_modules/@rollup/plugin-commonjs": { "version": "24.0.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-24.0.1.tgz", - "integrity": "sha512-15LsiWRZk4eOGqvrJyu3z3DaBu5BhXIMeWnijSRvd8irrrg9SHpQ1pH+BUK4H6Z9wL9yOxZJMTLU+Au86XHxow==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.0.1", "commondir": "^1.0.1", @@ -2223,18 +2091,16 @@ }, "node_modules/@rollup/plugin-commonjs/node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/@rollup/plugin-commonjs/node_modules/glob": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -2251,9 +2117,8 @@ }, "node_modules/@rollup/plugin-commonjs/node_modules/magic-string": { "version": "0.27.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", - "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.13" }, @@ -2263,9 +2128,8 @@ }, "node_modules/@rollup/plugin-commonjs/node_modules/minimatch": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -2275,9 +2139,8 @@ }, "node_modules/@rollup/plugin-json": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.0.0.tgz", - "integrity": "sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.0.1" }, @@ -2295,9 +2158,8 @@ }, "node_modules/@rollup/plugin-node-resolve": { "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.1.tgz", - "integrity": "sha512-ReY88T7JhJjeRVbfCyNj+NXAG3IIsVMsX9b5/9jC98dRP8/yxlZdz7mHZbHk5zHr24wZZICS5AcXsFZAXYUQEg==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.0.1", "@types/resolve": "1.20.2", @@ -2320,15 +2182,13 @@ }, "node_modules/@rollup/plugin-node-resolve/node_modules/@types/resolve": { "version": "1.20.2", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@rollup/pluginutils": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", @@ -2348,9 +2208,8 @@ }, "node_modules/@semantic-release/commit-analyzer": { "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-9.0.2.tgz", - "integrity": "sha512-E+dr6L+xIHZkX4zNMe6Rnwg4YQrWNXK+rNsvwOPpdFppvZO1olE2fIgWhv89TkQErygevbjsZFSIxp+u6w2e5g==", "dev": true, + "license": "MIT", "dependencies": { "conventional-changelog-angular": "^5.0.0", "conventional-commits-filter": "^2.0.0", @@ -2369,18 +2228,16 @@ }, "node_modules/@semantic-release/error": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", - "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.17" } }, "node_modules/@semantic-release/exec": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@semantic-release/exec/-/exec-6.0.3.tgz", - "integrity": "sha512-bxAq8vLOw76aV89vxxICecEa8jfaWwYITw6X74zzlO0mc/Bgieqx9kBRz9z96pHectiTAtsCwsQcUyLYWnp3VQ==", "dev": true, + "license": "MIT", "dependencies": { "@semantic-release/error": "^3.0.0", "aggregate-error": "^3.0.0", @@ -2398,9 +2255,8 @@ }, "node_modules/@semantic-release/github": { "version": "8.0.7", - "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-8.0.7.tgz", - "integrity": "sha512-VtgicRIKGvmTHwm//iqTh/5NGQwsncOMR5vQK9pMT92Aem7dv37JFKKRuulUsAnUOIlO4G8wH3gPiBAA0iW0ww==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/rest": "^19.0.0", "@semantic-release/error": "^3.0.0", @@ -2428,9 +2284,8 @@ }, "node_modules/@semantic-release/npm": { "version": "10.0.3", - "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-10.0.3.tgz", - "integrity": "sha512-Chbv3kX4o+y+r1X6hsqBVB8NFbSVfiNlYOqMG6o9Wc8r5Y4cjxfbaMCuJ++XAtw3YXYX/NVD05cPzBi4Orjusg==", "dev": true, + "license": "MIT", "dependencies": { "@semantic-release/error": "^3.0.0", "aggregate-error": "^4.0.1", @@ -2455,9 +2310,8 @@ }, "node_modules/@semantic-release/npm/node_modules/aggregate-error": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", - "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", "dev": true, + "license": "MIT", "dependencies": { "clean-stack": "^4.0.0", "indent-string": "^5.0.0" @@ -2471,9 +2325,8 @@ }, "node_modules/@semantic-release/npm/node_modules/clean-stack": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", - "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "5.0.0" }, @@ -2486,9 +2339,8 @@ }, "node_modules/@semantic-release/npm/node_modules/escape-string-regexp": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -2498,9 +2350,8 @@ }, "node_modules/@semantic-release/npm/node_modules/execa": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz", - "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.1", @@ -2521,9 +2372,8 @@ }, "node_modules/@semantic-release/npm/node_modules/hosted-git-info": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^7.5.1" }, @@ -2533,18 +2383,16 @@ }, "node_modules/@semantic-release/npm/node_modules/human-signals": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=14.18.0" } }, "node_modules/@semantic-release/npm/node_modules/indent-string": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -2554,9 +2402,8 @@ }, "node_modules/@semantic-release/npm/node_modules/is-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -2566,36 +2413,32 @@ }, "node_modules/@semantic-release/npm/node_modules/json-parse-even-better-errors": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", "dev": true, + "license": "MIT", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@semantic-release/npm/node_modules/lines-and-columns": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", - "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/@semantic-release/npm/node_modules/lru-cache": { "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/@semantic-release/npm/node_modules/mimic-fn": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -2605,9 +2448,8 @@ }, "node_modules/@semantic-release/npm/node_modules/normalize-package-data": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", - "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^6.0.0", "is-core-module": "^2.8.1", @@ -2620,9 +2462,8 @@ }, "node_modules/@semantic-release/npm/node_modules/npm-run-path": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^4.0.0" }, @@ -2635,9 +2476,8 @@ }, "node_modules/@semantic-release/npm/node_modules/onetime": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^4.0.0" }, @@ -2650,9 +2490,8 @@ }, "node_modules/@semantic-release/npm/node_modules/parse-json": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-7.0.0.tgz", - "integrity": "sha512-kP+TQYAzAiVnzOlWOe0diD6L35s9bJh0SCn95PIbZFKrOYuIRQsQkeWEYxzVDuHTt9V9YqvYCJ2Qo4z9wdfZPw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.21.4", "error-ex": "^1.3.2", @@ -2669,9 +2508,8 @@ }, "node_modules/@semantic-release/npm/node_modules/path-key": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -2681,9 +2519,8 @@ }, "node_modules/@semantic-release/npm/node_modules/read-pkg": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-8.0.0.tgz", - "integrity": "sha512-Ajb9oSjxXBw0YyOiwtQ2dKbAA/vMnUPnY63XcCk+mXo0BwIdQEMgZLZiMWGttQHcUhUgbK0mH85ethMPKXxziw==", "dev": true, + "license": "MIT", "dependencies": { "@types/normalize-package-data": "^2.4.1", "normalize-package-data": "^5.0.0", @@ -2699,9 +2536,8 @@ }, "node_modules/@semantic-release/npm/node_modules/semver": { "version": "7.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -2714,9 +2550,8 @@ }, "node_modules/@semantic-release/npm/node_modules/semver/node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -2726,9 +2561,8 @@ }, "node_modules/@semantic-release/npm/node_modules/strip-final-newline": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -2738,9 +2572,8 @@ }, "node_modules/@semantic-release/npm/node_modules/type-fest": { "version": "3.9.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.9.0.tgz", - "integrity": "sha512-hR8JP2e8UiH7SME5JZjsobBlEiatFoxpzCP+R3ZeCo7kAaG1jXQE5X/buLzogM6GJu8le9Y4OcfNuIQX0rZskA==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=14.16" }, @@ -2750,15 +2583,13 @@ }, "node_modules/@semantic-release/npm/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/@semantic-release/release-notes-generator": { "version": "10.0.3", - "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-10.0.3.tgz", - "integrity": "sha512-k4x4VhIKneOWoBGHkx0qZogNjCldLPRiAjnIpMnlUh6PtaWXp/T+C9U7/TaNDDtgDa5HMbHl4WlREdxHio6/3w==", "dev": true, + "license": "MIT", "dependencies": { "conventional-changelog-angular": "^5.0.0", "conventional-changelog-writer": "^5.0.0", @@ -2780,54 +2611,46 @@ }, "node_modules/@tootallnate/once": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10" } }, "node_modules/@types/estree": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/json-schema": { "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/minimist": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/normalize-package-data": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/retry": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/semver": { "version": "7.3.13", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", - "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.55.0.tgz", - "integrity": "sha512-IZGc50rtbjk+xp5YQoJvmMPmJEYoC53SiKPXyqWfv15XoD2Y5Kju6zN0DwlmaGJp1Iw33JsWJcQ7nw0lGCGjVg==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.4.0", "@typescript-eslint/scope-manager": "5.55.0", @@ -2859,9 +2682,8 @@ }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -2871,9 +2693,8 @@ }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -2886,15 +2707,13 @@ }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/@typescript-eslint/parser": { "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.55.0.tgz", - "integrity": "sha512-ppvmeF7hvdhUUZWSd2EEWfzcFkjJzgNQzVST22nzg958CR+sphy8A6K7LXQZd6V75m1VKjp+J4g/PCEfSCmzhw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "5.55.0", "@typescript-eslint/types": "5.55.0", @@ -2919,9 +2738,8 @@ }, "node_modules/@typescript-eslint/scope-manager": { "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.55.0.tgz", - "integrity": "sha512-OK+cIO1ZGhJYNCL//a3ROpsd83psf4dUJ4j7pdNVzd5DmIk+ffkuUIX2vcZQbEW/IR41DYsfJTB19tpCboxQuw==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/types": "5.55.0", "@typescript-eslint/visitor-keys": "5.55.0" @@ -2936,9 +2754,8 @@ }, "node_modules/@typescript-eslint/type-utils": { "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.55.0.tgz", - "integrity": "sha512-ObqxBgHIXj8rBNm0yh8oORFrICcJuZPZTqtAFh0oZQyr5DnAHZWfyw54RwpEEH+fD8suZaI0YxvWu5tYE/WswA==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/typescript-estree": "5.55.0", "@typescript-eslint/utils": "5.55.0", @@ -2963,9 +2780,8 @@ }, "node_modules/@typescript-eslint/types": { "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.55.0.tgz", - "integrity": "sha512-M4iRh4AG1ChrOL6Y+mETEKGeDnT7Sparn6fhZ5LtVJF1909D5O4uqK+C5NPbLmpfZ0XIIxCdwzKiijpZUOvOug==", "dev": true, + "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -2976,9 +2792,8 @@ }, "node_modules/@typescript-eslint/typescript-estree": { "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.55.0.tgz", - "integrity": "sha512-I7X4A9ovA8gdpWMpr7b1BN9eEbvlEtWhQvpxp/yogt48fy9Lj3iE3ild/1H3jKBBIYj5YYJmS2+9ystVhC7eaQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "5.55.0", "@typescript-eslint/visitor-keys": "5.55.0", @@ -3003,9 +2818,8 @@ }, "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -3015,9 +2829,8 @@ }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -3030,15 +2843,13 @@ }, "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/@typescript-eslint/utils": { "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.55.0.tgz", - "integrity": "sha512-FkW+i2pQKcpDC3AY6DU54yl8Lfl14FVGYDgBTyGKB75cCwV3KpkpTMFi9d9j2WAJ4271LR2HeC5SEWF/CZmmfw==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", @@ -3062,9 +2873,8 @@ }, "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -3074,9 +2884,8 @@ }, "node_modules/@typescript-eslint/utils/node_modules/semver": { "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -3089,15 +2898,13 @@ }, "node_modules/@typescript-eslint/utils/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/@typescript-eslint/visitor-keys": { "version": "5.55.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.55.0.tgz", - "integrity": "sha512-q2dlHHwWgirKh1D3acnuApXG+VNXpEY5/AwRxDVuEQpxWaB0jCDe0jFMVMALJ3ebSfuOVE8/rMS+9ZOYGg1GWw==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/types": "5.55.0", "eslint-visitor-keys": "^3.3.0" @@ -3112,18 +2919,16 @@ }, "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/acorn": { "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -3133,18 +2938,16 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/agent-base": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, + "license": "MIT", "dependencies": { "debug": "4" }, @@ -3154,9 +2957,8 @@ }, "node_modules/aggregate-error": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, + "license": "MIT", "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -3167,9 +2969,8 @@ }, "node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -3183,9 +2984,8 @@ }, "node_modules/ansi-escapes": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", - "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^1.0.2" }, @@ -3198,18 +2998,16 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -3219,57 +3017,49 @@ }, "node_modules/ansicolors": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", - "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" }, "node_modules/argv-formatter": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/argv-formatter/-/argv-formatter-1.0.0.tgz", - "integrity": "sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/array-ify": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/array-union": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/arrify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/async": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/compat-data": "^7.17.7", "@babel/helper-define-polyfill-provider": "^0.3.3", @@ -3281,9 +3071,8 @@ }, "node_modules/babel-plugin-polyfill-corejs3": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.3.3", "core-js-compat": "^3.25.1" @@ -3294,9 +3083,8 @@ }, "node_modules/babel-plugin-polyfill-regenerator": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.3.3" }, @@ -3306,27 +3094,23 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/before-after-hook": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", - "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/bottleneck": { "version": "2.19.5", - "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", - "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -3334,9 +3118,8 @@ }, "node_modules/braces": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, + "license": "MIT", "dependencies": { "fill-range": "^7.0.1" }, @@ -3346,8 +3129,6 @@ }, "node_modules/browserslist": { "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", "dev": true, "funding": [ { @@ -3359,6 +3140,7 @@ "url": "https://tidelift.com/funding/github/npm/browserslist" } ], + "license": "MIT", "dependencies": { "caniuse-lite": "^1.0.30001449", "electron-to-chromium": "^1.4.284", @@ -3374,9 +3156,8 @@ }, "node_modules/builtin-modules": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -3386,27 +3167,24 @@ }, "node_modules/callsites": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/camelcase": { "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/camelcase-keys": { "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, + "license": "MIT", "dependencies": { "camelcase": "^5.3.1", "map-obj": "^4.0.0", @@ -3421,8 +3199,6 @@ }, "node_modules/caniuse-lite": { "version": "1.0.30001464", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001464.tgz", - "integrity": "sha512-oww27MtUmusatpRpCGSOneQk2/l5czXANDSFvsc7VuOQ86s3ANhZetpwXNf1zY/zdfP63Xvjz325DAdAoES13g==", "dev": true, "funding": [ { @@ -3433,13 +3209,13 @@ "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/cardinal": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", - "integrity": "sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==", "dev": true, + "license": "MIT", "dependencies": { "ansicolors": "~0.3.2", "redeyed": "~2.1.0" @@ -3450,9 +3226,8 @@ }, "node_modules/chalk": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -3464,18 +3239,16 @@ }, "node_modules/clean-stack": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/cli-table3": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", "dev": true, + "license": "MIT", "dependencies": { "string-width": "^4.2.0" }, @@ -3488,9 +3261,8 @@ }, "node_modules/cliui": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -3502,30 +3274,26 @@ }, "node_modules/color-convert": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, "node_modules/color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/commondir": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/compare-func": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", "dev": true, + "license": "MIT", "dependencies": { "array-ify": "^1.0.0", "dot-prop": "^5.1.0" @@ -3533,15 +3301,13 @@ }, "node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/config-chain": { "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", "dev": true, + "license": "MIT", "dependencies": { "ini": "^1.3.4", "proto-list": "~1.2.1" @@ -3549,9 +3315,8 @@ }, "node_modules/conventional-changelog-angular": { "version": "5.0.13", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", - "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", "dev": true, + "license": "ISC", "dependencies": { "compare-func": "^2.0.0", "q": "^1.5.1" @@ -3562,9 +3327,8 @@ }, "node_modules/conventional-changelog-conventionalcommits": { "version": "4.6.3", - "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz", - "integrity": "sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==", "dev": true, + "license": "ISC", "dependencies": { "compare-func": "^2.0.0", "lodash": "^4.17.15", @@ -3576,9 +3340,8 @@ }, "node_modules/conventional-changelog-writer": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", - "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", "dev": true, + "license": "MIT", "dependencies": { "conventional-commits-filter": "^2.0.7", "dateformat": "^3.0.0", @@ -3599,9 +3362,8 @@ }, "node_modules/conventional-commits-filter": { "version": "2.0.7", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", - "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", "dev": true, + "license": "MIT", "dependencies": { "lodash.ismatch": "^4.4.0", "modify-values": "^1.0.0" @@ -3612,9 +3374,8 @@ }, "node_modules/conventional-commits-parser": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", - "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", "dev": true, + "license": "MIT", "dependencies": { "is-text-path": "^1.0.1", "JSONStream": "^1.0.4", @@ -3632,15 +3393,13 @@ }, "node_modules/convert-source-map": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/core-js-compat": { "version": "3.29.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.29.0.tgz", - "integrity": "sha512-ScMn3uZNAFhK2DGoEfErguoiAHhV2Ju+oJo/jK08p7B3f3UhocUrCCkTvnZaiS+edl5nlIoiBXKcwMc6elv4KQ==", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "^4.21.5" }, @@ -3651,9 +3410,8 @@ }, "node_modules/core-js-pure": { "version": "3.29.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.29.1.tgz", - "integrity": "sha512-4En6zYVi0i0XlXHVz/bi6l1XDjCqkKRq765NXuX+SnaIatlE96Odt5lMLjdxUiNI1v9OXI5DSLWYPlmTfkTktg==", "hasInstallScript": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" @@ -3661,15 +3419,13 @@ }, "node_modules/core-util-is": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cosmiconfig": { "version": "8.1.3", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", - "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==", "dev": true, + "license": "MIT", "dependencies": { "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -3685,9 +3441,8 @@ }, "node_modules/cross-spawn": { "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -3699,9 +3454,8 @@ }, "node_modules/crypto-random-string": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", - "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^1.0.1" }, @@ -3714,18 +3468,16 @@ }, "node_modules/dateformat": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", "dev": true, + "license": "MIT", "engines": { "node": "*" } }, "node_modules/debug": { "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -3740,18 +3492,16 @@ }, "node_modules/decamelize": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/decamelize-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, + "license": "MIT", "dependencies": { "decamelize": "^1.1.0", "map-obj": "^1.0.0" @@ -3765,48 +3515,42 @@ }, "node_modules/decamelize-keys/node_modules/map-obj": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/deep-extend": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4.0.0" } }, "node_modules/deep-is": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/deepmerge": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz", - "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/deprecation": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/dir-glob": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, + "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -3816,9 +3560,8 @@ }, "node_modules/doctrine": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -3828,9 +3571,8 @@ }, "node_modules/dot-prop": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, + "license": "MIT", "dependencies": { "is-obj": "^2.0.0" }, @@ -3840,18 +3582,16 @@ }, "node_modules/duplexer2": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "readable-stream": "^2.0.2" } }, "node_modules/ejs": { "version": "3.1.8", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", - "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "jake": "^10.8.5" }, @@ -3864,31 +3604,28 @@ }, "node_modules/electron-to-chromium": { "version": "1.4.328", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.328.tgz", - "integrity": "sha512-DE9tTy2PNmy1v55AZAO542ui+MLC2cvINMK4P2LXGsJdput/ThVG9t+QGecPuAZZSgC8XoI+Jh9M1OG9IoNSCw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/encoding": { "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "dev": true, + "license": "MIT", "optional": true, + "peer": true, "dependencies": { "iconv-lite": "^0.6.2" } }, "node_modules/env-ci": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-9.0.0.tgz", - "integrity": "sha512-Q3cjr1tX9xwigprw4G8M3o7PIOO/1LYji6TyGsbD1WfMmD23etZvhgmPXJqkP788yH4dgSSK7oaIMuaayUJIfg==", "dev": true, + "license": "MIT", "dependencies": { "execa": "^7.0.0", "java-properties": "^1.0.2" @@ -3899,9 +3636,8 @@ }, "node_modules/env-ci/node_modules/execa": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz", - "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.1", @@ -3922,18 +3658,16 @@ }, "node_modules/env-ci/node_modules/human-signals": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=14.18.0" } }, "node_modules/env-ci/node_modules/is-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -3943,9 +3677,8 @@ }, "node_modules/env-ci/node_modules/mimic-fn": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -3955,9 +3688,8 @@ }, "node_modules/env-ci/node_modules/npm-run-path": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^4.0.0" }, @@ -3970,9 +3702,8 @@ }, "node_modules/env-ci/node_modules/onetime": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^4.0.0" }, @@ -3985,9 +3716,8 @@ }, "node_modules/env-ci/node_modules/path-key": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -3997,9 +3727,8 @@ }, "node_modules/env-ci/node_modules/strip-final-newline": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -4009,36 +3738,32 @@ }, "node_modules/error-ex": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, "node_modules/escalade": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/eslint": { "version": "8.36.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.36.0.tgz", - "integrity": "sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.4.0", @@ -4093,9 +3818,8 @@ }, "node_modules/eslint-config-prettier": { "version": "8.7.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.7.0.tgz", - "integrity": "sha512-HHVXLSlVUhMSmyW4ZzEuvjpwqamgmlfkutD53cYXLikh4pt/modINRcCIApJ84czDxM4GZInwUrromsDdTImTA==", "dev": true, + "license": "MIT", "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -4105,9 +3829,8 @@ }, "node_modules/eslint-plugin-es": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", - "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", "dev": true, + "license": "MIT", "dependencies": { "eslint-utils": "^2.0.0", "regexpp": "^3.0.0" @@ -4124,9 +3847,8 @@ }, "node_modules/eslint-plugin-node": { "version": "11.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", - "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", "dev": true, + "license": "MIT", "dependencies": { "eslint-plugin-es": "^3.0.0", "eslint-utils": "^2.0.0", @@ -4144,9 +3866,8 @@ }, "node_modules/eslint-plugin-promise": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", - "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", "dev": true, + "license": "ISC", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -4156,9 +3877,8 @@ }, "node_modules/eslint-scope": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -4169,9 +3889,8 @@ }, "node_modules/eslint-utils": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, + "license": "MIT", "dependencies": { "eslint-visitor-keys": "^1.1.0" }, @@ -4184,18 +3903,16 @@ }, "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=4" } }, "node_modules/eslint/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -4208,9 +3925,8 @@ }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4224,9 +3940,8 @@ }, "node_modules/eslint/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -4236,15 +3951,13 @@ }, "node_modules/eslint/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -4254,9 +3967,8 @@ }, "node_modules/eslint/node_modules/eslint-scope": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -4267,27 +3979,24 @@ }, "node_modules/eslint/node_modules/eslint-visitor-keys": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/eslint/node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/eslint/node_modules/globals": { "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -4300,18 +4009,16 @@ }, "node_modules/eslint/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/eslint/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -4321,9 +4028,8 @@ }, "node_modules/eslint/node_modules/type-fest": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -4333,9 +4039,8 @@ }, "node_modules/espree": { "version": "9.5.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.0.tgz", - "integrity": "sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", @@ -4350,18 +4055,16 @@ }, "node_modules/espree/node_modules/eslint-visitor-keys": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/esprima": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -4372,9 +4075,8 @@ }, "node_modules/esquery": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -4384,18 +4086,16 @@ }, "node_modules/esquery/node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/esrecurse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -4405,47 +4105,41 @@ }, "node_modules/esrecurse/node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/estraverse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/estree-walker": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/esutils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/eventemitter3": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.0.tgz", - "integrity": "sha512-riuVbElZZNXLeLEoprfNYoDSwTBRR44X3mnhdI1YcnENpWTCsTTVZ2zFuqQcpoyqPQIUXdiPEU0ECAq0KQRaHg==" + "license": "MIT" }, "node_modules/execa": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -4466,15 +4160,13 @@ }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-glob": { "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -4488,9 +4180,8 @@ }, "node_modules/fast-glob/node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -4500,30 +4191,26 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fastq": { "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, "node_modules/figures": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", - "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^5.0.0", "is-unicode-supported": "^1.2.0" @@ -4537,9 +4224,8 @@ }, "node_modules/figures/node_modules/escape-string-regexp": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -4549,9 +4235,8 @@ }, "node_modules/file-entry-cache": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, + "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -4561,27 +4246,24 @@ }, "node_modules/filelist": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, + "license": "Apache-2.0", "dependencies": { "minimatch": "^5.0.1" } }, "node_modules/filelist/node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/filelist/node_modules/minimatch": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -4591,9 +4273,8 @@ }, "node_modules/fill-range": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -4603,9 +4284,8 @@ }, "node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -4619,9 +4299,8 @@ }, "node_modules/find-versions": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-5.1.0.tgz", - "integrity": "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==", "dev": true, + "license": "MIT", "dependencies": { "semver-regex": "^4.0.5" }, @@ -4634,9 +4313,8 @@ }, "node_modules/flat-cache": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, + "license": "MIT", "dependencies": { "flatted": "^3.1.0", "rimraf": "^3.0.2" @@ -4647,15 +4325,13 @@ }, "node_modules/flatted": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/from2": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "readable-stream": "^2.0.0" @@ -4663,9 +4339,8 @@ }, "node_modules/fs-extra": { "version": "11.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz", - "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -4677,16 +4352,13 @@ }, "node_modules/fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, - "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -4697,33 +4369,29 @@ }, "node_modules/function-bind": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/gensync": { "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/get-caller-file": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-stream": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -4733,9 +4401,8 @@ }, "node_modules/git-log-parser": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.0.tgz", - "integrity": "sha512-rnCVNfkTL8tdNryFuaY0fYiBWEBcgF748O6ZI61rslBvr2o7U65c2/6npCRqH40vuAhtgtDiqLTJjBVdrejCzA==", "dev": true, + "license": "MIT", "dependencies": { "argv-formatter": "~1.0.0", "spawn-error-forwarder": "~1.0.0", @@ -4747,18 +4414,16 @@ }, "node_modules/git-log-parser/node_modules/split2": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz", - "integrity": "sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==", "dev": true, + "license": "ISC", "dependencies": { "through2": "~2.0.0" } }, "node_modules/git-log-parser/node_modules/through2": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -4766,9 +4431,8 @@ }, "node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -4786,9 +4450,8 @@ }, "node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -4798,18 +4461,16 @@ }, "node_modules/globals": { "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/globby": { "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, + "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -4827,21 +4488,18 @@ }, "node_modules/graceful-fs": { "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/grapheme-splitter": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/handlebars": { "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.0", @@ -4860,18 +4518,16 @@ }, "node_modules/hard-rejection": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/has": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, + "license": "MIT", "dependencies": { "function-bind": "^1.1.1" }, @@ -4881,18 +4537,16 @@ }, "node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/hook-std": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-3.0.0.tgz", - "integrity": "sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -4902,9 +4556,8 @@ }, "node_modules/hosted-git-info": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -4914,9 +4567,8 @@ }, "node_modules/hosted-git-info/node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -4926,15 +4578,13 @@ }, "node_modules/hosted-git-info/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/http-proxy-agent": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, + "license": "MIT", "dependencies": { "@tootallnate/once": "2", "agent-base": "6", @@ -4946,9 +4596,8 @@ }, "node_modules/https-proxy-agent": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "6", "debug": "4" @@ -4959,19 +4608,18 @@ }, "node_modules/human-signals": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } }, "node_modules/iconv-lite": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, + "license": "MIT", "optional": true, + "peer": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -4981,18 +4629,16 @@ }, "node_modules/ignore": { "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/import-fresh": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -5006,9 +4652,8 @@ }, "node_modules/import-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz", - "integrity": "sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.2" }, @@ -5018,27 +4663,24 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } }, "node_modules/indent-string": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -5046,21 +4688,18 @@ }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/ini": { "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/into-stream": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-6.0.0.tgz", - "integrity": "sha512-XHbaOAvP+uFKUFsOgoNPRjLkwB+I22JFPFe5OjTkQ0nwgj6+pSjb4NmB6VMxaPshLiOf+zcpOCBQuLwC1KHhZA==", "dev": true, + "license": "MIT", "dependencies": { "from2": "^2.3.0", "p-is-promise": "^3.0.0" @@ -5074,15 +4713,13 @@ }, "node_modules/is-arrayish": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-builtin-module": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", "dev": true, + "license": "MIT", "dependencies": { "builtin-modules": "^3.3.0" }, @@ -5095,9 +4732,8 @@ }, "node_modules/is-core-module": { "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "dev": true, + "license": "MIT", "dependencies": { "has": "^1.0.3" }, @@ -5107,27 +4743,24 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -5137,69 +4770,61 @@ }, "node_modules/is-module": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/is-obj": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-path-inside": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-plain-obj": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-plain-object": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-reference": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "*" } }, "node_modules/is-stream": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -5209,9 +4834,8 @@ }, "node_modules/is-text-path": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", "dev": true, + "license": "MIT", "dependencies": { "text-extensions": "^1.0.0" }, @@ -5221,9 +4845,8 @@ }, "node_modules/is-unicode-supported": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -5233,21 +4856,18 @@ }, "node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/issue-parser": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-6.0.0.tgz", - "integrity": "sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==", "dev": true, + "license": "MIT", "dependencies": { "lodash.capitalize": "^4.2.1", "lodash.escaperegexp": "^4.1.2", @@ -5261,9 +4881,8 @@ }, "node_modules/jake": { "version": "10.8.5", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", - "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "async": "^3.2.3", "chalk": "^4.0.2", @@ -5279,9 +4898,8 @@ }, "node_modules/jake/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -5294,9 +4912,8 @@ }, "node_modules/jake/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5310,9 +4927,8 @@ }, "node_modules/jake/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -5322,24 +4938,21 @@ }, "node_modules/jake/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jake/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/jake/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -5349,18 +4962,16 @@ }, "node_modules/java-properties": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz", - "integrity": "sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6.0" } }, "node_modules/js-sdsl": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", - "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", "dev": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/js-sdsl" @@ -5368,15 +4979,13 @@ }, "node_modules/js-tokens": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -5386,9 +4995,8 @@ }, "node_modules/jsesc": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, @@ -5398,39 +5006,33 @@ }, "node_modules/json-parse-better-errors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-stringify-safe": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/json5": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -5440,9 +5042,8 @@ }, "node_modules/jsonfile": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, + "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -5452,18 +5053,16 @@ }, "node_modules/jsonparse": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true, "engines": [ "node >= 0.2.0" - ] + ], + "license": "MIT" }, "node_modules/JSONStream": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, + "license": "(MIT OR Apache-2.0)", "dependencies": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" @@ -5477,18 +5076,16 @@ }, "node_modules/kind-of": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/levn": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -5499,15 +5096,13 @@ }, "node_modules/lines-and-columns": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/load-json-file": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", @@ -5520,9 +5115,8 @@ }, "node_modules/load-json-file/node_modules/parse-json": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, + "license": "MIT", "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" @@ -5533,9 +5127,8 @@ }, "node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -5548,78 +5141,66 @@ }, "node_modules/lodash": { "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash-es": { "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.capitalize": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", - "integrity": "sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.debounce": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.escaperegexp": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", - "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.ismatch": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", - "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.isplainobject": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.isstring": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.uniqby": { "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", - "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lru-cache": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } }, "node_modules/map-obj": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -5629,9 +5210,8 @@ }, "node_modules/marked": { "version": "4.2.12", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.12.tgz", - "integrity": "sha512-yr8hSKa3Fv4D3jdZmtMMPghgVt6TWbk86WQaWhDloQjRSQhMMYCAro7jP7VDJrjjdV8pxVxMssXS8B8Y5DZ5aw==", "dev": true, + "license": "MIT", "bin": { "marked": "bin/marked.js" }, @@ -5641,9 +5221,8 @@ }, "node_modules/marked-terminal": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-5.1.1.tgz", - "integrity": "sha512-+cKTOx9P4l7HwINYhzbrBSyzgxO2HaHKGZGuB1orZsMIgXYaJyfidT81VXRdpelW/PcHEWxywscePVgI/oUF6g==", "dev": true, + "license": "MIT", "dependencies": { "ansi-escapes": "^5.0.0", "cardinal": "^2.1.1", @@ -5661,9 +5240,8 @@ }, "node_modules/marked-terminal/node_modules/chalk": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", - "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -5673,9 +5251,8 @@ }, "node_modules/meow": { "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/minimist": "^1.2.0", "camelcase-keys": "^6.2.2", @@ -5698,9 +5275,8 @@ }, "node_modules/meow/node_modules/type-fest": { "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -5710,24 +5286,21 @@ }, "node_modules/merge-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, + "dev": true, + "license": "MIT" + }, "node_modules/merge2": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/micromatch": { "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, + "license": "MIT", "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -5738,9 +5311,8 @@ }, "node_modules/mime": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", "dev": true, + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -5750,27 +5322,24 @@ }, "node_modules/mimic-fn": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/min-indent": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -5780,18 +5349,16 @@ }, "node_modules/minimist": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/minimist-options": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, + "license": "MIT", "dependencies": { "arrify": "^1.0.1", "is-plain-obj": "^1.1.0", @@ -5803,9 +5370,8 @@ }, "node_modules/mkdirp": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, + "license": "MIT", "bin": { "mkdirp": "bin/cmd.js" }, @@ -5815,57 +5381,49 @@ }, "node_modules/modify-values": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", - "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/natural-compare": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/natural-compare-lite": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/neo-async": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/nerf-dart": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/nerf-dart/-/nerf-dart-1.0.0.tgz", - "integrity": "sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-emoji": { "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", "dev": true, + "license": "MIT", "dependencies": { "lodash": "^4.17.21" } }, "node_modules/node-fetch": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", - "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", "dev": true, + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -5883,15 +5441,13 @@ }, "node_modules/node-releases": { "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/normalize-package-data": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", @@ -5904,9 +5460,8 @@ }, "node_modules/normalize-package-data/node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -5916,9 +5471,8 @@ }, "node_modules/normalize-package-data/node_modules/semver": { "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -5931,15 +5485,13 @@ }, "node_modules/normalize-package-data/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/normalize-url": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", - "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -5949,8 +5501,6 @@ }, "node_modules/npm": { "version": "9.6.5", - "resolved": "https://registry.npmjs.org/npm/-/npm-9.6.5.tgz", - "integrity": "sha512-0SYs9lz1ND7V3+Lz6EbsnUdZ4OxjQOHbaIKdWd8OgsbZ2hCC2ZeiXMEaBEPEVBaILW+huFA0pJ1YME+52iZI5g==", "bundleDependencies": [ "@isaacs/string-locale-compare", "@npmcli/arborist", @@ -6020,6 +5570,13 @@ "write-file-atomic" ], "dev": true, + "license": "Artistic-2.0", + "workspaces": [ + "docs", + "smoke-tests", + "mock-registry", + "workspaces/*" + ], "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/arborist": "^6.2.8", @@ -6098,9 +5655,8 @@ }, "node_modules/npm-run-path": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -8934,18 +8490,16 @@ }, "node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, + "license": "ISC", "dependencies": { "wrappy": "1" } }, "node_modules/onetime": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -8958,9 +8512,8 @@ }, "node_modules/optionator": { "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, + "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -8975,9 +8528,8 @@ }, "node_modules/p-each-series": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-3.0.0.tgz", - "integrity": "sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -8987,9 +8539,8 @@ }, "node_modules/p-filter": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", - "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", "dev": true, + "license": "MIT", "dependencies": { "p-map": "^2.0.0" }, @@ -8999,18 +8550,16 @@ }, "node_modules/p-is-promise": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", - "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -9023,9 +8572,8 @@ }, "node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -9038,18 +8586,16 @@ }, "node_modules/p-map": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/p-reduce": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-3.0.0.tgz", - "integrity": "sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -9059,9 +8605,8 @@ }, "node_modules/p-retry": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/retry": "0.12.0", "retry": "^0.13.1" @@ -9072,18 +8617,16 @@ }, "node_modules/p-try": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -9093,9 +8636,8 @@ }, "node_modules/parse-json": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -9111,57 +8653,50 @@ }, "node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/path-key": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-parse": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-type": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/picocolors": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -9171,18 +8706,16 @@ }, "node_modules/pify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/pkg-conf": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", - "integrity": "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^2.0.0", "load-json-file": "^4.0.0" @@ -9193,9 +8726,8 @@ }, "node_modules/pkg-conf/node_modules/find-up": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^2.0.0" }, @@ -9205,9 +8737,8 @@ }, "node_modules/pkg-conf/node_modules/locate-path": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" @@ -9218,9 +8749,8 @@ }, "node_modules/pkg-conf/node_modules/p-limit": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^1.0.0" }, @@ -9230,9 +8760,8 @@ }, "node_modules/pkg-conf/node_modules/p-locate": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^1.1.0" }, @@ -9242,48 +8771,42 @@ }, "node_modules/pkg-conf/node_modules/path-exists": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/prelude-ls": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/process-nextick-args": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/proto-list": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/punycode": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/q": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6.0", "teleport": ">=0.2.0" @@ -9291,8 +8814,6 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -9307,22 +8828,21 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/quick-lru": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/rc": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -9335,18 +8855,16 @@ }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/read-pkg": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, + "license": "MIT", "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", @@ -9359,9 +8877,8 @@ }, "node_modules/read-pkg-up": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", @@ -9376,9 +8893,8 @@ }, "node_modules/read-pkg-up/node_modules/find-up": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -9389,9 +8905,8 @@ }, "node_modules/read-pkg-up/node_modules/locate-path": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -9401,9 +8916,8 @@ }, "node_modules/read-pkg-up/node_modules/p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -9416,9 +8930,8 @@ }, "node_modules/read-pkg-up/node_modules/p-locate": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -9428,33 +8941,29 @@ }, "node_modules/read-pkg-up/node_modules/p-try": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/read-pkg-up/node_modules/type-fest": { "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } }, "node_modules/read-pkg/node_modules/hosted-git-info": { "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/read-pkg/node_modules/normalize-package-data": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -9464,27 +8973,24 @@ }, "node_modules/read-pkg/node_modules/semver": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/read-pkg/node_modules/type-fest": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } }, "node_modules/readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -9497,9 +9003,8 @@ }, "node_modules/redent": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, + "license": "MIT", "dependencies": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" @@ -9510,24 +9015,21 @@ }, "node_modules/redeyed": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", - "integrity": "sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==", "dev": true, + "license": "MIT", "dependencies": { "esprima": "~4.0.0" } }, "node_modules/regenerate": { "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/regenerate-unicode-properties": { "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", "dev": true, + "license": "MIT", "dependencies": { "regenerate": "^1.4.2" }, @@ -9537,18 +9039,16 @@ }, "node_modules/regenerator-transform": { "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.8.4" } }, "node_modules/regexpp": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -9558,9 +9058,8 @@ }, "node_modules/regexpu-core": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", @@ -9575,9 +9074,8 @@ }, "node_modules/registry-auth-token": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", - "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", "dev": true, + "license": "MIT", "dependencies": { "@pnpm/npm-conf": "^2.1.0" }, @@ -9587,9 +9085,8 @@ }, "node_modules/regjsparser": { "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "jsesc": "~0.5.0" }, @@ -9599,8 +9096,6 @@ }, "node_modules/regjsparser/node_modules/jsesc": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", "dev": true, "bin": { "jsesc": "bin/jsesc" @@ -9608,18 +9103,16 @@ }, "node_modules/require-directory": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/resolve": { "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dev": true, + "license": "MIT", "dependencies": { "is-core-module": "^2.9.0", "path-parse": "^1.0.7", @@ -9634,27 +9127,24 @@ }, "node_modules/resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/retry": { "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/reusify": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -9662,9 +9152,8 @@ }, "node_modules/rimraf": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -9677,9 +9166,8 @@ }, "node_modules/rollup": { "version": "3.19.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.19.1.tgz", - "integrity": "sha512-lAbrdN7neYCg/8WaoWn/ckzCtz+jr70GFfYdlf50OF7387HTg+wiuiqJRFYawwSPpqfqDNYqK7smY/ks2iAudg==", "dev": true, + "license": "MIT", "bin": { "rollup": "dist/bin/rollup" }, @@ -9693,8 +9181,6 @@ }, "node_modules/run-parallel": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -9710,28 +9196,27 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, - "optional": true + "license": "MIT", + "optional": true, + "peer": true }, "node_modules/semantic-release": { "version": "21.0.1", - "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-21.0.1.tgz", - "integrity": "sha512-UhGxTUXHJQCBFgEQRZszLOHDpMduDSHGq3Q+30Bu+g0GbXh/EW508+kuFHezP5m0mN8xINW8hooiR3dzSV5ZLA==", "dev": true, + "license": "MIT", "dependencies": { "@semantic-release/commit-analyzer": "^9.0.2", "@semantic-release/error": "^3.0.0", @@ -9771,9 +9256,8 @@ }, "node_modules/semantic-release/node_modules/aggregate-error": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", - "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", "dev": true, + "license": "MIT", "dependencies": { "clean-stack": "^4.0.0", "indent-string": "^5.0.0" @@ -9787,9 +9271,8 @@ }, "node_modules/semantic-release/node_modules/clean-stack": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", - "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "5.0.0" }, @@ -9802,9 +9285,8 @@ }, "node_modules/semantic-release/node_modules/escape-string-regexp": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -9814,9 +9296,8 @@ }, "node_modules/semantic-release/node_modules/execa": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz", - "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.1", @@ -9837,9 +9318,8 @@ }, "node_modules/semantic-release/node_modules/find-up": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^7.1.0", "path-exists": "^5.0.0" @@ -9853,9 +9333,8 @@ }, "node_modules/semantic-release/node_modules/hosted-git-info": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^7.5.1" }, @@ -9865,27 +9344,24 @@ }, "node_modules/semantic-release/node_modules/hosted-git-info/node_modules/lru-cache": { "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/semantic-release/node_modules/human-signals": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=14.18.0" } }, "node_modules/semantic-release/node_modules/indent-string": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -9895,9 +9371,8 @@ }, "node_modules/semantic-release/node_modules/is-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -9907,9 +9382,8 @@ }, "node_modules/semantic-release/node_modules/locate-path": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^6.0.0" }, @@ -9922,9 +9396,8 @@ }, "node_modules/semantic-release/node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -9934,9 +9407,8 @@ }, "node_modules/semantic-release/node_modules/mimic-fn": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -9946,9 +9418,8 @@ }, "node_modules/semantic-release/node_modules/npm-run-path": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^4.0.0" }, @@ -9961,9 +9432,8 @@ }, "node_modules/semantic-release/node_modules/onetime": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^4.0.0" }, @@ -9976,9 +9446,8 @@ }, "node_modules/semantic-release/node_modules/p-limit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^1.0.0" }, @@ -9991,9 +9460,8 @@ }, "node_modules/semantic-release/node_modules/p-locate": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^4.0.0" }, @@ -10006,18 +9474,16 @@ }, "node_modules/semantic-release/node_modules/path-exists": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/semantic-release/node_modules/path-key": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -10027,9 +9493,8 @@ }, "node_modules/semantic-release/node_modules/read-pkg": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-7.1.0.tgz", - "integrity": "sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==", "dev": true, + "license": "MIT", "dependencies": { "@types/normalize-package-data": "^2.4.1", "normalize-package-data": "^3.0.2", @@ -10045,9 +9510,8 @@ }, "node_modules/semantic-release/node_modules/read-pkg-up": { "version": "9.1.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-9.1.0.tgz", - "integrity": "sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^6.3.0", "read-pkg": "^7.1.0", @@ -10062,18 +9526,16 @@ }, "node_modules/semantic-release/node_modules/resolve-from": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/semantic-release/node_modules/semver": { "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -10086,9 +9548,8 @@ }, "node_modules/semantic-release/node_modules/strip-final-newline": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -10098,9 +9559,8 @@ }, "node_modules/semantic-release/node_modules/type-fest": { "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=12.20" }, @@ -10110,15 +9570,13 @@ }, "node_modules/semantic-release/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/semantic-release/node_modules/yocto-queue": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.20" }, @@ -10128,18 +9586,16 @@ }, "node_modules/semver": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/semver-diff": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", - "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.3.5" }, @@ -10152,9 +9608,8 @@ }, "node_modules/semver-diff/node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -10164,9 +9619,8 @@ }, "node_modules/semver-diff/node_modules/semver": { "version": "7.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -10179,15 +9633,13 @@ }, "node_modules/semver-diff/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/semver-regex": { "version": "4.0.5", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz", - "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -10197,9 +9649,8 @@ }, "node_modules/shebang-command": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -10209,24 +9660,21 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/signal-exit": { "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/signale": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz", - "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^2.3.2", "figures": "^2.0.0", @@ -10238,9 +9686,8 @@ }, "node_modules/signale/node_modules/figures": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.5" }, @@ -10250,33 +9697,29 @@ }, "node_modules/slash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/spawn-error-forwarder": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz", - "integrity": "sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/spdx-correct": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -10284,15 +9727,13 @@ }, "node_modules/spdx-exceptions": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true + "dev": true, + "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, + "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -10300,15 +9741,13 @@ }, "node_modules/spdx-license-ids": { "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", - "dev": true + "dev": true, + "license": "CC0-1.0" }, "node_modules/split": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", "dev": true, + "license": "MIT", "dependencies": { "through": "2" }, @@ -10318,18 +9757,16 @@ }, "node_modules/split2": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, + "license": "ISC", "dependencies": { "readable-stream": "^3.0.0" } }, "node_modules/split2/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -10341,9 +9778,8 @@ }, "node_modules/stream-combiner2": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", - "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==", "dev": true, + "license": "MIT", "dependencies": { "duplexer2": "~0.1.0", "readable-stream": "^2.0.2" @@ -10351,18 +9787,16 @@ }, "node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -10374,9 +9808,8 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -10386,27 +9819,24 @@ }, "node_modules/strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/strip-final-newline": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/strip-indent": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, + "license": "MIT", "dependencies": { "min-indent": "^1.0.0" }, @@ -10416,9 +9846,8 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -10428,9 +9857,8 @@ }, "node_modules/supports-color": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -10440,9 +9868,8 @@ }, "node_modules/supports-hyperlinks": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" @@ -10453,18 +9880,16 @@ }, "node_modules/supports-hyperlinks/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/supports-hyperlinks/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -10474,9 +9899,8 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -10486,18 +9910,16 @@ }, "node_modules/temp-dir": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/tempy": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.0.0.tgz", - "integrity": "sha512-B2I9X7+o2wOaW4r/CWMkpOO9mdiTRCxXNgob6iGvPmfPWgH/KyUD6Uy5crtWBxIBe3YrNZKR2lSzv1JJKWD4vA==", "dev": true, + "license": "MIT", "dependencies": { "is-stream": "^3.0.0", "temp-dir": "^2.0.0", @@ -10513,9 +9935,8 @@ }, "node_modules/tempy/node_modules/is-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -10525,9 +9946,8 @@ }, "node_modules/tempy/node_modules/type-fest": { "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=12.20" }, @@ -10537,39 +9957,34 @@ }, "node_modules/text-extensions": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10" } }, "node_modules/text-table": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/through2": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "3" } }, "node_modules/through2/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -10581,18 +9996,16 @@ }, "node_modules/to-fast-properties": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -10602,33 +10015,29 @@ }, "node_modules/tr46": { "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/traverse": { "version": "0.6.7", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", - "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/trim-newlines": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/tsutils": { "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^1.8.1" }, @@ -10641,15 +10050,13 @@ }, "node_modules/tsutils/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/type-check": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -10659,9 +10066,8 @@ }, "node_modules/type-fest": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -10671,9 +10077,8 @@ }, "node_modules/typescript": { "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -10684,9 +10089,8 @@ }, "node_modules/uglify-js": { "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", "dev": true, + "license": "BSD-2-Clause", "optional": true, "bin": { "uglifyjs": "bin/uglifyjs" @@ -10697,18 +10101,16 @@ }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/unicode-match-property-ecmascript": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, + "license": "MIT", "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" @@ -10719,27 +10121,24 @@ }, "node_modules/unicode-match-property-value-ecmascript": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/unicode-property-aliases-ecmascript": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/unique-string": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", - "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", "dev": true, + "license": "MIT", "dependencies": { "crypto-random-string": "^4.0.0" }, @@ -10752,23 +10151,19 @@ }, "node_modules/universal-user-agent": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/universalify": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.0.0" } }, "node_modules/update-browserslist-db": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", "dev": true, "funding": [ { @@ -10780,6 +10175,7 @@ "url": "https://tidelift.com/funding/github/npm/browserslist" } ], + "license": "MIT", "dependencies": { "escalade": "^3.1.1", "picocolors": "^1.0.0" @@ -10793,30 +10189,26 @@ }, "node_modules/uri-js": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } }, "node_modules/url-join": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/validate-npm-package-license": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, + "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -10824,15 +10216,13 @@ }, "node_modules/webidl-conversions": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/whatwg-url": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, + "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -10840,9 +10230,8 @@ }, "node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -10855,24 +10244,21 @@ }, "node_modules/word-wrap": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/wordwrap": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -10887,9 +10273,8 @@ }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -10902,9 +10287,8 @@ }, "node_modules/wrap-ansi/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -10914,45 +10298,39 @@ }, "node_modules/wrap-ansi/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/xtend": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4" } }, "node_modules/y18n": { "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/yallist": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/yargs": { "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -10968,27 +10346,24 @@ }, "node_modules/yargs-parser": { "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/yargs/node_modules/yargs-parser": { "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -10999,31 +10374,110 @@ "packages/app": { "name": "@mixxx-launchpad/app", "version": "1.0.0", + "extraneous": true, "license": "MIT", "dependencies": { - "@mixxx-launchpad/mixxx": "~1.0.0", + "@mixxx-launch/mixxx": "~1.0.0", "eventemitter3": "~5.0.0" } }, + "packages/common": { + "name": "@mixxx-launch/common", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "eventemitter3": "~5.0.0" + } + }, + "packages/control-app": { + "name": "@mixxx-launchpad/control-app", + "version": "1.0.0", + "extraneous": true, + "license": "MIT", + "dependencies": { + "@mixxx-launch/mixxx": "~1.0.0" + } + }, + "packages/control-xl-mk2": { + "name": "@mixxx-launchpad/control-xl-mk2", + "version": "1.0.0", + "extraneous": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.21.0", + "@mixxx-launchpad/control-app": "1.0.0" + } + }, + "packages/launchcontrol-common": { + "name": "@mixxx-launch/launchcontrol-common", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "@mixxx-launch/mixxx": "~1.0.0" + } + }, + "packages/launchcontrol-xl-mk2": { + "name": "@mixxx-launch/launchcontrol-xl-mk2", + "version": "1.0.0", + "dependencies": { + "@babel/runtime-corejs3": "^7.21.0", + "@mixxx-launch/launchcontrol-common": "1.0.0" + } + }, + "packages/launchpad-common": { + "name": "@mixxx-launch/launchpad-common", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "@mixxx-launch/mixxx": "~1.0.0", + "eventemitter3": "~5.0.0" + } + }, + "packages/launchpad-mini-mk3": { + "name": "@mixxx-launch/launchpad-mini-mk3", + "version": "1.0.0", + "dependencies": { + "@babel/runtime-corejs3": "^7.21.0", + "@mixxx-launch/launchpad-common": "1.0.0" + } + }, + "packages/launchpad-mk1": { + "name": "@mixxx-launch/launchpad-mk1", + "version": "1.0.0", + "dependencies": { + "@babel/runtime-corejs3": "^7.21.0", + "@mixxx-launch/launchpad-common": "1.0.0" + } + }, + "packages/launchpad-mk2": { + "name": "@mixxx-launch/launchpad-mk2", + "version": "1.0.0", + "dependencies": { + "@babel/runtime-corejs3": "^7.21.0", + "@mixxx-launch/launchpad-common": "1.0.0" + } + }, "packages/mini-mk3": { "name": "@mixxx-launchpad/mini-mk3", "version": "1.0.0", + "extraneous": true, "dependencies": { "@babel/runtime-corejs3": "^7.21.0", "@mixxx-launchpad/app": "1.0.0" } }, "packages/mixxx": { - "name": "@mixxx-launchpad/mixxx", + "name": "@mixxx-launch/mixxx", "version": "1.0.0", "license": "MIT", "dependencies": { + "@mixxx-launch/common": "~1.0.0", "eventemitter3": "~5.0.0" } }, "packages/mk1": { "name": "@mixxx-launchpad/mk1", "version": "1.0.0", + "extraneous": true, "dependencies": { "@babel/runtime-corejs3": "^7.21.0", "@mixxx-launchpad/app": "1.0.0" @@ -11032,20 +10486,11 @@ "packages/mk2": { "name": "@mixxx-launchpad/mk2", "version": "1.0.0", + "extraneous": true, "dependencies": { "@babel/runtime-corejs3": "^7.21.0", "@mixxx-launchpad/app": "1.0.0" } - }, - "packages/pro": { - "name": "@mixxx-launchpad/pro", - "version": "1.0.0", - "extraneous": true, - "dependencies": { - "@babel/runtime": "^7.3.1", - "@mixxx-launchpad/app": "1.0.0", - "lodash-es": "~4.17.14" - } } } } diff --git a/package.json b/package.json index 5cbd222..1dacf38 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "@mixxx-launchpad/project", + "name": "@mixxx-launch/project", "version": "0.0.0-development", "type": "module", "description": "Novation Launchpad mapping for Mixxx", @@ -38,16 +38,20 @@ "typescript": "^4.9.5" }, "workspaces": [ - "packages/app", + "packages/common", "packages/mixxx", - "packages/mk1", - "packages/mk2", - "packages/mini-mk3" + "packages/launchpad-common", + "packages/launchpad-mk1", + "packages/launchpad-mk2", + "packages/launchpad-mini-mk3", + "packages/launchcontrol-common", + "packages/launchcontrol-xl-mk2" ], "controllers": [ - "mk1", - "mk2", - "mini-mk3" + "launchpad-mk1", + "launchpad-mk2", + "launchpad-mini-mk3", + "launchcontrol-xl-mk2" ], "repository": { "type": "git", diff --git a/packages/app/src/index.ts b/packages/app/src/index.ts deleted file mode 100644 index bbe8e83..0000000 --- a/packages/app/src/index.ts +++ /dev/null @@ -1,45 +0,0 @@ -import config from './config' -import App from './App' - -import { MidiControlDef, MidiDevice, sendShortMsg } from '@mixxx-launchpad/mixxx' -import { RGBColor } from './color' - -export abstract class LaunchpadDevice extends MidiDevice { - abstract colors: { [key: string]: number } - - abstract supportsRGBColors: boolean - - sendColor(control: MidiControlDef, value: number): void { - sendShortMsg(control, value) - } - clearColor(control: MidiControlDef): void { - sendShortMsg(control, this.colors.black) - } - - abstract sendRGBColor(control: MidiControlDef, value: RGBColor): void - - constructor() { - super() - } - - onMount() { - super.onMount() - } - - onUnmount() { - super.onUnmount() - } -} - -export const useDevice = (device: LaunchpadDevice) => { - const app = new App(device, config) - device.addListener('mount', app.mount.bind(app)) - device.addListener('unmount', app.unmount.bind(app)) - return device -} - -export type ControllerControlDef = [number, number]; - -export const convertControlDef = (name: string, [status, midino]: ControllerControlDef): MidiControlDef => ({ name, status, midino }) - -export type { RGBColor } diff --git a/packages/app/src/util.ts b/packages/app/src/util.ts deleted file mode 100644 index ecaadea..0000000 --- a/packages/app/src/util.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { MidiMessage } from "@mixxx-launchpad/mixxx" - -export const posMod = (x: number, n: number): number => ((x % n) + n) % n - -export const range = (n: number) => [...Array(n).keys()] - -export const onAttack = (handler: (m: MidiMessage) => void): ((m: MidiMessage) => void) => ((m: MidiMessage) => { - if (m.value) handler(m) -}) diff --git a/packages/common/package.json b/packages/common/package.json new file mode 100644 index 0000000..9be8dbd --- /dev/null +++ b/packages/common/package.json @@ -0,0 +1,11 @@ +{ + "name": "@mixxx-launch/common", + "private": true, + "version": "1.0.0", + "main": "src/index.ts", + "author": "Midiparse", + "license": "MIT", + "dependencies": { + "eventemitter3": "~5.0.0" + } +} diff --git a/packages/common/src/index.ts b/packages/common/src/index.ts new file mode 100644 index 0000000..d9daf26 --- /dev/null +++ b/packages/common/src/index.ts @@ -0,0 +1,80 @@ +export const posMod = (x: number, n: number): number => ((x % n) + n) % n + +export const hexFormat = (n: number, d: number) => '0x' + n.toString(16).toUpperCase().padStart(d, '0') + +export const range = function * (n: number): Generator { + for (let i = 0; i < n; i++) { + yield i + } +} + +export const array = (n: Generator): T[] => [...n] + +export const map = function* (f: (x: T) => U, n: Generator): Generator { + for (const x of n) { + yield f(x) + } +} + +export class Lazy { + private _fn: () => T + private _cached: boolean + private _value: T | undefined + + constructor(fn: () => T) { + this._fn = fn + this._cached = false + this._value = undefined + } + + get value() : T { + if (!this._cached) { + this._value = this._fn() + this._cached = true + } + return this._value as T + } +} + +export const lazy = (fn: () => T): Lazy => new Lazy(fn) + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export const isLazy = (x: unknown): x is Lazy => x instanceof Lazy + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export type LazyObject = { + [Prop in keyof T]: Prop | Lazy +} + +export const lazyArray = (lazies: (Lazy | T)[]): T[] => new Proxy(lazies, { + get: function (target: Lazy[], prop: PropertyKey): unknown { + if (typeof (prop) === 'string' && + (Number.isInteger(Number(prop))) && + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + isLazy(target[prop]) + ) { + // key is an index + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + return target[prop].value + } else { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + return target[prop] + } + } +}) as T[] + +export const lazyObject = (obj: LazyObject): T => new Proxy(obj, { + get(target: LazyObject, prop: PropertyKey) { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + const value = target[prop] + if (isLazy(value)) { + return value.value + } + return value + }, +}) as T + diff --git a/packages/mk1/tsconfig.json b/packages/common/tsconfig.json similarity index 51% rename from packages/mk1/tsconfig.json rename to packages/common/tsconfig.json index fc07df0..0b72ea4 100644 --- a/packages/mk1/tsconfig.json +++ b/packages/common/tsconfig.json @@ -4,6 +4,7 @@ "composite": true, "outDir": "dist" }, - "references": [{ "path": "../mixxx" }, { "path": "../app" }], - "include": ["controller.json", "src"] + "include": [ + "src" + ] } diff --git a/packages/launchcontrol-common/package.json b/packages/launchcontrol-common/package.json new file mode 100644 index 0000000..0ca6bdc --- /dev/null +++ b/packages/launchcontrol-common/package.json @@ -0,0 +1,11 @@ +{ + "name": "@mixxx-launch/launchcontrol-common", + "author": "Midiparse", + "license": "MIT", + "private": true, + "version": "1.0.0", + "main": "src/index.ts", + "dependencies": { + "@mixxx-launch/mixxx": "~1.0.0" + } +} diff --git a/packages/launchcontrol-common/src/device.ts b/packages/launchcontrol-common/src/device.ts new file mode 100644 index 0000000..16e94b3 --- /dev/null +++ b/packages/launchcontrol-common/src/device.ts @@ -0,0 +1,91 @@ +import { range } from "@mixxx-launch/common" +import { MidiComponent, MidiDevice } from "@mixxx-launch/mixxx" + +export abstract class LaunchControlDevice extends MidiDevice { + abstract colors: { [key: string]: number } + abstract numTemplates: number + + // LaunchControl control names follow the pattern "${template}.${controlKey}[.(on|off)]" where the note + // part is only used for note on/off controls. LED indexes here only use the controlKey part. + // Note that not every control has a LED. + abstract leds: { [controlKey: string]: number } + + sysex = true + + template = 0 + + constructor() { + super() + } + + // Reset the template to the default state, i.e turn off all LEDs. + abstract resetTemplate(template: number): void + + // Change the current template. + abstract changeTemplate(template: number): void + + // This method is intended to send SysEx messages to the light up LEDs, + // which should be preferred over sendShortMsg + // as it will work regardless of the current template, whereas, + // short messages not matching the current template are ignored by the device. + // This is important especially e.g when turning off a LEDs on a template change. + abstract sendColor(template: number, ledIndex: number, color: number): void + + // Try to parse a SysEx message and return the template number if it was a template change message + abstract handleTemplateChangeSysex(data: number[]): number | undefined + + handleSysex(data: number[]) { + const template = this.handleTemplateChangeSysex(data) + if (template != null) { + this.template = template + this.emit('template', template) + } + } + + onMount() { + super.onMount() + for (const i of range(this.numTemplates)) { + this.resetTemplate(i) + } + this.addListener('sysex', this.handleSysex.bind(this)) + this.changeTemplate(0) + } + + onUnmount() { + this.removeListener('sysex', this.handleSysex.bind(this)) + for (const i of range(this.numTemplates)) { + this.resetTemplate(i) + } + super.onUnmount() + } +} + + +// LCMidiComponent stands for LaunchControlMidiComponent and augments MidiComponent with +// the LaunchControl specific property of having a separate identifier for the LED when targeting with SysEx. +// The LaunchControl programmer manual suggests sending SysEx messages for lighting LEDs +// and they have a different MIDI control than their button/knob counterparts. +// Lighting LEDs with SysEx messages avoids the problem of the LaunchControl ignoring +// MIDI messages that don't match the current template. +export class LCMidiComponent extends MidiComponent { + template: number + led: number + + + // Use the note parameter to listen to note on/off events instead of control change events. This is required for + // certain controls like the mute/solo/arm buttons or channel controls. For reference, see the LaunchControl + // programmer manual or controller.json. + constructor(device: LaunchControlDevice, template: number, controlKey: string, note: "on" | "off" | null = null) { + const controlName = note ? `${template}.${controlKey}.${note}` : `${template}.${controlKey}` + super(device, device.controls[controlName]) + this.template = template + this.led = device.leds[controlKey] + } + + onUnmount() { + // This prevents flickering of LEDs when switching templates. + this._device.sendColor(this.template, this.led, this._device.colors.black) + super.onUnmount() + } + +} diff --git a/packages/launchcontrol-common/src/effectParameter.ts b/packages/launchcontrol-common/src/effectParameter.ts new file mode 100644 index 0000000..a30a458 --- /dev/null +++ b/packages/launchcontrol-common/src/effectParameter.ts @@ -0,0 +1,186 @@ +import { array, map, range } from "@mixxx-launch/common" +import { Component, MidiMessage, sendShortMsg } from "@mixxx-launch/mixxx" +import { ControlComponent, EffectDef, EffectParameterDef, getValue, root, setValue } from "@mixxx-launch/mixxx/src/Control" +import { LaunchControlDevice, LCMidiComponent } from "./device" + +const toEffectKnobRange = (value: number) => { + return value / 63.5 - 1 +} + +class EffectComponent extends Component { + effectDef: EffectDef + + private _loadedComponent: ControlComponent + private _enabledComponent: ControlComponent + private _midiComponents: LCMidiComponent[] + + private _device: LaunchControlDevice + private _params: EffectParameterDef[] + private _buttonParams: EffectParameterDef[] + + constructor(device: LaunchControlDevice, template: number, row: number, effectDef: EffectDef) { + super() + this.effectDef = effectDef + + this._device = device + this._params = [] + this._buttonParams = [] + + this._loadedComponent = new ControlComponent(this.effectDef.loaded) + this._loadedComponent.addListener('update', this.onChange.bind(this)) + + this._enabledComponent = new ControlComponent(this.effectDef.enabled) + this._enabledComponent.addListener('update', this.onChange.bind(this)) + + this._midiComponents = [] + + for (const i of range(8)) { + const midiComponent = new LCMidiComponent(device, template, `knob.${row}.${7 - i}`) + midiComponent.addListener('midi', ({ value }: MidiMessage) => { + if (i < this._params.length) { + setValue(this._params[i].value, toEffectKnobRange(value)) + } else if (i < this._params.length + this._buttonParams.length) { + setValue(this._buttonParams[i - this._params.length].button_value, Math.round(value - 127)) + } + }) + this._midiComponents.push(midiComponent) + } + } + + onChange() { + const numParams = getValue(this.effectDef.num_parameters) + const numButtonParams = getValue(this.effectDef.num_button_parameters) + this._params = array(map((i) => this.effectDef.parameters[i], range(numParams))) + this._buttonParams = array(map((i) => this.effectDef.parameters[i], range(numButtonParams))) + + for (const i of range(8)) { + const ledName = this._midiComponents[i].control.name.replace('knob', 'led') + const ledControl = this._device.controls[ledName] + if (i < this._params.length) { + sendShortMsg(ledControl, this._device.colors.lo_green) + } else if (i < this._params.length + this._buttonParams.length) { + sendShortMsg(ledControl, this._device.colors.lo_red) + } else { + sendShortMsg(ledControl, this._device.colors.black) + } + } + } + + onMount() { + super.onMount() + this._loadedComponent.mount() + this._enabledComponent.mount() + for (const midiComponent of this._midiComponents) { + midiComponent.mount() + } + } + + onUnmount() { + for (const midiComponent of this._midiComponents) { + midiComponent.unmount() + } + this._enabledComponent.unmount() + this._loadedComponent.unmount() + super.onUnmount() + } +} + +export class EffectParameterPage extends Component { + private _device: LaunchControlDevice + private _template: number + private _children: Component[] + private _selectors: Component[] + private _selectedEffectUnit: number + + constructor(device: LaunchControlDevice, template: number) { + super() + this._device = device + this._template = template + this._children = [] + this._selectors = [] + + const prevEffectUnit = new LCMidiComponent(device, this._template, 'up') + + this._selectedEffectUnit = 0 + + const drawPrevLed = () => { + if (this._selectedEffectUnit > 0) { + sendShortMsg(device.controls[`${this._template}.up`], device.colors.hi_red) + } else { + sendShortMsg(device.controls[`${this._template}.up`], device.colors.black) + } + } + + const drawNextLed = () => { + if (this._selectedEffectUnit < 3) { + sendShortMsg(device.controls[`${this._template}.down`], device.colors.hi_red) + } else { + sendShortMsg(device.controls[`${this._template}.down`], device.colors.black) + } + } + + prevEffectUnit.addListener('mount', () => { + drawPrevLed() + }) + + prevEffectUnit.addListener('midi', ({ value }: MidiMessage) => { + if (value) { + if (this._selectedEffectUnit > 0) { + this._selectedEffectUnit -= 1 + drawPrevLed() + drawNextLed() + this.changeEffectUnit() + } + } + }) + + this._selectors.push(prevEffectUnit) + + const nextEffectUnit = new LCMidiComponent(device, this._template, 'down') + + nextEffectUnit.addListener('mount', () => { + drawNextLed() + }) + + nextEffectUnit.addListener('midi', ({ value }: MidiMessage) => { + if (value) { + if (this._selectedEffectUnit < 3) { + this._selectedEffectUnit += 1 + drawPrevLed() + drawNextLed() + this.changeEffectUnit() + } + } + }) + + this._selectors.push(nextEffectUnit) + + const unit = 0 + + for (const i of range(3)) { + const component = new EffectComponent(device, this._template, i, root.effectRacks[0].effect_units[unit].effects[i]) + this._children.push(component) + } + } + + changeEffectUnit() { + for (const i of range(3)) { + this._children[i].unmount() + this._children[i] = new EffectComponent(this._device, this._template, i, root.effectRacks[0].effect_units[this._selectedEffectUnit].effects[i]) + this._children[i].mount() + } + } + + onMount() { + super.onMount() + this._children.forEach((child) => child.mount()) + this._selectors.forEach((child) => child.mount()) + } + + onUnmount() { + this._children.forEach((child) => child.unmount()) + this._selectors.forEach((child) => child.unmount()) + super.onUnmount() + }} + +export const makeEffectParameterPage = (template: number) => (device: LaunchControlDevice) => new EffectParameterPage(device, template) diff --git a/packages/launchcontrol-common/src/index.ts b/packages/launchcontrol-common/src/index.ts new file mode 100644 index 0000000..0f9ee6d --- /dev/null +++ b/packages/launchcontrol-common/src/index.ts @@ -0,0 +1,427 @@ +import { map, range } from '@mixxx-launch/common' +import { absoluteNonLin, channelControlDefs, Component, ControlComponent, MidiControlDef, MidiMessage, sendShortMsg, setValue } from "@mixxx-launch/mixxx" +import { ControlMessage, createEffectUnitChannelDef, getValue, numDecks as mixxxNumDecks, root } from "@mixxx-launch/mixxx/src/Control" +import { LaunchControlDevice, LCMidiComponent } from './device' +import { makeEffectParameterPage } from './effectParameter' +import { makePadSelector } from './padSelector' +import { MakePage, makePager } from './pager' + +export type MakeComponent = (device: LaunchControlDevice) => Component + +export enum Eq3Channel { + Low, + Mid, + High, +} + +export const eq3 = (deck: number, col: number) => { + return [ + [`knob.0.${col}`, { type: "eq3", params: { channel: Eq3Channel.High, deck: deck, parameter: 'value' } }], + [`knob.1.${col}`, { type: "eq3", params: { channel: Eq3Channel.Mid, deck: deck, parameter: 'value' } }], + [`knob.2.${col}`, { type: "eq3", params: { channel: Eq3Channel.Low, deck: deck, parameter: 'value' } }], + ] as const +} + + +export const eq2kill = (deck: number, col: number) => { + return [ + [`pad.0.${col}`, { type: "eq", params: { channel: Eq3Channel.High, parameter: 'kill', deck: deck } }], + [`pad.1.${col}`, { type: "eq", params: { channel: Eq3Channel.Low, parameter: 'kill', deck: deck } }], + ] as const +} + +export const gain = (deck: number, col: number) => { + return [ + [`fader.0.${col}`, { type: "gain", params: { deck: deck } }], + ] as const +} + +export const effectEssentials = (unit: number, col: number) => { + return [ + [`knob.0.${col}`, { type: "effect_unit", params: { unit, parameter: 'super1', deck: 0 } }], + [`knob.1.${col}`, { type: "effect", params: { unit, effect: 0, parameter: 'meta', deck: 0 } }], + [`knob.2.${col}`, { type: "effect", params: { unit, effect: 1, parameter: 'meta', deck: 0 } }], + [`fader.0.${col}`, { type: "effect_unit", params: { unit, parameter: 'dry_wet', deck: 0 } }], + [`pad.0.${col}`, { type: "effect", params: { unit, effect: 0, parameter: 'enabled', deck: 0 } }], + [`pad.1.${col}`, { type: "effect", params: { unit, effect: 1, parameter: 'enabled', deck: 0 } }], + ] as const +} + +const controlIndex = { + 'eq3': (channel: Eq3Channel, deck: number, parameter: 'value' | 'kill' = 'value') => { + return parameter === 'value' ? root.equalizerRacks[0].effect_units[deck].effects[0].parameters[channel].value : + root.equalizerRacks[0].effect_units[deck].effects[0].parameters[channel].button_value + }, + 'gain': (deck: number) => { + return channelControlDefs[deck].volume + }, + // 'effect_unit': (unit: number, parameter: EffectUnitKey) => { + // return channelControlDefs[0].effectUnits[unit][parameter] + // }, + // 'effect': (unit: number, effect: number, parameter: EffectKey) => { + // return channelControlDefs[0].effectUnits[unit].effects[effect][parameter] + // } +} + +const container = (children: Component[]) => { + return new class extends Component { + children: Component[] + + constructor() { + super() + this.children = children + } + + onMount() { + super.onMount() + for (const child of this.children) { + child.mount() + } + + } + onUnmount() { + for (const child of this.children) { + child.unmount() + } + super.onUnmount() + } + }() +} + + +type VerticalGroupParams = { + template: number, + columnOffset: number, + numDecks: number, +} + +const defaultVerticalGroupParams: VerticalGroupParams = { + template: 0, + columnOffset: 0, + numDecks: mixxxNumDecks, +} + + +const makeEq3 = ({ template, columnOffset, numDecks }: VerticalGroupParams = defaultVerticalGroupParams) => (device: LaunchControlDevice): Component[] => { + const children: Component[] = [] + + const channelColorPalette = [ + device.colors.hi_red, + device.colors.hi_yellow, + device.colors.hi_green, + device.colors.hi_amber, + ] + + for (const i of range(numDecks)) { + const col = i + columnOffset + const eqs = eq3(col, col) + for (const [midi, cd] of eqs) { + const control = controlIndex[cd.type](cd.params.channel, cd.params.deck, cd.params.parameter) + const controlComponent = new ControlComponent(control, true) + children.push(controlComponent) + + + const midiComponent = new LCMidiComponent(device, template, midi) + midiComponent.addListener('midi', ({ value }: MidiMessage) => { + setValue(control, absoluteNonLin(value, 0, 1, 4)) + }) + midiComponent.addListener('mount', () => { + device.sendColor(template, midiComponent.led, channelColorPalette[i % 4]) + }) + children.push(midiComponent) + } + } + + return children +} + +const makeGain = ({ template, columnOffset, numDecks }: VerticalGroupParams = defaultVerticalGroupParams) => (device: LaunchControlDevice): Component[] => { + const children: Component[] = [] + + for (const i of range(numDecks)) { + const col = i + columnOffset + const gains = gain(col, col) + + for (const [midi, cd] of gains) { + const control = controlIndex[cd.type](cd.params.deck) + + const controlComponent = new ControlComponent(control, true) + + children.push(controlComponent) + + const midiComponent = new LCMidiComponent(device, template, midi) + + midiComponent.addListener('midi', ({ value }: MidiMessage) => { + setValue(control, value / 127) + }) + + children.push(midiComponent) + } + } + return children +} + +const makeKillers = (template: number) => (device: LaunchControlDevice) => { + const children: Component[] = [] + + for (const i of range(4)) { + const row = ~~(i / 2) + const col = i % 2 + + const controls = [...map(j => root.equalizerRacks[0].effect_units[i].effects[0].parameters[2 - j].button_value, range(3)), root.quickEffectRacks[0].effect_units[i].enabled] + for (const j of range(4)) { + const midiComponent = new LCMidiComponent(device, template, `pad.${row}.${(col * 4) + j}`, 'on') + + midiComponent.addListener('midi', ({ value }: MidiMessage) => { + if (value) { + setValue(controls[j], 1 - getValue(controls[j])) + } + }) + children.push(midiComponent) + + const controlComponent = new ControlComponent(controls[j]) + + controlComponent.addListener('update', ({ value }: ControlMessage) => { + device.sendColor(template, midiComponent.led, value ? device.colors.hi_red : device.colors.black) + }) + children.push(controlComponent) + + } + } + return container(children) +} + + +// given a MakePage, creates a MakeComponent, which rerenders the page when the template changes +// by simply reinitializing the page with the new template +const statelessFreePage = (makePage: MakePage): MakeComponent => (device: LaunchControlDevice): Component => { + return new class extends Component { + _device: LaunchControlDevice + _inner: Component | null + constructor(device: LaunchControlDevice) { + super() + this._device = device + this._inner = null + } + + onTemplate(template: number) { + if (this._inner) { + this._inner.unmount() + this._inner = makePage(template)(this._device) + this._inner.mount() + } + } + onMount() { + super.onMount() + this._inner = makePage(this._device.template)(this._device) + this._inner.mount() + this._device.addListener('template', this.onTemplate.bind(this)) + } + + onUnmount() { + this._device.removeListener('template', this.onTemplate.bind(this)) + if (this._inner) { + this._inner.unmount() + this._inner = null + } + super.onUnmount() + } + }(device) +} + +const makeEffectSelector = (template: number) => (device: LaunchControlDevice) => { + const children: Component[] = [] + + for (const i of range(4)) { + const row = ~~(i / 2) + const col = i % 2 + for (const j of range(4)) { + + const midiComponent = new LCMidiComponent(device, template, `pad.${row}.${(col * 4) + j}`, 'on') + + midiComponent.addListener('midi', ({ value }: MidiMessage) => { + if (value) { + setValue(control, 1 - getValue(control)) + } + }) + children.push(midiComponent) + + const control = createEffectUnitChannelDef( + "EffectRack1", `EffectUnit${j + 1}`, `Channel${i + 1}`, + ).enable + const controlComponent = new ControlComponent(control) + controlComponent.addListener('update', ({ value }: ControlMessage) => { + device.sendColor(template, midiComponent.led, value ? device.colors.hi_yellow : device.colors.black) + }) + children.push(controlComponent) + } + } + + return container(children) +} + +const makeEnablers = (template: number) => (device: LaunchControlDevice) => { + const children: Component[] = [] + + for (const i of range(4)) { + const row = ~~(i / 2) + const col = i % 2 + const controls = [...map(j => root.effectRacks[0].effect_units[i].effects[j].enabled, range(3)), null] + controls.forEach((control, j) => { + const midiControl = device.controls[`${template}.pad.${row}.${(col * 4) + j}.on`] + const midiComponent = new LCMidiComponent(device, template, `pad.${row}.${(col * 4) + j}`, 'on') + + children.push(midiComponent) + if (!control) { + sendShortMsg(midiControl, device.colors.black) + midiComponent.addListener('mount', () => { + device.sendColor(template, midiComponent.led, device.colors.black) + }) + return + } + + midiComponent.addListener('midi', ({ value }: MidiMessage) => { + if (value) { + setValue(control, 1 - getValue(control)) + } + }) + const controlComponent = new ControlComponent(control) + controlComponent.addListener('update', ({ value }: ControlMessage) => { + device.sendColor(template, midiComponent.led, value ? device.colors.hi_green : device.colors.black) + }) + children.push(controlComponent) + + }) + } + return container(children) +} + +const makeEffectSuper = ({ template, columnOffset, numDecks }: VerticalGroupParams = defaultVerticalGroupParams) => (device: LaunchControlDevice): Component[] => { + const children: Component[] = [] + + const channelColorPalette = [ + device.colors.hi_red, + device.colors.hi_yellow, + device.colors.hi_green, + device.colors.hi_amber, + ] + + for (const i of range(numDecks)) { + for (const j of range(3)) { + const effect = root.effectRacks[0].effect_units[i].effects[j] + const meta = new ControlComponent(effect.meta, true) + children.push(meta) + + const midiComponent = new LCMidiComponent(device, template, `knob.${j}.${i + columnOffset}`) + midiComponent.addListener('midi', ({ value }: MidiMessage) => { + setValue(effect.meta, value / 127) + }) + children.push(midiComponent) + + const enabled = new ControlComponent(effect.enabled) + enabled.addListener('update', ({ value }: ControlMessage) => { + device.sendColor(template, midiComponent.led, value ? channelColorPalette[i % 4] : device.colors.black) + }) + + children.push(enabled) + + } + } + return children +} + +const makeEffectMix = ({ template, columnOffset, numDecks }: VerticalGroupParams = defaultVerticalGroupParams) => (device: LaunchControlDevice): Component[] => { + const children: Component[] = [] + for (const i of range(numDecks)) { + const effectUnit = root.effectRacks[0].effect_units[i] + const mix = new ControlComponent(effectUnit.mix, true) + children.push(mix) + + const midiComponent = new LCMidiComponent(device, template, `fader.0.${ i + columnOffset }`) + midiComponent.addListener('midi', ({ value }: MidiMessage) => { + setValue(effectUnit.mix, value / 127) + }) + children.push(midiComponent) + } + + return children +} + + + +// const makeEffectUnit = (device: LaunchControlDevice) => { +// const children: Component[] = [] + +// // const effects = [] + +// // const nextEffectUnit = new LCMidiComponent(device, device.controls[`${template}.down`]) + +// // nextEffectUnit.addListener('midi', ({ value }: MidiMessage) => { +// // if (value) { +// // const nextUnit = (unit + 1) % 4 +// // forEach((i) => { +// // const effectUnit = new EffectComponent(device, template, i, 'EffectRack1', `EffectUnit${nextUnit + 1}`, `Effect${i + 1}`) +// // effects.push(effectUnit) +// // }, range(3)) +// // } +// // }) + +// // const prevEffectUnit = new LCMidiComponent(device, device.controls[`${template}.up`]) + +// const prevEffectUnit = new LCMidiComponent(device, device.controls[`${template}.up`]) + +// prevEffectUnit.addListener('mount', ({ value }: MidiMessage) => { +// sendShortMsg(device.controls[`${template}.up`], device.colors.hi_red) +// }) + +// children.push(prevEffectUnit) + + +// forEach((i) => { +// const component = new EffectComponent(device, template, i, root.effectRacks[0].effect_units[unit].effects[i]) +// children.push(component) +// }, range(3)) + +// return container(children) +// } + +// const makeEqPage = (template: number) => (device: LaunchControlDevice) => { +// const children: Component[] = [] +// const eqs = container(makeEq3({ template, columnOffset: 0, numDecks: mixxxNumDecks })(device)) +// children.push(eqs) +// const gains = container(makeGain({ template, columnOffset: 0, numDecks: mixxxNumDecks })(device)) +// children.push(gains) +// return container(children) +// } + +const makeKitchenSinkPage = (template: number) => (device: LaunchControlDevice) => container([ + ...makeEq3({ template, columnOffset: 0, numDecks: mixxxNumDecks })(device), + ...makeGain({ template, columnOffset: 0, numDecks: mixxxNumDecks })(device), + ...makeEffectSuper({ template, columnOffset: 4, numDecks: mixxxNumDecks })(device), + ...makeEffectMix({ template, columnOffset: 4, numDecks: mixxxNumDecks })(device), +]) + +const makeApp = (device: LaunchControlDevice) => container([ + makePager([makeKitchenSinkPage, makeEffectParameterPage], 16)(device), + makePager( + [() => makePadSelector([ + statelessFreePage(makeEffectSelector), + statelessFreePage(makeKillers), + statelessFreePage(makeEnablers), + ])] + )(device), +]) + +export type ControllerControlDef = [number, number]; + +export const convertControlDef = (name: string, [status, midino]: ControllerControlDef): MidiControlDef => ({ name, status, midino }) + +export const useDevice = (device: LaunchControlDevice) => { + const app = makeApp(device) + device.addListener('mount', app.mount.bind(app)) + device.addListener('unmount', app.unmount.bind(app)) + return device +} + +export { LaunchControlDevice } + diff --git a/packages/launchcontrol-common/src/padSelector.ts b/packages/launchcontrol-common/src/padSelector.ts new file mode 100644 index 0000000..fd5b3c3 --- /dev/null +++ b/packages/launchcontrol-common/src/padSelector.ts @@ -0,0 +1,86 @@ +import { lazy, Lazy } from "@mixxx-launch/common" +import { Component, MidiMessage } from "@mixxx-launch/mixxx" +import { MakeComponent } from "." +import { LaunchControlDevice, LCMidiComponent } from "./device" + +export const makePadSelector = (pads: [MakeComponent, MakeComponent, MakeComponent], initialSelection: number = 0) => (device: LaunchControlDevice) => new PadSelector(device, pads, initialSelection) + +export default class PadSelector extends Component { + private _pads: Lazy[] + private _device: LaunchControlDevice + private _selected: number + private _selectors: Component[] + + constructor( + device: LaunchControlDevice, + pads: [MakeComponent, MakeComponent, MakeComponent], + initialSelection: number = 0 + ) { + super() + this._pads = pads.map((page) => lazy(() => page(this._device))) + this._selected = initialSelection + this._device = device + this._selectors = [] + } + + assignButtonComponents(template: number) { + const btns = ['mute', 'solo', 'arm'] + const buttonComponents = btns.map((btn) => + new LCMidiComponent(this._device, template, btn, 'on') + ) + + buttonComponents.forEach((btn, i) => { + btn.addListener('mount', () => { + this._device.sendColor(template, btn.led, i === this._selected ? this._device.colors.hi_yellow : this._device.colors.black) + }) + btn.addListener('midi', ({ value }: MidiMessage) => { + if (value && i !== this._selected) { + buttonComponents.forEach((btn, j) => { + this._device.sendColor(template, btn.led, j === i ? this._device.colors.hi_yellow : this._device.colors.black) + }) + this._pads[this._selected].value.unmount() + this._selected = i + this._pads[this._selected].value.mount() + } + }) + // btn.addListener('unmount', () => { + // this._device.sendColor(template, btn.led, this._device.colors.black) + // }) + + }) + this._selectors = buttonComponents + } + + onTemplate(template: number) { + if (this.mounted) { + for (const buttonComponent of this._selectors) { + buttonComponent.unmount() + } + } + this.assignButtonComponents(template) + if (this.mounted) { + for (const buttonComponent of this._selectors) { + buttonComponent.mount() + } + } + } + + onMount() { + super.onMount() + this.onTemplate(this._device.template) + this._pads[this._selected].value.mount() + for (const buttonComponent of this._selectors) { + buttonComponent.mount() + } + this._device.addListener('template', this.onTemplate.bind(this)) + } + + onUnmount() { + this._device.removeListener('template', this.onTemplate.bind(this)) + for (const buttonComponent of this._selectors) { + buttonComponent.unmount() + } + this._pads[this._selected].value.unmount() + super.onUnmount() + } +} diff --git a/packages/launchcontrol-common/src/pager.ts b/packages/launchcontrol-common/src/pager.ts new file mode 100644 index 0000000..cc13341 --- /dev/null +++ b/packages/launchcontrol-common/src/pager.ts @@ -0,0 +1,54 @@ +import { lazy, Lazy } from "@mixxx-launch/common" +import { Component } from "@mixxx-launch/mixxx" +import { LaunchControlDevice } from "./device" + +// For a single template +export type MakePage = (template: number) => (device: LaunchControlDevice) => Component + +export const makePager = (pages: MakePage[], repeat: number | null = null) => (device: LaunchControlDevice) => new Pager(device, pages, repeat) + +export class Pager extends Component { + pages: Lazy[] + repeat: number + + private _selected: number | null + private _device: LaunchControlDevice + + constructor(device: LaunchControlDevice, pages: MakePage[], repeat: number | null = null) { + super() + this._device = device + this._selected = 0 + this.repeat = repeat || pages.length + this.pages = pages.map((page, i) => lazy(() => page(i)(this._device))) + } + + onTemplate(template: number) { + const newSelected = template % this.repeat < this.pages.length ? template % this.repeat : null + if (newSelected !== this._selected) { + if (this.mounted && this._selected != null) { + this.pages[this._selected].value.unmount() + } + this._selected = newSelected + if (this.mounted && this._selected != null) { + this.pages[this._selected].value.mount() + } + } + } + + onMount() { + super.onMount() + this.onTemplate(this._device.template) + if (this._selected != null) { + this.pages[this._selected].value.mount() + } + this._device.addListener('template', this.onTemplate.bind(this)) + } + + onUnmount() { + this._device.removeListener('template', this.onTemplate.bind(this)) + if (this._selected != null) { + this.pages[this._selected].value.unmount() + } + super.onUnmount() + } +} diff --git a/packages/app/tsconfig.json b/packages/launchcontrol-common/tsconfig.json similarity index 69% rename from packages/app/tsconfig.json rename to packages/launchcontrol-common/tsconfig.json index 5bcb41c..0a0c970 100644 --- a/packages/app/tsconfig.json +++ b/packages/launchcontrol-common/tsconfig.json @@ -5,5 +5,9 @@ "outDir": "dist" }, "include": ["src"], - "references": [{ "path": "../mixxx" }] + "references": [ + { + "path": "../mixxx" + } + ] } diff --git a/packages/launchcontrol-xl-mk2/controller.json b/packages/launchcontrol-xl-mk2/controller.json new file mode 100644 index 0000000..ab1fe30 --- /dev/null +++ b/packages/launchcontrol-xl-mk2/controller.json @@ -0,0 +1,6472 @@ +{ + "device": "LaunchControl XL MK2", + "manufacturer": "Novation", + "global": "NLCXL2", + "sysex": true, + "controls": { + "0.up": [ + 176, + 104 + ], + "0.down": [ + 176, + 105 + ], + "0.left": [ + 176, + 106 + ], + "0.right": [ + 176, + 107 + ], + "0.device.on": [ + 144, + 105 + ], + "0.device.off": [ + 128, + 105 + ], + "0.mute.on": [ + 144, + 106 + ], + "0.mute.off": [ + 128, + 106 + ], + "0.solo.on": [ + 144, + 107 + ], + "0.solo.off": [ + 128, + 107 + ], + "0.arm.on": [ + 144, + 108 + ], + "0.arm.off": [ + 128, + 108 + ], + "0.knob.0.0": [ + 176, + 13 + ], + "0.knob.0.1": [ + 176, + 14 + ], + "0.knob.0.2": [ + 176, + 15 + ], + "0.knob.0.3": [ + 176, + 16 + ], + "0.knob.0.4": [ + 176, + 17 + ], + "0.knob.0.5": [ + 176, + 18 + ], + "0.knob.0.6": [ + 176, + 19 + ], + "0.knob.0.7": [ + 176, + 20 + ], + "0.knob.1.0": [ + 176, + 29 + ], + "0.knob.1.1": [ + 176, + 30 + ], + "0.knob.1.2": [ + 176, + 31 + ], + "0.knob.1.3": [ + 176, + 32 + ], + "0.knob.1.4": [ + 176, + 33 + ], + "0.knob.1.5": [ + 176, + 34 + ], + "0.knob.1.6": [ + 176, + 35 + ], + "0.knob.1.7": [ + 176, + 36 + ], + "0.knob.2.0": [ + 176, + 49 + ], + "0.knob.2.1": [ + 176, + 50 + ], + "0.knob.2.2": [ + 176, + 51 + ], + "0.knob.2.3": [ + 176, + 52 + ], + "0.knob.2.4": [ + 176, + 53 + ], + "0.knob.2.5": [ + 176, + 54 + ], + "0.knob.2.6": [ + 176, + 55 + ], + "0.knob.2.7": [ + 176, + 56 + ], + "0.led.0.0": [ + 144, + 13 + ], + "0.led.1.0": [ + 144, + 14 + ], + "0.led.2.0": [ + 144, + 15 + ], + "0.led.0.1": [ + 144, + 29 + ], + "0.led.1.1": [ + 144, + 30 + ], + "0.led.2.1": [ + 144, + 31 + ], + "0.led.0.2": [ + 144, + 45 + ], + "0.led.1.2": [ + 144, + 46 + ], + "0.led.2.2": [ + 144, + 47 + ], + "0.led.0.3": [ + 144, + 61 + ], + "0.led.1.3": [ + 144, + 62 + ], + "0.led.2.3": [ + 144, + 63 + ], + "0.led.0.4": [ + 144, + 77 + ], + "0.led.1.4": [ + 144, + 78 + ], + "0.led.2.4": [ + 144, + 79 + ], + "0.led.0.5": [ + 144, + 93 + ], + "0.led.1.5": [ + 144, + 94 + ], + "0.led.2.5": [ + 144, + 95 + ], + "0.led.0.6": [ + 144, + 109 + ], + "0.led.1.6": [ + 144, + 110 + ], + "0.led.2.6": [ + 144, + 111 + ], + "0.led.0.7": [ + 144, + 125 + ], + "0.led.1.7": [ + 144, + 126 + ], + "0.led.2.7": [ + 144, + 127 + ], + "0.fader.0.0": [ + 176, + 77 + ], + "0.fader.0.1": [ + 176, + 78 + ], + "0.fader.0.2": [ + 176, + 79 + ], + "0.fader.0.3": [ + 176, + 80 + ], + "0.fader.0.4": [ + 176, + 81 + ], + "0.fader.0.5": [ + 176, + 82 + ], + "0.fader.0.6": [ + 176, + 83 + ], + "0.fader.0.7": [ + 176, + 84 + ], + "0.pad.0.0.on": [ + 144, + 41 + ], + "0.pad.0.0.off": [ + 128, + 41 + ], + "0.pad.0.1.on": [ + 144, + 42 + ], + "0.pad.0.1.off": [ + 128, + 42 + ], + "0.pad.0.2.on": [ + 144, + 43 + ], + "0.pad.0.2.off": [ + 128, + 43 + ], + "0.pad.0.3.on": [ + 144, + 44 + ], + "0.pad.0.3.off": [ + 128, + 44 + ], + "0.pad.0.4.on": [ + 144, + 57 + ], + "0.pad.0.4.off": [ + 128, + 57 + ], + "0.pad.0.5.on": [ + 144, + 58 + ], + "0.pad.0.5.off": [ + 128, + 58 + ], + "0.pad.0.6.on": [ + 144, + 59 + ], + "0.pad.0.6.off": [ + 128, + 59 + ], + "0.pad.0.7.on": [ + 144, + 60 + ], + "0.pad.0.7.off": [ + 128, + 60 + ], + "0.pad.1.0.on": [ + 144, + 73 + ], + "0.pad.1.0.off": [ + 128, + 73 + ], + "0.pad.1.1.on": [ + 144, + 74 + ], + "0.pad.1.1.off": [ + 128, + 74 + ], + "0.pad.1.2.on": [ + 144, + 75 + ], + "0.pad.1.2.off": [ + 128, + 75 + ], + "0.pad.1.3.on": [ + 144, + 76 + ], + "0.pad.1.3.off": [ + 128, + 76 + ], + "0.pad.1.4.on": [ + 144, + 89 + ], + "0.pad.1.4.off": [ + 128, + 89 + ], + "0.pad.1.5.on": [ + 144, + 90 + ], + "0.pad.1.5.off": [ + 128, + 90 + ], + "0.pad.1.6.on": [ + 144, + 91 + ], + "0.pad.1.6.off": [ + 128, + 91 + ], + "0.pad.1.7.on": [ + 144, + 92 + ], + "0.pad.1.7.off": [ + 128, + 92 + ], + "0.reset": [ + 176, + 0 + ], + "1.up": [ + 177, + 104 + ], + "1.down": [ + 177, + 105 + ], + "1.left": [ + 177, + 106 + ], + "1.right": [ + 177, + 107 + ], + "1.device.on": [ + 145, + 105 + ], + "1.device.off": [ + 129, + 105 + ], + "1.mute.on": [ + 145, + 106 + ], + "1.mute.off": [ + 129, + 106 + ], + "1.solo.on": [ + 145, + 107 + ], + "1.solo.off": [ + 129, + 107 + ], + "1.arm.on": [ + 145, + 108 + ], + "1.arm.off": [ + 129, + 108 + ], + "1.knob.0.0": [ + 177, + 13 + ], + "1.knob.0.1": [ + 177, + 14 + ], + "1.knob.0.2": [ + 177, + 15 + ], + "1.knob.0.3": [ + 177, + 16 + ], + "1.knob.0.4": [ + 177, + 17 + ], + "1.knob.0.5": [ + 177, + 18 + ], + "1.knob.0.6": [ + 177, + 19 + ], + "1.knob.0.7": [ + 177, + 20 + ], + "1.knob.1.0": [ + 177, + 29 + ], + "1.knob.1.1": [ + 177, + 30 + ], + "1.knob.1.2": [ + 177, + 31 + ], + "1.knob.1.3": [ + 177, + 32 + ], + "1.knob.1.4": [ + 177, + 33 + ], + "1.knob.1.5": [ + 177, + 34 + ], + "1.knob.1.6": [ + 177, + 35 + ], + "1.knob.1.7": [ + 177, + 36 + ], + "1.knob.2.0": [ + 177, + 49 + ], + "1.knob.2.1": [ + 177, + 50 + ], + "1.knob.2.2": [ + 177, + 51 + ], + "1.knob.2.3": [ + 177, + 52 + ], + "1.knob.2.4": [ + 177, + 53 + ], + "1.knob.2.5": [ + 177, + 54 + ], + "1.knob.2.6": [ + 177, + 55 + ], + "1.knob.2.7": [ + 177, + 56 + ], + "1.led.0.0": [ + 145, + 13 + ], + "1.led.1.0": [ + 145, + 14 + ], + "1.led.2.0": [ + 145, + 15 + ], + "1.led.0.1": [ + 145, + 29 + ], + "1.led.1.1": [ + 145, + 30 + ], + "1.led.2.1": [ + 145, + 31 + ], + "1.led.0.2": [ + 145, + 45 + ], + "1.led.1.2": [ + 145, + 46 + ], + "1.led.2.2": [ + 145, + 47 + ], + "1.led.0.3": [ + 145, + 61 + ], + "1.led.1.3": [ + 145, + 62 + ], + "1.led.2.3": [ + 145, + 63 + ], + "1.led.0.4": [ + 145, + 77 + ], + "1.led.1.4": [ + 145, + 78 + ], + "1.led.2.4": [ + 145, + 79 + ], + "1.led.0.5": [ + 145, + 93 + ], + "1.led.1.5": [ + 145, + 94 + ], + "1.led.2.5": [ + 145, + 95 + ], + "1.led.0.6": [ + 145, + 109 + ], + "1.led.1.6": [ + 145, + 110 + ], + "1.led.2.6": [ + 145, + 111 + ], + "1.led.0.7": [ + 145, + 125 + ], + "1.led.1.7": [ + 145, + 126 + ], + "1.led.2.7": [ + 145, + 127 + ], + "1.fader.0.0": [ + 177, + 77 + ], + "1.fader.0.1": [ + 177, + 78 + ], + "1.fader.0.2": [ + 177, + 79 + ], + "1.fader.0.3": [ + 177, + 80 + ], + "1.fader.0.4": [ + 177, + 81 + ], + "1.fader.0.5": [ + 177, + 82 + ], + "1.fader.0.6": [ + 177, + 83 + ], + "1.fader.0.7": [ + 177, + 84 + ], + "1.pad.0.0.on": [ + 145, + 41 + ], + "1.pad.0.0.off": [ + 129, + 41 + ], + "1.pad.0.1.on": [ + 145, + 42 + ], + "1.pad.0.1.off": [ + 129, + 42 + ], + "1.pad.0.2.on": [ + 145, + 43 + ], + "1.pad.0.2.off": [ + 129, + 43 + ], + "1.pad.0.3.on": [ + 145, + 44 + ], + "1.pad.0.3.off": [ + 129, + 44 + ], + "1.pad.0.4.on": [ + 145, + 57 + ], + "1.pad.0.4.off": [ + 129, + 57 + ], + "1.pad.0.5.on": [ + 145, + 58 + ], + "1.pad.0.5.off": [ + 129, + 58 + ], + "1.pad.0.6.on": [ + 145, + 59 + ], + "1.pad.0.6.off": [ + 129, + 59 + ], + "1.pad.0.7.on": [ + 145, + 60 + ], + "1.pad.0.7.off": [ + 129, + 60 + ], + "1.pad.1.0.on": [ + 145, + 73 + ], + "1.pad.1.0.off": [ + 129, + 73 + ], + "1.pad.1.1.on": [ + 145, + 74 + ], + "1.pad.1.1.off": [ + 129, + 74 + ], + "1.pad.1.2.on": [ + 145, + 75 + ], + "1.pad.1.2.off": [ + 129, + 75 + ], + "1.pad.1.3.on": [ + 145, + 76 + ], + "1.pad.1.3.off": [ + 129, + 76 + ], + "1.pad.1.4.on": [ + 145, + 89 + ], + "1.pad.1.4.off": [ + 129, + 89 + ], + "1.pad.1.5.on": [ + 145, + 90 + ], + "1.pad.1.5.off": [ + 129, + 90 + ], + "1.pad.1.6.on": [ + 145, + 91 + ], + "1.pad.1.6.off": [ + 129, + 91 + ], + "1.pad.1.7.on": [ + 145, + 92 + ], + "1.pad.1.7.off": [ + 129, + 92 + ], + "1.reset": [ + 177, + 0 + ], + "2.up": [ + 178, + 104 + ], + "2.down": [ + 178, + 105 + ], + "2.left": [ + 178, + 106 + ], + "2.right": [ + 178, + 107 + ], + "2.device.on": [ + 146, + 105 + ], + "2.device.off": [ + 130, + 105 + ], + "2.mute.on": [ + 146, + 106 + ], + "2.mute.off": [ + 130, + 106 + ], + "2.solo.on": [ + 146, + 107 + ], + "2.solo.off": [ + 130, + 107 + ], + "2.arm.on": [ + 146, + 108 + ], + "2.arm.off": [ + 130, + 108 + ], + "2.knob.0.0": [ + 178, + 13 + ], + "2.knob.0.1": [ + 178, + 14 + ], + "2.knob.0.2": [ + 178, + 15 + ], + "2.knob.0.3": [ + 178, + 16 + ], + "2.knob.0.4": [ + 178, + 17 + ], + "2.knob.0.5": [ + 178, + 18 + ], + "2.knob.0.6": [ + 178, + 19 + ], + "2.knob.0.7": [ + 178, + 20 + ], + "2.knob.1.0": [ + 178, + 29 + ], + "2.knob.1.1": [ + 178, + 30 + ], + "2.knob.1.2": [ + 178, + 31 + ], + "2.knob.1.3": [ + 178, + 32 + ], + "2.knob.1.4": [ + 178, + 33 + ], + "2.knob.1.5": [ + 178, + 34 + ], + "2.knob.1.6": [ + 178, + 35 + ], + "2.knob.1.7": [ + 178, + 36 + ], + "2.knob.2.0": [ + 178, + 49 + ], + "2.knob.2.1": [ + 178, + 50 + ], + "2.knob.2.2": [ + 178, + 51 + ], + "2.knob.2.3": [ + 178, + 52 + ], + "2.knob.2.4": [ + 178, + 53 + ], + "2.knob.2.5": [ + 178, + 54 + ], + "2.knob.2.6": [ + 178, + 55 + ], + "2.knob.2.7": [ + 178, + 56 + ], + "2.led.0.0": [ + 146, + 13 + ], + "2.led.1.0": [ + 146, + 14 + ], + "2.led.2.0": [ + 146, + 15 + ], + "2.led.0.1": [ + 146, + 29 + ], + "2.led.1.1": [ + 146, + 30 + ], + "2.led.2.1": [ + 146, + 31 + ], + "2.led.0.2": [ + 146, + 45 + ], + "2.led.1.2": [ + 146, + 46 + ], + "2.led.2.2": [ + 146, + 47 + ], + "2.led.0.3": [ + 146, + 61 + ], + "2.led.1.3": [ + 146, + 62 + ], + "2.led.2.3": [ + 146, + 63 + ], + "2.led.0.4": [ + 146, + 77 + ], + "2.led.1.4": [ + 146, + 78 + ], + "2.led.2.4": [ + 146, + 79 + ], + "2.led.0.5": [ + 146, + 93 + ], + "2.led.1.5": [ + 146, + 94 + ], + "2.led.2.5": [ + 146, + 95 + ], + "2.led.0.6": [ + 146, + 109 + ], + "2.led.1.6": [ + 146, + 110 + ], + "2.led.2.6": [ + 146, + 111 + ], + "2.led.0.7": [ + 146, + 125 + ], + "2.led.1.7": [ + 146, + 126 + ], + "2.led.2.7": [ + 146, + 127 + ], + "2.fader.0.0": [ + 178, + 77 + ], + "2.fader.0.1": [ + 178, + 78 + ], + "2.fader.0.2": [ + 178, + 79 + ], + "2.fader.0.3": [ + 178, + 80 + ], + "2.fader.0.4": [ + 178, + 81 + ], + "2.fader.0.5": [ + 178, + 82 + ], + "2.fader.0.6": [ + 178, + 83 + ], + "2.fader.0.7": [ + 178, + 84 + ], + "2.pad.0.0.on": [ + 146, + 41 + ], + "2.pad.0.0.off": [ + 130, + 41 + ], + "2.pad.0.1.on": [ + 146, + 42 + ], + "2.pad.0.1.off": [ + 130, + 42 + ], + "2.pad.0.2.on": [ + 146, + 43 + ], + "2.pad.0.2.off": [ + 130, + 43 + ], + "2.pad.0.3.on": [ + 146, + 44 + ], + "2.pad.0.3.off": [ + 130, + 44 + ], + "2.pad.0.4.on": [ + 146, + 57 + ], + "2.pad.0.4.off": [ + 130, + 57 + ], + "2.pad.0.5.on": [ + 146, + 58 + ], + "2.pad.0.5.off": [ + 130, + 58 + ], + "2.pad.0.6.on": [ + 146, + 59 + ], + "2.pad.0.6.off": [ + 130, + 59 + ], + "2.pad.0.7.on": [ + 146, + 60 + ], + "2.pad.0.7.off": [ + 130, + 60 + ], + "2.pad.1.0.on": [ + 146, + 73 + ], + "2.pad.1.0.off": [ + 130, + 73 + ], + "2.pad.1.1.on": [ + 146, + 74 + ], + "2.pad.1.1.off": [ + 130, + 74 + ], + "2.pad.1.2.on": [ + 146, + 75 + ], + "2.pad.1.2.off": [ + 130, + 75 + ], + "2.pad.1.3.on": [ + 146, + 76 + ], + "2.pad.1.3.off": [ + 130, + 76 + ], + "2.pad.1.4.on": [ + 146, + 89 + ], + "2.pad.1.4.off": [ + 130, + 89 + ], + "2.pad.1.5.on": [ + 146, + 90 + ], + "2.pad.1.5.off": [ + 130, + 90 + ], + "2.pad.1.6.on": [ + 146, + 91 + ], + "2.pad.1.6.off": [ + 130, + 91 + ], + "2.pad.1.7.on": [ + 146, + 92 + ], + "2.pad.1.7.off": [ + 130, + 92 + ], + "2.reset": [ + 178, + 0 + ], + "3.up": [ + 179, + 104 + ], + "3.down": [ + 179, + 105 + ], + "3.left": [ + 179, + 106 + ], + "3.right": [ + 179, + 107 + ], + "3.device.on": [ + 147, + 105 + ], + "3.device.off": [ + 131, + 105 + ], + "3.mute.on": [ + 147, + 106 + ], + "3.mute.off": [ + 131, + 106 + ], + "3.solo.on": [ + 147, + 107 + ], + "3.solo.off": [ + 131, + 107 + ], + "3.arm.on": [ + 147, + 108 + ], + "3.arm.off": [ + 131, + 108 + ], + "3.knob.0.0": [ + 179, + 13 + ], + "3.knob.0.1": [ + 179, + 14 + ], + "3.knob.0.2": [ + 179, + 15 + ], + "3.knob.0.3": [ + 179, + 16 + ], + "3.knob.0.4": [ + 179, + 17 + ], + "3.knob.0.5": [ + 179, + 18 + ], + "3.knob.0.6": [ + 179, + 19 + ], + "3.knob.0.7": [ + 179, + 20 + ], + "3.knob.1.0": [ + 179, + 29 + ], + "3.knob.1.1": [ + 179, + 30 + ], + "3.knob.1.2": [ + 179, + 31 + ], + "3.knob.1.3": [ + 179, + 32 + ], + "3.knob.1.4": [ + 179, + 33 + ], + "3.knob.1.5": [ + 179, + 34 + ], + "3.knob.1.6": [ + 179, + 35 + ], + "3.knob.1.7": [ + 179, + 36 + ], + "3.knob.2.0": [ + 179, + 49 + ], + "3.knob.2.1": [ + 179, + 50 + ], + "3.knob.2.2": [ + 179, + 51 + ], + "3.knob.2.3": [ + 179, + 52 + ], + "3.knob.2.4": [ + 179, + 53 + ], + "3.knob.2.5": [ + 179, + 54 + ], + "3.knob.2.6": [ + 179, + 55 + ], + "3.knob.2.7": [ + 179, + 56 + ], + "3.led.0.0": [ + 147, + 13 + ], + "3.led.1.0": [ + 147, + 14 + ], + "3.led.2.0": [ + 147, + 15 + ], + "3.led.0.1": [ + 147, + 29 + ], + "3.led.1.1": [ + 147, + 30 + ], + "3.led.2.1": [ + 147, + 31 + ], + "3.led.0.2": [ + 147, + 45 + ], + "3.led.1.2": [ + 147, + 46 + ], + "3.led.2.2": [ + 147, + 47 + ], + "3.led.0.3": [ + 147, + 61 + ], + "3.led.1.3": [ + 147, + 62 + ], + "3.led.2.3": [ + 147, + 63 + ], + "3.led.0.4": [ + 147, + 77 + ], + "3.led.1.4": [ + 147, + 78 + ], + "3.led.2.4": [ + 147, + 79 + ], + "3.led.0.5": [ + 147, + 93 + ], + "3.led.1.5": [ + 147, + 94 + ], + "3.led.2.5": [ + 147, + 95 + ], + "3.led.0.6": [ + 147, + 109 + ], + "3.led.1.6": [ + 147, + 110 + ], + "3.led.2.6": [ + 147, + 111 + ], + "3.led.0.7": [ + 147, + 125 + ], + "3.led.1.7": [ + 147, + 126 + ], + "3.led.2.7": [ + 147, + 127 + ], + "3.fader.0.0": [ + 179, + 77 + ], + "3.fader.0.1": [ + 179, + 78 + ], + "3.fader.0.2": [ + 179, + 79 + ], + "3.fader.0.3": [ + 179, + 80 + ], + "3.fader.0.4": [ + 179, + 81 + ], + "3.fader.0.5": [ + 179, + 82 + ], + "3.fader.0.6": [ + 179, + 83 + ], + "3.fader.0.7": [ + 179, + 84 + ], + "3.pad.0.0.on": [ + 147, + 41 + ], + "3.pad.0.0.off": [ + 131, + 41 + ], + "3.pad.0.1.on": [ + 147, + 42 + ], + "3.pad.0.1.off": [ + 131, + 42 + ], + "3.pad.0.2.on": [ + 147, + 43 + ], + "3.pad.0.2.off": [ + 131, + 43 + ], + "3.pad.0.3.on": [ + 147, + 44 + ], + "3.pad.0.3.off": [ + 131, + 44 + ], + "3.pad.0.4.on": [ + 147, + 57 + ], + "3.pad.0.4.off": [ + 131, + 57 + ], + "3.pad.0.5.on": [ + 147, + 58 + ], + "3.pad.0.5.off": [ + 131, + 58 + ], + "3.pad.0.6.on": [ + 147, + 59 + ], + "3.pad.0.6.off": [ + 131, + 59 + ], + "3.pad.0.7.on": [ + 147, + 60 + ], + "3.pad.0.7.off": [ + 131, + 60 + ], + "3.pad.1.0.on": [ + 147, + 73 + ], + "3.pad.1.0.off": [ + 131, + 73 + ], + "3.pad.1.1.on": [ + 147, + 74 + ], + "3.pad.1.1.off": [ + 131, + 74 + ], + "3.pad.1.2.on": [ + 147, + 75 + ], + "3.pad.1.2.off": [ + 131, + 75 + ], + "3.pad.1.3.on": [ + 147, + 76 + ], + "3.pad.1.3.off": [ + 131, + 76 + ], + "3.pad.1.4.on": [ + 147, + 89 + ], + "3.pad.1.4.off": [ + 131, + 89 + ], + "3.pad.1.5.on": [ + 147, + 90 + ], + "3.pad.1.5.off": [ + 131, + 90 + ], + "3.pad.1.6.on": [ + 147, + 91 + ], + "3.pad.1.6.off": [ + 131, + 91 + ], + "3.pad.1.7.on": [ + 147, + 92 + ], + "3.pad.1.7.off": [ + 131, + 92 + ], + "3.reset": [ + 179, + 0 + ], + "4.up": [ + 180, + 104 + ], + "4.down": [ + 180, + 105 + ], + "4.left": [ + 180, + 106 + ], + "4.right": [ + 180, + 107 + ], + "4.device.on": [ + 148, + 105 + ], + "4.device.off": [ + 132, + 105 + ], + "4.mute.on": [ + 148, + 106 + ], + "4.mute.off": [ + 132, + 106 + ], + "4.solo.on": [ + 148, + 107 + ], + "4.solo.off": [ + 132, + 107 + ], + "4.arm.on": [ + 148, + 108 + ], + "4.arm.off": [ + 132, + 108 + ], + "4.knob.0.0": [ + 180, + 13 + ], + "4.knob.0.1": [ + 180, + 14 + ], + "4.knob.0.2": [ + 180, + 15 + ], + "4.knob.0.3": [ + 180, + 16 + ], + "4.knob.0.4": [ + 180, + 17 + ], + "4.knob.0.5": [ + 180, + 18 + ], + "4.knob.0.6": [ + 180, + 19 + ], + "4.knob.0.7": [ + 180, + 20 + ], + "4.knob.1.0": [ + 180, + 29 + ], + "4.knob.1.1": [ + 180, + 30 + ], + "4.knob.1.2": [ + 180, + 31 + ], + "4.knob.1.3": [ + 180, + 32 + ], + "4.knob.1.4": [ + 180, + 33 + ], + "4.knob.1.5": [ + 180, + 34 + ], + "4.knob.1.6": [ + 180, + 35 + ], + "4.knob.1.7": [ + 180, + 36 + ], + "4.knob.2.0": [ + 180, + 49 + ], + "4.knob.2.1": [ + 180, + 50 + ], + "4.knob.2.2": [ + 180, + 51 + ], + "4.knob.2.3": [ + 180, + 52 + ], + "4.knob.2.4": [ + 180, + 53 + ], + "4.knob.2.5": [ + 180, + 54 + ], + "4.knob.2.6": [ + 180, + 55 + ], + "4.knob.2.7": [ + 180, + 56 + ], + "4.led.0.0": [ + 148, + 13 + ], + "4.led.1.0": [ + 148, + 14 + ], + "4.led.2.0": [ + 148, + 15 + ], + "4.led.0.1": [ + 148, + 29 + ], + "4.led.1.1": [ + 148, + 30 + ], + "4.led.2.1": [ + 148, + 31 + ], + "4.led.0.2": [ + 148, + 45 + ], + "4.led.1.2": [ + 148, + 46 + ], + "4.led.2.2": [ + 148, + 47 + ], + "4.led.0.3": [ + 148, + 61 + ], + "4.led.1.3": [ + 148, + 62 + ], + "4.led.2.3": [ + 148, + 63 + ], + "4.led.0.4": [ + 148, + 77 + ], + "4.led.1.4": [ + 148, + 78 + ], + "4.led.2.4": [ + 148, + 79 + ], + "4.led.0.5": [ + 148, + 93 + ], + "4.led.1.5": [ + 148, + 94 + ], + "4.led.2.5": [ + 148, + 95 + ], + "4.led.0.6": [ + 148, + 109 + ], + "4.led.1.6": [ + 148, + 110 + ], + "4.led.2.6": [ + 148, + 111 + ], + "4.led.0.7": [ + 148, + 125 + ], + "4.led.1.7": [ + 148, + 126 + ], + "4.led.2.7": [ + 148, + 127 + ], + "4.fader.0.0": [ + 180, + 77 + ], + "4.fader.0.1": [ + 180, + 78 + ], + "4.fader.0.2": [ + 180, + 79 + ], + "4.fader.0.3": [ + 180, + 80 + ], + "4.fader.0.4": [ + 180, + 81 + ], + "4.fader.0.5": [ + 180, + 82 + ], + "4.fader.0.6": [ + 180, + 83 + ], + "4.fader.0.7": [ + 180, + 84 + ], + "4.pad.0.0.on": [ + 148, + 41 + ], + "4.pad.0.0.off": [ + 132, + 41 + ], + "4.pad.0.1.on": [ + 148, + 42 + ], + "4.pad.0.1.off": [ + 132, + 42 + ], + "4.pad.0.2.on": [ + 148, + 43 + ], + "4.pad.0.2.off": [ + 132, + 43 + ], + "4.pad.0.3.on": [ + 148, + 44 + ], + "4.pad.0.3.off": [ + 132, + 44 + ], + "4.pad.0.4.on": [ + 148, + 57 + ], + "4.pad.0.4.off": [ + 132, + 57 + ], + "4.pad.0.5.on": [ + 148, + 58 + ], + "4.pad.0.5.off": [ + 132, + 58 + ], + "4.pad.0.6.on": [ + 148, + 59 + ], + "4.pad.0.6.off": [ + 132, + 59 + ], + "4.pad.0.7.on": [ + 148, + 60 + ], + "4.pad.0.7.off": [ + 132, + 60 + ], + "4.pad.1.0.on": [ + 148, + 73 + ], + "4.pad.1.0.off": [ + 132, + 73 + ], + "4.pad.1.1.on": [ + 148, + 74 + ], + "4.pad.1.1.off": [ + 132, + 74 + ], + "4.pad.1.2.on": [ + 148, + 75 + ], + "4.pad.1.2.off": [ + 132, + 75 + ], + "4.pad.1.3.on": [ + 148, + 76 + ], + "4.pad.1.3.off": [ + 132, + 76 + ], + "4.pad.1.4.on": [ + 148, + 89 + ], + "4.pad.1.4.off": [ + 132, + 89 + ], + "4.pad.1.5.on": [ + 148, + 90 + ], + "4.pad.1.5.off": [ + 132, + 90 + ], + "4.pad.1.6.on": [ + 148, + 91 + ], + "4.pad.1.6.off": [ + 132, + 91 + ], + "4.pad.1.7.on": [ + 148, + 92 + ], + "4.pad.1.7.off": [ + 132, + 92 + ], + "4.reset": [ + 180, + 0 + ], + "5.up": [ + 181, + 104 + ], + "5.down": [ + 181, + 105 + ], + "5.left": [ + 181, + 106 + ], + "5.right": [ + 181, + 107 + ], + "5.device.on": [ + 149, + 105 + ], + "5.device.off": [ + 133, + 105 + ], + "5.mute.on": [ + 149, + 106 + ], + "5.mute.off": [ + 133, + 106 + ], + "5.solo.on": [ + 149, + 107 + ], + "5.solo.off": [ + 133, + 107 + ], + "5.arm.on": [ + 149, + 108 + ], + "5.arm.off": [ + 133, + 108 + ], + "5.knob.0.0": [ + 181, + 13 + ], + "5.knob.0.1": [ + 181, + 14 + ], + "5.knob.0.2": [ + 181, + 15 + ], + "5.knob.0.3": [ + 181, + 16 + ], + "5.knob.0.4": [ + 181, + 17 + ], + "5.knob.0.5": [ + 181, + 18 + ], + "5.knob.0.6": [ + 181, + 19 + ], + "5.knob.0.7": [ + 181, + 20 + ], + "5.knob.1.0": [ + 181, + 29 + ], + "5.knob.1.1": [ + 181, + 30 + ], + "5.knob.1.2": [ + 181, + 31 + ], + "5.knob.1.3": [ + 181, + 32 + ], + "5.knob.1.4": [ + 181, + 33 + ], + "5.knob.1.5": [ + 181, + 34 + ], + "5.knob.1.6": [ + 181, + 35 + ], + "5.knob.1.7": [ + 181, + 36 + ], + "5.knob.2.0": [ + 181, + 49 + ], + "5.knob.2.1": [ + 181, + 50 + ], + "5.knob.2.2": [ + 181, + 51 + ], + "5.knob.2.3": [ + 181, + 52 + ], + "5.knob.2.4": [ + 181, + 53 + ], + "5.knob.2.5": [ + 181, + 54 + ], + "5.knob.2.6": [ + 181, + 55 + ], + "5.knob.2.7": [ + 181, + 56 + ], + "5.led.0.0": [ + 149, + 13 + ], + "5.led.1.0": [ + 149, + 14 + ], + "5.led.2.0": [ + 149, + 15 + ], + "5.led.0.1": [ + 149, + 29 + ], + "5.led.1.1": [ + 149, + 30 + ], + "5.led.2.1": [ + 149, + 31 + ], + "5.led.0.2": [ + 149, + 45 + ], + "5.led.1.2": [ + 149, + 46 + ], + "5.led.2.2": [ + 149, + 47 + ], + "5.led.0.3": [ + 149, + 61 + ], + "5.led.1.3": [ + 149, + 62 + ], + "5.led.2.3": [ + 149, + 63 + ], + "5.led.0.4": [ + 149, + 77 + ], + "5.led.1.4": [ + 149, + 78 + ], + "5.led.2.4": [ + 149, + 79 + ], + "5.led.0.5": [ + 149, + 93 + ], + "5.led.1.5": [ + 149, + 94 + ], + "5.led.2.5": [ + 149, + 95 + ], + "5.led.0.6": [ + 149, + 109 + ], + "5.led.1.6": [ + 149, + 110 + ], + "5.led.2.6": [ + 149, + 111 + ], + "5.led.0.7": [ + 149, + 125 + ], + "5.led.1.7": [ + 149, + 126 + ], + "5.led.2.7": [ + 149, + 127 + ], + "5.fader.0.0": [ + 181, + 77 + ], + "5.fader.0.1": [ + 181, + 78 + ], + "5.fader.0.2": [ + 181, + 79 + ], + "5.fader.0.3": [ + 181, + 80 + ], + "5.fader.0.4": [ + 181, + 81 + ], + "5.fader.0.5": [ + 181, + 82 + ], + "5.fader.0.6": [ + 181, + 83 + ], + "5.fader.0.7": [ + 181, + 84 + ], + "5.pad.0.0.on": [ + 149, + 41 + ], + "5.pad.0.0.off": [ + 133, + 41 + ], + "5.pad.0.1.on": [ + 149, + 42 + ], + "5.pad.0.1.off": [ + 133, + 42 + ], + "5.pad.0.2.on": [ + 149, + 43 + ], + "5.pad.0.2.off": [ + 133, + 43 + ], + "5.pad.0.3.on": [ + 149, + 44 + ], + "5.pad.0.3.off": [ + 133, + 44 + ], + "5.pad.0.4.on": [ + 149, + 57 + ], + "5.pad.0.4.off": [ + 133, + 57 + ], + "5.pad.0.5.on": [ + 149, + 58 + ], + "5.pad.0.5.off": [ + 133, + 58 + ], + "5.pad.0.6.on": [ + 149, + 59 + ], + "5.pad.0.6.off": [ + 133, + 59 + ], + "5.pad.0.7.on": [ + 149, + 60 + ], + "5.pad.0.7.off": [ + 133, + 60 + ], + "5.pad.1.0.on": [ + 149, + 73 + ], + "5.pad.1.0.off": [ + 133, + 73 + ], + "5.pad.1.1.on": [ + 149, + 74 + ], + "5.pad.1.1.off": [ + 133, + 74 + ], + "5.pad.1.2.on": [ + 149, + 75 + ], + "5.pad.1.2.off": [ + 133, + 75 + ], + "5.pad.1.3.on": [ + 149, + 76 + ], + "5.pad.1.3.off": [ + 133, + 76 + ], + "5.pad.1.4.on": [ + 149, + 89 + ], + "5.pad.1.4.off": [ + 133, + 89 + ], + "5.pad.1.5.on": [ + 149, + 90 + ], + "5.pad.1.5.off": [ + 133, + 90 + ], + "5.pad.1.6.on": [ + 149, + 91 + ], + "5.pad.1.6.off": [ + 133, + 91 + ], + "5.pad.1.7.on": [ + 149, + 92 + ], + "5.pad.1.7.off": [ + 133, + 92 + ], + "5.reset": [ + 181, + 0 + ], + "6.up": [ + 182, + 104 + ], + "6.down": [ + 182, + 105 + ], + "6.left": [ + 182, + 106 + ], + "6.right": [ + 182, + 107 + ], + "6.device.on": [ + 150, + 105 + ], + "6.device.off": [ + 134, + 105 + ], + "6.mute.on": [ + 150, + 106 + ], + "6.mute.off": [ + 134, + 106 + ], + "6.solo.on": [ + 150, + 107 + ], + "6.solo.off": [ + 134, + 107 + ], + "6.arm.on": [ + 150, + 108 + ], + "6.arm.off": [ + 134, + 108 + ], + "6.knob.0.0": [ + 182, + 13 + ], + "6.knob.0.1": [ + 182, + 14 + ], + "6.knob.0.2": [ + 182, + 15 + ], + "6.knob.0.3": [ + 182, + 16 + ], + "6.knob.0.4": [ + 182, + 17 + ], + "6.knob.0.5": [ + 182, + 18 + ], + "6.knob.0.6": [ + 182, + 19 + ], + "6.knob.0.7": [ + 182, + 20 + ], + "6.knob.1.0": [ + 182, + 29 + ], + "6.knob.1.1": [ + 182, + 30 + ], + "6.knob.1.2": [ + 182, + 31 + ], + "6.knob.1.3": [ + 182, + 32 + ], + "6.knob.1.4": [ + 182, + 33 + ], + "6.knob.1.5": [ + 182, + 34 + ], + "6.knob.1.6": [ + 182, + 35 + ], + "6.knob.1.7": [ + 182, + 36 + ], + "6.knob.2.0": [ + 182, + 49 + ], + "6.knob.2.1": [ + 182, + 50 + ], + "6.knob.2.2": [ + 182, + 51 + ], + "6.knob.2.3": [ + 182, + 52 + ], + "6.knob.2.4": [ + 182, + 53 + ], + "6.knob.2.5": [ + 182, + 54 + ], + "6.knob.2.6": [ + 182, + 55 + ], + "6.knob.2.7": [ + 182, + 56 + ], + "6.led.0.0": [ + 150, + 13 + ], + "6.led.1.0": [ + 150, + 14 + ], + "6.led.2.0": [ + 150, + 15 + ], + "6.led.0.1": [ + 150, + 29 + ], + "6.led.1.1": [ + 150, + 30 + ], + "6.led.2.1": [ + 150, + 31 + ], + "6.led.0.2": [ + 150, + 45 + ], + "6.led.1.2": [ + 150, + 46 + ], + "6.led.2.2": [ + 150, + 47 + ], + "6.led.0.3": [ + 150, + 61 + ], + "6.led.1.3": [ + 150, + 62 + ], + "6.led.2.3": [ + 150, + 63 + ], + "6.led.0.4": [ + 150, + 77 + ], + "6.led.1.4": [ + 150, + 78 + ], + "6.led.2.4": [ + 150, + 79 + ], + "6.led.0.5": [ + 150, + 93 + ], + "6.led.1.5": [ + 150, + 94 + ], + "6.led.2.5": [ + 150, + 95 + ], + "6.led.0.6": [ + 150, + 109 + ], + "6.led.1.6": [ + 150, + 110 + ], + "6.led.2.6": [ + 150, + 111 + ], + "6.led.0.7": [ + 150, + 125 + ], + "6.led.1.7": [ + 150, + 126 + ], + "6.led.2.7": [ + 150, + 127 + ], + "6.fader.0.0": [ + 182, + 77 + ], + "6.fader.0.1": [ + 182, + 78 + ], + "6.fader.0.2": [ + 182, + 79 + ], + "6.fader.0.3": [ + 182, + 80 + ], + "6.fader.0.4": [ + 182, + 81 + ], + "6.fader.0.5": [ + 182, + 82 + ], + "6.fader.0.6": [ + 182, + 83 + ], + "6.fader.0.7": [ + 182, + 84 + ], + "6.pad.0.0.on": [ + 150, + 41 + ], + "6.pad.0.0.off": [ + 134, + 41 + ], + "6.pad.0.1.on": [ + 150, + 42 + ], + "6.pad.0.1.off": [ + 134, + 42 + ], + "6.pad.0.2.on": [ + 150, + 43 + ], + "6.pad.0.2.off": [ + 134, + 43 + ], + "6.pad.0.3.on": [ + 150, + 44 + ], + "6.pad.0.3.off": [ + 134, + 44 + ], + "6.pad.0.4.on": [ + 150, + 57 + ], + "6.pad.0.4.off": [ + 134, + 57 + ], + "6.pad.0.5.on": [ + 150, + 58 + ], + "6.pad.0.5.off": [ + 134, + 58 + ], + "6.pad.0.6.on": [ + 150, + 59 + ], + "6.pad.0.6.off": [ + 134, + 59 + ], + "6.pad.0.7.on": [ + 150, + 60 + ], + "6.pad.0.7.off": [ + 134, + 60 + ], + "6.pad.1.0.on": [ + 150, + 73 + ], + "6.pad.1.0.off": [ + 134, + 73 + ], + "6.pad.1.1.on": [ + 150, + 74 + ], + "6.pad.1.1.off": [ + 134, + 74 + ], + "6.pad.1.2.on": [ + 150, + 75 + ], + "6.pad.1.2.off": [ + 134, + 75 + ], + "6.pad.1.3.on": [ + 150, + 76 + ], + "6.pad.1.3.off": [ + 134, + 76 + ], + "6.pad.1.4.on": [ + 150, + 89 + ], + "6.pad.1.4.off": [ + 134, + 89 + ], + "6.pad.1.5.on": [ + 150, + 90 + ], + "6.pad.1.5.off": [ + 134, + 90 + ], + "6.pad.1.6.on": [ + 150, + 91 + ], + "6.pad.1.6.off": [ + 134, + 91 + ], + "6.pad.1.7.on": [ + 150, + 92 + ], + "6.pad.1.7.off": [ + 134, + 92 + ], + "6.reset": [ + 182, + 0 + ], + "7.up": [ + 183, + 104 + ], + "7.down": [ + 183, + 105 + ], + "7.left": [ + 183, + 106 + ], + "7.right": [ + 183, + 107 + ], + "7.device.on": [ + 151, + 105 + ], + "7.device.off": [ + 135, + 105 + ], + "7.mute.on": [ + 151, + 106 + ], + "7.mute.off": [ + 135, + 106 + ], + "7.solo.on": [ + 151, + 107 + ], + "7.solo.off": [ + 135, + 107 + ], + "7.arm.on": [ + 151, + 108 + ], + "7.arm.off": [ + 135, + 108 + ], + "7.knob.0.0": [ + 183, + 13 + ], + "7.knob.0.1": [ + 183, + 14 + ], + "7.knob.0.2": [ + 183, + 15 + ], + "7.knob.0.3": [ + 183, + 16 + ], + "7.knob.0.4": [ + 183, + 17 + ], + "7.knob.0.5": [ + 183, + 18 + ], + "7.knob.0.6": [ + 183, + 19 + ], + "7.knob.0.7": [ + 183, + 20 + ], + "7.knob.1.0": [ + 183, + 29 + ], + "7.knob.1.1": [ + 183, + 30 + ], + "7.knob.1.2": [ + 183, + 31 + ], + "7.knob.1.3": [ + 183, + 32 + ], + "7.knob.1.4": [ + 183, + 33 + ], + "7.knob.1.5": [ + 183, + 34 + ], + "7.knob.1.6": [ + 183, + 35 + ], + "7.knob.1.7": [ + 183, + 36 + ], + "7.knob.2.0": [ + 183, + 49 + ], + "7.knob.2.1": [ + 183, + 50 + ], + "7.knob.2.2": [ + 183, + 51 + ], + "7.knob.2.3": [ + 183, + 52 + ], + "7.knob.2.4": [ + 183, + 53 + ], + "7.knob.2.5": [ + 183, + 54 + ], + "7.knob.2.6": [ + 183, + 55 + ], + "7.knob.2.7": [ + 183, + 56 + ], + "7.led.0.0": [ + 151, + 13 + ], + "7.led.1.0": [ + 151, + 14 + ], + "7.led.2.0": [ + 151, + 15 + ], + "7.led.0.1": [ + 151, + 29 + ], + "7.led.1.1": [ + 151, + 30 + ], + "7.led.2.1": [ + 151, + 31 + ], + "7.led.0.2": [ + 151, + 45 + ], + "7.led.1.2": [ + 151, + 46 + ], + "7.led.2.2": [ + 151, + 47 + ], + "7.led.0.3": [ + 151, + 61 + ], + "7.led.1.3": [ + 151, + 62 + ], + "7.led.2.3": [ + 151, + 63 + ], + "7.led.0.4": [ + 151, + 77 + ], + "7.led.1.4": [ + 151, + 78 + ], + "7.led.2.4": [ + 151, + 79 + ], + "7.led.0.5": [ + 151, + 93 + ], + "7.led.1.5": [ + 151, + 94 + ], + "7.led.2.5": [ + 151, + 95 + ], + "7.led.0.6": [ + 151, + 109 + ], + "7.led.1.6": [ + 151, + 110 + ], + "7.led.2.6": [ + 151, + 111 + ], + "7.led.0.7": [ + 151, + 125 + ], + "7.led.1.7": [ + 151, + 126 + ], + "7.led.2.7": [ + 151, + 127 + ], + "7.fader.0.0": [ + 183, + 77 + ], + "7.fader.0.1": [ + 183, + 78 + ], + "7.fader.0.2": [ + 183, + 79 + ], + "7.fader.0.3": [ + 183, + 80 + ], + "7.fader.0.4": [ + 183, + 81 + ], + "7.fader.0.5": [ + 183, + 82 + ], + "7.fader.0.6": [ + 183, + 83 + ], + "7.fader.0.7": [ + 183, + 84 + ], + "7.pad.0.0.on": [ + 151, + 41 + ], + "7.pad.0.0.off": [ + 135, + 41 + ], + "7.pad.0.1.on": [ + 151, + 42 + ], + "7.pad.0.1.off": [ + 135, + 42 + ], + "7.pad.0.2.on": [ + 151, + 43 + ], + "7.pad.0.2.off": [ + 135, + 43 + ], + "7.pad.0.3.on": [ + 151, + 44 + ], + "7.pad.0.3.off": [ + 135, + 44 + ], + "7.pad.0.4.on": [ + 151, + 57 + ], + "7.pad.0.4.off": [ + 135, + 57 + ], + "7.pad.0.5.on": [ + 151, + 58 + ], + "7.pad.0.5.off": [ + 135, + 58 + ], + "7.pad.0.6.on": [ + 151, + 59 + ], + "7.pad.0.6.off": [ + 135, + 59 + ], + "7.pad.0.7.on": [ + 151, + 60 + ], + "7.pad.0.7.off": [ + 135, + 60 + ], + "7.pad.1.0.on": [ + 151, + 73 + ], + "7.pad.1.0.off": [ + 135, + 73 + ], + "7.pad.1.1.on": [ + 151, + 74 + ], + "7.pad.1.1.off": [ + 135, + 74 + ], + "7.pad.1.2.on": [ + 151, + 75 + ], + "7.pad.1.2.off": [ + 135, + 75 + ], + "7.pad.1.3.on": [ + 151, + 76 + ], + "7.pad.1.3.off": [ + 135, + 76 + ], + "7.pad.1.4.on": [ + 151, + 89 + ], + "7.pad.1.4.off": [ + 135, + 89 + ], + "7.pad.1.5.on": [ + 151, + 90 + ], + "7.pad.1.5.off": [ + 135, + 90 + ], + "7.pad.1.6.on": [ + 151, + 91 + ], + "7.pad.1.6.off": [ + 135, + 91 + ], + "7.pad.1.7.on": [ + 151, + 92 + ], + "7.pad.1.7.off": [ + 135, + 92 + ], + "7.reset": [ + 183, + 0 + ], + "8.up": [ + 184, + 104 + ], + "8.down": [ + 184, + 105 + ], + "8.left": [ + 184, + 106 + ], + "8.right": [ + 184, + 107 + ], + "8.device.on": [ + 152, + 105 + ], + "8.device.off": [ + 136, + 105 + ], + "8.mute.on": [ + 152, + 106 + ], + "8.mute.off": [ + 136, + 106 + ], + "8.solo.on": [ + 152, + 107 + ], + "8.solo.off": [ + 136, + 107 + ], + "8.arm.on": [ + 152, + 108 + ], + "8.arm.off": [ + 136, + 108 + ], + "8.knob.0.0": [ + 184, + 13 + ], + "8.knob.0.1": [ + 184, + 14 + ], + "8.knob.0.2": [ + 184, + 15 + ], + "8.knob.0.3": [ + 184, + 16 + ], + "8.knob.0.4": [ + 184, + 17 + ], + "8.knob.0.5": [ + 184, + 18 + ], + "8.knob.0.6": [ + 184, + 19 + ], + "8.knob.0.7": [ + 184, + 20 + ], + "8.knob.1.0": [ + 184, + 29 + ], + "8.knob.1.1": [ + 184, + 30 + ], + "8.knob.1.2": [ + 184, + 31 + ], + "8.knob.1.3": [ + 184, + 32 + ], + "8.knob.1.4": [ + 184, + 33 + ], + "8.knob.1.5": [ + 184, + 34 + ], + "8.knob.1.6": [ + 184, + 35 + ], + "8.knob.1.7": [ + 184, + 36 + ], + "8.knob.2.0": [ + 184, + 49 + ], + "8.knob.2.1": [ + 184, + 50 + ], + "8.knob.2.2": [ + 184, + 51 + ], + "8.knob.2.3": [ + 184, + 52 + ], + "8.knob.2.4": [ + 184, + 53 + ], + "8.knob.2.5": [ + 184, + 54 + ], + "8.knob.2.6": [ + 184, + 55 + ], + "8.knob.2.7": [ + 184, + 56 + ], + "8.led.0.0": [ + 152, + 13 + ], + "8.led.1.0": [ + 152, + 14 + ], + "8.led.2.0": [ + 152, + 15 + ], + "8.led.0.1": [ + 152, + 29 + ], + "8.led.1.1": [ + 152, + 30 + ], + "8.led.2.1": [ + 152, + 31 + ], + "8.led.0.2": [ + 152, + 45 + ], + "8.led.1.2": [ + 152, + 46 + ], + "8.led.2.2": [ + 152, + 47 + ], + "8.led.0.3": [ + 152, + 61 + ], + "8.led.1.3": [ + 152, + 62 + ], + "8.led.2.3": [ + 152, + 63 + ], + "8.led.0.4": [ + 152, + 77 + ], + "8.led.1.4": [ + 152, + 78 + ], + "8.led.2.4": [ + 152, + 79 + ], + "8.led.0.5": [ + 152, + 93 + ], + "8.led.1.5": [ + 152, + 94 + ], + "8.led.2.5": [ + 152, + 95 + ], + "8.led.0.6": [ + 152, + 109 + ], + "8.led.1.6": [ + 152, + 110 + ], + "8.led.2.6": [ + 152, + 111 + ], + "8.led.0.7": [ + 152, + 125 + ], + "8.led.1.7": [ + 152, + 126 + ], + "8.led.2.7": [ + 152, + 127 + ], + "8.fader.0.0": [ + 184, + 77 + ], + "8.fader.0.1": [ + 184, + 78 + ], + "8.fader.0.2": [ + 184, + 79 + ], + "8.fader.0.3": [ + 184, + 80 + ], + "8.fader.0.4": [ + 184, + 81 + ], + "8.fader.0.5": [ + 184, + 82 + ], + "8.fader.0.6": [ + 184, + 83 + ], + "8.fader.0.7": [ + 184, + 84 + ], + "8.pad.0.0.on": [ + 152, + 41 + ], + "8.pad.0.0.off": [ + 136, + 41 + ], + "8.pad.0.1.on": [ + 152, + 42 + ], + "8.pad.0.1.off": [ + 136, + 42 + ], + "8.pad.0.2.on": [ + 152, + 43 + ], + "8.pad.0.2.off": [ + 136, + 43 + ], + "8.pad.0.3.on": [ + 152, + 44 + ], + "8.pad.0.3.off": [ + 136, + 44 + ], + "8.pad.0.4.on": [ + 152, + 57 + ], + "8.pad.0.4.off": [ + 136, + 57 + ], + "8.pad.0.5.on": [ + 152, + 58 + ], + "8.pad.0.5.off": [ + 136, + 58 + ], + "8.pad.0.6.on": [ + 152, + 59 + ], + "8.pad.0.6.off": [ + 136, + 59 + ], + "8.pad.0.7.on": [ + 152, + 60 + ], + "8.pad.0.7.off": [ + 136, + 60 + ], + "8.pad.1.0.on": [ + 152, + 73 + ], + "8.pad.1.0.off": [ + 136, + 73 + ], + "8.pad.1.1.on": [ + 152, + 74 + ], + "8.pad.1.1.off": [ + 136, + 74 + ], + "8.pad.1.2.on": [ + 152, + 75 + ], + "8.pad.1.2.off": [ + 136, + 75 + ], + "8.pad.1.3.on": [ + 152, + 76 + ], + "8.pad.1.3.off": [ + 136, + 76 + ], + "8.pad.1.4.on": [ + 152, + 89 + ], + "8.pad.1.4.off": [ + 136, + 89 + ], + "8.pad.1.5.on": [ + 152, + 90 + ], + "8.pad.1.5.off": [ + 136, + 90 + ], + "8.pad.1.6.on": [ + 152, + 91 + ], + "8.pad.1.6.off": [ + 136, + 91 + ], + "8.pad.1.7.on": [ + 152, + 92 + ], + "8.pad.1.7.off": [ + 136, + 92 + ], + "8.reset": [ + 184, + 0 + ], + "9.up": [ + 185, + 104 + ], + "9.down": [ + 185, + 105 + ], + "9.left": [ + 185, + 106 + ], + "9.right": [ + 185, + 107 + ], + "9.device.on": [ + 153, + 105 + ], + "9.device.off": [ + 137, + 105 + ], + "9.mute.on": [ + 153, + 106 + ], + "9.mute.off": [ + 137, + 106 + ], + "9.solo.on": [ + 153, + 107 + ], + "9.solo.off": [ + 137, + 107 + ], + "9.arm.on": [ + 153, + 108 + ], + "9.arm.off": [ + 137, + 108 + ], + "9.knob.0.0": [ + 185, + 13 + ], + "9.knob.0.1": [ + 185, + 14 + ], + "9.knob.0.2": [ + 185, + 15 + ], + "9.knob.0.3": [ + 185, + 16 + ], + "9.knob.0.4": [ + 185, + 17 + ], + "9.knob.0.5": [ + 185, + 18 + ], + "9.knob.0.6": [ + 185, + 19 + ], + "9.knob.0.7": [ + 185, + 20 + ], + "9.knob.1.0": [ + 185, + 29 + ], + "9.knob.1.1": [ + 185, + 30 + ], + "9.knob.1.2": [ + 185, + 31 + ], + "9.knob.1.3": [ + 185, + 32 + ], + "9.knob.1.4": [ + 185, + 33 + ], + "9.knob.1.5": [ + 185, + 34 + ], + "9.knob.1.6": [ + 185, + 35 + ], + "9.knob.1.7": [ + 185, + 36 + ], + "9.knob.2.0": [ + 185, + 49 + ], + "9.knob.2.1": [ + 185, + 50 + ], + "9.knob.2.2": [ + 185, + 51 + ], + "9.knob.2.3": [ + 185, + 52 + ], + "9.knob.2.4": [ + 185, + 53 + ], + "9.knob.2.5": [ + 185, + 54 + ], + "9.knob.2.6": [ + 185, + 55 + ], + "9.knob.2.7": [ + 185, + 56 + ], + "9.led.0.0": [ + 153, + 13 + ], + "9.led.1.0": [ + 153, + 14 + ], + "9.led.2.0": [ + 153, + 15 + ], + "9.led.0.1": [ + 153, + 29 + ], + "9.led.1.1": [ + 153, + 30 + ], + "9.led.2.1": [ + 153, + 31 + ], + "9.led.0.2": [ + 153, + 45 + ], + "9.led.1.2": [ + 153, + 46 + ], + "9.led.2.2": [ + 153, + 47 + ], + "9.led.0.3": [ + 153, + 61 + ], + "9.led.1.3": [ + 153, + 62 + ], + "9.led.2.3": [ + 153, + 63 + ], + "9.led.0.4": [ + 153, + 77 + ], + "9.led.1.4": [ + 153, + 78 + ], + "9.led.2.4": [ + 153, + 79 + ], + "9.led.0.5": [ + 153, + 93 + ], + "9.led.1.5": [ + 153, + 94 + ], + "9.led.2.5": [ + 153, + 95 + ], + "9.led.0.6": [ + 153, + 109 + ], + "9.led.1.6": [ + 153, + 110 + ], + "9.led.2.6": [ + 153, + 111 + ], + "9.led.0.7": [ + 153, + 125 + ], + "9.led.1.7": [ + 153, + 126 + ], + "9.led.2.7": [ + 153, + 127 + ], + "9.fader.0.0": [ + 185, + 77 + ], + "9.fader.0.1": [ + 185, + 78 + ], + "9.fader.0.2": [ + 185, + 79 + ], + "9.fader.0.3": [ + 185, + 80 + ], + "9.fader.0.4": [ + 185, + 81 + ], + "9.fader.0.5": [ + 185, + 82 + ], + "9.fader.0.6": [ + 185, + 83 + ], + "9.fader.0.7": [ + 185, + 84 + ], + "9.pad.0.0.on": [ + 153, + 41 + ], + "9.pad.0.0.off": [ + 137, + 41 + ], + "9.pad.0.1.on": [ + 153, + 42 + ], + "9.pad.0.1.off": [ + 137, + 42 + ], + "9.pad.0.2.on": [ + 153, + 43 + ], + "9.pad.0.2.off": [ + 137, + 43 + ], + "9.pad.0.3.on": [ + 153, + 44 + ], + "9.pad.0.3.off": [ + 137, + 44 + ], + "9.pad.0.4.on": [ + 153, + 57 + ], + "9.pad.0.4.off": [ + 137, + 57 + ], + "9.pad.0.5.on": [ + 153, + 58 + ], + "9.pad.0.5.off": [ + 137, + 58 + ], + "9.pad.0.6.on": [ + 153, + 59 + ], + "9.pad.0.6.off": [ + 137, + 59 + ], + "9.pad.0.7.on": [ + 153, + 60 + ], + "9.pad.0.7.off": [ + 137, + 60 + ], + "9.pad.1.0.on": [ + 153, + 73 + ], + "9.pad.1.0.off": [ + 137, + 73 + ], + "9.pad.1.1.on": [ + 153, + 74 + ], + "9.pad.1.1.off": [ + 137, + 74 + ], + "9.pad.1.2.on": [ + 153, + 75 + ], + "9.pad.1.2.off": [ + 137, + 75 + ], + "9.pad.1.3.on": [ + 153, + 76 + ], + "9.pad.1.3.off": [ + 137, + 76 + ], + "9.pad.1.4.on": [ + 153, + 89 + ], + "9.pad.1.4.off": [ + 137, + 89 + ], + "9.pad.1.5.on": [ + 153, + 90 + ], + "9.pad.1.5.off": [ + 137, + 90 + ], + "9.pad.1.6.on": [ + 153, + 91 + ], + "9.pad.1.6.off": [ + 137, + 91 + ], + "9.pad.1.7.on": [ + 153, + 92 + ], + "9.pad.1.7.off": [ + 137, + 92 + ], + "9.reset": [ + 185, + 0 + ], + "10.up": [ + 186, + 104 + ], + "10.down": [ + 186, + 105 + ], + "10.left": [ + 186, + 106 + ], + "10.right": [ + 186, + 107 + ], + "10.device.on": [ + 154, + 105 + ], + "10.device.off": [ + 138, + 105 + ], + "10.mute.on": [ + 154, + 106 + ], + "10.mute.off": [ + 138, + 106 + ], + "10.solo.on": [ + 154, + 107 + ], + "10.solo.off": [ + 138, + 107 + ], + "10.arm.on": [ + 154, + 108 + ], + "10.arm.off": [ + 138, + 108 + ], + "10.knob.0.0": [ + 186, + 13 + ], + "10.knob.0.1": [ + 186, + 14 + ], + "10.knob.0.2": [ + 186, + 15 + ], + "10.knob.0.3": [ + 186, + 16 + ], + "10.knob.0.4": [ + 186, + 17 + ], + "10.knob.0.5": [ + 186, + 18 + ], + "10.knob.0.6": [ + 186, + 19 + ], + "10.knob.0.7": [ + 186, + 20 + ], + "10.knob.1.0": [ + 186, + 29 + ], + "10.knob.1.1": [ + 186, + 30 + ], + "10.knob.1.2": [ + 186, + 31 + ], + "10.knob.1.3": [ + 186, + 32 + ], + "10.knob.1.4": [ + 186, + 33 + ], + "10.knob.1.5": [ + 186, + 34 + ], + "10.knob.1.6": [ + 186, + 35 + ], + "10.knob.1.7": [ + 186, + 36 + ], + "10.knob.2.0": [ + 186, + 49 + ], + "10.knob.2.1": [ + 186, + 50 + ], + "10.knob.2.2": [ + 186, + 51 + ], + "10.knob.2.3": [ + 186, + 52 + ], + "10.knob.2.4": [ + 186, + 53 + ], + "10.knob.2.5": [ + 186, + 54 + ], + "10.knob.2.6": [ + 186, + 55 + ], + "10.knob.2.7": [ + 186, + 56 + ], + "10.led.0.0": [ + 154, + 13 + ], + "10.led.1.0": [ + 154, + 14 + ], + "10.led.2.0": [ + 154, + 15 + ], + "10.led.0.1": [ + 154, + 29 + ], + "10.led.1.1": [ + 154, + 30 + ], + "10.led.2.1": [ + 154, + 31 + ], + "10.led.0.2": [ + 154, + 45 + ], + "10.led.1.2": [ + 154, + 46 + ], + "10.led.2.2": [ + 154, + 47 + ], + "10.led.0.3": [ + 154, + 61 + ], + "10.led.1.3": [ + 154, + 62 + ], + "10.led.2.3": [ + 154, + 63 + ], + "10.led.0.4": [ + 154, + 77 + ], + "10.led.1.4": [ + 154, + 78 + ], + "10.led.2.4": [ + 154, + 79 + ], + "10.led.0.5": [ + 154, + 93 + ], + "10.led.1.5": [ + 154, + 94 + ], + "10.led.2.5": [ + 154, + 95 + ], + "10.led.0.6": [ + 154, + 109 + ], + "10.led.1.6": [ + 154, + 110 + ], + "10.led.2.6": [ + 154, + 111 + ], + "10.led.0.7": [ + 154, + 125 + ], + "10.led.1.7": [ + 154, + 126 + ], + "10.led.2.7": [ + 154, + 127 + ], + "10.fader.0.0": [ + 186, + 77 + ], + "10.fader.0.1": [ + 186, + 78 + ], + "10.fader.0.2": [ + 186, + 79 + ], + "10.fader.0.3": [ + 186, + 80 + ], + "10.fader.0.4": [ + 186, + 81 + ], + "10.fader.0.5": [ + 186, + 82 + ], + "10.fader.0.6": [ + 186, + 83 + ], + "10.fader.0.7": [ + 186, + 84 + ], + "10.pad.0.0.on": [ + 154, + 41 + ], + "10.pad.0.0.off": [ + 138, + 41 + ], + "10.pad.0.1.on": [ + 154, + 42 + ], + "10.pad.0.1.off": [ + 138, + 42 + ], + "10.pad.0.2.on": [ + 154, + 43 + ], + "10.pad.0.2.off": [ + 138, + 43 + ], + "10.pad.0.3.on": [ + 154, + 44 + ], + "10.pad.0.3.off": [ + 138, + 44 + ], + "10.pad.0.4.on": [ + 154, + 57 + ], + "10.pad.0.4.off": [ + 138, + 57 + ], + "10.pad.0.5.on": [ + 154, + 58 + ], + "10.pad.0.5.off": [ + 138, + 58 + ], + "10.pad.0.6.on": [ + 154, + 59 + ], + "10.pad.0.6.off": [ + 138, + 59 + ], + "10.pad.0.7.on": [ + 154, + 60 + ], + "10.pad.0.7.off": [ + 138, + 60 + ], + "10.pad.1.0.on": [ + 154, + 73 + ], + "10.pad.1.0.off": [ + 138, + 73 + ], + "10.pad.1.1.on": [ + 154, + 74 + ], + "10.pad.1.1.off": [ + 138, + 74 + ], + "10.pad.1.2.on": [ + 154, + 75 + ], + "10.pad.1.2.off": [ + 138, + 75 + ], + "10.pad.1.3.on": [ + 154, + 76 + ], + "10.pad.1.3.off": [ + 138, + 76 + ], + "10.pad.1.4.on": [ + 154, + 89 + ], + "10.pad.1.4.off": [ + 138, + 89 + ], + "10.pad.1.5.on": [ + 154, + 90 + ], + "10.pad.1.5.off": [ + 138, + 90 + ], + "10.pad.1.6.on": [ + 154, + 91 + ], + "10.pad.1.6.off": [ + 138, + 91 + ], + "10.pad.1.7.on": [ + 154, + 92 + ], + "10.pad.1.7.off": [ + 138, + 92 + ], + "10.reset": [ + 186, + 0 + ], + "11.up": [ + 187, + 104 + ], + "11.down": [ + 187, + 105 + ], + "11.left": [ + 187, + 106 + ], + "11.right": [ + 187, + 107 + ], + "11.device.on": [ + 155, + 105 + ], + "11.device.off": [ + 139, + 105 + ], + "11.mute.on": [ + 155, + 106 + ], + "11.mute.off": [ + 139, + 106 + ], + "11.solo.on": [ + 155, + 107 + ], + "11.solo.off": [ + 139, + 107 + ], + "11.arm.on": [ + 155, + 108 + ], + "11.arm.off": [ + 139, + 108 + ], + "11.knob.0.0": [ + 187, + 13 + ], + "11.knob.0.1": [ + 187, + 14 + ], + "11.knob.0.2": [ + 187, + 15 + ], + "11.knob.0.3": [ + 187, + 16 + ], + "11.knob.0.4": [ + 187, + 17 + ], + "11.knob.0.5": [ + 187, + 18 + ], + "11.knob.0.6": [ + 187, + 19 + ], + "11.knob.0.7": [ + 187, + 20 + ], + "11.knob.1.0": [ + 187, + 29 + ], + "11.knob.1.1": [ + 187, + 30 + ], + "11.knob.1.2": [ + 187, + 31 + ], + "11.knob.1.3": [ + 187, + 32 + ], + "11.knob.1.4": [ + 187, + 33 + ], + "11.knob.1.5": [ + 187, + 34 + ], + "11.knob.1.6": [ + 187, + 35 + ], + "11.knob.1.7": [ + 187, + 36 + ], + "11.knob.2.0": [ + 187, + 49 + ], + "11.knob.2.1": [ + 187, + 50 + ], + "11.knob.2.2": [ + 187, + 51 + ], + "11.knob.2.3": [ + 187, + 52 + ], + "11.knob.2.4": [ + 187, + 53 + ], + "11.knob.2.5": [ + 187, + 54 + ], + "11.knob.2.6": [ + 187, + 55 + ], + "11.knob.2.7": [ + 187, + 56 + ], + "11.led.0.0": [ + 155, + 13 + ], + "11.led.1.0": [ + 155, + 14 + ], + "11.led.2.0": [ + 155, + 15 + ], + "11.led.0.1": [ + 155, + 29 + ], + "11.led.1.1": [ + 155, + 30 + ], + "11.led.2.1": [ + 155, + 31 + ], + "11.led.0.2": [ + 155, + 45 + ], + "11.led.1.2": [ + 155, + 46 + ], + "11.led.2.2": [ + 155, + 47 + ], + "11.led.0.3": [ + 155, + 61 + ], + "11.led.1.3": [ + 155, + 62 + ], + "11.led.2.3": [ + 155, + 63 + ], + "11.led.0.4": [ + 155, + 77 + ], + "11.led.1.4": [ + 155, + 78 + ], + "11.led.2.4": [ + 155, + 79 + ], + "11.led.0.5": [ + 155, + 93 + ], + "11.led.1.5": [ + 155, + 94 + ], + "11.led.2.5": [ + 155, + 95 + ], + "11.led.0.6": [ + 155, + 109 + ], + "11.led.1.6": [ + 155, + 110 + ], + "11.led.2.6": [ + 155, + 111 + ], + "11.led.0.7": [ + 155, + 125 + ], + "11.led.1.7": [ + 155, + 126 + ], + "11.led.2.7": [ + 155, + 127 + ], + "11.fader.0.0": [ + 187, + 77 + ], + "11.fader.0.1": [ + 187, + 78 + ], + "11.fader.0.2": [ + 187, + 79 + ], + "11.fader.0.3": [ + 187, + 80 + ], + "11.fader.0.4": [ + 187, + 81 + ], + "11.fader.0.5": [ + 187, + 82 + ], + "11.fader.0.6": [ + 187, + 83 + ], + "11.fader.0.7": [ + 187, + 84 + ], + "11.pad.0.0.on": [ + 155, + 41 + ], + "11.pad.0.0.off": [ + 139, + 41 + ], + "11.pad.0.1.on": [ + 155, + 42 + ], + "11.pad.0.1.off": [ + 139, + 42 + ], + "11.pad.0.2.on": [ + 155, + 43 + ], + "11.pad.0.2.off": [ + 139, + 43 + ], + "11.pad.0.3.on": [ + 155, + 44 + ], + "11.pad.0.3.off": [ + 139, + 44 + ], + "11.pad.0.4.on": [ + 155, + 57 + ], + "11.pad.0.4.off": [ + 139, + 57 + ], + "11.pad.0.5.on": [ + 155, + 58 + ], + "11.pad.0.5.off": [ + 139, + 58 + ], + "11.pad.0.6.on": [ + 155, + 59 + ], + "11.pad.0.6.off": [ + 139, + 59 + ], + "11.pad.0.7.on": [ + 155, + 60 + ], + "11.pad.0.7.off": [ + 139, + 60 + ], + "11.pad.1.0.on": [ + 155, + 73 + ], + "11.pad.1.0.off": [ + 139, + 73 + ], + "11.pad.1.1.on": [ + 155, + 74 + ], + "11.pad.1.1.off": [ + 139, + 74 + ], + "11.pad.1.2.on": [ + 155, + 75 + ], + "11.pad.1.2.off": [ + 139, + 75 + ], + "11.pad.1.3.on": [ + 155, + 76 + ], + "11.pad.1.3.off": [ + 139, + 76 + ], + "11.pad.1.4.on": [ + 155, + 89 + ], + "11.pad.1.4.off": [ + 139, + 89 + ], + "11.pad.1.5.on": [ + 155, + 90 + ], + "11.pad.1.5.off": [ + 139, + 90 + ], + "11.pad.1.6.on": [ + 155, + 91 + ], + "11.pad.1.6.off": [ + 139, + 91 + ], + "11.pad.1.7.on": [ + 155, + 92 + ], + "11.pad.1.7.off": [ + 139, + 92 + ], + "11.reset": [ + 187, + 0 + ], + "12.up": [ + 188, + 104 + ], + "12.down": [ + 188, + 105 + ], + "12.left": [ + 188, + 106 + ], + "12.right": [ + 188, + 107 + ], + "12.device.on": [ + 156, + 105 + ], + "12.device.off": [ + 140, + 105 + ], + "12.mute.on": [ + 156, + 106 + ], + "12.mute.off": [ + 140, + 106 + ], + "12.solo.on": [ + 156, + 107 + ], + "12.solo.off": [ + 140, + 107 + ], + "12.arm.on": [ + 156, + 108 + ], + "12.arm.off": [ + 140, + 108 + ], + "12.knob.0.0": [ + 188, + 13 + ], + "12.knob.0.1": [ + 188, + 14 + ], + "12.knob.0.2": [ + 188, + 15 + ], + "12.knob.0.3": [ + 188, + 16 + ], + "12.knob.0.4": [ + 188, + 17 + ], + "12.knob.0.5": [ + 188, + 18 + ], + "12.knob.0.6": [ + 188, + 19 + ], + "12.knob.0.7": [ + 188, + 20 + ], + "12.knob.1.0": [ + 188, + 29 + ], + "12.knob.1.1": [ + 188, + 30 + ], + "12.knob.1.2": [ + 188, + 31 + ], + "12.knob.1.3": [ + 188, + 32 + ], + "12.knob.1.4": [ + 188, + 33 + ], + "12.knob.1.5": [ + 188, + 34 + ], + "12.knob.1.6": [ + 188, + 35 + ], + "12.knob.1.7": [ + 188, + 36 + ], + "12.knob.2.0": [ + 188, + 49 + ], + "12.knob.2.1": [ + 188, + 50 + ], + "12.knob.2.2": [ + 188, + 51 + ], + "12.knob.2.3": [ + 188, + 52 + ], + "12.knob.2.4": [ + 188, + 53 + ], + "12.knob.2.5": [ + 188, + 54 + ], + "12.knob.2.6": [ + 188, + 55 + ], + "12.knob.2.7": [ + 188, + 56 + ], + "12.led.0.0": [ + 156, + 13 + ], + "12.led.1.0": [ + 156, + 14 + ], + "12.led.2.0": [ + 156, + 15 + ], + "12.led.0.1": [ + 156, + 29 + ], + "12.led.1.1": [ + 156, + 30 + ], + "12.led.2.1": [ + 156, + 31 + ], + "12.led.0.2": [ + 156, + 45 + ], + "12.led.1.2": [ + 156, + 46 + ], + "12.led.2.2": [ + 156, + 47 + ], + "12.led.0.3": [ + 156, + 61 + ], + "12.led.1.3": [ + 156, + 62 + ], + "12.led.2.3": [ + 156, + 63 + ], + "12.led.0.4": [ + 156, + 77 + ], + "12.led.1.4": [ + 156, + 78 + ], + "12.led.2.4": [ + 156, + 79 + ], + "12.led.0.5": [ + 156, + 93 + ], + "12.led.1.5": [ + 156, + 94 + ], + "12.led.2.5": [ + 156, + 95 + ], + "12.led.0.6": [ + 156, + 109 + ], + "12.led.1.6": [ + 156, + 110 + ], + "12.led.2.6": [ + 156, + 111 + ], + "12.led.0.7": [ + 156, + 125 + ], + "12.led.1.7": [ + 156, + 126 + ], + "12.led.2.7": [ + 156, + 127 + ], + "12.fader.0.0": [ + 188, + 77 + ], + "12.fader.0.1": [ + 188, + 78 + ], + "12.fader.0.2": [ + 188, + 79 + ], + "12.fader.0.3": [ + 188, + 80 + ], + "12.fader.0.4": [ + 188, + 81 + ], + "12.fader.0.5": [ + 188, + 82 + ], + "12.fader.0.6": [ + 188, + 83 + ], + "12.fader.0.7": [ + 188, + 84 + ], + "12.pad.0.0.on": [ + 156, + 41 + ], + "12.pad.0.0.off": [ + 140, + 41 + ], + "12.pad.0.1.on": [ + 156, + 42 + ], + "12.pad.0.1.off": [ + 140, + 42 + ], + "12.pad.0.2.on": [ + 156, + 43 + ], + "12.pad.0.2.off": [ + 140, + 43 + ], + "12.pad.0.3.on": [ + 156, + 44 + ], + "12.pad.0.3.off": [ + 140, + 44 + ], + "12.pad.0.4.on": [ + 156, + 57 + ], + "12.pad.0.4.off": [ + 140, + 57 + ], + "12.pad.0.5.on": [ + 156, + 58 + ], + "12.pad.0.5.off": [ + 140, + 58 + ], + "12.pad.0.6.on": [ + 156, + 59 + ], + "12.pad.0.6.off": [ + 140, + 59 + ], + "12.pad.0.7.on": [ + 156, + 60 + ], + "12.pad.0.7.off": [ + 140, + 60 + ], + "12.pad.1.0.on": [ + 156, + 73 + ], + "12.pad.1.0.off": [ + 140, + 73 + ], + "12.pad.1.1.on": [ + 156, + 74 + ], + "12.pad.1.1.off": [ + 140, + 74 + ], + "12.pad.1.2.on": [ + 156, + 75 + ], + "12.pad.1.2.off": [ + 140, + 75 + ], + "12.pad.1.3.on": [ + 156, + 76 + ], + "12.pad.1.3.off": [ + 140, + 76 + ], + "12.pad.1.4.on": [ + 156, + 89 + ], + "12.pad.1.4.off": [ + 140, + 89 + ], + "12.pad.1.5.on": [ + 156, + 90 + ], + "12.pad.1.5.off": [ + 140, + 90 + ], + "12.pad.1.6.on": [ + 156, + 91 + ], + "12.pad.1.6.off": [ + 140, + 91 + ], + "12.pad.1.7.on": [ + 156, + 92 + ], + "12.pad.1.7.off": [ + 140, + 92 + ], + "12.reset": [ + 188, + 0 + ], + "13.up": [ + 189, + 104 + ], + "13.down": [ + 189, + 105 + ], + "13.left": [ + 189, + 106 + ], + "13.right": [ + 189, + 107 + ], + "13.device.on": [ + 157, + 105 + ], + "13.device.off": [ + 141, + 105 + ], + "13.mute.on": [ + 157, + 106 + ], + "13.mute.off": [ + 141, + 106 + ], + "13.solo.on": [ + 157, + 107 + ], + "13.solo.off": [ + 141, + 107 + ], + "13.arm.on": [ + 157, + 108 + ], + "13.arm.off": [ + 141, + 108 + ], + "13.knob.0.0": [ + 189, + 13 + ], + "13.knob.0.1": [ + 189, + 14 + ], + "13.knob.0.2": [ + 189, + 15 + ], + "13.knob.0.3": [ + 189, + 16 + ], + "13.knob.0.4": [ + 189, + 17 + ], + "13.knob.0.5": [ + 189, + 18 + ], + "13.knob.0.6": [ + 189, + 19 + ], + "13.knob.0.7": [ + 189, + 20 + ], + "13.knob.1.0": [ + 189, + 29 + ], + "13.knob.1.1": [ + 189, + 30 + ], + "13.knob.1.2": [ + 189, + 31 + ], + "13.knob.1.3": [ + 189, + 32 + ], + "13.knob.1.4": [ + 189, + 33 + ], + "13.knob.1.5": [ + 189, + 34 + ], + "13.knob.1.6": [ + 189, + 35 + ], + "13.knob.1.7": [ + 189, + 36 + ], + "13.knob.2.0": [ + 189, + 49 + ], + "13.knob.2.1": [ + 189, + 50 + ], + "13.knob.2.2": [ + 189, + 51 + ], + "13.knob.2.3": [ + 189, + 52 + ], + "13.knob.2.4": [ + 189, + 53 + ], + "13.knob.2.5": [ + 189, + 54 + ], + "13.knob.2.6": [ + 189, + 55 + ], + "13.knob.2.7": [ + 189, + 56 + ], + "13.led.0.0": [ + 157, + 13 + ], + "13.led.1.0": [ + 157, + 14 + ], + "13.led.2.0": [ + 157, + 15 + ], + "13.led.0.1": [ + 157, + 29 + ], + "13.led.1.1": [ + 157, + 30 + ], + "13.led.2.1": [ + 157, + 31 + ], + "13.led.0.2": [ + 157, + 45 + ], + "13.led.1.2": [ + 157, + 46 + ], + "13.led.2.2": [ + 157, + 47 + ], + "13.led.0.3": [ + 157, + 61 + ], + "13.led.1.3": [ + 157, + 62 + ], + "13.led.2.3": [ + 157, + 63 + ], + "13.led.0.4": [ + 157, + 77 + ], + "13.led.1.4": [ + 157, + 78 + ], + "13.led.2.4": [ + 157, + 79 + ], + "13.led.0.5": [ + 157, + 93 + ], + "13.led.1.5": [ + 157, + 94 + ], + "13.led.2.5": [ + 157, + 95 + ], + "13.led.0.6": [ + 157, + 109 + ], + "13.led.1.6": [ + 157, + 110 + ], + "13.led.2.6": [ + 157, + 111 + ], + "13.led.0.7": [ + 157, + 125 + ], + "13.led.1.7": [ + 157, + 126 + ], + "13.led.2.7": [ + 157, + 127 + ], + "13.fader.0.0": [ + 189, + 77 + ], + "13.fader.0.1": [ + 189, + 78 + ], + "13.fader.0.2": [ + 189, + 79 + ], + "13.fader.0.3": [ + 189, + 80 + ], + "13.fader.0.4": [ + 189, + 81 + ], + "13.fader.0.5": [ + 189, + 82 + ], + "13.fader.0.6": [ + 189, + 83 + ], + "13.fader.0.7": [ + 189, + 84 + ], + "13.pad.0.0.on": [ + 157, + 41 + ], + "13.pad.0.0.off": [ + 141, + 41 + ], + "13.pad.0.1.on": [ + 157, + 42 + ], + "13.pad.0.1.off": [ + 141, + 42 + ], + "13.pad.0.2.on": [ + 157, + 43 + ], + "13.pad.0.2.off": [ + 141, + 43 + ], + "13.pad.0.3.on": [ + 157, + 44 + ], + "13.pad.0.3.off": [ + 141, + 44 + ], + "13.pad.0.4.on": [ + 157, + 57 + ], + "13.pad.0.4.off": [ + 141, + 57 + ], + "13.pad.0.5.on": [ + 157, + 58 + ], + "13.pad.0.5.off": [ + 141, + 58 + ], + "13.pad.0.6.on": [ + 157, + 59 + ], + "13.pad.0.6.off": [ + 141, + 59 + ], + "13.pad.0.7.on": [ + 157, + 60 + ], + "13.pad.0.7.off": [ + 141, + 60 + ], + "13.pad.1.0.on": [ + 157, + 73 + ], + "13.pad.1.0.off": [ + 141, + 73 + ], + "13.pad.1.1.on": [ + 157, + 74 + ], + "13.pad.1.1.off": [ + 141, + 74 + ], + "13.pad.1.2.on": [ + 157, + 75 + ], + "13.pad.1.2.off": [ + 141, + 75 + ], + "13.pad.1.3.on": [ + 157, + 76 + ], + "13.pad.1.3.off": [ + 141, + 76 + ], + "13.pad.1.4.on": [ + 157, + 89 + ], + "13.pad.1.4.off": [ + 141, + 89 + ], + "13.pad.1.5.on": [ + 157, + 90 + ], + "13.pad.1.5.off": [ + 141, + 90 + ], + "13.pad.1.6.on": [ + 157, + 91 + ], + "13.pad.1.6.off": [ + 141, + 91 + ], + "13.pad.1.7.on": [ + 157, + 92 + ], + "13.pad.1.7.off": [ + 141, + 92 + ], + "13.reset": [ + 189, + 0 + ], + "14.up": [ + 190, + 104 + ], + "14.down": [ + 190, + 105 + ], + "14.left": [ + 190, + 106 + ], + "14.right": [ + 190, + 107 + ], + "14.device.on": [ + 158, + 105 + ], + "14.device.off": [ + 142, + 105 + ], + "14.mute.on": [ + 158, + 106 + ], + "14.mute.off": [ + 142, + 106 + ], + "14.solo.on": [ + 158, + 107 + ], + "14.solo.off": [ + 142, + 107 + ], + "14.arm.on": [ + 158, + 108 + ], + "14.arm.off": [ + 142, + 108 + ], + "14.knob.0.0": [ + 190, + 13 + ], + "14.knob.0.1": [ + 190, + 14 + ], + "14.knob.0.2": [ + 190, + 15 + ], + "14.knob.0.3": [ + 190, + 16 + ], + "14.knob.0.4": [ + 190, + 17 + ], + "14.knob.0.5": [ + 190, + 18 + ], + "14.knob.0.6": [ + 190, + 19 + ], + "14.knob.0.7": [ + 190, + 20 + ], + "14.knob.1.0": [ + 190, + 29 + ], + "14.knob.1.1": [ + 190, + 30 + ], + "14.knob.1.2": [ + 190, + 31 + ], + "14.knob.1.3": [ + 190, + 32 + ], + "14.knob.1.4": [ + 190, + 33 + ], + "14.knob.1.5": [ + 190, + 34 + ], + "14.knob.1.6": [ + 190, + 35 + ], + "14.knob.1.7": [ + 190, + 36 + ], + "14.knob.2.0": [ + 190, + 49 + ], + "14.knob.2.1": [ + 190, + 50 + ], + "14.knob.2.2": [ + 190, + 51 + ], + "14.knob.2.3": [ + 190, + 52 + ], + "14.knob.2.4": [ + 190, + 53 + ], + "14.knob.2.5": [ + 190, + 54 + ], + "14.knob.2.6": [ + 190, + 55 + ], + "14.knob.2.7": [ + 190, + 56 + ], + "14.led.0.0": [ + 158, + 13 + ], + "14.led.1.0": [ + 158, + 14 + ], + "14.led.2.0": [ + 158, + 15 + ], + "14.led.0.1": [ + 158, + 29 + ], + "14.led.1.1": [ + 158, + 30 + ], + "14.led.2.1": [ + 158, + 31 + ], + "14.led.0.2": [ + 158, + 45 + ], + "14.led.1.2": [ + 158, + 46 + ], + "14.led.2.2": [ + 158, + 47 + ], + "14.led.0.3": [ + 158, + 61 + ], + "14.led.1.3": [ + 158, + 62 + ], + "14.led.2.3": [ + 158, + 63 + ], + "14.led.0.4": [ + 158, + 77 + ], + "14.led.1.4": [ + 158, + 78 + ], + "14.led.2.4": [ + 158, + 79 + ], + "14.led.0.5": [ + 158, + 93 + ], + "14.led.1.5": [ + 158, + 94 + ], + "14.led.2.5": [ + 158, + 95 + ], + "14.led.0.6": [ + 158, + 109 + ], + "14.led.1.6": [ + 158, + 110 + ], + "14.led.2.6": [ + 158, + 111 + ], + "14.led.0.7": [ + 158, + 125 + ], + "14.led.1.7": [ + 158, + 126 + ], + "14.led.2.7": [ + 158, + 127 + ], + "14.fader.0.0": [ + 190, + 77 + ], + "14.fader.0.1": [ + 190, + 78 + ], + "14.fader.0.2": [ + 190, + 79 + ], + "14.fader.0.3": [ + 190, + 80 + ], + "14.fader.0.4": [ + 190, + 81 + ], + "14.fader.0.5": [ + 190, + 82 + ], + "14.fader.0.6": [ + 190, + 83 + ], + "14.fader.0.7": [ + 190, + 84 + ], + "14.pad.0.0.on": [ + 158, + 41 + ], + "14.pad.0.0.off": [ + 142, + 41 + ], + "14.pad.0.1.on": [ + 158, + 42 + ], + "14.pad.0.1.off": [ + 142, + 42 + ], + "14.pad.0.2.on": [ + 158, + 43 + ], + "14.pad.0.2.off": [ + 142, + 43 + ], + "14.pad.0.3.on": [ + 158, + 44 + ], + "14.pad.0.3.off": [ + 142, + 44 + ], + "14.pad.0.4.on": [ + 158, + 57 + ], + "14.pad.0.4.off": [ + 142, + 57 + ], + "14.pad.0.5.on": [ + 158, + 58 + ], + "14.pad.0.5.off": [ + 142, + 58 + ], + "14.pad.0.6.on": [ + 158, + 59 + ], + "14.pad.0.6.off": [ + 142, + 59 + ], + "14.pad.0.7.on": [ + 158, + 60 + ], + "14.pad.0.7.off": [ + 142, + 60 + ], + "14.pad.1.0.on": [ + 158, + 73 + ], + "14.pad.1.0.off": [ + 142, + 73 + ], + "14.pad.1.1.on": [ + 158, + 74 + ], + "14.pad.1.1.off": [ + 142, + 74 + ], + "14.pad.1.2.on": [ + 158, + 75 + ], + "14.pad.1.2.off": [ + 142, + 75 + ], + "14.pad.1.3.on": [ + 158, + 76 + ], + "14.pad.1.3.off": [ + 142, + 76 + ], + "14.pad.1.4.on": [ + 158, + 89 + ], + "14.pad.1.4.off": [ + 142, + 89 + ], + "14.pad.1.5.on": [ + 158, + 90 + ], + "14.pad.1.5.off": [ + 142, + 90 + ], + "14.pad.1.6.on": [ + 158, + 91 + ], + "14.pad.1.6.off": [ + 142, + 91 + ], + "14.pad.1.7.on": [ + 158, + 92 + ], + "14.pad.1.7.off": [ + 142, + 92 + ], + "14.reset": [ + 190, + 0 + ], + "15.up": [ + 191, + 104 + ], + "15.down": [ + 191, + 105 + ], + "15.left": [ + 191, + 106 + ], + "15.right": [ + 191, + 107 + ], + "15.device.on": [ + 159, + 105 + ], + "15.device.off": [ + 143, + 105 + ], + "15.mute.on": [ + 159, + 106 + ], + "15.mute.off": [ + 143, + 106 + ], + "15.solo.on": [ + 159, + 107 + ], + "15.solo.off": [ + 143, + 107 + ], + "15.arm.on": [ + 159, + 108 + ], + "15.arm.off": [ + 143, + 108 + ], + "15.knob.0.0": [ + 191, + 13 + ], + "15.knob.0.1": [ + 191, + 14 + ], + "15.knob.0.2": [ + 191, + 15 + ], + "15.knob.0.3": [ + 191, + 16 + ], + "15.knob.0.4": [ + 191, + 17 + ], + "15.knob.0.5": [ + 191, + 18 + ], + "15.knob.0.6": [ + 191, + 19 + ], + "15.knob.0.7": [ + 191, + 20 + ], + "15.knob.1.0": [ + 191, + 29 + ], + "15.knob.1.1": [ + 191, + 30 + ], + "15.knob.1.2": [ + 191, + 31 + ], + "15.knob.1.3": [ + 191, + 32 + ], + "15.knob.1.4": [ + 191, + 33 + ], + "15.knob.1.5": [ + 191, + 34 + ], + "15.knob.1.6": [ + 191, + 35 + ], + "15.knob.1.7": [ + 191, + 36 + ], + "15.knob.2.0": [ + 191, + 49 + ], + "15.knob.2.1": [ + 191, + 50 + ], + "15.knob.2.2": [ + 191, + 51 + ], + "15.knob.2.3": [ + 191, + 52 + ], + "15.knob.2.4": [ + 191, + 53 + ], + "15.knob.2.5": [ + 191, + 54 + ], + "15.knob.2.6": [ + 191, + 55 + ], + "15.knob.2.7": [ + 191, + 56 + ], + "15.led.0.0": [ + 159, + 13 + ], + "15.led.1.0": [ + 159, + 14 + ], + "15.led.2.0": [ + 159, + 15 + ], + "15.led.0.1": [ + 159, + 29 + ], + "15.led.1.1": [ + 159, + 30 + ], + "15.led.2.1": [ + 159, + 31 + ], + "15.led.0.2": [ + 159, + 45 + ], + "15.led.1.2": [ + 159, + 46 + ], + "15.led.2.2": [ + 159, + 47 + ], + "15.led.0.3": [ + 159, + 61 + ], + "15.led.1.3": [ + 159, + 62 + ], + "15.led.2.3": [ + 159, + 63 + ], + "15.led.0.4": [ + 159, + 77 + ], + "15.led.1.4": [ + 159, + 78 + ], + "15.led.2.4": [ + 159, + 79 + ], + "15.led.0.5": [ + 159, + 93 + ], + "15.led.1.5": [ + 159, + 94 + ], + "15.led.2.5": [ + 159, + 95 + ], + "15.led.0.6": [ + 159, + 109 + ], + "15.led.1.6": [ + 159, + 110 + ], + "15.led.2.6": [ + 159, + 111 + ], + "15.led.0.7": [ + 159, + 125 + ], + "15.led.1.7": [ + 159, + 126 + ], + "15.led.2.7": [ + 159, + 127 + ], + "15.fader.0.0": [ + 191, + 77 + ], + "15.fader.0.1": [ + 191, + 78 + ], + "15.fader.0.2": [ + 191, + 79 + ], + "15.fader.0.3": [ + 191, + 80 + ], + "15.fader.0.4": [ + 191, + 81 + ], + "15.fader.0.5": [ + 191, + 82 + ], + "15.fader.0.6": [ + 191, + 83 + ], + "15.fader.0.7": [ + 191, + 84 + ], + "15.pad.0.0.on": [ + 159, + 41 + ], + "15.pad.0.0.off": [ + 143, + 41 + ], + "15.pad.0.1.on": [ + 159, + 42 + ], + "15.pad.0.1.off": [ + 143, + 42 + ], + "15.pad.0.2.on": [ + 159, + 43 + ], + "15.pad.0.2.off": [ + 143, + 43 + ], + "15.pad.0.3.on": [ + 159, + 44 + ], + "15.pad.0.3.off": [ + 143, + 44 + ], + "15.pad.0.4.on": [ + 159, + 57 + ], + "15.pad.0.4.off": [ + 143, + 57 + ], + "15.pad.0.5.on": [ + 159, + 58 + ], + "15.pad.0.5.off": [ + 143, + 58 + ], + "15.pad.0.6.on": [ + 159, + 59 + ], + "15.pad.0.6.off": [ + 143, + 59 + ], + "15.pad.0.7.on": [ + 159, + 60 + ], + "15.pad.0.7.off": [ + 143, + 60 + ], + "15.pad.1.0.on": [ + 159, + 73 + ], + "15.pad.1.0.off": [ + 143, + 73 + ], + "15.pad.1.1.on": [ + 159, + 74 + ], + "15.pad.1.1.off": [ + 143, + 74 + ], + "15.pad.1.2.on": [ + 159, + 75 + ], + "15.pad.1.2.off": [ + 143, + 75 + ], + "15.pad.1.3.on": [ + 159, + 76 + ], + "15.pad.1.3.off": [ + 143, + 76 + ], + "15.pad.1.4.on": [ + 159, + 89 + ], + "15.pad.1.4.off": [ + 143, + 89 + ], + "15.pad.1.5.on": [ + 159, + 90 + ], + "15.pad.1.5.off": [ + 143, + 90 + ], + "15.pad.1.6.on": [ + 159, + 91 + ], + "15.pad.1.6.off": [ + 143, + 91 + ], + "15.pad.1.7.on": [ + 159, + 92 + ], + "15.pad.1.7.off": [ + 143, + 92 + ], + "15.reset": [ + 191, + 0 + ] + } +} diff --git a/packages/launchcontrol-xl-mk2/package.json b/packages/launchcontrol-xl-mk2/package.json new file mode 100644 index 0000000..a0a9557 --- /dev/null +++ b/packages/launchcontrol-xl-mk2/package.json @@ -0,0 +1,13 @@ +{ + "name": "@mixxx-launch/launchcontrol-xl-mk2", + "author": "Midiparse", + "description": "Novation LaunchControl XL MK2 mapping", + "homepage": "https://github.com/dszakallas/mixxx-launchpad", + "private": true, + "version": "1.0.0", + "main": "src/index.ts", + "dependencies": { + "@babel/runtime-corejs3": "^7.21.0", + "@mixxx-launch/launchcontrol-common": "1.0.0" + } +} diff --git a/packages/launchcontrol-xl-mk2/src/index.ts b/packages/launchcontrol-xl-mk2/src/index.ts new file mode 100644 index 0000000..61cbbbc --- /dev/null +++ b/packages/launchcontrol-xl-mk2/src/index.ts @@ -0,0 +1,87 @@ +import def from '../controller.json' +import { MidiControlDef, sendShortMsg, sendSysexMsg } from '@mixxx-launch/mixxx' +import { convertControlDef, useDevice, LaunchControlDevice } from '@mixxx-launch/launchcontrol-common' +import { range } from '@mixxx-launch/common' + +const colors = { + black: 12, + lo_red: 13, + hi_red: 15, + lo_orange: 30, + hi_orange: 47, + lo_amber: 29, + hi_amber: 63, + lo_yellow: 45, + hi_yellow: 62, + lo_green: 28, + hi_green: 60, +} + +const leds = Object.assign( + {}, + Object.fromEntries([...function* () { + for (const r of range(3)) { + for (const c of range(8)) { + yield [`knob.${r}.${c}`, r * 8 + c] + } + } + }()]), + Object.fromEntries([...function* () { + for (const r of range(3)) { + for (const c of range(8)) { + yield [`pad.${r}.${c}`, r * 8 + c + 24] + } + } + }()]), + { + device: 0x28, + mute: 0x29, + solo: 0x2a, + arm: 0x2b, + up: 0x2c, + down: 0x2d, + left: 0x2e, + right: 0x2f, + } +) + +const templateChangeSysexPreamble = [240, 0, 32, 41, 2, 17, 119] as const +const colorChangeSysexPreamble = [240, 0, 32, 41, 2, 17, 120] as const + +class LaunchControlXLMK2Device extends LaunchControlDevice { + controls: { [key: string]: MidiControlDef } + colors: { [key: string]: number } + leds: { [key: string]: number } + numTemplates = 16 + + constructor() { + super() + this.controls = Object.fromEntries( + Object + .entries(def.controls) + .map(([k, v]) => [k, convertControlDef(k, v as [number, number])])) + this.leds = leds + this.colors = colors + } + + sendColor(template: number, ledIndex: number, color: number): void { + sendSysexMsg([...colorChangeSysexPreamble, template, ledIndex, color, 247]) + } + + resetTemplate(template: number): void { + sendShortMsg(this.controls[`${template}.reset`], 0) + } + + changeTemplate(template: number): void { + sendSysexMsg([...templateChangeSysexPreamble, template, 247]) + } + + handleTemplateChangeSysex(data: number[]): number | undefined { + if (data.length === 9 && templateChangeSysexPreamble[6] === data[6]) { + return data[7] + } + } +} + +export default useDevice(new LaunchControlXLMK2Device()) + diff --git a/packages/launchcontrol-xl-mk2/tsconfig.json b/packages/launchcontrol-xl-mk2/tsconfig.json new file mode 100644 index 0000000..1039c4d --- /dev/null +++ b/packages/launchcontrol-xl-mk2/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "dist" + }, + "include": [ + "controller.json", + "src" + ], + "references": [ + { "path": "../launchcontrol-common" } + ] +} diff --git a/packages/app/package.json b/packages/launchpad-common/package.json similarity index 68% rename from packages/app/package.json rename to packages/launchpad-common/package.json index 40061af..65394d3 100644 --- a/packages/app/package.json +++ b/packages/launchpad-common/package.json @@ -1,5 +1,5 @@ { - "name": "@mixxx-launchpad/app", + "name": "@mixxx-launch/launchpad-common", "private": true, "version": "1.0.0", "main": "src/index.ts", @@ -7,6 +7,6 @@ "license": "MIT", "dependencies": { "eventemitter3": "~5.0.0", - "@mixxx-launchpad/mixxx": "~1.0.0" + "@mixxx-launch/mixxx": "~1.0.0" } } diff --git a/packages/app/src/App.ts b/packages/launchpad-common/src/App.ts similarity index 97% rename from packages/app/src/App.ts rename to packages/launchpad-common/src/App.ts index 3d94315..44befef 100644 --- a/packages/app/src/App.ts +++ b/packages/launchpad-common/src/App.ts @@ -1,12 +1,12 @@ import ModifierSidebar, { modes, retainAttackMode } from './ModifierSidebar' import type { Modifier } from './ModifierSidebar' -import { Component, MidiComponent, MidiMessage } from '@mixxx-launchpad/mixxx' -import { LaunchpadDevice, RGBColor } from '.' -import { Action } from '@mixxx-launchpad/mixxx/src/util' +import { Component, MidiMessage } from '@mixxx-launch/mixxx' +import { LaunchpadDevice, MidiComponent, RGBColor } from '.' +import { Action } from '@mixxx-launch/mixxx/src/util' import { ControlContext, makePresetTemplate, Preset, PresetConf } from './Control' import PlaylistSidebar from './PlaylistSidebar' -import { posMod } from './util' +import { posMod } from '@mixxx-launch/common' export type PresetSize = 'short' | 'tall' | 'grande' diff --git a/packages/app/src/Bpm.ts b/packages/launchpad-common/src/Bpm.ts similarity index 100% rename from packages/app/src/Bpm.ts rename to packages/launchpad-common/src/Bpm.ts diff --git a/packages/app/src/Control.ts b/packages/launchpad-common/src/Control.ts similarity index 92% rename from packages/app/src/Control.ts rename to packages/launchpad-common/src/Control.ts index f362c90..2c5cfba 100644 --- a/packages/app/src/Control.ts +++ b/packages/launchpad-common/src/Control.ts @@ -1,21 +1,20 @@ import type { Modifier } from './ModifierSidebar' +import { array, map, range } from '@mixxx-launch/common' + import { ChannelControlDef, - channelControlDefs, Component, ControlComponent, ControlDef, ControlMessage, - MidiComponent, MidiMessage, -} from '@mixxx-launchpad/mixxx' -import { LaunchpadDevice } from '.' +} from '@mixxx-launch/mixxx' +import { LaunchpadDevice, MidiComponent } from '.' import makeControlTemplateIndex, { ControlTypeIndex } from './controls' import { default as makeSamplerPad } from './controls/samplerPad' -import { range } from './util' -import { getValue, masterControlDef, SamplerControlDef, samplerControlDefs } from '@mixxx-launchpad/mixxx/src/Control' +import { getValue, root, SamplerControlDef } from '@mixxx-launch/mixxx/src/Control' import { Theme } from './App' export type ControlContext = { @@ -216,11 +215,11 @@ const makeSamplerPalettePresetTemplate = ( _startingChannel: number, theme: Theme, ) => ({ - controls: range(Math.min(n, getValue(masterControlDef.num_samplers))).map((i) => { + controls: array(map((i) => { const dy = 7 - ~~(i / rows) const dx = i % rows - return makeSamplerPad({}, tr(gridPosition, [dx, dy]), samplerControlDefs[i + offset], theme) - }), + return makeSamplerPad({}, tr(gridPosition, [dx, dy]), root.samplers[i + offset], theme) + }, range(Math.min(n, getValue(root.master.num_samplers))))), }) export const makePresetTemplate = ( @@ -230,7 +229,7 @@ export const makePresetTemplate = ( theme: Theme, ): PresetTemplate => { if (isDeckPresetConf(conf)) { - return makeDeckPresetTemplate(conf, gridPosition, channelControlDefs[channel], theme) + return makeDeckPresetTemplate(conf, gridPosition, root.channels[channel], theme) } else { return makeSamplerPalettePresetTemplate(conf, gridPosition, channel, theme) } diff --git a/packages/app/src/ModifierSidebar.ts b/packages/launchpad-common/src/ModifierSidebar.ts similarity index 93% rename from packages/app/src/ModifierSidebar.ts rename to packages/launchpad-common/src/ModifierSidebar.ts index a0054fc..6afe6a1 100644 --- a/packages/app/src/ModifierSidebar.ts +++ b/packages/launchpad-common/src/ModifierSidebar.ts @@ -1,7 +1,7 @@ -import type { MidiMessage } from '@mixxx-launchpad/mixxx' -import { Component, MidiComponent } from '@mixxx-launchpad/mixxx' +import type { MidiMessage } from '@mixxx-launch/mixxx' +import { Component } from '@mixxx-launch/mixxx' -import { LaunchpadDevice } from '.' +import { LaunchpadDevice, MidiComponent } from '.' export type ModifierState = { ctrl: boolean diff --git a/packages/app/src/PlaylistSidebar.ts b/packages/launchpad-common/src/PlaylistSidebar.ts similarity index 95% rename from packages/app/src/PlaylistSidebar.ts rename to packages/launchpad-common/src/PlaylistSidebar.ts index 04e7132..8219d44 100644 --- a/packages/app/src/PlaylistSidebar.ts +++ b/packages/launchpad-common/src/PlaylistSidebar.ts @@ -1,7 +1,7 @@ -import { playListControlDef, Timer, setValue, Component, MidiComponent } from '@mixxx-launchpad/mixxx' -import type { MidiMessage, ControlDef } from '@mixxx-launchpad/mixxx' -import { LaunchpadDevice } from '.' -import { ControlComponent, ControlMessage, getValue, masterControlDef } from '@mixxx-launchpad/mixxx/src/Control' +import { playListControlDef, Timer, setValue, Component } from '@mixxx-launch/mixxx' +import type { MidiMessage, ControlDef } from '@mixxx-launch/mixxx' +import { LaunchpadDevice, MidiComponent } from '.' +import { ControlComponent, ControlMessage, getValue, masterControlDef } from '@mixxx-launch/mixxx/src/Control' const longInterval = 240 as const const mediumInterval = 120 as const diff --git a/packages/app/src/color.ts b/packages/launchpad-common/src/color.ts similarity index 100% rename from packages/app/src/color.ts rename to packages/launchpad-common/src/color.ts diff --git a/packages/app/src/config.ts b/packages/launchpad-common/src/config.ts similarity index 100% rename from packages/app/src/config.ts rename to packages/launchpad-common/src/config.ts diff --git a/packages/app/src/controls/beatjump.ts b/packages/launchpad-common/src/controls/beatjump.ts similarity index 96% rename from packages/app/src/controls/beatjump.ts rename to packages/launchpad-common/src/controls/beatjump.ts index af3e9dc..ab32c91 100644 --- a/packages/app/src/controls/beatjump.ts +++ b/packages/launchpad-common/src/controls/beatjump.ts @@ -1,8 +1,9 @@ -import { MidiComponent, setValue } from '@mixxx-launchpad/mixxx' +import { posMod } from '@mixxx-launch/common' +import { setValue } from '@mixxx-launch/mixxx' import { Control, MakeDeckControlTemplate } from '../Control' +import { MidiComponent } from '../device' import { modes, ModifierState, retainAttackMode } from '../ModifierSidebar' -import { posMod } from '../util' export type Type = { type: 'beatjump' diff --git a/packages/app/src/controls/beatloop.ts b/packages/launchpad-common/src/controls/beatloop.ts similarity index 89% rename from packages/app/src/controls/beatloop.ts rename to packages/launchpad-common/src/controls/beatloop.ts index e300d36..48d6b67 100644 --- a/packages/app/src/controls/beatloop.ts +++ b/packages/launchpad-common/src/controls/beatloop.ts @@ -1,6 +1,7 @@ -import type { ControlComponent, ControlMessage, MidiComponent } from '@mixxx-launchpad/mixxx' -import { setValue } from '@mixxx-launchpad/mixxx' +import type { ControlComponent, ControlMessage } from '@mixxx-launch/mixxx' +import { setValue } from '@mixxx-launch/mixxx' import { Control, MakeDeckControlTemplate } from '../Control' +import { MidiComponent } from '../device' import { modes } from '../ModifierSidebar' import { onAttack } from '../util' diff --git a/packages/app/src/controls/cue.ts b/packages/launchpad-common/src/controls/cue.ts similarity index 88% rename from packages/app/src/controls/cue.ts rename to packages/launchpad-common/src/controls/cue.ts index 57aac1c..344644c 100644 --- a/packages/app/src/controls/cue.ts +++ b/packages/launchpad-common/src/controls/cue.ts @@ -1,7 +1,8 @@ -import type { ControlComponent, ControlMessage, MidiComponent } from '@mixxx-launchpad/mixxx' -import { setValue } from '@mixxx-launchpad/mixxx' +import type { ControlComponent, ControlMessage } from '@mixxx-launch/mixxx' +import { setValue } from '@mixxx-launch/mixxx' import { Control, MakeDeckControlTemplate } from '../Control' +import { MidiComponent } from '../device' import { modes, retainAttackMode } from '../ModifierSidebar' export type Type = { diff --git a/packages/app/src/controls/grid.ts b/packages/launchpad-common/src/controls/grid.ts similarity index 91% rename from packages/app/src/controls/grid.ts rename to packages/launchpad-common/src/controls/grid.ts index 3bd1acc..a61ebab 100644 --- a/packages/app/src/controls/grid.ts +++ b/packages/launchpad-common/src/controls/grid.ts @@ -1,6 +1,7 @@ -import type { MidiComponent, MidiMessage } from '@mixxx-launchpad/mixxx' -import { setValue } from '@mixxx-launchpad/mixxx' +import type { MidiMessage } from '@mixxx-launch/mixxx' +import { setValue } from '@mixxx-launch/mixxx' import { Control, MakeDeckControlTemplate } from '../Control' +import { MidiComponent } from '../device' import { modes } from '../ModifierSidebar' export type Type = { diff --git a/packages/app/src/controls/hotcue.ts b/packages/launchpad-common/src/controls/hotcue.ts similarity index 90% rename from packages/app/src/controls/hotcue.ts rename to packages/launchpad-common/src/controls/hotcue.ts index 13eb7e5..db0bf4d 100644 --- a/packages/app/src/controls/hotcue.ts +++ b/packages/launchpad-common/src/controls/hotcue.ts @@ -1,9 +1,10 @@ -import type { ControlComponent, ControlMessage, MidiComponent, MidiMessage } from '@mixxx-launchpad/mixxx' -import { getValue, setValue } from '@mixxx-launchpad/mixxx' +import { range } from '@mixxx-launch/common' +import type { ControlComponent, ControlMessage, MidiMessage } from '@mixxx-launch/mixxx' +import { getValue, setValue } from '@mixxx-launch/mixxx' import { parseRGBColor } from '../color' import { Control, MakeDeckControlTemplate } from '../Control' +import { MidiComponent } from '../device' import { modes } from '../ModifierSidebar' -import { range } from '../util' export type Type = { type: 'hotcue' @@ -66,7 +67,7 @@ const make: MakeDeckControlTemplate = ({ cues, rows, start = 0 }, gridPosi } } const bindings: { [k: string]: any } = {} - range(cues).map((i) => { + for (const i of range(cues)) { const dx = i % rows const dy = ~~(i / rows) bindings[`midi.${i}`] = { @@ -84,7 +85,8 @@ const make: MakeDeckControlTemplate = ({ cues, rows, start = 0 }, gridPosi target: deck.hotcues[1 + i + start].color, update: onHotcueColorChanged(i), } - }) + } + return { bindings, state: {}, diff --git a/packages/app/src/controls/index.ts b/packages/launchpad-common/src/controls/index.ts similarity index 100% rename from packages/app/src/controls/index.ts rename to packages/launchpad-common/src/controls/index.ts diff --git a/packages/app/src/controls/key.ts b/packages/launchpad-common/src/controls/key.ts similarity index 89% rename from packages/app/src/controls/key.ts rename to packages/launchpad-common/src/controls/key.ts index d19609d..1b5b9da 100644 --- a/packages/app/src/controls/key.ts +++ b/packages/launchpad-common/src/controls/key.ts @@ -1,6 +1,7 @@ -import type { ControlComponent, ControlMessage, MidiComponent } from '@mixxx-launchpad/mixxx' -import { getValue, setValue } from '@mixxx-launchpad/mixxx' +import type { ControlComponent, ControlMessage } from '@mixxx-launch/mixxx' +import { getValue, setValue } from '@mixxx-launch/mixxx' import { Control, MakeDeckControlTemplate } from '../Control' +import { MidiComponent } from '../device' import { modes } from '../ModifierSidebar' import { onAttack } from '../util' diff --git a/packages/app/src/controls/keyshift.ts b/packages/launchpad-common/src/controls/keyshift.ts similarity index 93% rename from packages/app/src/controls/keyshift.ts rename to packages/launchpad-common/src/controls/keyshift.ts index 71281a9..48cb9cc 100644 --- a/packages/app/src/controls/keyshift.ts +++ b/packages/launchpad-common/src/controls/keyshift.ts @@ -1,8 +1,8 @@ -import { getValue, MidiComponent, setValue } from '@mixxx-launchpad/mixxx' +import { posMod } from '@mixxx-launch/common' +import { getValue, setValue } from '@mixxx-launch/mixxx' +import { LaunchpadDevice, MidiComponent } from '../device' import { Control, MakeDeckControlTemplate } from '../Control' -import { LaunchpadDevice } from '../.' import { modes, retainAttackMode } from '../ModifierSidebar' -import { posMod } from '../util' export type Type = { type: 'keyshift' diff --git a/packages/app/src/controls/load.ts b/packages/launchpad-common/src/controls/load.ts similarity index 91% rename from packages/app/src/controls/load.ts rename to packages/launchpad-common/src/controls/load.ts index 5caf384..007dba8 100644 --- a/packages/app/src/controls/load.ts +++ b/packages/launchpad-common/src/controls/load.ts @@ -1,7 +1,7 @@ -import type { ControlComponent, ControlMessage, MidiComponent } from '@mixxx-launchpad/mixxx' -import { getValue, setValue } from '@mixxx-launchpad/mixxx' +import type { ControlComponent, ControlMessage } from '@mixxx-launch/mixxx' +import { getValue, setValue } from '@mixxx-launch/mixxx' import { Control, MakeDeckControlTemplate } from '../Control' -import { LaunchpadDevice } from '../.' +import { LaunchpadDevice, MidiComponent } from '../device' import { modes } from '../ModifierSidebar' import { onAttack } from '../util' diff --git a/packages/app/src/controls/loopIo.ts b/packages/launchpad-common/src/controls/loopIo.ts similarity index 89% rename from packages/app/src/controls/loopIo.ts rename to packages/launchpad-common/src/controls/loopIo.ts index b290b5e..81cf04a 100644 --- a/packages/app/src/controls/loopIo.ts +++ b/packages/launchpad-common/src/controls/loopIo.ts @@ -1,6 +1,7 @@ -import type { MidiComponent, MidiMessage } from '@mixxx-launchpad/mixxx' -import { getValue, setValue } from '@mixxx-launchpad/mixxx' +import type { MidiMessage } from '@mixxx-launch/mixxx' +import { getValue, setValue } from '@mixxx-launch/mixxx' import { Control, MakeDeckControlTemplate } from '../Control' +import { MidiComponent } from '../device' import { modes } from '../ModifierSidebar' import { onAttack } from '../util' diff --git a/packages/app/src/controls/loopMultiply.ts b/packages/launchpad-common/src/controls/loopMultiply.ts similarity index 88% rename from packages/app/src/controls/loopMultiply.ts rename to packages/launchpad-common/src/controls/loopMultiply.ts index e172c9f..a054171 100644 --- a/packages/app/src/controls/loopMultiply.ts +++ b/packages/launchpad-common/src/controls/loopMultiply.ts @@ -1,6 +1,7 @@ -import type { MidiComponent, MidiMessage } from '@mixxx-launchpad/mixxx' -import { setValue } from '@mixxx-launchpad/mixxx' +import type { MidiMessage } from '@mixxx-launch/mixxx' +import { setValue } from '@mixxx-launch/mixxx' import { Control, MakeDeckControlTemplate } from '../Control' +import { MidiComponent } from '../device' import { onAttack } from '../util' export type Type = { diff --git a/packages/app/src/controls/loopjump.ts b/packages/launchpad-common/src/controls/loopjump.ts similarity index 95% rename from packages/app/src/controls/loopjump.ts rename to packages/launchpad-common/src/controls/loopjump.ts index f9ca263..9cf2cfa 100644 --- a/packages/app/src/controls/loopjump.ts +++ b/packages/launchpad-common/src/controls/loopjump.ts @@ -1,7 +1,7 @@ -import type { MidiComponent } from '@mixxx-launchpad/mixxx' -import { setValue } from '@mixxx-launchpad/mixxx' +import { posMod } from '@mixxx-launch/common' +import { setValue } from '@mixxx-launch/mixxx' import { Control, MakeDeckControlTemplate } from '../Control' -import { posMod } from '../util' +import { MidiComponent } from '../device' import { modes, retainAttackMode } from '../ModifierSidebar' export type Type = { diff --git a/packages/app/src/controls/loopjumpSmall.ts b/packages/launchpad-common/src/controls/loopjumpSmall.ts similarity index 89% rename from packages/app/src/controls/loopjumpSmall.ts rename to packages/launchpad-common/src/controls/loopjumpSmall.ts index 7844ca2..d75dd09 100644 --- a/packages/app/src/controls/loopjumpSmall.ts +++ b/packages/launchpad-common/src/controls/loopjumpSmall.ts @@ -1,8 +1,9 @@ import { modes } from '../ModifierSidebar' -import type { MidiComponent, MidiMessage } from '@mixxx-launchpad/mixxx' -import { setValue } from '@mixxx-launchpad/mixxx' +import type { MidiMessage } from '@mixxx-launch/mixxx' +import { setValue } from '@mixxx-launch/mixxx' import { Control, MakeDeckControlTemplate } from '../Control' import { onAttack } from '../util' +import { MidiComponent } from '../device' export type Type = { type: 'loopjumpSmall' diff --git a/packages/app/src/controls/nudge.ts b/packages/launchpad-common/src/controls/nudge.ts similarity index 94% rename from packages/app/src/controls/nudge.ts rename to packages/launchpad-common/src/controls/nudge.ts index 8a21d01..241bf4d 100644 --- a/packages/app/src/controls/nudge.ts +++ b/packages/launchpad-common/src/controls/nudge.ts @@ -1,7 +1,8 @@ import { modes, retainAttackMode } from '../ModifierSidebar' -import type { ControlMessage, MidiComponent, ControlComponent } from '@mixxx-launchpad/mixxx' -import { setValue, getValue } from '@mixxx-launchpad/mixxx' +import type { ControlMessage, ControlComponent } from '@mixxx-launch/mixxx' +import { setValue, getValue } from '@mixxx-launch/mixxx' import { Control, MakeDeckControlTemplate } from '../Control' +import { MidiComponent } from '../device' export type Type = { type: 'nudge' diff --git a/packages/app/src/controls/pfl.ts b/packages/launchpad-common/src/controls/pfl.ts similarity index 85% rename from packages/app/src/controls/pfl.ts rename to packages/launchpad-common/src/controls/pfl.ts index 671df4a..7547e69 100644 --- a/packages/app/src/controls/pfl.ts +++ b/packages/launchpad-common/src/controls/pfl.ts @@ -1,6 +1,7 @@ -import type { ControlComponent, ControlMessage, MidiComponent, MidiMessage } from '@mixxx-launchpad/mixxx' -import { getValue, setValue } from '@mixxx-launchpad/mixxx' +import type { ControlComponent, ControlMessage, MidiMessage } from '@mixxx-launch/mixxx' +import { getValue, setValue } from '@mixxx-launch/mixxx' import { Control, MakeDeckControlTemplate } from '../Control' +import { MidiComponent } from '../device' import { modes } from '../ModifierSidebar' import { onAttack } from '../util' diff --git a/packages/app/src/controls/play.ts b/packages/launchpad-common/src/controls/play.ts similarity index 87% rename from packages/app/src/controls/play.ts rename to packages/launchpad-common/src/controls/play.ts index d334cbb..ce97e63 100644 --- a/packages/app/src/controls/play.ts +++ b/packages/launchpad-common/src/controls/play.ts @@ -1,6 +1,7 @@ -import type { ControlComponent, ControlMessage, MidiComponent } from '@mixxx-launchpad/mixxx' -import { getValue, setValue } from '@mixxx-launchpad/mixxx' +import type { ControlComponent, ControlMessage } from '@mixxx-launch/mixxx' +import { getValue, setValue } from '@mixxx-launch/mixxx' import { Control, MakeDeckControlTemplate } from '../Control' +import { MidiComponent } from '../device' import { modes } from '../ModifierSidebar' import { onAttack } from '../util' diff --git a/packages/app/src/controls/quantize.ts b/packages/launchpad-common/src/controls/quantize.ts similarity index 86% rename from packages/app/src/controls/quantize.ts rename to packages/launchpad-common/src/controls/quantize.ts index 4f64ce2..6b3dd52 100644 --- a/packages/app/src/controls/quantize.ts +++ b/packages/launchpad-common/src/controls/quantize.ts @@ -1,6 +1,7 @@ -import type { ControlComponent, ControlMessage, MidiComponent } from '@mixxx-launchpad/mixxx' -import { getValue, setValue } from '@mixxx-launchpad/mixxx' +import type { ControlComponent, ControlMessage } from '@mixxx-launch/mixxx' +import { getValue, setValue } from '@mixxx-launch/mixxx' import { Control, MakeDeckControlTemplate } from '../Control' +import { MidiComponent } from '../device' import { modes } from '../ModifierSidebar' import { onAttack } from '../util' diff --git a/packages/app/src/controls/reloop.ts b/packages/launchpad-common/src/controls/reloop.ts similarity index 87% rename from packages/app/src/controls/reloop.ts rename to packages/launchpad-common/src/controls/reloop.ts index ff8d892..6decf50 100644 --- a/packages/app/src/controls/reloop.ts +++ b/packages/launchpad-common/src/controls/reloop.ts @@ -1,6 +1,7 @@ -import type { ControlComponent, ControlMessage, MidiComponent } from '@mixxx-launchpad/mixxx' -import { setValue } from '@mixxx-launchpad/mixxx' +import type { ControlComponent, ControlMessage } from '@mixxx-launch/mixxx' +import { setValue } from '@mixxx-launch/mixxx' import { Control, MakeDeckControlTemplate } from '../Control' +import { MidiComponent } from '../device' import { modes } from '../ModifierSidebar' import { onAttack } from '../util' diff --git a/packages/app/src/controls/samplerPad.ts b/packages/launchpad-common/src/controls/samplerPad.ts similarity index 94% rename from packages/app/src/controls/samplerPad.ts rename to packages/launchpad-common/src/controls/samplerPad.ts index fd9e6ef..aa129a5 100644 --- a/packages/app/src/controls/samplerPad.ts +++ b/packages/launchpad-common/src/controls/samplerPad.ts @@ -1,6 +1,6 @@ -import type { ControlComponent, ControlMessage, MidiComponent, MidiMessage } from '@mixxx-launchpad/mixxx' -import { setValue } from '@mixxx-launchpad/mixxx' -import { LaunchpadDevice } from '..' +import type { ControlComponent, ControlMessage, MidiMessage } from '@mixxx-launch/mixxx' +import { setValue } from '@mixxx-launch/mixxx' +import { LaunchpadDevice, MidiComponent } from '../device' import { parseRGBColor, RGBColor } from '../color' import { Control, MakeSamplerControlTemplate } from '../Control' import { modes } from '../ModifierSidebar' diff --git a/packages/app/src/controls/slip.ts b/packages/launchpad-common/src/controls/slip.ts similarity index 94% rename from packages/app/src/controls/slip.ts rename to packages/launchpad-common/src/controls/slip.ts index 046cdd9..4f93da3 100644 --- a/packages/app/src/controls/slip.ts +++ b/packages/launchpad-common/src/controls/slip.ts @@ -1,5 +1,6 @@ -import { ControlComponent, getValue, MidiComponent, setValue } from '@mixxx-launchpad/mixxx' +import { ControlComponent, getValue, setValue } from '@mixxx-launch/mixxx' import { Control, MakeDeckControlTemplate } from '../Control' +import { MidiComponent } from '../device' import { modes, retainAttackMode } from '../ModifierSidebar' export type Type = { diff --git a/packages/app/src/controls/sync.ts b/packages/launchpad-common/src/controls/sync.ts similarity index 90% rename from packages/app/src/controls/sync.ts rename to packages/launchpad-common/src/controls/sync.ts index 7bf572f..1cfc7a0 100644 --- a/packages/app/src/controls/sync.ts +++ b/packages/launchpad-common/src/controls/sync.ts @@ -1,8 +1,9 @@ import { modes } from '../ModifierSidebar' -import type { ControlMessage, MidiComponent, ControlComponent } from '@mixxx-launchpad/mixxx' -import { setValue, getValue } from '@mixxx-launchpad/mixxx' +import type { ControlMessage, ControlComponent } from '@mixxx-launch/mixxx' +import { setValue, getValue } from '@mixxx-launch/mixxx' import { Control, MakeDeckControlTemplate } from '../Control' import { onAttack } from '../util' +import { MidiComponent } from '../device' export type Type = { type: 'sync' diff --git a/packages/app/src/controls/tap.ts b/packages/launchpad-common/src/controls/tap.ts similarity index 89% rename from packages/app/src/controls/tap.ts rename to packages/launchpad-common/src/controls/tap.ts index b1c7eea..e78c157 100644 --- a/packages/app/src/controls/tap.ts +++ b/packages/launchpad-common/src/controls/tap.ts @@ -1,9 +1,10 @@ import { modes } from '../ModifierSidebar' -import type { ControlComponent, ControlMessage, MidiComponent } from '@mixxx-launchpad/mixxx' -import { setValue } from '@mixxx-launchpad/mixxx' +import type { ControlComponent, ControlMessage } from '@mixxx-launch/mixxx' +import { setValue } from '@mixxx-launch/mixxx' import { Control, MakeDeckControlTemplate } from '../Control' import Bpm from '../Bpm' import { onAttack } from '../util' +import { MidiComponent } from '../device' export type Type = { type: 'tap' diff --git a/packages/launchpad-common/src/device.ts b/packages/launchpad-common/src/device.ts new file mode 100644 index 0000000..67b954e --- /dev/null +++ b/packages/launchpad-common/src/device.ts @@ -0,0 +1,31 @@ +import { MidiControlDef, MidiDevice, sendShortMsg, MidiComponent as mixxxMidiComponent } from '@mixxx-launch/mixxx' +import { RGBColor } from './color' + +export abstract class LaunchpadDevice extends MidiDevice { + abstract colors: { [key: string]: number } + + abstract supportsRGBColors: boolean + + sendColor(control: MidiControlDef, value: number): void { + sendShortMsg(control, value) + } + clearColor(control: MidiControlDef): void { + sendShortMsg(control, this.colors.black) + } + + abstract sendRGBColor(control: MidiControlDef, value: RGBColor): void + + constructor() { + super() + } + + onMount() { + super.onMount() + } + + onUnmount() { + super.onUnmount() + } +} + +export class MidiComponent extends mixxxMidiComponent {} diff --git a/packages/launchpad-common/src/index.ts b/packages/launchpad-common/src/index.ts new file mode 100644 index 0000000..b12e075 --- /dev/null +++ b/packages/launchpad-common/src/index.ts @@ -0,0 +1,20 @@ +import config from './config' +import App from './App' + +import { MidiControlDef } from '@mixxx-launch/mixxx' +import { LaunchpadDevice } from './device' + +export const useDevice = (device: LaunchpadDevice) => { + const app = new App(device, config) + device.addListener('mount', app.mount.bind(app)) + device.addListener('unmount', app.unmount.bind(app)) + return device +} + +export type ControllerControlDef = [number, number]; + +export const convertControlDef = (name: string, [status, midino]: ControllerControlDef): MidiControlDef => ({ name, status, midino }) + +export type { RGBColor } from './color' + +export { LaunchpadDevice, MidiComponent } from './device' diff --git a/packages/launchpad-common/src/util.ts b/packages/launchpad-common/src/util.ts new file mode 100644 index 0000000..3a75423 --- /dev/null +++ b/packages/launchpad-common/src/util.ts @@ -0,0 +1,5 @@ +import { MidiMessage } from "@mixxx-launch/mixxx" + +export const onAttack = (handler: (m: MidiMessage) => void): ((m: MidiMessage) => void) => ((m: MidiMessage) => { + if (m.value) handler(m) +}) diff --git a/packages/mini-mk3/tsconfig.json b/packages/launchpad-common/tsconfig.json similarity index 67% rename from packages/mini-mk3/tsconfig.json rename to packages/launchpad-common/tsconfig.json index 4a61ac8..0a0c970 100644 --- a/packages/mini-mk3/tsconfig.json +++ b/packages/launchpad-common/tsconfig.json @@ -4,13 +4,10 @@ "composite": true, "outDir": "dist" }, + "include": ["src"], "references": [ { "path": "../mixxx" - }, - { - "path": "../app" } - ], - "include": ["controller.json", "src"] + ] } diff --git a/packages/mini-mk3/controller.json b/packages/launchpad-mini-mk3/controller.json similarity index 100% rename from packages/mini-mk3/controller.json rename to packages/launchpad-mini-mk3/controller.json diff --git a/packages/mini-mk3/package.json b/packages/launchpad-mini-mk3/package.json similarity index 76% rename from packages/mini-mk3/package.json rename to packages/launchpad-mini-mk3/package.json index 9403fd2..bf3890f 100644 --- a/packages/mini-mk3/package.json +++ b/packages/launchpad-mini-mk3/package.json @@ -1,5 +1,5 @@ { - "name": "@mixxx-launchpad/mini-mk3", + "name": "@mixxx-launch/launchpad-mini-mk3", "author": "Christian Neumann", "description": "Novation Launchpad Mini MK3 mapping for Mixxx", "homepage": "https://github.com/dszakallas/mixxx-launchpad", @@ -8,6 +8,6 @@ "main": "src/index.ts", "dependencies": { "@babel/runtime-corejs3": "^7.21.0", - "@mixxx-launchpad/app": "1.0.0" + "@mixxx-launch/launchpad-common": "1.0.0" } } diff --git a/packages/mini-mk3/src/index.ts b/packages/launchpad-mini-mk3/src/index.ts similarity index 91% rename from packages/mini-mk3/src/index.ts rename to packages/launchpad-mini-mk3/src/index.ts index 98f014d..0cca46a 100644 --- a/packages/mini-mk3/src/index.ts +++ b/packages/launchpad-mini-mk3/src/index.ts @@ -1,6 +1,6 @@ -import { convertControlDef, LaunchpadDevice, RGBColor, useDevice } from '@mixxx-launchpad/app' +import { convertControlDef, LaunchpadDevice, RGBColor, useDevice } from '@mixxx-launch/launchpad-common' import def from '../controller.json' -import { MidiControlDef, sendSysexMsg } from '@mixxx-launchpad/mixxx' +import { MidiControlDef, sendSysexMsg } from '@mixxx-launch/mixxx' const colors = { black: 0, diff --git a/packages/launchpad-mini-mk3/tsconfig.json b/packages/launchpad-mini-mk3/tsconfig.json new file mode 100644 index 0000000..d8acf73 --- /dev/null +++ b/packages/launchpad-mini-mk3/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "dist" + }, + "include": ["controller.json", "src"], + "references": [ + { + "path": "../launchpad-common" + } + ] +} diff --git a/packages/mk1/controller.json b/packages/launchpad-mk1/controller.json similarity index 98% rename from packages/mk1/controller.json rename to packages/launchpad-mk1/controller.json index f8e2f95..004a86e 100644 --- a/packages/mk1/controller.json +++ b/packages/launchpad-mk1/controller.json @@ -1,7 +1,7 @@ { "device": "Launchpad", "manufacturer": "Novation", - "global": "NL", + "global": "NLMK1", "controls": { "up": [176, 104], "down": [176, 105], diff --git a/packages/mk1/package.json b/packages/launchpad-mk1/package.json similarity index 76% rename from packages/mk1/package.json rename to packages/launchpad-mk1/package.json index 8d2500d..d65a5cc 100644 --- a/packages/mk1/package.json +++ b/packages/launchpad-mk1/package.json @@ -1,5 +1,5 @@ { - "name": "@mixxx-launchpad/mk1", + "name": "@mixxx-launch/launchpad-mk1", "author": "Midiparse", "description": "Novation Launchpad MK1 mapping for Mixxx", "homepage": "https://github.com/dszakallas/mixxx-launchpad", @@ -8,6 +8,6 @@ "main": "src/index.ts", "dependencies": { "@babel/runtime-corejs3": "^7.21.0", - "@mixxx-launchpad/app": "1.0.0" + "@mixxx-launch/launchpad-common": "1.0.0" } } diff --git a/packages/mk1/src/index.ts b/packages/launchpad-mk1/src/index.ts similarity index 90% rename from packages/mk1/src/index.ts rename to packages/launchpad-mk1/src/index.ts index 44eb644..eb766a8 100644 --- a/packages/mk1/src/index.ts +++ b/packages/launchpad-mk1/src/index.ts @@ -1,6 +1,6 @@ -import { convertControlDef, LaunchpadDevice, RGBColor, useDevice } from '@mixxx-launchpad/app' +import { convertControlDef, LaunchpadDevice, RGBColor, useDevice } from '@mixxx-launch/launchpad-common' import def from '../controller.json' -import { MidiControlDef } from '@mixxx-launchpad/mixxx' +import { MidiControlDef } from '@mixxx-launch/mixxx' const colors = { black: 4, diff --git a/packages/launchpad-mk1/tsconfig.json b/packages/launchpad-mk1/tsconfig.json new file mode 100644 index 0000000..77e681f --- /dev/null +++ b/packages/launchpad-mk1/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "outDir": "dist" + }, + "include": ["controller.json", "src"], + "references": [ + { "path": "../launchpad-common" } + ] +} diff --git a/packages/mk2/controller.json b/packages/launchpad-mk2/controller.json similarity index 100% rename from packages/mk2/controller.json rename to packages/launchpad-mk2/controller.json diff --git a/packages/mk2/package.json b/packages/launchpad-mk2/package.json similarity index 76% rename from packages/mk2/package.json rename to packages/launchpad-mk2/package.json index 547c4c2..f794737 100644 --- a/packages/mk2/package.json +++ b/packages/launchpad-mk2/package.json @@ -1,5 +1,5 @@ { - "name": "@mixxx-launchpad/mk2", + "name": "@mixxx-launch/launchpad-mk2", "author": "Midiparse", "description": "Novation Launchpad MK2 mapping for Mixxx", "homepage": "https://github.com/dszakallas/mixxx-launchpad", @@ -8,6 +8,6 @@ "main": "src/index.ts", "dependencies": { "@babel/runtime-corejs3": "^7.21.0", - "@mixxx-launchpad/app": "1.0.0" + "@mixxx-launch/launchpad-common": "1.0.0" } } diff --git a/packages/mk2/src/index.ts b/packages/launchpad-mk2/src/index.ts similarity index 90% rename from packages/mk2/src/index.ts rename to packages/launchpad-mk2/src/index.ts index fc5ff2a..884ae67 100644 --- a/packages/mk2/src/index.ts +++ b/packages/launchpad-mk2/src/index.ts @@ -1,6 +1,6 @@ -import { convertControlDef, LaunchpadDevice, RGBColor, useDevice } from '@mixxx-launchpad/app' +import { convertControlDef, LaunchpadDevice, RGBColor, useDevice } from '@mixxx-launch/launchpad-common' import def from '../controller.json' -import { MidiControlDef, sendSysexMsg } from '@mixxx-launchpad/mixxx' +import { MidiControlDef, sendSysexMsg } from '@mixxx-launch/mixxx' const colors = { black: 0, diff --git a/packages/mk2/tsconfig.json b/packages/launchpad-mk2/tsconfig.json similarity index 76% rename from packages/mk2/tsconfig.json rename to packages/launchpad-mk2/tsconfig.json index 757be82..75dab9f 100644 --- a/packages/mk2/tsconfig.json +++ b/packages/launchpad-mk2/tsconfig.json @@ -4,16 +4,13 @@ "composite": true, "outDir": "dist" }, - "references": [ - { - "path": "../mixxx" - }, - { - "path": "../app" - } - ], "include": [ "controller.json", "src" + ], + "references": [ + { + "path": "../launchpad-common" + } ] } diff --git a/packages/mixxx/package.json b/packages/mixxx/package.json index ce9ee00..37b4410 100644 --- a/packages/mixxx/package.json +++ b/packages/mixxx/package.json @@ -1,11 +1,12 @@ { - "name": "@mixxx-launchpad/mixxx", + "name": "@mixxx-launch/mixxx", "private": true, "version": "1.0.0", "main": "src/index.ts", "author": "Midiparse", "license": "MIT", "dependencies": { + "@mixxx-launch/common": "~1.0.0", "eventemitter3": "~5.0.0" } } diff --git a/packages/mixxx/src/Component.ts b/packages/mixxx/src/Component.ts index 4ff684f..526c414 100644 --- a/packages/mixxx/src/Component.ts +++ b/packages/mixxx/src/Component.ts @@ -1,14 +1,22 @@ import EventEmitter from 'eventemitter3' export default class Component extends EventEmitter { + mounted: boolean = false + + constructor() { + super() + } + mount() { this.onMount() this.emit('mount', this) + this.mounted = true } unmount() { this.onUnmount() this.emit('unmount', this) + this.mounted = false } // eslint-disable-next-line @typescript-eslint/no-empty-function diff --git a/packages/mixxx/src/Control.ts b/packages/mixxx/src/Control.ts index 82f10b8..fdd5acb 100644 --- a/packages/mixxx/src/Control.ts +++ b/packages/mixxx/src/Control.ts @@ -3,6 +3,7 @@ import { Action } from './util' import Component from './Component' import type { Connection } from './mixxx' +import { array, lazy, lazyArray, map, range } from '@mixxx-launch/common' export type ControlDef = { group: string @@ -10,8 +11,6 @@ export type ControlDef = { type: string } -const range = (n: number) => [...Array(n).keys()] - export const playListControlDef: { [key: string]: ControlDef } = { LoadSelectedIntoFirstStopped: { group: '[Playlist]', name: 'LoadSelectedIntoFirstStopped', type: 'binary' }, SelectNextPlaylist: { group: '[Playlist]', name: 'SelectNextPlaylist', type: 'binary' }, @@ -24,14 +23,16 @@ export const playListControlDef: { [key: string]: ControlDef } = { AutoDjAddTop: { group: '[Playlist]', name: 'AutoDjAddTop', type: 'binary' }, } -export type PlayListControlKey = keyof typeof playListControlDef +export type PlayListControlDef = typeof playListControlDef +export type PlayListControlKey = keyof PlayListControlDef export const masterControlDef: { [key: string]: ControlDef } = { maximize_library: { group: '[Master]', name: 'maximize_library', type: 'binary' }, num_samplers: { group: '[Master]', name: 'num_samplers', type: 'number' }, } -export type MasterControlKey = keyof typeof masterControlDef +export type MasterControlDef = typeof masterControlDef +export type MasterControlKey = keyof MasterControlDef // just enough for samplers export type SamplerControlKey = @@ -48,23 +49,26 @@ export type SamplerControlDef = { [_ in SamplerControlKey]: ControlDef } -const createSamplerControlDef = (type: string, i: number): SamplerControlDef => ({ - LoadSelectedTrack: { group: `[${type}${i}]`, name: 'LoadSelectedTrack', type: 'binary' }, - cue_gotoandplay: { group: `[${type}${i}]`, name: 'cue_gotoandplay', type: 'binary' }, - eject: { group: `[${type}${i}]`, name: 'eject', type: 'binary' }, - play: { group: `[${type}${i}]`, name: 'play', type: 'binary' }, - play_latched: { group: `[${type}${i}]`, name: 'play_latched', type: 'binary' }, - stop: { group: `[${type}${i}]`, name: 'stop', type: 'binary' }, - track_color: { group: `[${type}${i}]`, name: 'track_color', type: 'number' }, - track_loaded: { group: `[${type}${i}]`, name: 'track_loaded', type: 'binary' }, -}) +const createSamplerControlDef = (i: number): SamplerControlDef => { + const [type, number] = getChannelNameForOrdinal(i) + return { + LoadSelectedTrack: { group: `[${type}${number}]`, name: 'LoadSelectedTrack', type: 'binary' }, + cue_gotoandplay: { group: `[${type}${number}]`, name: 'cue_gotoandplay', type: 'binary' }, + eject: { group: `[${type}${number}]`, name: 'eject', type: 'binary' }, + play: { group: `[${type}${number}]`, name: 'play', type: 'binary' }, + play_latched: { group: `[${type}${number}]`, name: 'play_latched', type: 'binary' }, + stop: { group: `[${type}${number}]`, name: 'stop', type: 'binary' }, + track_color: { group: `[${type}${number}]`, name: 'track_color', type: 'number' }, + track_loaded: { group: `[${type}${number}]`, name: 'track_loaded', type: 'binary' }, + } +} -const getChannelNameForOrdinal = (i: number): [string, number] => (i < 4 ? ['Channel', i + 1] : ['Sampler', i - 4 + 1]) +export const numDecks = 4 as const +export const numSamplers = 64 as const -export const samplerControlDefs: SamplerControlDef[] = range(68).map((i: number) => { - const [name, number] = getChannelNameForOrdinal(i) - return createSamplerControlDef(name, number) -}) +const getChannelNameForOrdinal = (i: number): [string, number] => (i < numDecks ? ['Channel', i + 1] : ['Sampler', i - 4 + 1]) + +export const samplerControlDefs: SamplerControlDef[] = array(map(createSamplerControlDef, range(numDecks + numSamplers))) // the full control palette for decks, minus repeated controls (e.g hotcues) export type SimpleChannelControlKey = @@ -353,13 +357,120 @@ export const createChannelControlDef = (i: number): ChannelControlDef => { beatjumps: createArrayChannelControlDef(beatjumps, arrayChannelControlDefCreators.beatjumps), beatloops: createArrayChannelControlDef(beatloops, arrayChannelControlDefCreators.beatloops), hotcues: createArrayChannelControlDef( - range(16).map((x: number) => x + 1), + array(map((x: number) => x + 1, range(16))), arrayChannelControlDefCreators.hotcues, ), }) } -export const channelControlDefs: ChannelControlDef[] = range(8).map((i: number) => createChannelControlDef(i)) +export const channelControlDefs: ChannelControlDef[] = array(map((i: number) => createChannelControlDef(i), range(8))) + +// effect parameters +export const numEffectParameters = 8 as const +export type EffectParameterKey = 'value' | 'link_inverse' | 'link_type' | 'loaded' | 'type' | 'button_value' | 'button_loaded' | 'button_type' +export type EffectParameterDef = { [_ in EffectParameterKey]: ControlDef } +export const createEffectParameterDef = (rack: RackName, unit: EffectUnitName, effect: string, parameter: number): EffectParameterDef => ({ + value: { group: `[${rack}_${unit}_${effect}]`, name: `parameter${parameter}`, type: 'number' }, + link_inverse: { group: `[${rack}_${unit}_${effect}]`, name: `parameter${parameter}_link_inverse`, type: 'binary' }, + link_type: { group: `[${rack}_${unit}_${effect}]`, name: `parameter${parameter}_link_type`, type: 'number' }, + loaded: { group: `[${rack}_${unit}_${effect}]`, name: `parameter${parameter}_loaded`, type: 'binary' }, + type: { group: `[${rack}_${unit}_${effect}]`, name: `parameter${parameter}_type`, type: 'number' }, + button_value: { group: `[${rack}_${unit}_${effect}]`, name: `button_parameter${parameter}`, type: 'number' }, + button_loaded: { group: `[${rack}_${unit}_${effect}]`, name: `button_parameter${parameter}_loaded`, type: 'binary' }, + button_type: { group: `[${rack}_${unit}_${effect}]`, name: `button_parameter${parameter}_type`, type: 'number' }, +}) + +// effects +export const numEqualizerEffects = 1 as const +export const numEffects = 3 as const +export type EffectKey = 'clear' | 'effect_selector' | 'enabled' | 'loaded' | 'next_effect' | 'num_parameters' | 'num_parameterslots' | + 'num_button_parameters' | 'num_button_parameterslots' | 'meta' | 'prev_effect' +export type EffectDef = { [_ in EffectKey]: ControlDef } & { parameters: EffectParameterDef[] } +export const createEffectDef = (rack: RackName, unit: EffectUnitName, effect: string): EffectDef => ({ + clear: { group: `[${rack}_${unit}_${effect}]`, name: `clear`, type: 'binary' }, + effect_selector: { group: `[${rack}_${unit}_${effect}]`, name: `effect_selector`, type: 'number' }, + enabled: { group: `[${rack}_${unit}_${effect}]`, name: `enabled`, type: 'binary' }, + loaded: { group: `[${rack}_${unit}_${effect}]`, name: `loaded`, type: 'binary' }, + next_effect: { group: `[${rack}_${unit}_${effect}]`, name: `next_effect`, type: 'binary' }, + num_parameters: { group: `[${rack}_${unit}_${effect}]`, name: `num_parameters`, type: 'number' }, + num_parameterslots: { group: `[${rack}_${unit}_${effect}]`, name: `num_parameterslots`, type: 'number' }, + num_button_parameters: { group: `[${rack}_${unit}_${effect}]`, name: `num_button_parameters`, type: 'number' }, + num_button_parameterslots: { group: `[${rack}_${unit}_${effect}]`, name: `num_button_parameterslots`, type: 'number' }, + meta: { group: `[${rack}_${unit}_${effect}]`, name: `meta`, type: 'number' }, + prev_effect: { group: `[${rack}_${unit}_${effect}]`, name: `prev_effect`, type: 'binary' }, + parameters: lazyArray(array(map( + (i: number) => lazy(() => createEffectParameterDef(rack, unit, effect, i + 1)), + range(numEffectParameters) + ))), +}) + +// effect units +export const numEffectUnits = 4 as const +export type EffectUnitName = string +export type EffectUnitKey = 'chain_selector' | 'clear' | 'enabled' | 'focused_effect' | 'mix' | 'super1' | 'num_effects' | 'num_effectslots' +export type EffectUnitDef = { [_ in EffectUnitKey]: ControlDef } & { effects: EffectDef[] } +export const createEffectUnitDef = (rack: RackName, unit: EffectUnitName): EffectUnitDef => ({ + chain_selector: { group: `[${rack}_${unit}]`, name: `chain_selector`, type: 'number' }, + clear: { group: `[${rack}_${unit}]`, name: `clear`, type: 'binary' }, + enabled: { group: `[${rack}_${unit}]`, name: `enabled`, type: 'binary' }, + focused_effect: { group: `[${rack}_${unit}]`, name: `focused_effect`, type: 'number' }, + mix: { group: `[${rack}_${unit}]`, name: `mix`, type: 'number' }, + super1: { group: `[${rack}_${unit}]`, name: `super1`, type: 'number' }, + num_effects: { group: `[${rack}_${unit}]`, name: `num_effects`, type: 'number' }, + num_effectslots: { group: `[${rack}_${unit}]`, name: `num_effectslots`, type: 'number' }, + effects: lazyArray(array(map( + (i: number) => lazy(() => createEffectDef(rack, unit, `Effect${i + 1}`)), + range(numEffects) + ))), +}) + +// effect racks +export type RackName = `EffectRack${number}` | `EqualizerRack${number}` | `QuickEffectRack${number}` +export type EffectRackKey = 'num_effectunits' | 'clear' +export type EffectRackDef = { [_ in EffectRackKey]: ControlDef } & { effect_units: EffectUnitDef[] } +export const createEffectRackDef = (rack: RackName): EffectRackDef => { + const units = rack.startsWith('EqualizerRack') || rack.startsWith('QuickEffectRack') ? + map((i) => `[Channel${i+1}]`, range(numDecks)) : + map((i) => `EffectUnit${i+1}`, range(numEffectUnits)) + + return { + num_effectunits: { group: `[${rack}]`, name: `num_effectunits`, type: 'number' }, + clear: { group: `[${rack}]`, name: `clear`, type: 'binary' }, + effect_units: lazyArray(array(map( + (unit: string) => lazy(() => createEffectUnitDef(rack, unit)), + units + ))) + } +} + +export const numEqualizerRacks = 1 as const +export const numQuickEffectRacks = 1 as const + +export type ChannelName = `Channel${number}` | `Sampler${number}` | `Master` | `Headphone` + +export const createEffectUnitChannelDef = (rack: RackName, unit: EffectUnitName, channel: ChannelName) => ({ + enable: { group: `[${rack}_${unit}]`, name: `group_[${channel}]_enable`, type: 'binary' }, +}) + +export type RootControlDef = { + master: MasterControlDef, + playList: PlayListControlDef, + samplers: SamplerControlDef[], + channels: ChannelControlDef[], + effectRacks: EffectRackDef[], + quickEffectRacks: EffectRackDef[], + equalizerRacks: EffectRackDef[] +} + +export const root: RootControlDef = { + master: masterControlDef, + playList: playListControlDef, + samplers: lazyArray(array(map((i) => lazy(() => createSamplerControlDef(i)), range(numDecks + numSamplers)))), + channels: lazyArray(array(map((i) => lazy(() => createChannelControlDef(i)), range(numDecks + numSamplers)))), + effectRacks: array(map((i) => createEffectRackDef(`EffectRack${i + 1}`), range(numEqualizerRacks))), + quickEffectRacks: array(map((i) => createEffectRackDef(`QuickEffectRack${i + 1}`), range(numEqualizerRacks))), + equalizerRacks: array(map((i) => createEffectRackDef(`EqualizerRack${i + 1}`), range(numEqualizerRacks))), +} export const getValue = (control: ControlDef): number => { return engine.getValue(control.group, control.name) @@ -369,6 +480,14 @@ export const setValue = (control: ControlDef, value: number): void => { return engine.setValue(control.group, control.name, value) } +export const softTakeover = (control: ControlDef, enable: boolean): void => { + return engine.softTakeover(control.group, control.name, enable) +} + +export const softTakeOverIgnoreNextValue = (control: ControlDef): void => { + return engine.softTakeoverIgnoreNextValue(control.group, control.name) +} + export type ControlHandle = Connection export type ControlMessage = { @@ -391,12 +510,14 @@ const disconnect = (handle: ControlHandle): void => { export class ControlComponent extends Component { control: ControlDef - _handle?: any + private _handle?: any + private _softTakeover?: boolean - constructor(control: ControlDef) { + constructor(control: ControlDef, softTakeover?: boolean) { super() this.control = control this._handle = null + this._softTakeover = softTakeover } onMount() { @@ -404,6 +525,9 @@ export class ControlComponent extends Component { this._handle = connect(this.control, (data: ControlMessage) => { this.emit('update', data) }) + if (this._softTakeover != null) { + softTakeover(this.control, this._softTakeover) + } const initialMessage = { control: this.control, value: getValue(this.control), @@ -414,6 +538,9 @@ export class ControlComponent extends Component { onUnmount() { if (this._handle) { + if (this._softTakeover != null) { + softTakeOverIgnoreNextValue(this.control) + } disconnect(this._handle) this._handle = null } diff --git a/packages/mixxx/src/MidiDevice.ts b/packages/mixxx/src/MidiDevice.ts index f30356e..09b3b6d 100644 --- a/packages/mixxx/src/MidiDevice.ts +++ b/packages/mixxx/src/MidiDevice.ts @@ -1,3 +1,4 @@ +import { hexFormat } from '@mixxx-launch/common' import Component from './Component' export type MidiControlDef = { @@ -12,16 +13,22 @@ export type MidiMessage = { } export type RawMidiMessageTask = (channel: number, control: number, value: number, status: number) => void +export type SysexTask = (data: number[]) => void -const callbackPrefix = '__midi' as const +const midiCallbackPrefix = '__midi' as const +// mixxx currently doesn't support custom names for sysex callback handlers, see https://github.com/mixxxdj/mixxx/issues/11536 +const sysexCallbackPrefix = 'incomingData' as const -type RawMidiMessageTaskRegistry = { [k in `${typeof callbackPrefix}_${string}`]?: RawMidiMessageTask } - -const hexFormat = (n: number, d: number) => '0x' + n.toString(16).toUpperCase().padStart(d, '0') +type RawMidiMessageTaskRegistry = { + [k in `${typeof midiCallbackPrefix}_${string}`]?: RawMidiMessageTask +} & { [sysexCallbackPrefix]: SysexTask } export abstract class MidiDevice extends Component { abstract controls: { [name: string]: MidiControlDef } + // whether to listen for sysex messages + sysex: boolean = false + init() { this.mount() } @@ -32,9 +39,9 @@ export abstract class MidiDevice extends Component { onMount() { super.onMount() + const _this = this as unknown as RawMidiMessageTaskRegistry Object.values(this.controls).forEach((control) => { - const _this = this as unknown as RawMidiMessageTaskRegistry - _this[`${callbackPrefix}_${hexFormat(control.status, 2)}_${hexFormat(control.midino, 2)}`] = ( + _this[`${midiCallbackPrefix}_${hexFormat(control.status, 2)}_${hexFormat(control.midino, 2)}`] = ( _channel, _control, value, @@ -44,6 +51,11 @@ export abstract class MidiDevice extends Component { this.emit(control.name, message) } }) + + if (this.sysex) { + _this[sysexCallbackPrefix] = (data: number[]) => { this.emit('sysex', data) } + } + } onUnmount() { @@ -51,13 +63,13 @@ export abstract class MidiDevice extends Component { } } -export class MidiComponent extends Component { +export class MidiComponent extends Component { control: MidiControlDef - _cb: (data: MidiMessage) => void - _device: MidiDevice + private _cb: (data: MidiMessage) => void + protected _device: D - constructor(device: MidiDevice, control: MidiControlDef) { + constructor(device: D, control: MidiControlDef) { super() this.control = control this._device = device diff --git a/packages/mixxx/src/Timer.ts b/packages/mixxx/src/Timer.ts index c77bdc3..d4f5dc2 100644 --- a/packages/mixxx/src/Timer.ts +++ b/packages/mixxx/src/Timer.ts @@ -8,7 +8,7 @@ type TimerState = { export class Timer extends Component { task: Action - _state: TimerState | null + private _state: TimerState | null constructor(task: Action) { super() diff --git a/packages/mixxx/src/index.ts b/packages/mixxx/src/index.ts index 68f4e8e..0927b27 100644 --- a/packages/mixxx/src/index.ts +++ b/packages/mixxx/src/index.ts @@ -11,3 +11,5 @@ export type { ChannelControlDef, ControlDef, ControlHandle, ControlMessage } fro export { MidiComponent, MidiDevice, sendShortMsg, sendSysexMsg } from './MidiDevice' export type { MidiControlDef, MidiMessage } from './MidiDevice' export { Timer } from './Timer' + +export { absoluteNonLin } from './util' diff --git a/packages/mixxx/src/mixxx.ts b/packages/mixxx/src/mixxx.ts index 5335d18..752892f 100644 --- a/packages/mixxx/src/mixxx.ts +++ b/packages/mixxx/src/mixxx.ts @@ -13,6 +13,8 @@ export type Engine = { beginTimer(intervalMs: number, cb: TimerCallback): number stopTimer(handle: number): void makeConnection(group: string, name: string, callback: ControlCallback): Connection + softTakeover(group: string, name: string, value: boolean): void + softTakeoverIgnoreNextValue(group: string, name: string): void } export type Midi = { diff --git a/packages/mixxx/src/util.ts b/packages/mixxx/src/util.ts index 3863684..61895b4 100644 --- a/packages/mixxx/src/util.ts +++ b/packages/mixxx/src/util.ts @@ -1 +1,21 @@ export type Action = (t: T) => void + +/* -------- ------------------------------------------------------ + absoluteNonLin + Purpose: Maps an absolute linear control value to a non-linear Mixxx control + value (like EQs: 0..1..4) + Input: Control value (e.g. a knob,) MixxxControl values for the lowest, + middle, and highest points, lowest knob value, highest knob value + (Default knob values are standard MIDI 0..127) + Output: MixxxControl value corresponding to the knob position + -------- ------------------------------------------------------ */ +export const absoluteNonLin = (value: number, low: number, mid: number, high: number, min: number = 0, max: number = 127) => { + const center = (max - min) / 2; + if (value === center || value === Math.round(center)) { + return mid; + } else if (value < center) { + return low + (value / (center / (mid - low))); + } else { + return mid + ((value - center) / (center / (high - mid))); + } +} diff --git a/packages/mixxx/tsconfig.json b/packages/mixxx/tsconfig.json index 40fa5d7..c00f9c4 100644 --- a/packages/mixxx/tsconfig.json +++ b/packages/mixxx/tsconfig.json @@ -4,5 +4,12 @@ "composite": true, "outDir": "dist" }, - "include": ["src"], + "include": [ + "src" + ], + "references": [ + { + "path": "../common" + } + ] } diff --git a/scripts/compile-mapping.js b/scripts/compile-mapping.js index 3150f7f..f334fa1 100755 --- a/scripts/compile-mapping.js +++ b/scripts/compile-mapping.js @@ -28,6 +28,7 @@ const rendered = ejs.render(template.toString(), { global: controller.global, buttons: Object.values(controller.controls), hexFormat: hexFormat, + sysex: controller.sysex, }) await mkdirp(dirname(resolve(outFile))) await writeFile(resolve(outFile), rendered) diff --git a/scripts/gen-launchcontrol-def.js b/scripts/gen-launchcontrol-def.js new file mode 100755 index 0000000..f4e5624 --- /dev/null +++ b/scripts/gen-launchcontrol-def.js @@ -0,0 +1,82 @@ +#!/usr/bin/env node + +const range = (n) => [...Array(n).keys()] + +const CC = 0xB +const NoteOn = 0x9 +const Note = [NoteOn, 0x8] + +const Sets = { + knob: { + set: [0x0D, 0x1D, 0x31], + n: 8, + nPerRow: 1, + type: CC, + }, + // the leds are in a different order than the knobs, also they use NoteOn instead of CC + // see https://cycling74.com/forums/how-to-control-leds-on-novation-launch-control-xl-buttons#reply-5ac7c5b288b16e5d73805c55 + led: { + set: [0x0D, 0x1D, 0x2D, 0x3D, 0x4D, 0x5D, 0x6D, 0x7D], + n: 3, + nPerRow: 1, + transpose: true, + type: NoteOn, + }, + fader: { + set: [0x4D], + n: 8, + nPerRow: 1, + type: CC, + }, + pad: { + set: [0x29, 0x39, 0x49, 0x59], + n: 4, + nPerRow: 2, + type: Note, + }, +} + +const sidebar = { + up: [CC, 0x68], + down: [CC, 0x69], + left: [CC, 0x6A], + right: [CC, 0x6B], + device: [Note, 0x69], + mute: [Note, 0x6a], + solo: [Note, 0x6b], + arm: [Note, 0x6c], +} + +const board = Object.fromEntries(Object.entries(Sets).flatMap(([name, {set, n, nPerRow, type, transpose}]) => + range(set.length * n).map((x) => { + const r = ~~(x / (n * nPerRow)) + const c = x % (n * nPerRow) + const index = transpose ? `${c}.${r}` : `${r}.${c}` + return [`${name}.${index}`, [type, set[~~(x / n)] + x % n]] + }) +)) + +const page = Object.assign({}, sidebar, board, { reset: [CC, 0x0] }) + +const toStatus = (opcode, channel) => opcode * 16 + channel + +const makePage = (i) => { + return Object.entries(page).flatMap(([name, [type, ctrl]]) => { + if (typeof type === 'number') { + return [[`${i}.${name}`, [toStatus(type, i), ctrl]]] + } else { + const [on, off] = type + return [[`${i}.${name}.on`, [toStatus(on, i), ctrl]], [`${i}.${name}.off`, [toStatus(off, i), ctrl]]] + } + }) +} + +const def = { + device: 'LaunchControl XL MK2', + manufacturer: 'Novation', + global: 'NLCXL2', + sysex: true, + controls: Object.fromEntries(range(16).flatMap((n) => makePage(n))), +} + +console.log(JSON.stringify(def)) diff --git a/scripts/template.xml.ejs b/scripts/template.xml.ejs index 681afbc..2863030 100644 --- a/scripts/template.xml.ejs +++ b/scripts/template.xml.ejs @@ -11,14 +11,24 @@ - <% buttons.forEach(function (button) { %> +<% if(sysex) { -%> + + 0xf0 + + + + +<% } -%> +<% buttons.forEach(function (button) { -%> + <%= global %>.__midi_<%= hexFormat(button[0], 2) %>_<%= hexFormat(button[1], 2) %> <%= hexFormat(button[0], 2) %> <%= hexFormat(button[1], 2) %> - <% }) %> + +<% }) -%> diff --git a/tsconfig.json b/tsconfig.json index 0285be7..d773041 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,16 +12,25 @@ "include": [], "references": [ { - "path": "./packages/app" + "path": "./packages/common" }, { - "path": "./packages/mk2" + "path": "./packages/launchcontrol-common" }, { - "path": "./packages/mk1" + "path": "./packages/launchcontrol-xl-mk2" }, { - "path": "./packages/mini-mk3" + "path": "./packages/launchpad-common" + }, + { + "path": "./packages/launchpad-mk2" + }, + { + "path": "./packages/launchpad-mk1" + }, + { + "path": "./packages/launchpad-mini-mk3" }, { "path": "./packages/mixxx"