From 88a92fc245d4e1757816cd5d57b57af5e8ef6c04 Mon Sep 17 00:00:00 2001 From: Konrad Mattheis Date: Thu, 26 Nov 2020 09:14:29 +0100 Subject: [PATCH 01/12] * first checkin --- .github/FUNDING.yml | 3 + .github/ISSUE_TEMPLATE/bug_report.md | 34 ++ .github/ISSUE_TEMPLATE/feature_request.md | 20 + .github/auto-merge.yml | 11 + .github/dependabot.yml | 10 + .github/workflows/compile.yml | 30 ++ .github/workflows/publish.yml | 70 ++++ .gitignore | 4 + .npmignore | 7 + .vscode/settings.json | 13 + package-lock.json | 424 ++++++++++++++++++++++ package.json | 36 ++ src/bsb-lan-device.html | 22 ++ src/bsb-lan-device.html.ts | 22 ++ src/bsb-lan-device.ts | 22 ++ src/bsb-lan.html | 51 +++ src/bsb-lan.html.ts | 28 ++ src/bsb-lan.ts | 19 + src/interfaces.d.ts | 1 + tool/buildhtml.js | 62 ++++ tsconfig.json | 16 + 21 files changed, 905 insertions(+) create mode 100644 .github/FUNDING.yml create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/auto-merge.yml create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/compile.yml create mode 100644 .github/workflows/publish.yml create mode 100644 .gitignore create mode 100644 .npmignore create mode 100644 .vscode/settings.json create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 src/bsb-lan-device.html create mode 100644 src/bsb-lan-device.html.ts create mode 100644 src/bsb-lan-device.ts create mode 100644 src/bsb-lan.html create mode 100644 src/bsb-lan.html.ts create mode 100644 src/bsb-lan.ts create mode 100644 src/interfaces.d.ts create mode 100644 tool/buildhtml.js create mode 100644 tsconfig.json diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..a63c9ab --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,3 @@ +# These are supported funding model platforms + +github: konne diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..569255a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,34 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: + +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Version (please complete the following information):** + +- OS: [e.g. iOS] +- Browser: [e.g. chrome, safari] +- Node-Red: [e.g. 1.x] + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..bbcbbe7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.github/auto-merge.yml b/.github/auto-merge.yml new file mode 100644 index 0000000..d50bb03 --- /dev/null +++ b/.github/auto-merge.yml @@ -0,0 +1,11 @@ +- match: + dependency_type: development + update_type: all + +- match: + dependency_type: production + update_type: security:minor + +- match: + dependency_type: production + update_type: semver:minor diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..5b23ae4 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,10 @@ +version: 2 +updates: +- package-ecosystem: npm + directory: "/" + schedule: + interval: daily + time: "08:00" + timezone: Europe/Berlin + open-pull-requests-limit: 10 + target-branch: development \ No newline at end of file diff --git a/.github/workflows/compile.yml b/.github/workflows/compile.yml new file mode 100644 index 0000000..fa6d594 --- /dev/null +++ b/.github/workflows/compile.yml @@ -0,0 +1,30 @@ +name: compile + +on: + push: + branches: [ master, development ] + paths: + - 'src/**' + - '.github/workflows/compile.yml' + + pull_request: + branches: [ master, development ] + paths: + - 'src/**' + - '.github/workflows/compile.yml' + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: Setup Node.js + uses: actions/setup-node@v1 + with: + node-version: 15.x + - name: compile + run: | + npm ci + npm run build --if-present diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..3f9ec86 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,70 @@ +name: Publish + +on: + release: + types: [ published ] + +jobs: + publish: + runs-on: ubuntu-latest + steps: + - name: checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Setup Node.js + uses: actions/setup-node@v1 + with: + node-version: '14.x' + + - name: npm install & set Version + run: | + npm ci + npm config set git-tag-version false + npm version ${{ github.event.release.tag_name }} + + - name: build & pack + run: | + npm run build --if-present + npm pack + + - uses: JS-DevTools/npm-publish@v1 + if: "!github.event.release.prerelease" + with: + token: ${{ secrets.NPM_TOKEN }} + + - name: Upload Release Asset + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: '${{ github.event.release.upload_url }}' + asset_path: ./${{ github.event.repository.name }}-${{ github.event.release.tag_name }}.tgz + asset_name: ${{ github.event.repository.name }}-${{ github.event.release.tag_name }}.tgz + asset_content_type: application/zip + + + - name: Update package.json for NameWith2 + uses: jossef/action-set-json-field@v1 + with: + file: package.json + field: name + value: ${{ github.event.repository.name }}2 + + - name: pack + run: | + ls -al + rm -f .npmrc + npm pack + + - name: Update package.json for NameWith3 + uses: jossef/action-set-json-field@v1 + with: + file: package.json + field: name + value: ${{ github.event.repository.name }}3 + + - name: pack + run: | + npm pack diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e853685 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +node_modules/ +nodes/ +.DS_Store +*.tgz \ No newline at end of file diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..2aa541b --- /dev/null +++ b/.npmignore @@ -0,0 +1,7 @@ +node_modules/ +src/ +tool/ +docs/ +tsconfig.json +.*/ +*.tgz diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..99d0cd3 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,13 @@ +{ + "files.exclude": { + "**/.git": true, + "**/.DS_Store": true, + "**/*.js": { + "when": "$(basename).ts" + }, + "**/*.js.map": { + "when": "$(basename)" + } + }, + "typescript.tsdk": "./node_modules/typescript/lib" +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..3f5a30f --- /dev/null +++ b/package-lock.json @@ -0,0 +1,424 @@ +{ + "name": "node-red-contrib-bsb-lan", + "version": "0.0.1", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "version": "0.0.1", + "license": "ISC", + "devDependencies": { + "@types/node-red": "1.1.1", + "typescript": "4.1.2" + } + }, + "node_modules/@types/ace": { + "version": "0.0.44", + "resolved": "https://registry.npmjs.org/@types/ace/-/ace-0.0.44.tgz", + "integrity": "sha512-jDEkKhBrVWm7m23Dqttj6189+uMhRSFINjH+pS/Fu7KeXB8NsfoX/8QvmmIdV8JvWqVsDP1Pf6cOm3jOGhOnKQ==", + "dev": true + }, + "node_modules/@types/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.33", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.33.tgz", + "integrity": "sha512-2+FrkXY4zllzTNfJth7jOqEHC+enpLeGslEhpnTAkg21GkRrWV4SsAtqchtT4YS9/nODBU2/ZfsBY2X4J/dX7A==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cors": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.8.tgz", + "integrity": "sha512-fO3gf3DxU2Trcbr75O7obVndW/X5k8rJNZkLXlQWStTHhP71PkRqjwPIEI0yMnJdg9R9OasjU+Bsr+Hr1xy/0w==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/express": { + "version": "4.17.9", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.9.tgz", + "integrity": "sha512-SDzEIZInC4sivGIFY4Sz1GG6J9UObPwCInYJjko2jzOf/Imx/dlpume6Xxwj1ORL82tBbmN4cPDIDkLbWHk9hw==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "*", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.14", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.14.tgz", + "integrity": "sha512-uFTLwu94TfUFMToXNgRZikwPuZdOtDgs3syBtAIr/OXorL1kJqUJT9qCLnRZ5KBOWfZQikQ2xKgR2tnDj1OgDA==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "node_modules/@types/jquery": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.4.tgz", + "integrity": "sha512-//9CHhaUt/rurMJTxGI+I6DmsNHgYU6d8aSLFfO5dB7+10lwLnaWT0z5GY/yY82Q/M+B+0Qh3TixlJ8vmBeqIw==", + "dev": true, + "dependencies": { + "@types/sizzle": "*" + } + }, + "node_modules/@types/mime": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.3.tgz", + "integrity": "sha512-Jus9s4CDbqwocc5pOAnh8ShfrnMcPHuJYzVcSUU7lrh8Ni5HuIqX3oilL86p3dlTrk0LzHRCgA/GQ7uNCw6l2Q==", + "dev": true + }, + "node_modules/@types/node": { + "version": "14.14.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.10.tgz", + "integrity": "sha512-J32dgx2hw8vXrSbu4ZlVhn1Nm3GbeCFNw2FWL8S5QKucHGY0cyNwjdQdO+KMBZ4wpmC7KhLCiNsdk1RFRIYUQQ==", + "dev": true + }, + "node_modules/@types/node-red": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/node-red/-/node-red-1.1.1.tgz", + "integrity": "sha512-ePusasml1Wc7v/LWCD+804b3ROX8rlztxDDGu3fS4eq8cVNg8vsKwmioRvsFwYv6DVfEd9CAOh5Bn4n1qsocjQ==", + "dev": true, + "dependencies": { + "@types/express": "*", + "@types/node-red__editor-api": "*", + "@types/node-red__editor-client": "*", + "@types/node-red__registry": "*", + "@types/node-red__runtime": "*", + "@types/node-red__util": "*" + } + }, + "node_modules/@types/node-red__editor-api": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/node-red__editor-api/-/node-red__editor-api-1.1.1.tgz", + "integrity": "sha512-O7MNsGwNWDY89sPxVjo2zXGfm8bw4owXrD4akp2NmM1cmrj6XvRKEu99Apw/RjZvteBFpxvLSVtOnYYPj4C7wg==", + "dev": true, + "dependencies": { + "@types/express": "*", + "@types/node-red__runtime": "*" + } + }, + "node_modules/@types/node-red__editor-client": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/node-red__editor-client/-/node-red__editor-client-1.1.2.tgz", + "integrity": "sha512-m2ydaMKWnGr4IFYaZbxtVixDv3sH4N7pwT8jarlEaaNr9FVX1GnlSCslZLkrSY1Wn3Ecs6cNkRpANOC/hIaUpw==", + "dev": true, + "dependencies": { + "@types/ace": "*", + "@types/jquery": "*", + "@types/node-red__runtime": "*", + "@types/node-red__util": "*" + } + }, + "node_modules/@types/node-red__registry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/node-red__registry/-/node-red__registry-1.1.1.tgz", + "integrity": "sha512-iAl5sXNZ+iv1Ry2Zm+oKqIlO0BpAsA/FyI05Xk/DL98f4y1CbrtKp5BEeP7iWKoqwdCaelIh/lp3I9idCFmP4A==", + "dev": true, + "dependencies": { + "@types/express": "*", + "@types/node-red__runtime": "*", + "@types/node-red__util": "*" + } + }, + "node_modules/@types/node-red__runtime": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/node-red__runtime/-/node-red__runtime-1.1.2.tgz", + "integrity": "sha512-jwBV7u6JJSBWNO6hOGsK3L7mtx47uPaAW3Kmz0MYcOQB5J8nUqaIbKQTGTwUOE4HeNU9xO7J7AYbWHEDzT/mRg==", + "dev": true, + "dependencies": { + "@types/cors": "*", + "@types/express": "*", + "@types/node-red__editor-api": "*", + "@types/node-red__util": "*", + "@types/passport": "*" + } + }, + "node_modules/@types/node-red__util": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/node-red__util/-/node-red__util-1.1.1.tgz", + "integrity": "sha512-np9L86J8nqcIAme5PdwIVIiBRRwuR5CNgIzACof1ouHoxRqFj+yaeWT68vRHSq9FJ0r7Jy9CnfzAV+XvUeuSDg==", + "dev": true, + "dependencies": { + "@types/node-red__registry": "*", + "@types/node-red__runtime": "*", + "jsonata": "1.8.3" + } + }, + "node_modules/@types/passport": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/passport/-/passport-1.0.4.tgz", + "integrity": "sha512-h5OfAbfBBYSzjeU0GTuuqYEk9McTgWeGQql9g3gUw2/NNCfD7VgExVRYJVVeU13Twn202Mvk9BT0bUrl30sEgA==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/qs": { + "version": "6.9.5", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.5.tgz", + "integrity": "sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", + "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==", + "dev": true + }, + "node_modules/@types/serve-static": { + "version": "1.13.8", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.8.tgz", + "integrity": "sha512-MoJhSQreaVoL+/hurAZzIm8wafFR6ajiTM1m4A0kv6AGeVBl4r4pOV8bGFrjjq1sGxDTnCoF8i22o0/aE5XCyA==", + "dev": true, + "dependencies": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/sizzle": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.2.tgz", + "integrity": "sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg==", + "dev": true + }, + "node_modules/jsonata": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/jsonata/-/jsonata-1.8.3.tgz", + "integrity": "sha512-r6ztI6ohbpRo77AxBm6vMs3aHZi2L2PaakW7TCPwSkeGcuAZ/SxXGLWH2Npwqq5+YBM/fg/g0EXg/pI9HvXQ8Q==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/typescript": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.2.tgz", + "integrity": "sha512-thGloWsGH3SOxv1SoY7QojKi0tc+8FnOmiarEGMbd/lar7QOEd3hvlx3Fp5y6FlDUGl9L+pd4n2e+oToGMmhRQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + } + }, + "dependencies": { + "@types/ace": { + "version": "0.0.44", + "resolved": "https://registry.npmjs.org/@types/ace/-/ace-0.0.44.tgz", + "integrity": "sha512-jDEkKhBrVWm7m23Dqttj6189+uMhRSFINjH+pS/Fu7KeXB8NsfoX/8QvmmIdV8JvWqVsDP1Pf6cOm3jOGhOnKQ==", + "dev": true + }, + "@types/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.33", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.33.tgz", + "integrity": "sha512-2+FrkXY4zllzTNfJth7jOqEHC+enpLeGslEhpnTAkg21GkRrWV4SsAtqchtT4YS9/nODBU2/ZfsBY2X4J/dX7A==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/cors": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.8.tgz", + "integrity": "sha512-fO3gf3DxU2Trcbr75O7obVndW/X5k8rJNZkLXlQWStTHhP71PkRqjwPIEI0yMnJdg9R9OasjU+Bsr+Hr1xy/0w==", + "dev": true, + "requires": { + "@types/express": "*" + } + }, + "@types/express": { + "version": "4.17.9", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.9.tgz", + "integrity": "sha512-SDzEIZInC4sivGIFY4Sz1GG6J9UObPwCInYJjko2jzOf/Imx/dlpume6Xxwj1ORL82tBbmN4cPDIDkLbWHk9hw==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "*", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.14", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.14.tgz", + "integrity": "sha512-uFTLwu94TfUFMToXNgRZikwPuZdOtDgs3syBtAIr/OXorL1kJqUJT9qCLnRZ5KBOWfZQikQ2xKgR2tnDj1OgDA==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "@types/jquery": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.4.tgz", + "integrity": "sha512-//9CHhaUt/rurMJTxGI+I6DmsNHgYU6d8aSLFfO5dB7+10lwLnaWT0z5GY/yY82Q/M+B+0Qh3TixlJ8vmBeqIw==", + "dev": true, + "requires": { + "@types/sizzle": "*" + } + }, + "@types/mime": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.3.tgz", + "integrity": "sha512-Jus9s4CDbqwocc5pOAnh8ShfrnMcPHuJYzVcSUU7lrh8Ni5HuIqX3oilL86p3dlTrk0LzHRCgA/GQ7uNCw6l2Q==", + "dev": true + }, + "@types/node": { + "version": "14.14.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.10.tgz", + "integrity": "sha512-J32dgx2hw8vXrSbu4ZlVhn1Nm3GbeCFNw2FWL8S5QKucHGY0cyNwjdQdO+KMBZ4wpmC7KhLCiNsdk1RFRIYUQQ==", + "dev": true + }, + "@types/node-red": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/node-red/-/node-red-1.1.1.tgz", + "integrity": "sha512-ePusasml1Wc7v/LWCD+804b3ROX8rlztxDDGu3fS4eq8cVNg8vsKwmioRvsFwYv6DVfEd9CAOh5Bn4n1qsocjQ==", + "dev": true, + "requires": { + "@types/express": "*", + "@types/node-red__editor-api": "*", + "@types/node-red__editor-client": "*", + "@types/node-red__registry": "*", + "@types/node-red__runtime": "*", + "@types/node-red__util": "*" + } + }, + "@types/node-red__editor-api": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/node-red__editor-api/-/node-red__editor-api-1.1.1.tgz", + "integrity": "sha512-O7MNsGwNWDY89sPxVjo2zXGfm8bw4owXrD4akp2NmM1cmrj6XvRKEu99Apw/RjZvteBFpxvLSVtOnYYPj4C7wg==", + "dev": true, + "requires": { + "@types/express": "*", + "@types/node-red__runtime": "*" + } + }, + "@types/node-red__editor-client": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/node-red__editor-client/-/node-red__editor-client-1.1.2.tgz", + "integrity": "sha512-m2ydaMKWnGr4IFYaZbxtVixDv3sH4N7pwT8jarlEaaNr9FVX1GnlSCslZLkrSY1Wn3Ecs6cNkRpANOC/hIaUpw==", + "dev": true, + "requires": { + "@types/ace": "*", + "@types/jquery": "*", + "@types/node-red__runtime": "*", + "@types/node-red__util": "*" + } + }, + "@types/node-red__registry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/node-red__registry/-/node-red__registry-1.1.1.tgz", + "integrity": "sha512-iAl5sXNZ+iv1Ry2Zm+oKqIlO0BpAsA/FyI05Xk/DL98f4y1CbrtKp5BEeP7iWKoqwdCaelIh/lp3I9idCFmP4A==", + "dev": true, + "requires": { + "@types/express": "*", + "@types/node-red__runtime": "*", + "@types/node-red__util": "*" + } + }, + "@types/node-red__runtime": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/node-red__runtime/-/node-red__runtime-1.1.2.tgz", + "integrity": "sha512-jwBV7u6JJSBWNO6hOGsK3L7mtx47uPaAW3Kmz0MYcOQB5J8nUqaIbKQTGTwUOE4HeNU9xO7J7AYbWHEDzT/mRg==", + "dev": true, + "requires": { + "@types/cors": "*", + "@types/express": "*", + "@types/node-red__editor-api": "*", + "@types/node-red__util": "*", + "@types/passport": "*" + } + }, + "@types/node-red__util": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/node-red__util/-/node-red__util-1.1.1.tgz", + "integrity": "sha512-np9L86J8nqcIAme5PdwIVIiBRRwuR5CNgIzACof1ouHoxRqFj+yaeWT68vRHSq9FJ0r7Jy9CnfzAV+XvUeuSDg==", + "dev": true, + "requires": { + "@types/node-red__registry": "*", + "@types/node-red__runtime": "*", + "jsonata": "1.8.3" + } + }, + "@types/passport": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/passport/-/passport-1.0.4.tgz", + "integrity": "sha512-h5OfAbfBBYSzjeU0GTuuqYEk9McTgWeGQql9g3gUw2/NNCfD7VgExVRYJVVeU13Twn202Mvk9BT0bUrl30sEgA==", + "dev": true, + "requires": { + "@types/express": "*" + } + }, + "@types/qs": { + "version": "6.9.5", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.5.tgz", + "integrity": "sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", + "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==", + "dev": true + }, + "@types/serve-static": { + "version": "1.13.8", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.8.tgz", + "integrity": "sha512-MoJhSQreaVoL+/hurAZzIm8wafFR6ajiTM1m4A0kv6AGeVBl4r4pOV8bGFrjjq1sGxDTnCoF8i22o0/aE5XCyA==", + "dev": true, + "requires": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "@types/sizzle": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.2.tgz", + "integrity": "sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg==", + "dev": true + }, + "jsonata": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/jsonata/-/jsonata-1.8.3.tgz", + "integrity": "sha512-r6ztI6ohbpRo77AxBm6vMs3aHZi2L2PaakW7TCPwSkeGcuAZ/SxXGLWH2Npwqq5+YBM/fg/g0EXg/pI9HvXQ8Q==", + "dev": true + }, + "typescript": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.2.tgz", + "integrity": "sha512-thGloWsGH3SOxv1SoY7QojKi0tc+8FnOmiarEGMbd/lar7QOEd3hvlx3Fp5y6FlDUGl9L+pd4n2e+oToGMmhRQ==", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..4052d1b --- /dev/null +++ b/package.json @@ -0,0 +1,36 @@ +{ + "name": "node-red-contrib-bsb-lan", + "version": "0.0.1", + "description": "", + "scripts": { + "build": "npm run tsc", + "postbuild": "node tool/buildhtml.js", + "nodered": "npm run build && node-red", + "tsc": "tsc" + }, + "author": "konne", + "node-red": { + "nodes": { + "bsb-lan": "nodes/bsb-lan.js", + "bsb-lan-device": "nodes/bsb-lan-device.js" + } + }, + "keywords": [ + "node-red", + "bsb-lan" + ], + "license": "ISC", + "dependencies": {}, + "devDependencies": { + "@types/node-red": "1.1.1", + "typescript": "4.1.2" + }, + "repository": { + "type": "git", + "url": "https://github.com/node-red-contrib/node-red-contrib-bsb-lan.git" + }, + "bugs": { + "url": "https://github.com/node-red-contrib/node-red-contrib-bsb-lan/issues" + }, + "homepage": "https://github.com/node-red-contrib/node-red-contrib-bsb-lan#readme" +} diff --git a/src/bsb-lan-device.html b/src/bsb-lan-device.html new file mode 100644 index 0000000..14b76d2 --- /dev/null +++ b/src/bsb-lan-device.html @@ -0,0 +1,22 @@ + +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ \ No newline at end of file diff --git a/src/bsb-lan-device.html.ts b/src/bsb-lan-device.html.ts new file mode 100644 index 0000000..e326756 --- /dev/null +++ b/src/bsb-lan-device.html.ts @@ -0,0 +1,22 @@ +import { EditorRED, EditorNodeDef } from "node-red"; +declare var RED: EditorRED; +import { Credentials, MikrotikDeviceConfig } from "node-red-contrib-bsb-lan/src/interfaces"; + +RED.nodes.registerType('mikrotik-device', { + category: 'config', + defaults: { + host: { value: '192.168.0.1', required: true }, + port: { value: 80, required: true, validate: RED.validators.number() }, + }, + label: function () { + return this.host + ':' + this.port; + }, + credentials: { + username: { type: "text" }, + password: { type: "password" }, + key: { type: "password" } + }, + + +} as EditorNodeDef); + diff --git a/src/bsb-lan-device.ts b/src/bsb-lan-device.ts new file mode 100644 index 0000000..29bd90f --- /dev/null +++ b/src/bsb-lan-device.ts @@ -0,0 +1,22 @@ +import { NodeAPI, Node, NodeDef } from "node-red"; + + +export = function (RED: NodeAPI) { + function NodeConstructorMikrotikDevice(this: Node, def: NodeDef & {} ) { + RED.nodes.createNode(this, def); + + // TODO add def for Host & Port + // this.host = def.host; + // this.port = def.port; + + + } + + RED.nodes.registerType("mikrotik-device", NodeConstructorMikrotikDevice, { + credentials: { + username: { type: "text" }, + password: { type: "password" }, + key: { type: "password" } + } + }); +} \ No newline at end of file diff --git a/src/bsb-lan.html b/src/bsb-lan.html new file mode 100644 index 0000000..7d228d9 --- /dev/null +++ b/src/bsb-lan.html @@ -0,0 +1,51 @@ + +
+ + +
+ +
+ + + +
+ +
+ + +
+ +
+ TODO msg.payload or msg.command

+
+ + + +

A node that connect with BSB-LAN via the + BSB-LAN API. +

+ +

Configuration

+Device: Setup BSB-LAN settings like host, port (8278 - default), username and pass or key.

+ +

Output

+
+
payload object
+
The output/result of the executed command on the BSB-LAN device.
+
+ +

Input

+
+
payload / commandobject
+
This override the executed command.
+
userstring
+
This overrides the username.
+
passwordstring
+
This overrides the password.
+
hoststring
+
This overrides the host.
+
portnumber
+
This overrides the port.
+
+ + \ No newline at end of file diff --git a/src/bsb-lan.html.ts b/src/bsb-lan.html.ts new file mode 100644 index 0000000..b441bf4 --- /dev/null +++ b/src/bsb-lan.html.ts @@ -0,0 +1,28 @@ +import { EditorRED, EditorNodeDef } from "node-red"; +declare var RED: EditorRED; + +RED.nodes.registerType('bsb-lan', { + category: 'network', + color: '#E9967A', + defaults: { + device: { value: '', type: "bsb-lan-device" }, + name: { value: '' }, + action: { value: '0' }, + command: { value: '' }, + "command-type": { value: 'str' } + }, + inputs: 1, + outputs: 1, + icon: "feed.png", + label: function () { + return this.name || "bsb-lan"; + }, + oneditprepare: function () { + let node = this; + + + }, + oneditsave: function () { + + } +}); \ No newline at end of file diff --git a/src/bsb-lan.ts b/src/bsb-lan.ts new file mode 100644 index 0000000..2ff09ef --- /dev/null +++ b/src/bsb-lan.ts @@ -0,0 +1,19 @@ +import { NodeAPI, Node, NodeMessageInFlow } from "node-red"; + +export = function (RED: NodeAPI) { + function NodeBsbLan(this: Node, config: any) { + RED.nodes.createNode(this, config); + let node = this; + + + this.on('input', function (msg: NodeMessageInFlow & { }) { + + }); + + this.on('close', function () { + + }); + } + + RED.nodes.registerType("bsb-lan", NodeBsbLan); +}; diff --git a/src/interfaces.d.ts b/src/interfaces.d.ts new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/interfaces.d.ts @@ -0,0 +1 @@ + diff --git a/tool/buildhtml.js b/tool/buildhtml.js new file mode 100644 index 0000000..2bc448f --- /dev/null +++ b/tool/buildhtml.js @@ -0,0 +1,62 @@ +const fs =require('fs'); +const path = require('path'); + +function copyFile(filename, joinfiles, srcpath, dstpath){ + + let src = path.join(srcpath, filename); + let dst = path.join(dstpath, filename); + + let content = fs.readFileSync(src, 'utf8').replace(/html/g,'script'); + + for (const item of joinfiles) { + let joincontent = fs.readFileSync(path.join(dstpath, item), 'utf8'); + + // add differnt join options css, js, ... + // add search for \r\n\r\n' + + content; + fs.unlinkSync(path.join(dstpath, item)); + } + fs.writeFileSync(dst, content, 'utf8') +} + +var searchpath = 'src/'; +var exportpath = 'nodes/' + +var entries = fs.readdirSync(searchpath); +var dstentries = fs.readdirSync(exportpath); + +for (i = 0; i < entries.length; i ++) +{ + let item = entries[i]; + let fullpath = path.join(searchpath, item); + if (!fs.lstatSync(fullpath).isDirectory()) + { + if (item.toLocaleLowerCase().endsWith('.html')) + { + let joinfiles = []; + for (j = 0; j < dstentries.length; j++){ + let item2 = dstentries[j]; + let fullpath2 = path.join(exportpath, item2); + + try + { + if (!fs.lstatSync(fullpath2).isDirectory()) + { + if (item2.toLocaleLowerCase().startsWith(item.toLocaleLowerCase()) + && item2.toLocaleLowerCase() != item.toLocaleLowerCase()) { + console.log(" " + item2); + joinfiles.push(item2); + } + } + } + catch {} + } + copyFile(item, joinfiles, searchpath, exportpath); + } + } +} + + diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..640eb9b --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "es2015", + "module": "commonjs", + "lib": [ + "es2015", + "dom" + ], + "allowJs": false, + "declaration": false, + "sourceMap": false, + "strict": false, + "outDir": "./nodes/", + }, + +} From 51eeb4aab0f096cd9eaf8b63e0842b36d8cd0d53 Mon Sep 17 00:00:00 2001 From: Konrad Mattheis Date: Thu, 26 Nov 2020 09:16:41 +0100 Subject: [PATCH 02/12] * remove not needed actions --- .github/workflows/publish.yml | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 3f9ec86..5df1c01 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -44,27 +44,3 @@ jobs: asset_name: ${{ github.event.repository.name }}-${{ github.event.release.tag_name }}.tgz asset_content_type: application/zip - - - name: Update package.json for NameWith2 - uses: jossef/action-set-json-field@v1 - with: - file: package.json - field: name - value: ${{ github.event.repository.name }}2 - - - name: pack - run: | - ls -al - rm -f .npmrc - npm pack - - - name: Update package.json for NameWith3 - uses: jossef/action-set-json-field@v1 - with: - file: package.json - field: name - value: ${{ github.event.repository.name }}3 - - - name: pack - run: | - npm pack From 216b472bccc6ab9c0173ebd22b31478144e89bf8 Mon Sep 17 00:00:00 2001 From: Konrad Mattheis Date: Fri, 27 Nov 2020 08:10:51 +0100 Subject: [PATCH 03/12] start with webpack --- package-lock.json | 5573 ++++++++++++++++++++++++++++++++++-- package.json | 8 +- src/bsb-lan-device.html | 2 +- src/bsb-lan-device.html.ts | 5 +- src/bsb-lan-device.ts | 5 +- src/bsb-lan.html | 4 +- webpack.conf.js | 58 + 7 files changed, 5478 insertions(+), 177 deletions(-) create mode 100644 webpack.conf.js diff --git a/package-lock.json b/package-lock.json index 3f5a30f..ebd33e4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,33 @@ "license": "ISC", "devDependencies": { "@types/node-red": "1.1.1", - "typescript": "4.1.2" + "nodemon-webpack-plugin": "^4.3.2", + "replace-in-file-webpack-plugin": "^1.0.6", + "ts-loader": "^8.0.11", + "typescript": "4.1.2", + "webpack": "^5.8.0", + "webpack-cli": "^4.2.0" + } + }, + "node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" } }, "node_modules/@types/ace": { @@ -46,6 +72,32 @@ "@types/express": "*" } }, + "node_modules/@types/eslint": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.5.tgz", + "integrity": "sha512-Dc6ar9x16BdaR3NSxSF7T4IjL9gxxViJq8RmFd+2UAyA+K6ck2W+gUwfgpG/y9TPyUuBL35109bbULpEynvltA==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", + "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.45", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.45.tgz", + "integrity": "sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g==", + "dev": true + }, "node_modules/@types/express": { "version": "4.17.9", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.9.tgz", @@ -78,6 +130,12 @@ "@types/sizzle": "*" } }, + "node_modules/@types/json-schema": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", + "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", + "dev": true + }, "node_modules/@types/mime": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.3.tgz", @@ -198,226 +256,5413 @@ "integrity": "sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg==", "dev": true }, - "node_modules/jsonata": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/jsonata/-/jsonata-1.8.3.tgz", - "integrity": "sha512-r6ztI6ohbpRo77AxBm6vMs3aHZi2L2PaakW7TCPwSkeGcuAZ/SxXGLWH2Npwqq5+YBM/fg/g0EXg/pI9HvXQ8Q==", + "node_modules/@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", "dev": true, - "engines": { - "node": ">= 8" + "dependencies": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" } }, - "node_modules/typescript": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.2.tgz", - "integrity": "sha512-thGloWsGH3SOxv1SoY7QojKi0tc+8FnOmiarEGMbd/lar7QOEd3hvlx3Fp5y6FlDUGl9L+pd4n2e+oToGMmhRQ==", + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" + "dependencies": { + "@webassemblyjs/wast-printer": "1.9.0" } - } - }, - "dependencies": { - "@types/ace": { - "version": "0.0.44", - "resolved": "https://registry.npmjs.org/@types/ace/-/ace-0.0.44.tgz", - "integrity": "sha512-jDEkKhBrVWm7m23Dqttj6189+uMhRSFINjH+pS/Fu7KeXB8NsfoX/8QvmmIdV8JvWqVsDP1Pf6cOm3jOGhOnKQ==", + }, + "node_modules/@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", "dev": true }, - "@types/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==", + "node_modules/@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", "dev": true, - "requires": { - "@types/connect": "*", - "@types/node": "*" + "dependencies": { + "@webassemblyjs/ast": "1.9.0" } }, - "@types/connect": { - "version": "3.4.33", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.33.tgz", - "integrity": "sha512-2+FrkXY4zllzTNfJth7jOqEHC+enpLeGslEhpnTAkg21GkRrWV4SsAtqchtT4YS9/nODBU2/ZfsBY2X4J/dX7A==", + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", "dev": true, - "requires": { - "@types/node": "*" + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" } }, - "@types/cors": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.8.tgz", - "integrity": "sha512-fO3gf3DxU2Trcbr75O7obVndW/X5k8rJNZkLXlQWStTHhP71PkRqjwPIEI0yMnJdg9R9OasjU+Bsr+Hr1xy/0w==", + "node_modules/@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", "dev": true, - "requires": { - "@types/express": "*" + "dependencies": { + "@xtuc/ieee754": "^1.2.0" } }, - "@types/express": { - "version": "4.17.9", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.9.tgz", - "integrity": "sha512-SDzEIZInC4sivGIFY4Sz1GG6J9UObPwCInYJjko2jzOf/Imx/dlpume6Xxwj1ORL82tBbmN4cPDIDkLbWHk9hw==", + "node_modules/@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", "dev": true, - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "*", - "@types/qs": "*", - "@types/serve-static": "*" + "dependencies": { + "@xtuc/long": "4.2.2" } }, - "@types/express-serve-static-core": { - "version": "4.17.14", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.14.tgz", - "integrity": "sha512-uFTLwu94TfUFMToXNgRZikwPuZdOtDgs3syBtAIr/OXorL1kJqUJT9qCLnRZ5KBOWfZQikQ2xKgR2tnDj1OgDA==", + "node_modules/@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", "dev": true, - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" } }, - "@types/jquery": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.4.tgz", - "integrity": "sha512-//9CHhaUt/rurMJTxGI+I6DmsNHgYU6d8aSLFfO5dB7+10lwLnaWT0z5GY/yY82Q/M+B+0Qh3TixlJ8vmBeqIw==", + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", "dev": true, - "requires": { - "@types/sizzle": "*" + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, - "@types/mime": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.3.tgz", - "integrity": "sha512-Jus9s4CDbqwocc5pOAnh8ShfrnMcPHuJYzVcSUU7lrh8Ni5HuIqX3oilL86p3dlTrk0LzHRCgA/GQ7uNCw6l2Q==", - "dev": true + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } }, - "@types/node": { - "version": "14.14.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.10.tgz", - "integrity": "sha512-J32dgx2hw8vXrSbu4ZlVhn1Nm3GbeCFNw2FWL8S5QKucHGY0cyNwjdQdO+KMBZ4wpmC7KhLCiNsdk1RFRIYUQQ==", - "dev": true + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } }, - "@types/node-red": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/node-red/-/node-red-1.1.1.tgz", - "integrity": "sha512-ePusasml1Wc7v/LWCD+804b3ROX8rlztxDDGu3fS4eq8cVNg8vsKwmioRvsFwYv6DVfEd9CAOh5Bn4n1qsocjQ==", + "node_modules/@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", "dev": true, - "requires": { - "@types/express": "*", - "@types/node-red__editor-api": "*", - "@types/node-red__editor-client": "*", - "@types/node-red__registry": "*", - "@types/node-red__runtime": "*", - "@types/node-red__util": "*" + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" } }, - "@types/node-red__editor-api": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/node-red__editor-api/-/node-red__editor-api-1.1.1.tgz", - "integrity": "sha512-O7MNsGwNWDY89sPxVjo2zXGfm8bw4owXrD4akp2NmM1cmrj6XvRKEu99Apw/RjZvteBFpxvLSVtOnYYPj4C7wg==", + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", "dev": true, - "requires": { - "@types/express": "*", - "@types/node-red__runtime": "*" + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" } }, - "@types/node-red__editor-client": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/node-red__editor-client/-/node-red__editor-client-1.1.2.tgz", - "integrity": "sha512-m2ydaMKWnGr4IFYaZbxtVixDv3sH4N7pwT8jarlEaaNr9FVX1GnlSCslZLkrSY1Wn3Ecs6cNkRpANOC/hIaUpw==", + "node_modules/@webpack-cli/info": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.1.0.tgz", + "integrity": "sha512-uNWSdaYHc+f3LdIZNwhdhkjjLDDl3jP2+XBqAq9H8DjrJUvlOKdP8TNruy1yEaDfgpAIgbSAN7pye4FEHg9tYQ==", "dev": true, - "requires": { - "@types/ace": "*", - "@types/jquery": "*", - "@types/node-red__runtime": "*", - "@types/node-red__util": "*" + "dependencies": { + "envinfo": "^7.7.3" + }, + "peerDependencies": { + "webpack-cli": "4.x.x" } }, - "@types/node-red__registry": { + "node_modules/@webpack-cli/serve": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.1.0.tgz", + "integrity": "sha512-7RfnMXCpJ/NThrhq4gYQYILB18xWyoQcBey81oIyVbmgbc6m5ZHHyFK+DyH7pLHJf0p14MxL4mTsoPAgBSTpIg==", + "dev": true, + "peerDependencies": { + "webpack-cli": "4.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/abbrev": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/node-red__registry/-/node-red__registry-1.1.1.tgz", - "integrity": "sha512-iAl5sXNZ+iv1Ry2Zm+oKqIlO0BpAsA/FyI05Xk/DL98f4y1CbrtKp5BEeP7iWKoqwdCaelIh/lp3I9idCFmP4A==", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.0.4.tgz", + "integrity": "sha512-XNP0PqF1XD19ZlLKvB7cMmnZswW4C/03pRHgirB30uSJTaS3A3V1/P4sS3HPvFmjoriPCJQs+JDSbm4bL1TxGQ==", "dev": true, - "requires": { - "@types/express": "*", - "@types/node-red__runtime": "*", - "@types/node-red__util": "*" + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, - "@types/node-red__runtime": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/node-red__runtime/-/node-red__runtime-1.1.2.tgz", - "integrity": "sha512-jwBV7u6JJSBWNO6hOGsK3L7mtx47uPaAW3Kmz0MYcOQB5J8nUqaIbKQTGTwUOE4HeNU9xO7J7AYbWHEDzT/mRg==", + "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, - "requires": { - "@types/cors": "*", - "@types/express": "*", - "@types/node-red__editor-api": "*", - "@types/node-red__util": "*", - "@types/passport": "*" + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "@types/node-red__util": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/node-red__util/-/node-red__util-1.1.1.tgz", - "integrity": "sha512-np9L86J8nqcIAme5PdwIVIiBRRwuR5CNgIzACof1ouHoxRqFj+yaeWT68vRHSq9FJ0r7Jy9CnfzAV+XvUeuSDg==", + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, - "requires": { - "@types/node-red__registry": "*", - "@types/node-red__runtime": "*", - "jsonata": "1.8.3" + "peerDependencies": { + "ajv": "^6.9.1" } }, - "@types/passport": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@types/passport/-/passport-1.0.4.tgz", - "integrity": "sha512-h5OfAbfBBYSzjeU0GTuuqYEk9McTgWeGQql9g3gUw2/NNCfD7VgExVRYJVVeU13Twn202Mvk9BT0bUrl30sEgA==", + "node_modules/ansi-align": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", "dev": true, - "requires": { - "@types/express": "*" + "dependencies": { + "string-width": "^3.0.0" } }, - "@types/qs": { - "version": "6.9.5", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.5.tgz", - "integrity": "sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ==", - "dev": true + "node_modules/ansi-align/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "@types/range-parser": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", - "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==", + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, - "@types/serve-static": { - "version": "1.13.8", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.8.tgz", - "integrity": "sha512-MoJhSQreaVoL+/hurAZzIm8wafFR6ajiTM1m4A0kv6AGeVBl4r4pOV8bGFrjjq1sGxDTnCoF8i22o0/aE5XCyA==", + "node_modules/ansi-align/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true, - "requires": { - "@types/mime": "*", - "@types/node": "*" + "engines": { + "node": ">=4" } }, - "@types/sizzle": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.2.tgz", - "integrity": "sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg==", - "dev": true + "node_modules/ansi-align/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } }, - "jsonata": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/jsonata/-/jsonata-1.8.3.tgz", - "integrity": "sha512-r6ztI6ohbpRo77AxBm6vMs3aHZi2L2PaakW7TCPwSkeGcuAZ/SxXGLWH2Npwqq5+YBM/fg/g0EXg/pI9HvXQ8Q==", - "dev": true + "node_modules/ansi-align/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } }, - "typescript": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.2.tgz", - "integrity": "sha512-thGloWsGH3SOxv1SoY7QojKi0tc+8FnOmiarEGMbd/lar7QOEd3hvlx3Fp5y6FlDUGl9L+pd4n2e+oToGMmhRQ==", + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "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, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/array-back": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.1.tgz", + "integrity": "sha512-Z/JnaVEXv+A9xabHzN43FiiiWEE7gPCRXMrVmRm00tWbjZRul1iHm7ECzlyNq1p4a4ATXz+G9FJ3GqGOkOV3fg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/boxen": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "dev": true, + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "cli-boxes": "^2.2.0", + "string-width": "^4.1.0", + "term-size": "^2.1.0", + "type-fest": "^0.8.1", + "widest-line": "^3.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/boxen/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/boxen/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/boxen/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 + }, + "node_modules/boxen/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/boxen/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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "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, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.14.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.7.tgz", + "integrity": "sha512-BSVRLCeG3Xt/j/1cCGj1019Wbty0H+Yvu2AOuZSuoaUWn3RatbL33Cxk+Q4jRMRAbOm0p7SLravLjpnT6s0vzQ==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001157", + "colorette": "^1.2.1", + "electron-to-chromium": "^1.3.591", + "escalade": "^3.1.1", + "node-releases": "^1.1.66" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001161", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001161.tgz", + "integrity": "sha512-JharrCDxOqPLBULF9/SPa6yMcBRTjZARJ6sc3cuKrPfyIk64JN6kuMINWqA99Xc8uElMFcROliwtz0n9pYej+g==", + "dev": true + }, + "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, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chokidar": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", + "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.1.2" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + } + }, + "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, + "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": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/colorette": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", + "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", + "dev": true + }, + "node_modules/command-line-usage": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.1.tgz", + "integrity": "sha512-F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA==", + "dev": true, + "dependencies": { + "array-back": "^4.0.1", + "chalk": "^2.4.2", + "table-layout": "^1.0.1", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "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, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "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, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "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, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.3.608", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.608.tgz", + "integrity": "sha512-dZsqCe7WgOcFse1QxIrm3eR+ebF13f0HfzM5QW9WtP1XVsQVrl/6R3DjexfVdupfwaS6znEDcP0NTBlJii7sOA==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", + "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/envinfo": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.3.tgz", + "integrity": "sha512-46+j5QxbPWza0PB1i15nZx0xQ4I/EfQxg9J8Had3b408SV63nEtor2e+oiY63amTo9KTuh2a3XLObNwduxYwwA==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "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, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.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, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "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, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/events": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", + "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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 + }, + "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 + }, + "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, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "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, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "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 + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/global-dirs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.0.1.tgz", + "integrity": "sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A==", + "dev": true, + "dependencies": { + "ini": "^1.3.5" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "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, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true + }, + "node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", + "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "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 + }, + "node_modules/ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-installed-globally": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", + "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "dev": true, + "dependencies": { + "global-dirs": "^2.0.1", + "is-path-inside": "^3.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-npm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", + "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", + "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "node_modules/is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "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 + }, + "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 + }, + "node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsonata": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/jsonata/-/jsonata-1.8.3.tgz", + "integrity": "sha512-r6ztI6ohbpRo77AxBm6vMs3aHZi2L2PaakW7TCPwSkeGcuAZ/SxXGLWH2Npwqq5+YBM/fg/g0EXg/pI9HvXQ8Q==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "dependencies": { + "package-json": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/loader-runner": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.1.0.tgz", + "integrity": "sha512-oR4lB4WvwFoC70ocraKhn5nkKSs23t57h9udUgw8o0iH8hMXeEoRuUgfcvgUwAJ1ZpRqBvcou4N2SMvM1DwMrA==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "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, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "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 + }, + "node_modules/micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "dev": true, + "dependencies": { + "mime-db": "1.44.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "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 + }, + "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 + }, + "node_modules/node-releases": { + "version": "1.1.67", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.67.tgz", + "integrity": "sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg==", + "dev": true + }, + "node_modules/nodemon": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.4.tgz", + "integrity": "sha512-Ltced+hIfTmaS28Zjv1BM552oQ3dbwPqI4+zI0SLgq+wpJhSyqgYude/aZa/3i31VCQWMfXJVxvu86abcam3uQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "chokidar": "^3.2.2", + "debug": "^3.2.6", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.7", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.2", + "update-notifier": "^4.0.0" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon-webpack-plugin": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/nodemon-webpack-plugin/-/nodemon-webpack-plugin-4.3.2.tgz", + "integrity": "sha512-/m/u85ZKOK3bzVTHkoXCFQyKNmdLWnX9OvHGMmh7WuRzG/YFSjbXDTNo+FAtEeiGvXWSIjQHDbTko2W81EeTUg==", + "dev": true, + "dependencies": { + "nodemon": "2.0.4", + "ramda": "0.27.0" + }, + "engines": { + "node": ">=6.11.5" + }, + "peerDependencies": { + "webpack": "4 || 5" + } + }, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", + "dev": true, + "engines": { + "node": ">=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, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "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, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "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, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "dependencies": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/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, + "bin": { + "semver": "bin/semver.js" + } + }, + "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, + "engines": { + "node": ">=8" + } + }, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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 + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, + "dependencies": { + "escape-goat": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ramda": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.0.tgz", + "integrity": "sha512-pVzZdDpWwWqEVVLshWUHjNwuVP7SfcmPraYuqocJp1yo2U1R7P+5QAfDhdItkuoGqIBnBYrtPp7rEPqDn9HlZA==", + "dev": true + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", + "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", + "dev": true, + "dependencies": { + "resolve": "^1.9.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dev": true, + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/replace-in-file-webpack-plugin": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/replace-in-file-webpack-plugin/-/replace-in-file-webpack-plugin-1.0.6.tgz", + "integrity": "sha512-+KRgNYL2nbc6nza6SeF+wTBNkovuHFTfJF8QIEqZg5MbwkYpU9no0kH2YU354wvY/BK8mAC2UKoJ7q+sJTvciw==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "dev": true, + "dependencies": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "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 + }, + "node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, + "dependencies": { + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semver-diff/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, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "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, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "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, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/table-layout": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.1.tgz", + "integrity": "sha512-dEquqYNJiGwY7iPfZ3wbXDI944iqanTSchrACLL2nOB+1r+h1Nzu2eH+DuPPvWvm5Ry7iAPeFlgEtP5bIp5U7Q==", + "dev": true, + "dependencies": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.5.0.tgz", + "integrity": "sha512-eopt1Gf7/AQyPhpygdKePTzaet31TvQxXvrf7xYUvD/d8qkCJm4SKPDzu+GHK5ZaYTn8rvttfqaZc3swK21e5g==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.0.3.tgz", + "integrity": "sha512-zFdGk8Lh9ZJGPxxPE6jwysOlATWB8GMW8HcfGULWA/nPal+3VdATflQvSBSLQJRCmYZnfFJl6vkRTiwJGNgPiQ==", + "dev": true, + "dependencies": { + "jest-worker": "^26.6.1", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "source-map": "^0.6.1", + "terser": "^5.3.8" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/terser-webpack-plugin/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, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/ts-loader": { + "version": "8.0.11", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.0.11.tgz", + "integrity": "sha512-06X+mWA2JXoXJHYAesUUL4mHFYhnmyoCdQVMXofXF552Lzd4wNwSGg7unJpttqUP7ziaruM8d7u8LUB6I1sgzA==", + "dev": true, + "dependencies": { + "chalk": "^2.3.0", + "enhanced-resolve": "^4.0.0", + "loader-utils": "^1.0.2", + "micromatch": "^4.0.0", + "semver": "^6.0.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "*" + } + }, + "node_modules/ts-loader/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, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.2.tgz", + "integrity": "sha512-thGloWsGH3SOxv1SoY7QojKi0tc+8FnOmiarEGMbd/lar7QOEd3hvlx3Fp5y6FlDUGl9L+pd4n2e+oToGMmhRQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/undefsafe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", + "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", + "dev": true, + "dependencies": { + "debug": "^2.2.0" + } + }, + "node_modules/undefsafe/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/undefsafe/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-notifier": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", + "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", + "dev": true, + "dependencies": { + "boxen": "^4.2.0", + "chalk": "^3.0.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.3.1", + "is-npm": "^4.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.0.0", + "pupa": "^2.0.1", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, + "node_modules/update-notifier/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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/update-notifier/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-notifier/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/update-notifier/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 + }, + "node_modules/update-notifier/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-notifier/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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/v8-compile-cache": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", + "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", + "dev": true + }, + "node_modules/watchpack": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.0.1.tgz", + "integrity": "sha512-vO8AKGX22ZRo6PiOFM9dC0re8IcKh8Kd/aH2zeqUc6w4/jBGlTy2P7fTC6ekT0NjVeGjgU2dGC5rNstKkeLEQg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.8.0.tgz", + "integrity": "sha512-X2yosPiHip3L0TE+ylruzrOqSgEgsdGyBOGFWKYChcwlKChaw9VodZIUovG1oo7s0ss6e3ZxBMn9tXR+nkPThA==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.45", + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^8.0.4", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.3.1", + "eslint-scope": "^5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.1.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "pkg-dir": "^4.2.0", + "schema-utils": "^3.0.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.0.3", + "watchpack": "^2.0.0", + "webpack-sources": "^2.1.1" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.2.0.tgz", + "integrity": "sha512-EIl3k88vaF4fSxWSgtAQR+VwicfLMTZ9amQtqS4o+TDPW9HGaEpbFBbAZ4A3ZOT5SOnMxNOzROsSTPiE8tBJPA==", + "dev": true, + "dependencies": { + "@webpack-cli/info": "^1.1.0", + "@webpack-cli/serve": "^1.1.0", + "colorette": "^1.2.1", + "command-line-usage": "^6.1.0", + "commander": "^6.2.0", + "enquirer": "^2.3.6", + "execa": "^4.1.0", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "leven": "^3.1.0", + "rechoir": "^0.7.0", + "v8-compile-cache": "^2.2.0", + "webpack-merge": "^4.2.2" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generate-loader": { + "optional": true + }, + "@webpack-cli/generate-plugin": { + "optional": true + }, + "@webpack-cli/init": { + "optional": true + }, + "@webpack-cli/migrate": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.0.tgz", + "integrity": "sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/webpack-merge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", + "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", + "dev": true, + "dependencies": { + "lodash": "^4.17.15" + } + }, + "node_modules/webpack-sources": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz", + "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==", + "dev": true, + "dependencies": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/enhanced-resolve": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.3.2.tgz", + "integrity": "sha512-G28GCrglCAH6+EqMN2D+Q2wCUS1O1vVQJBn8ME2I/Api41YBe4vLWWRBOUbwDH7vwzSZdljxwTRVqnf+sm6XqQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/tapable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.1.1.tgz", + "integrity": "sha512-Wib1S8m2wdpLbmQz0RBEVosIyvb/ykfKXf3ZIDqvWoMg/zTNm6G/tDSuUM61J1kNCDXWJrLHGSFeMhAG+gAGpQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wordwrapjs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.0.tgz", + "integrity": "sha512-Svqw723a3R34KvsMgpjFBYCgNOSdcW3mQFK4wIfhGQhtaFVOJmdYoXgi63ne3dTlWgatVcUc7t4HtQ/+bUVIzQ==", + "dev": true, + "dependencies": { + "reduce-flatten": "^2.0.0", + "typical": "^5.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "@types/ace": { + "version": "0.0.44", + "resolved": "https://registry.npmjs.org/@types/ace/-/ace-0.0.44.tgz", + "integrity": "sha512-jDEkKhBrVWm7m23Dqttj6189+uMhRSFINjH+pS/Fu7KeXB8NsfoX/8QvmmIdV8JvWqVsDP1Pf6cOm3jOGhOnKQ==", + "dev": true + }, + "@types/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.33", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.33.tgz", + "integrity": "sha512-2+FrkXY4zllzTNfJth7jOqEHC+enpLeGslEhpnTAkg21GkRrWV4SsAtqchtT4YS9/nODBU2/ZfsBY2X4J/dX7A==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/cors": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.8.tgz", + "integrity": "sha512-fO3gf3DxU2Trcbr75O7obVndW/X5k8rJNZkLXlQWStTHhP71PkRqjwPIEI0yMnJdg9R9OasjU+Bsr+Hr1xy/0w==", + "dev": true, + "requires": { + "@types/express": "*" + } + }, + "@types/eslint": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.5.tgz", + "integrity": "sha512-Dc6ar9x16BdaR3NSxSF7T4IjL9gxxViJq8RmFd+2UAyA+K6ck2W+gUwfgpG/y9TPyUuBL35109bbULpEynvltA==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", + "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.45", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.45.tgz", + "integrity": "sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g==", + "dev": true + }, + "@types/express": { + "version": "4.17.9", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.9.tgz", + "integrity": "sha512-SDzEIZInC4sivGIFY4Sz1GG6J9UObPwCInYJjko2jzOf/Imx/dlpume6Xxwj1ORL82tBbmN4cPDIDkLbWHk9hw==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "*", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.14", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.14.tgz", + "integrity": "sha512-uFTLwu94TfUFMToXNgRZikwPuZdOtDgs3syBtAIr/OXorL1kJqUJT9qCLnRZ5KBOWfZQikQ2xKgR2tnDj1OgDA==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "@types/jquery": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.4.tgz", + "integrity": "sha512-//9CHhaUt/rurMJTxGI+I6DmsNHgYU6d8aSLFfO5dB7+10lwLnaWT0z5GY/yY82Q/M+B+0Qh3TixlJ8vmBeqIw==", + "dev": true, + "requires": { + "@types/sizzle": "*" + } + }, + "@types/json-schema": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", + "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", + "dev": true + }, + "@types/mime": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.3.tgz", + "integrity": "sha512-Jus9s4CDbqwocc5pOAnh8ShfrnMcPHuJYzVcSUU7lrh8Ni5HuIqX3oilL86p3dlTrk0LzHRCgA/GQ7uNCw6l2Q==", + "dev": true + }, + "@types/node": { + "version": "14.14.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.10.tgz", + "integrity": "sha512-J32dgx2hw8vXrSbu4ZlVhn1Nm3GbeCFNw2FWL8S5QKucHGY0cyNwjdQdO+KMBZ4wpmC7KhLCiNsdk1RFRIYUQQ==", + "dev": true + }, + "@types/node-red": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/node-red/-/node-red-1.1.1.tgz", + "integrity": "sha512-ePusasml1Wc7v/LWCD+804b3ROX8rlztxDDGu3fS4eq8cVNg8vsKwmioRvsFwYv6DVfEd9CAOh5Bn4n1qsocjQ==", + "dev": true, + "requires": { + "@types/express": "*", + "@types/node-red__editor-api": "*", + "@types/node-red__editor-client": "*", + "@types/node-red__registry": "*", + "@types/node-red__runtime": "*", + "@types/node-red__util": "*" + } + }, + "@types/node-red__editor-api": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/node-red__editor-api/-/node-red__editor-api-1.1.1.tgz", + "integrity": "sha512-O7MNsGwNWDY89sPxVjo2zXGfm8bw4owXrD4akp2NmM1cmrj6XvRKEu99Apw/RjZvteBFpxvLSVtOnYYPj4C7wg==", + "dev": true, + "requires": { + "@types/express": "*", + "@types/node-red__runtime": "*" + } + }, + "@types/node-red__editor-client": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/node-red__editor-client/-/node-red__editor-client-1.1.2.tgz", + "integrity": "sha512-m2ydaMKWnGr4IFYaZbxtVixDv3sH4N7pwT8jarlEaaNr9FVX1GnlSCslZLkrSY1Wn3Ecs6cNkRpANOC/hIaUpw==", + "dev": true, + "requires": { + "@types/ace": "*", + "@types/jquery": "*", + "@types/node-red__runtime": "*", + "@types/node-red__util": "*" + } + }, + "@types/node-red__registry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/node-red__registry/-/node-red__registry-1.1.1.tgz", + "integrity": "sha512-iAl5sXNZ+iv1Ry2Zm+oKqIlO0BpAsA/FyI05Xk/DL98f4y1CbrtKp5BEeP7iWKoqwdCaelIh/lp3I9idCFmP4A==", + "dev": true, + "requires": { + "@types/express": "*", + "@types/node-red__runtime": "*", + "@types/node-red__util": "*" + } + }, + "@types/node-red__runtime": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/node-red__runtime/-/node-red__runtime-1.1.2.tgz", + "integrity": "sha512-jwBV7u6JJSBWNO6hOGsK3L7mtx47uPaAW3Kmz0MYcOQB5J8nUqaIbKQTGTwUOE4HeNU9xO7J7AYbWHEDzT/mRg==", + "dev": true, + "requires": { + "@types/cors": "*", + "@types/express": "*", + "@types/node-red__editor-api": "*", + "@types/node-red__util": "*", + "@types/passport": "*" + } + }, + "@types/node-red__util": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/node-red__util/-/node-red__util-1.1.1.tgz", + "integrity": "sha512-np9L86J8nqcIAme5PdwIVIiBRRwuR5CNgIzACof1ouHoxRqFj+yaeWT68vRHSq9FJ0r7Jy9CnfzAV+XvUeuSDg==", + "dev": true, + "requires": { + "@types/node-red__registry": "*", + "@types/node-red__runtime": "*", + "jsonata": "1.8.3" + } + }, + "@types/passport": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/passport/-/passport-1.0.4.tgz", + "integrity": "sha512-h5OfAbfBBYSzjeU0GTuuqYEk9McTgWeGQql9g3gUw2/NNCfD7VgExVRYJVVeU13Twn202Mvk9BT0bUrl30sEgA==", + "dev": true, + "requires": { + "@types/express": "*" + } + }, + "@types/qs": { + "version": "6.9.5", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.5.tgz", + "integrity": "sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", + "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==", + "dev": true + }, + "@types/serve-static": { + "version": "1.13.8", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.8.tgz", + "integrity": "sha512-MoJhSQreaVoL+/hurAZzIm8wafFR6ajiTM1m4A0kv6AGeVBl4r4pOV8bGFrjjq1sGxDTnCoF8i22o0/aE5XCyA==", + "dev": true, + "requires": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "@types/sizzle": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.2.tgz", + "integrity": "sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg==", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "dev": true + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@webpack-cli/info": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.1.0.tgz", + "integrity": "sha512-uNWSdaYHc+f3LdIZNwhdhkjjLDDl3jP2+XBqAq9H8DjrJUvlOKdP8TNruy1yEaDfgpAIgbSAN7pye4FEHg9tYQ==", + "dev": true, + "requires": { + "envinfo": "^7.7.3" + } + }, + "@webpack-cli/serve": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.1.0.tgz", + "integrity": "sha512-7RfnMXCpJ/NThrhq4gYQYILB18xWyoQcBey81oIyVbmgbc6m5ZHHyFK+DyH7pLHJf0p14MxL4mTsoPAgBSTpIg==", + "dev": true, + "requires": {} + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "acorn": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.0.4.tgz", + "integrity": "sha512-XNP0PqF1XD19ZlLKvB7cMmnZswW4C/03pRHgirB30uSJTaS3A3V1/P4sS3HPvFmjoriPCJQs+JDSbm4bL1TxGQ==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "requires": {} + }, + "ansi-align": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "dev": true, + "requires": { + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "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, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "array-back": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.1.tgz", + "integrity": "sha512-Z/JnaVEXv+A9xabHzN43FiiiWEE7gPCRXMrVmRm00tWbjZRul1iHm7ECzlyNq1p4a4ATXz+G9FJ3GqGOkOV3fg==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "dev": true + }, + "boxen": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "dev": true, + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "cli-boxes": "^2.2.0", + "string-width": "^4.1.0", + "term-size": "^2.1.0", + "type-fest": "^0.8.1", + "widest-line": "^3.1.0" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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, + "requires": { + "color-name": "~1.1.4" + } + }, + "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 + }, + "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 + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "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, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.14.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.7.tgz", + "integrity": "sha512-BSVRLCeG3Xt/j/1cCGj1019Wbty0H+Yvu2AOuZSuoaUWn3RatbL33Cxk+Q4jRMRAbOm0p7SLravLjpnT6s0vzQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001157", + "colorette": "^1.2.1", + "electron-to-chromium": "^1.3.591", + "escalade": "^3.1.1", + "node-releases": "^1.1.66" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + } + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001161", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001161.tgz", + "integrity": "sha512-JharrCDxOqPLBULF9/SPa6yMcBRTjZARJ6sc3cuKrPfyIk64JN6kuMINWqA99Xc8uElMFcROliwtz0n9pYej+g==", + "dev": true + }, + "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, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chokidar": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", + "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } + }, + "chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "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, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colorette": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", + "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", + "dev": true + }, + "command-line-usage": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.1.tgz", + "integrity": "sha512-F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA==", + "dev": true, + "requires": { + "array-back": "^4.0.1", + "chalk": "^2.4.2", + "table-layout": "^1.0.1", + "typical": "^5.2.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "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, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true + }, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "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 + }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "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, + "requires": { + "is-obj": "^2.0.0" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.608", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.608.tgz", + "integrity": "sha512-dZsqCe7WgOcFse1QxIrm3eR+ebF13f0HfzM5QW9WtP1XVsQVrl/6R3DjexfVdupfwaS6znEDcP0NTBlJii7sOA==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", + "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "envinfo": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.3.tgz", + "integrity": "sha512-46+j5QxbPWza0PB1i15nZx0xQ4I/EfQxg9J8Had3b408SV63nEtor2e+oiY63amTo9KTuh2a3XLObNwduxYwwA==", + "dev": true + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "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, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "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, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "events": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", + "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", + "dev": true + }, + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "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 + }, + "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 + }, + "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, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "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, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "global-dirs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.0.1.tgz", + "integrity": "sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A==", + "dev": true, + "requires": { + "ini": "^1.3.5" + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true + }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, + "import-local": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", + "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-installed-globally": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", + "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "dev": true, + "requires": { + "global-dirs": "^2.0.1", + "is-path-inside": "^3.0.1" + } + }, + "is-npm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", + "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", + "dev": true + }, + "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 + }, + "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 + }, + "is-path-inside": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", + "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==", + "dev": true + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "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 + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "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 + }, + "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 + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "jsonata": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/jsonata/-/jsonata-1.8.3.tgz", + "integrity": "sha512-r6ztI6ohbpRo77AxBm6vMs3aHZi2L2PaakW7TCPwSkeGcuAZ/SxXGLWH2Npwqq5+YBM/fg/g0EXg/pI9HvXQ8Q==", + "dev": true + }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, + "latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "requires": { + "package-json": "^6.3.0" + } + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "loader-runner": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.1.0.tgz", + "integrity": "sha512-oR4lB4WvwFoC70ocraKhn5nkKSs23t57h9udUgw8o0iH8hMXeEoRuUgfcvgUwAJ1ZpRqBvcou4N2SMvM1DwMrA==", + "dev": true + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "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, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "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 + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "dev": true + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "dev": true, + "requires": { + "mime-db": "1.44.0" + } + }, + "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 + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "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 + }, + "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 + }, + "node-releases": { + "version": "1.1.67", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.67.tgz", + "integrity": "sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg==", + "dev": true + }, + "nodemon": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.4.tgz", + "integrity": "sha512-Ltced+hIfTmaS28Zjv1BM552oQ3dbwPqI4+zI0SLgq+wpJhSyqgYude/aZa/3i31VCQWMfXJVxvu86abcam3uQ==", + "dev": true, + "requires": { + "chokidar": "^3.2.2", + "debug": "^3.2.6", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.7", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.2", + "update-notifier": "^4.0.0" + } + }, + "nodemon-webpack-plugin": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/nodemon-webpack-plugin/-/nodemon-webpack-plugin-4.3.2.tgz", + "integrity": "sha512-/m/u85ZKOK3bzVTHkoXCFQyKNmdLWnX9OvHGMmh7WuRzG/YFSjbXDTNo+FAtEeiGvXWSIjQHDbTko2W81EeTUg==", + "dev": true, + "requires": { + "nodemon": "2.0.4", + "ramda": "0.27.0" + } + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-url": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", + "dev": true + }, + "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, + "requires": { + "path-key": "^3.0.0" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true + }, + "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, + "requires": { + "p-try": "^2.0.0" + } + }, + "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, + "requires": { + "p-limit": "^2.2.0" + } + }, + "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 + }, + "package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "requires": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "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 + }, + "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 + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + }, + "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 + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, + "requires": { + "escape-goat": "^2.0.0" + } + }, + "ramda": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.0.tgz", + "integrity": "sha512-pVzZdDpWwWqEVVLshWUHjNwuVP7SfcmPraYuqocJp1yo2U1R7P+5QAfDhdItkuoGqIBnBYrtPp7rEPqDn9HlZA==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "rechoir": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", + "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", + "dev": true, + "requires": { + "resolve": "^1.9.0" + } + }, + "reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "dev": true + }, + "registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "replace-in-file-webpack-plugin": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/replace-in-file-webpack-plugin/-/replace-in-file-webpack-plugin-1.0.6.tgz", + "integrity": "sha512-+KRgNYL2nbc6nza6SeF+wTBNkovuHFTfJF8QIEqZg5MbwkYpU9no0kH2YU354wvY/BK8mAC2UKoJ7q+sJTvciw==", + "dev": true + }, + "resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "dev": true, + "requires": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + } + }, + "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 + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "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 + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, + "requires": { + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "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, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "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 + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "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 + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "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, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "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 + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "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, + "requires": { + "has-flag": "^3.0.0" + } + }, + "table-layout": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.1.tgz", + "integrity": "sha512-dEquqYNJiGwY7iPfZ3wbXDI944iqanTSchrACLL2nOB+1r+h1Nzu2eH+DuPPvWvm5Ry7iAPeFlgEtP5bIp5U7Q==", + "dev": true, + "requires": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true + }, + "terser": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.5.0.tgz", + "integrity": "sha512-eopt1Gf7/AQyPhpygdKePTzaet31TvQxXvrf7xYUvD/d8qkCJm4SKPDzu+GHK5ZaYTn8rvttfqaZc3swK21e5g==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.0.3.tgz", + "integrity": "sha512-zFdGk8Lh9ZJGPxxPE6jwysOlATWB8GMW8HcfGULWA/nPal+3VdATflQvSBSLQJRCmYZnfFJl6vkRTiwJGNgPiQ==", + "dev": true, + "requires": { + "jest-worker": "^26.6.1", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "source-map": "^0.6.1", + "terser": "^5.3.8" + }, + "dependencies": { + "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, + "requires": { + "yocto-queue": "^0.1.0" + } + } + } + }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true + }, + "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, + "requires": { + "is-number": "^7.0.0" + } + }, + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "requires": { + "nopt": "~1.0.10" + } + }, + "ts-loader": { + "version": "8.0.11", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.0.11.tgz", + "integrity": "sha512-06X+mWA2JXoXJHYAesUUL4mHFYhnmyoCdQVMXofXF552Lzd4wNwSGg7unJpttqUP7ziaruM8d7u8LUB6I1sgzA==", + "dev": true, + "requires": { + "chalk": "^2.3.0", + "enhanced-resolve": "^4.0.0", + "loader-utils": "^1.0.2", + "micromatch": "^4.0.0", + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "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 + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.2.tgz", + "integrity": "sha512-thGloWsGH3SOxv1SoY7QojKi0tc+8FnOmiarEGMbd/lar7QOEd3hvlx3Fp5y6FlDUGl9L+pd4n2e+oToGMmhRQ==", + "dev": true + }, + "typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true + }, + "undefsafe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", + "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", + "dev": true, + "requires": { + "debug": "^2.2.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "update-notifier": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", + "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", + "dev": true, + "requires": { + "boxen": "^4.2.0", + "chalk": "^3.0.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.3.1", + "is-npm": "^4.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.0.0", + "pupa": "^2.0.1", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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, + "requires": { + "color-name": "~1.1.4" + } + }, + "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 + }, + "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 + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "requires": { + "prepend-http": "^2.0.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "v8-compile-cache": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", + "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", + "dev": true + }, + "watchpack": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.0.1.tgz", + "integrity": "sha512-vO8AKGX22ZRo6PiOFM9dC0re8IcKh8Kd/aH2zeqUc6w4/jBGlTy2P7fTC6ekT0NjVeGjgU2dGC5rNstKkeLEQg==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "webpack": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.8.0.tgz", + "integrity": "sha512-X2yosPiHip3L0TE+ylruzrOqSgEgsdGyBOGFWKYChcwlKChaw9VodZIUovG1oo7s0ss6e3ZxBMn9tXR+nkPThA==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.45", + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^8.0.4", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.3.1", + "eslint-scope": "^5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.1.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "pkg-dir": "^4.2.0", + "schema-utils": "^3.0.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.0.3", + "watchpack": "^2.0.0", + "webpack-sources": "^2.1.1" + }, + "dependencies": { + "enhanced-resolve": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.3.2.tgz", + "integrity": "sha512-G28GCrglCAH6+EqMN2D+Q2wCUS1O1vVQJBn8ME2I/Api41YBe4vLWWRBOUbwDH7vwzSZdljxwTRVqnf+sm6XqQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.0.0" + } + }, + "tapable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.1.1.tgz", + "integrity": "sha512-Wib1S8m2wdpLbmQz0RBEVosIyvb/ykfKXf3ZIDqvWoMg/zTNm6G/tDSuUM61J1kNCDXWJrLHGSFeMhAG+gAGpQ==", + "dev": true + } + } + }, + "webpack-cli": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.2.0.tgz", + "integrity": "sha512-EIl3k88vaF4fSxWSgtAQR+VwicfLMTZ9amQtqS4o+TDPW9HGaEpbFBbAZ4A3ZOT5SOnMxNOzROsSTPiE8tBJPA==", + "dev": true, + "requires": { + "@webpack-cli/info": "^1.1.0", + "@webpack-cli/serve": "^1.1.0", + "colorette": "^1.2.1", + "command-line-usage": "^6.1.0", + "commander": "^6.2.0", + "enquirer": "^2.3.6", + "execa": "^4.1.0", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "leven": "^3.1.0", + "rechoir": "^0.7.0", + "v8-compile-cache": "^2.2.0", + "webpack-merge": "^4.2.2" + }, + "dependencies": { + "commander": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.0.tgz", + "integrity": "sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q==", + "dev": true + } + } + }, + "webpack-merge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", + "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, + "webpack-sources": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz", + "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==", + "dev": true, + "requires": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "requires": { + "string-width": "^4.0.0" + } + }, + "wordwrapjs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.0.tgz", + "integrity": "sha512-Svqw723a3R34KvsMgpjFBYCgNOSdcW3mQFK4wIfhGQhtaFVOJmdYoXgi63ne3dTlWgatVcUc7t4HtQ/+bUVIzQ==", + "dev": true, + "requires": { + "reduce-flatten": "^2.0.0", + "typical": "^5.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true + }, + "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 } } diff --git a/package.json b/package.json index 4052d1b..3fbfdc5 100644 --- a/package.json +++ b/package.json @@ -20,10 +20,14 @@ "bsb-lan" ], "license": "ISC", - "dependencies": {}, "devDependencies": { "@types/node-red": "1.1.1", - "typescript": "4.1.2" + "nodemon-webpack-plugin": "^4.3.2", + "replace-in-file-webpack-plugin": "^1.0.6", + "ts-loader": "^8.0.11", + "typescript": "4.1.2", + "webpack": "^5.8.0", + "webpack-cli": "^4.2.0" }, "repository": { "type": "git", diff --git a/src/bsb-lan-device.html b/src/bsb-lan-device.html index 14b76d2..a985ac2 100644 --- a/src/bsb-lan-device.html +++ b/src/bsb-lan-device.html @@ -1,4 +1,4 @@ - +
diff --git a/src/bsb-lan-device.html.ts b/src/bsb-lan-device.html.ts index e326756..7bb419e 100644 --- a/src/bsb-lan-device.html.ts +++ b/src/bsb-lan-device.html.ts @@ -1,8 +1,7 @@ import { EditorRED, EditorNodeDef } from "node-red"; declare var RED: EditorRED; -import { Credentials, MikrotikDeviceConfig } from "node-red-contrib-bsb-lan/src/interfaces"; -RED.nodes.registerType('mikrotik-device', { +RED.nodes.registerType('bsb-lan-device', { category: 'config', defaults: { host: { value: '192.168.0.1', required: true }, @@ -16,7 +15,5 @@ RED.nodes.registerType('mikrotik-device', { password: { type: "password" }, key: { type: "password" } }, - - } as EditorNodeDef); diff --git a/src/bsb-lan-device.ts b/src/bsb-lan-device.ts index 29bd90f..4ad5831 100644 --- a/src/bsb-lan-device.ts +++ b/src/bsb-lan-device.ts @@ -1,6 +1,5 @@ import { NodeAPI, Node, NodeDef } from "node-red"; - export = function (RED: NodeAPI) { function NodeConstructorMikrotikDevice(this: Node, def: NodeDef & {} ) { RED.nodes.createNode(this, def); @@ -8,11 +7,9 @@ export = function (RED: NodeAPI) { // TODO add def for Host & Port // this.host = def.host; // this.port = def.port; - - } - RED.nodes.registerType("mikrotik-device", NodeConstructorMikrotikDevice, { + RED.nodes.registerType("bsb-lan-device", NodeConstructorMikrotikDevice, { credentials: { username: { type: "text" }, password: { type: "password" }, diff --git a/src/bsb-lan.html b/src/bsb-lan.html index 7d228d9..b565270 100644 --- a/src/bsb-lan.html +++ b/src/bsb-lan.html @@ -1,4 +1,4 @@ - +
@@ -20,7 +20,7 @@
- +

A node that connect with BSB-LAN via the BSB-LAN API.

diff --git a/webpack.conf.js b/webpack.conf.js new file mode 100644 index 0000000..4a2ae3e --- /dev/null +++ b/webpack.conf.js @@ -0,0 +1,58 @@ +const path = require('path'); +const { node } = require('webpack'); + +const html = { + entry: { + 'bsb-lan-device-html': './src/bsb-lan-device.html.ts', + 'bsb-lan-html': './src/bsb-lan.html.ts' + }, + mode: 'none', + output: { + path: path.resolve(__dirname, 'nodes') + }, + target: false, + module: { + rules: [ + { + test: /\.ts$/, + use: [ + { + loader: 'ts-loader', + options: { + configFile: path.resolve(process.cwd(), "./tsconfig.json") + } + } + ] + } + ] + } +}; + +const server = { + entry: { + 'bsb-lan-device': './src/bsb-lan-device.ts', + 'bsb-lan': './src/bsb-lan.ts' + }, + mode: 'none', + output: { + path: path.resolve(__dirname, 'nodes') + }, + target: false, + module: { + rules: [ + { + test: /\.ts$/, + use: [ + { + loader: 'ts-loader', + options: { + configFile: path.resolve(process.cwd(), "./tsconfig.json") + } + } + ] + } + ] + } +}; + +module.exports = [ html, server]; \ No newline at end of file From 648d4e547c3cd008aab0b56d9320060297f6a840 Mon Sep 17 00:00:00 2001 From: Konrad Mattheis Date: Fri, 27 Nov 2020 21:01:29 +0100 Subject: [PATCH 04/12] * treelist included and working * clean solution for multi device-nodes --- package-lock.json | 110 +++++++++++++++++++++++++++++++++++++ package.json | 2 + src/bsb-lan-device.html.ts | 4 +- src/bsb-lan-device.ts | 40 ++++++++++++-- src/bsb-lan.html | 16 ++++-- src/bsb-lan.html.ts | 80 +++++++++++++++++++++++++-- src/bsb-lan.ts | 4 +- src/interfaces.d.ts | 17 ++++++ 8 files changed, 254 insertions(+), 19 deletions(-) diff --git a/package-lock.json b/package-lock.json index ebd33e4..2bd5d3f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,9 @@ "version": "0.0.1", "license": "ISC", "devDependencies": { + "@types/node-fetch": "^2.5.7", "@types/node-red": "1.1.1", + "node-fetch": "^2.6.1", "nodemon-webpack-plugin": "^4.3.2", "replace-in-file-webpack-plugin": "^1.0.6", "ts-loader": "^8.0.11", @@ -148,6 +150,16 @@ "integrity": "sha512-J32dgx2hw8vXrSbu4ZlVhn1Nm3GbeCFNw2FWL8S5QKucHGY0cyNwjdQdO+KMBZ4wpmC7KhLCiNsdk1RFRIYUQQ==", "dev": true }, + "node_modules/@types/node-fetch": { + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.7.tgz", + "integrity": "sha512-o2WVNf5UhWRkxlf6eq+jMZDu7kjgpgJfl4xVNlvryc95O/6F2ld8ztKX+qu+Rjyet93WAWm5LjeX9H5FGkODvw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "form-data": "^3.0.0" + } + }, "node_modules/@types/node-red": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@types/node-red/-/node-red-1.1.1.tgz", @@ -623,6 +635,12 @@ "node": ">=8" } }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, "node_modules/balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -940,6 +958,18 @@ "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", "dev": true }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/command-line-usage": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.1.tgz", @@ -1049,6 +1079,15 @@ "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", "dev": true }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/dot-prop": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", @@ -1301,6 +1340,20 @@ "node": ">=8" } }, + "node_modules/form-data": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz", + "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fsevents": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", @@ -1930,6 +1983,15 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, + "node_modules/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "dev": true, + "engines": { + "node": "4.x || >=6.0.0" + } + }, "node_modules/node-releases": { "version": "1.1.67", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.67.tgz", @@ -3297,6 +3359,16 @@ "integrity": "sha512-J32dgx2hw8vXrSbu4ZlVhn1Nm3GbeCFNw2FWL8S5QKucHGY0cyNwjdQdO+KMBZ4wpmC7KhLCiNsdk1RFRIYUQQ==", "dev": true }, + "@types/node-fetch": { + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.7.tgz", + "integrity": "sha512-o2WVNf5UhWRkxlf6eq+jMZDu7kjgpgJfl4xVNlvryc95O/6F2ld8ztKX+qu+Rjyet93WAWm5LjeX9H5FGkODvw==", + "dev": true, + "requires": { + "@types/node": "*", + "form-data": "^3.0.0" + } + }, "@types/node-red": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@types/node-red/-/node-red-1.1.1.tgz", @@ -3725,6 +3797,12 @@ "integrity": "sha512-Z/JnaVEXv+A9xabHzN43FiiiWEE7gPCRXMrVmRm00tWbjZRul1iHm7ECzlyNq1p4a4ATXz+G9FJ3GqGOkOV3fg==", "dev": true }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -3970,6 +4048,15 @@ "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", "dev": true }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, "command-line-usage": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.1.tgz", @@ -4061,6 +4148,12 @@ "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", "dev": true }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, "dot-prop": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", @@ -4254,6 +4347,17 @@ "path-exists": "^4.0.0" } }, + "form-data": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz", + "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, "fsevents": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", @@ -4736,6 +4840,12 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "dev": true + }, "node-releases": { "version": "1.1.67", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.67.tgz", diff --git a/package.json b/package.json index 3fbfdc5..fde3ba6 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,9 @@ ], "license": "ISC", "devDependencies": { + "@types/node-fetch": "^2.5.7", "@types/node-red": "1.1.1", + "node-fetch": "^2.6.1", "nodemon-webpack-plugin": "^4.3.2", "replace-in-file-webpack-plugin": "^1.0.6", "ts-loader": "^8.0.11", diff --git a/src/bsb-lan-device.html.ts b/src/bsb-lan-device.html.ts index 7bb419e..93576a9 100644 --- a/src/bsb-lan-device.html.ts +++ b/src/bsb-lan-device.html.ts @@ -1,6 +1,8 @@ import { EditorRED, EditorNodeDef } from "node-red"; declare var RED: EditorRED; +import { Credentials } from "./interfaces"; + RED.nodes.registerType('bsb-lan-device', { category: 'config', defaults: { @@ -15,5 +17,5 @@ RED.nodes.registerType('bsb-lan-device', { password: { type: "password" }, key: { type: "password" } }, -} as EditorNodeDef); +} as EditorNodeDef); diff --git a/src/bsb-lan-device.ts b/src/bsb-lan-device.ts index 4ad5831..38fb0ca 100644 --- a/src/bsb-lan-device.ts +++ b/src/bsb-lan-device.ts @@ -1,15 +1,45 @@ import { NodeAPI, Node, NodeDef } from "node-red"; +import { Credentials, BSBLanDeviceNodeConfig, BSBLanDeviceNode } from "./interfaces"; + +import fetch from "node-fetch"; export = function (RED: NodeAPI) { - function NodeConstructorMikrotikDevice(this: Node, def: NodeDef & {} ) { + function NodeConstructorBSBLanDevice(this: BSBLanDeviceNode, def: NodeDef & BSBLanDeviceNodeConfig) { RED.nodes.createNode(this, def); - // TODO add def for Host & Port - // this.host = def.host; - // this.port = def.port; + let url = 'http://' + def.host + ':' + def.port + ((!this.credentials.key) ? '': '/'+this.credentials.key); + + let options = { + headers: { + 'Authorization': 'Basic ' + Buffer.from(this.credentials.username + ':' + this.credentials.password).toString('base64') + } + }; + + this.get = async (query: string) => { + return (await fetch(url + '/' + query, options)).json(); + }; } - RED.nodes.registerType("bsb-lan-device", NodeConstructorMikrotikDevice, { + // register only one namepaced http get handler that take care per "bsb-lan-device" with the id + RED.httpAdmin.get('/bsb-lan/:id/:type', + RED.auth.needsPermission('bsb-lan.read'), + (req, res) => { + try { + (RED.nodes.getNode(req.params.id) as BSBLanDeviceNode) + .get(req.params.type) + .then((result) => { + res.status(200).send(result); + }) + .catch((error) => { + res.status(500).send({ error: error }); + }); + } + catch (error) { + res.status(500).send({ error: error }); + } + }); + + RED.nodes.registerType("bsb-lan-device", NodeConstructorBSBLanDevice, { credentials: { username: { type: "text" }, password: { type: "password" }, diff --git a/src/bsb-lan.html b/src/bsb-lan.html index b565270..5c4ff0f 100644 --- a/src/bsb-lan.html +++ b/src/bsb-lan.html @@ -4,20 +4,24 @@
-
- - - +
+ +
+ +
+ +
- +
TODO msg.payload or msg.command

-
+
+ diff --git a/src/bsb-lan.html.ts b/src/bsb-lan.html.ts index b441bf4..4608c97 100644 --- a/src/bsb-lan.html.ts +++ b/src/bsb-lan.html.ts @@ -7,9 +7,7 @@ RED.nodes.registerType('bsb-lan', { defaults: { device: { value: '', type: "bsb-lan-device" }, name: { value: '' }, - action: { value: '0' }, - command: { value: '' }, - "command-type": { value: 'str' } + values: { value: [] }, }, inputs: 1, outputs: 1, @@ -19,10 +17,80 @@ RED.nodes.registerType('bsb-lan', { }, oneditprepare: function () { let node = this; - - + debugger; + if (!node.values) + node.values = []; + + const treeList: any = $("
") + .css({ width: "100%", height: "300px" }) + .appendTo(".node-input-browse-row"); + treeList.treeList({}); + + function loadData(id: string) { + treeList.treeList('empty'); + let fetchPath = 'bsb-lan/' + id + '/JK='; + console.log(fetchPath); + $.getJSON(fetchPath + 'ALL', function (data) { + let i = 0; + let tree = []; + + for (let key in data) { + let item = data[key]; + + let leaf = { + label: item.name + ' (' + item.min + '-' + item.max + ')', + id: key, + children: function (fetchedData) { + let subTree = []; + $.getJSON(fetchPath + key, function (elementData) { + for (let keyElement in elementData) { + let itemElement = elementData[keyElement]; + let subLeaf = { + label: itemElement.name + ' (' + keyElement + ')', + id: keyElement, + checkbox: true, + selected: node.values.includes(keyElement) + } + subTree.push(subLeaf); + } + fetchedData(subTree); + }); + } + }; + tree.push(leaf); + } + treeList.treeList('data', tree); + }); + } + + $('#node-input-device').on('change', function () { + loadData((this as any).value); + }); + + function updateValues() { + const text = node.values.join(','); + $('#node-values').val(text); + } + + updateValues(); + + treeList.on('treelistselect', function (event, item) { + + if (item.selected != undefined) { + if (item.selected) { + node.values.push(item.id); + } else { + const index = node.values.indexOf(item.id); + if (index > -1) { + node.values.splice(index, 1); + } + } + updateValues(); + console.log(node.values); + } + }); }, oneditsave: function () { - + } }); \ No newline at end of file diff --git a/src/bsb-lan.ts b/src/bsb-lan.ts index 2ff09ef..562797b 100644 --- a/src/bsb-lan.ts +++ b/src/bsb-lan.ts @@ -1,10 +1,12 @@ import { NodeAPI, Node, NodeMessageInFlow } from "node-red"; +import { BSBLanDeviceNode } from "./interfaces"; + export = function (RED: NodeAPI) { function NodeBsbLan(this: Node, config: any) { RED.nodes.createNode(this, config); - let node = this; + let device = RED.nodes.getNode(config.device) as BSBLanDeviceNode; this.on('input', function (msg: NodeMessageInFlow & { }) { diff --git a/src/interfaces.d.ts b/src/interfaces.d.ts index 8b13789..6b91fc5 100644 --- a/src/interfaces.d.ts +++ b/src/interfaces.d.ts @@ -1 +1,18 @@ +import { Node } from "node-red"; + +export interface Credentials { + username: string; + password: string; + key: string; +} + +export interface BSBLanDeviceNodeConfig { + host: string; + port: number; +} + +export interface BSBLanDeviceNode extends Node +{ + get: (query: string) => Promise +} From 174cb2cdedd380400923467973b4ebeca3ba20fa Mon Sep 17 00:00:00 2001 From: Konrad Mattheis Date: Tue, 1 Dec 2020 16:46:22 +0100 Subject: [PATCH 05/12] change icon --- src/bsb-lan.html.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bsb-lan.html.ts b/src/bsb-lan.html.ts index 4608c97..7b55980 100644 --- a/src/bsb-lan.html.ts +++ b/src/bsb-lan.html.ts @@ -11,7 +11,7 @@ RED.nodes.registerType('bsb-lan', { }, inputs: 1, outputs: 1, - icon: "feed.png", + icon: "font-awesome/fa-fire", label: function () { return this.name || "bsb-lan"; }, From d0db557ac48af4872419bc830b62e01037dd122a Mon Sep 17 00:00:00 2001 From: Konrad Mattheis Date: Tue, 1 Dec 2020 16:56:15 +0100 Subject: [PATCH 06/12] * add functionality for fetch of data --- src/bsb-lan.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/bsb-lan.ts b/src/bsb-lan.ts index 562797b..046465a 100644 --- a/src/bsb-lan.ts +++ b/src/bsb-lan.ts @@ -6,9 +6,19 @@ export = function (RED: NodeAPI) { function NodeBsbLan(this: Node, config: any) { RED.nodes.createNode(this, config); + let node = this; let device = RED.nodes.getNode(config.device) as BSBLanDeviceNode; this.on('input', function (msg: NodeMessageInFlow & { }) { + device.get('JQ='+ config.values.join(',')) + .then((result) => { + msg.payload = result; + node.send(msg); + }) + .catch((error)=>{ + msg.payload = 'error '+ error; + node.send(msg); + }); }); From fcf9cbf3db08e97000250f32e09442bd8093e62c Mon Sep 17 00:00:00 2001 From: Konrad Mattheis Date: Tue, 1 Dec 2020 20:30:10 +0100 Subject: [PATCH 07/12] fix deploy node after values changed --- src/bsb-lan.html.ts | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/bsb-lan.html.ts b/src/bsb-lan.html.ts index 7b55980..a7e2544 100644 --- a/src/bsb-lan.html.ts +++ b/src/bsb-lan.html.ts @@ -16,10 +16,12 @@ RED.nodes.registerType('bsb-lan', { return this.name || "bsb-lan"; }, oneditprepare: function () { - let node = this; + + let node = (this as any) as { _values: string[] }; + + node._values=([].concat(this.values ?? [])).sort(); + debugger; - if (!node.values) - node.values = []; const treeList: any = $("
") .css({ width: "100%", height: "300px" }) @@ -49,7 +51,7 @@ RED.nodes.registerType('bsb-lan', { label: itemElement.name + ' (' + keyElement + ')', id: keyElement, checkbox: true, - selected: node.values.includes(keyElement) + selected: node._values.includes(keyElement) } subTree.push(subLeaf); } @@ -68,7 +70,7 @@ RED.nodes.registerType('bsb-lan', { }); function updateValues() { - const text = node.values.join(','); + const text = node._values.sort().join(','); $('#node-values').val(text); } @@ -78,19 +80,21 @@ RED.nodes.registerType('bsb-lan', { if (item.selected != undefined) { if (item.selected) { - node.values.push(item.id); + node._values.push(item.id); } else { - const index = node.values.indexOf(item.id); + const index = node._values.indexOf(item.id); if (index > -1) { - node.values.splice(index, 1); + node._values.splice(index, 1); } } updateValues(); - console.log(node.values); } }); }, oneditsave: function () { + let node = this as any; + node.values = node._values; + delete node._values; } }); \ No newline at end of file From 151e8649d452b26ac3b93da394644b3ccdbef431 Mon Sep 17 00:00:00 2001 From: Konrad Mattheis Date: Tue, 1 Dec 2020 21:54:46 +0100 Subject: [PATCH 08/12] * start integration of requestType --- src/bsb-lan.html | 9 +++++++++ src/bsb-lan.html.ts | 28 +++++++++++++++++++++------- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/src/bsb-lan.html b/src/bsb-lan.html index 5c4ff0f..21e65a3 100644 --- a/src/bsb-lan.html +++ b/src/bsb-lan.html @@ -4,6 +4,15 @@
+
+ + +
+
diff --git a/src/bsb-lan.html.ts b/src/bsb-lan.html.ts index a7e2544..0216906 100644 --- a/src/bsb-lan.html.ts +++ b/src/bsb-lan.html.ts @@ -7,6 +7,7 @@ RED.nodes.registerType('bsb-lan', { defaults: { device: { value: '', type: "bsb-lan-device" }, name: { value: '' }, + requesttype: { value: 'GET' }, values: { value: [] }, }, inputs: 1, @@ -28,10 +29,9 @@ RED.nodes.registerType('bsb-lan', { .appendTo(".node-input-browse-row"); treeList.treeList({}); - function loadData(id: string) { + function loadData(id: string, get: boolean) { treeList.treeList('empty'); let fetchPath = 'bsb-lan/' + id + '/JK='; - console.log(fetchPath); $.getJSON(fetchPath + 'ALL', function (data) { let i = 0; let tree = []; @@ -41,18 +41,24 @@ RED.nodes.registerType('bsb-lan', { let leaf = { label: item.name + ' (' + item.min + '-' + item.max + ')', - id: key, + id: "Category:"+key, children: function (fetchedData) { let subTree = []; $.getJSON(fetchPath + key, function (elementData) { for (let keyElement in elementData) { let itemElement = elementData[keyElement]; - let subLeaf = { + let subLeaf: any = { label: itemElement.name + ' (' + keyElement + ')', id: keyElement, - checkbox: true, - selected: node._values.includes(keyElement) } + if (get) { + subLeaf = { + ...subLeaf, + checkbox: true, + selected: node._values.includes(keyElement) + } + } + subTree.push(subLeaf); } fetchedData(subTree); @@ -66,7 +72,15 @@ RED.nodes.registerType('bsb-lan', { } $('#node-input-device').on('change', function () { - loadData((this as any).value); + let reqType = $('#node-input-requesttype').val(); + let device = $('#node-input-device').val() as string; + loadData(device, reqType == 'GET'); + }); + + $('#node-input-requesttype').on('change', function () { + let reqType = $('#node-input-requesttype').val(); + let device = $('#node-input-device').val() as string; + loadData(device, reqType == 'GET'); }); function updateValues() { From 888a251306339c040effc172dc85cb954db83257 Mon Sep 17 00:00:00 2001 From: Konrad Mattheis Date: Wed, 2 Dec 2020 11:15:51 +0100 Subject: [PATCH 09/12] * add single select for inf / set requesttype --- src/bsb-lan.html.ts | 45 ++++++++++++++++++++++++++++++++------------- 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/src/bsb-lan.html.ts b/src/bsb-lan.html.ts index 0216906..522aa80 100644 --- a/src/bsb-lan.html.ts +++ b/src/bsb-lan.html.ts @@ -17,11 +17,11 @@ RED.nodes.registerType('bsb-lan', { return this.name || "bsb-lan"; }, oneditprepare: function () { - + let node = (this as any) as { _values: string[] }; - node._values=([].concat(this.values ?? [])).sort(); - + node._values = ([].concat(this.values ?? [])).sort(); + debugger; const treeList: any = $("
") @@ -30,6 +30,11 @@ RED.nodes.registerType('bsb-lan', { treeList.treeList({}); function loadData(id: string, get: boolean) { + if (!get && node._values.length > 1) { + node._values = [node._values[0]]; + updateValues(); + } + treeList.treeList('empty'); let fetchPath = 'bsb-lan/' + id + '/JK='; $.getJSON(fetchPath + 'ALL', function (data) { @@ -41,7 +46,7 @@ RED.nodes.registerType('bsb-lan', { let leaf = { label: item.name + ' (' + item.min + '-' + item.max + ')', - id: "Category:"+key, + id: "Category:" + key, children: function (fetchedData) { let subTree = []; $.getJSON(fetchPath + key, function (elementData) { @@ -50,16 +55,17 @@ RED.nodes.registerType('bsb-lan', { let subLeaf: any = { label: itemElement.name + ' (' + keyElement + ')', id: keyElement, + selected: node._values.includes(keyElement) } if (get) { subLeaf = { ...subLeaf, checkbox: true, - selected: node._values.includes(keyElement) } } - - subTree.push(subLeaf); + // in the future reduce for INF messages + if (get || itemElement.readonly == 0) + subTree.push(subLeaf); } fetchedData(subTree); }); @@ -93,12 +99,25 @@ RED.nodes.registerType('bsb-lan', { treeList.on('treelistselect', function (event, item) { if (item.selected != undefined) { - if (item.selected) { - node._values.push(item.id); - } else { - const index = node._values.indexOf(item.id); - if (index > -1) { - node._values.splice(index, 1); + + let reqType = $('#node-input-requesttype').val(); + + if (reqType == 'GET') { + + if (item.selected) { + node._values.push(item.id); + } else { + const index = node._values.indexOf(item.id); + if (index > -1) { + node._values.splice(index, 1); + } + } + } + else + { + node._values=[]; + if (!isNaN(parseInt(item.id, 10))) { + node._values.push(item.id); } } updateValues(); From 2041a62fb92008fac0191bcf831d027f5a50e206 Mon Sep 17 00:00:00 2001 From: Konrad Mattheis Date: Thu, 3 Dec 2020 08:21:14 +0100 Subject: [PATCH 10/12] * rework property editor --- src/bsb-lan.html | 14 +++++-- src/bsb-lan.html.ts | 93 +++++++++++++++++++++++++++++---------------- 2 files changed, 71 insertions(+), 36 deletions(-) diff --git a/src/bsb-lan.html b/src/bsb-lan.html index 21e65a3..261ef37 100644 --- a/src/bsb-lan.html +++ b/src/bsb-lan.html @@ -13,13 +13,19 @@
-
+
+ + + +
+ +
-
- - +
+ +
diff --git a/src/bsb-lan.html.ts b/src/bsb-lan.html.ts index 522aa80..27835d3 100644 --- a/src/bsb-lan.html.ts +++ b/src/bsb-lan.html.ts @@ -8,7 +8,8 @@ RED.nodes.registerType('bsb-lan', { device: { value: '', type: "bsb-lan-device" }, name: { value: '' }, requesttype: { value: 'GET' }, - values: { value: [] }, + parameters: { value: [] }, + value: { value: '' }, }, inputs: 1, outputs: 1, @@ -17,22 +18,29 @@ RED.nodes.registerType('bsb-lan', { return this.name || "bsb-lan"; }, oneditprepare: function () { + type Trequesttype = "GET" | "INF" | "SET"; - let node = (this as any) as { _values: string[] }; + let node = (this as any) as { _parameters: string[] }; - node._values = ([].concat(this.values ?? [])).sort(); + node._parameters = ([].concat(this.parameters ?? [])).sort(); debugger; + const labelParameters = $('#node-label-parameters'); + const labelParameter = $('#node-label-parameter'); + const rowValue = $('#node-row-value'); + const inputRequestType = $('#node-input-requesttype'); + const inputDevice = $('#node-input-device'); + const treeList: any = $("
") .css({ width: "100%", height: "300px" }) - .appendTo(".node-input-browse-row"); + .appendTo("#node-row-parametertree"); treeList.treeList({}); - function loadData(id: string, get: boolean) { - if (!get && node._values.length > 1) { - node._values = [node._values[0]]; - updateValues(); + function loadData(id: string, requesttype: Trequesttype) { + if (!(requesttype == "GET") && node._parameters.length > 1) { + node._parameters = [node._parameters[0]]; + updateparameters(); } treeList.treeList('empty'); @@ -44,6 +52,9 @@ RED.nodes.registerType('bsb-lan', { for (let key in data) { let item = data[key]; + if (requesttype == "INF" && (item.min < 10000 || item.min >=15000)) + continue; + let leaf = { label: item.name + ' (' + item.min + '-' + item.max + ')', id: "Category:" + key, @@ -51,20 +62,25 @@ RED.nodes.registerType('bsb-lan', { let subTree = []; $.getJSON(fetchPath + key, function (elementData) { for (let keyElement in elementData) { + + let id = parseInt(keyElement,10); + if (requesttype == "INF" && (id < 10000 || id >=10005)) + continue; + let itemElement = elementData[keyElement]; let subLeaf: any = { label: itemElement.name + ' (' + keyElement + ')', id: keyElement, - selected: node._values.includes(keyElement) + selected: node._parameters.includes(keyElement) } - if (get) { + if (requesttype == "GET") { subLeaf = { ...subLeaf, checkbox: true, } } // in the future reduce for INF messages - if (get || itemElement.readonly == 0) + if (requesttype == "GET" || itemElement.readonly == 0) subTree.push(subLeaf); } fetchedData(subTree); @@ -77,57 +93,70 @@ RED.nodes.registerType('bsb-lan', { }); } - $('#node-input-device').on('change', function () { - let reqType = $('#node-input-requesttype').val(); - let device = $('#node-input-device').val() as string; - loadData(device, reqType == 'GET'); + inputDevice.on('change', function () { + let reqType = inputRequestType.val() as Trequesttype; + let device = inputDevice.val() as string; + loadData(device, reqType); }); - $('#node-input-requesttype').on('change', function () { - let reqType = $('#node-input-requesttype').val(); - let device = $('#node-input-device').val() as string; - loadData(device, reqType == 'GET'); + inputRequestType.on('change', function () { + let reqType = inputRequestType.val() as Trequesttype; + let device = inputDevice.val() as string; + if (reqType == "GET") + { + labelParameters.show(); + labelParameter.hide(); + rowValue.hide(); + } + else + { + labelParameter.show(); + labelParameters.hide() + rowValue.show(); + } + + loadData(device, reqType); }); - function updateValues() { - const text = node._values.sort().join(','); - $('#node-values').val(text); + function updateparameters() { + const text = node._parameters.sort().join(','); + $('#node-parameters').val(text); } - updateValues(); + updateparameters(); treeList.on('treelistselect', function (event, item) { if (item.selected != undefined) { - let reqType = $('#node-input-requesttype').val(); + let reqType = $('#node-input-requesttype').val() as Trequesttype; if (reqType == 'GET') { if (item.selected) { - node._values.push(item.id); + node._parameters.push(item.id); } else { - const index = node._values.indexOf(item.id); + const index = node._parameters.indexOf(item.id); if (index > -1) { - node._values.splice(index, 1); + node._parameters.splice(index, 1); } } } else { - node._values=[]; + node._parameters=[]; if (!isNaN(parseInt(item.id, 10))) { - node._values.push(item.id); + node._parameters.push(item.id); } } - updateValues(); + updateparameters(); } }); }, oneditsave: function () { let node = this as any; - node.values = node._values; - delete node._values; + node.parameters = node._parameters; + delete node._parameters; } }); \ No newline at end of file From 72b9f2562c7480190a54170d6dfd240c4eff1117 Mon Sep 17 00:00:00 2001 From: Konrad Mattheis Date: Thu, 3 Dec 2020 10:25:44 +0100 Subject: [PATCH 11/12] * fill in readme * add post for bsb-lan-device * don't send Authorisation if no user/pass is defined --- README.md | 83 +++++++++++++++++++++++++++++++++++++++++- docs/config.png | Bin 0 -> 51838 bytes example.json | 23 ++++++++++++ src/bsb-lan-device.ts | 30 +++++++++++---- src/bsb-lan.html.ts | 23 +++++------- src/bsb-lan.ts | 46 +++++++++++++++++------ src/interfaces.d.ts | 1 + 7 files changed, 173 insertions(+), 33 deletions(-) create mode 100644 docs/config.png create mode 100644 example.json diff --git a/README.md b/README.md index b1d68c6..11407c0 100644 --- a/README.md +++ b/README.md @@ -1 +1,82 @@ -# node-red-contrib-bsb-lan \ No newline at end of file +[![CLA assistant](https://cla-assistant.io/readme/badge/node-red-contrib/node-red-contrib-bsb-lan)](https://cla-assistant.io/node-red-contrib/node-red-contrib-bsb-lan) +![compile](https://github.com/node-red-contrib/node-red-contrib-bsb-lan/workflows/compile/badge.svg) +[![CodeFactor](https://www.codefactor.io/repository/github/node-red-contrib/node-red-contrib-bsb-lan/badge)](https://www.codefactor.io/repository/github/node-red-contrib/node-red-contrib-bsb-lan) +[![npm version](https://badge.fury.io/js/node-red-contrib-bsb-lan.svg)](https://badge.fury.io/js/node-red-contrib-bsb-lan) + +# node-red-contrib-bsb-lan a BSB-LAN node for Node-RED + +Provides functionality to retrieve data from the [BSB-LAN](https://1coderookie.github.io/BSB-LPB-LAN/) adapter. + +When triggered, the node will login and make the configured request. + +This is an sample request of fetching (GET) two parameters: + +``` json +{ + "_msgid": "...", + "payload": { + "700": { + "name": "Betriebsart", + "error": 0, + "value": "1", + "desc": "Automatik", + "dataType": 1, + "readonly": 0, + "unit": "" + }, + "710": { + "name": "Komfortsollwert", + "error": 0, + "value": "22.0", + "desc": "", + "dataType": 0, + "readonly": 0, + "unit": "°C" + } + } +} +``` + +# Install + +Install via the palette manage in the Node-RED admin ui (no restart needed). + +Alternatively run the following command in your Node-RED user directory (typically `~/.node-red`): + +```sh +npm install node-red-contrib-bsb-lan +``` + +then restart Node-RED and add an instance of the bsb-lan node. + +# Usage + +Just add the connection settings and select what type of request you want to sent. + +You can also override the configuration settings with properties that are injected +into the incomig message. + +property | type | example +---------|------|-------- + + +## GET + +With the GET you can fetch multiple parameters in on request. +Just select in the parameters tree the parameter that you like to +fetch and inject a message. + +![config](docs/config.png) + +The payload will be filled with the values. + +## SET / INF + +You can even change the configuration of your device but you have to +first enable in the BSB-LAN the write functionality +[see Chapter 5](https://1coderookie.github.io/BSB-LPB-LAN_EN/chap05.html) + +Select the right request type and now you can select only one +value from the parameter list. +Fill in the value that you want to write into the parameter and +inject a message. diff --git a/docs/config.png b/docs/config.png new file mode 100644 index 0000000000000000000000000000000000000000..e1afa3a2a234dcabdca4450e4f8894b92635e72a GIT binary patch literal 51838 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 literal 0 HcmV?d00001 diff --git a/example.json b/example.json new file mode 100644 index 0000000..20e307b --- /dev/null +++ b/example.json @@ -0,0 +1,23 @@ +{ + "_msgid": "10af24a2.c7425b", + "payload": { + "700": { + "name": "Betriebsart", + "error": 0, + "value": "1", + "desc": "Automatik", + "dataType": 1, + "readonly": 0, + "unit": "" + }, + "710": { + "name": "Komfortsollwert", + "error": 0, + "value": "22.0", + "desc": "", + "dataType": 0, + "readonly": 0, + "unit": "°C" + } + } +} \ No newline at end of file diff --git a/src/bsb-lan-device.ts b/src/bsb-lan-device.ts index 38fb0ca..e8c220d 100644 --- a/src/bsb-lan-device.ts +++ b/src/bsb-lan-device.ts @@ -7,17 +7,33 @@ export = function (RED: NodeAPI) { function NodeConstructorBSBLanDevice(this: BSBLanDeviceNode, def: NodeDef & BSBLanDeviceNodeConfig) { RED.nodes.createNode(this, def); - let url = 'http://' + def.host + ':' + def.port + ((!this.credentials.key) ? '': '/'+this.credentials.key); + let url = 'http://' + def.host + ':' + def.port + ((!this.credentials.key) ? '' : '/' + this.credentials.key); - let options = { - headers: { + let headers = {}; + + if (this.credentials?.username || this.credentials?.password) { + headers = { 'Authorization': 'Basic ' + Buffer.from(this.credentials.username + ':' + this.credentials.password).toString('base64') - } - }; + }; + } this.get = async (query: string) => { - return (await fetch(url + '/' + query, options)).json(); + return (await fetch(url + '/' + query, { + headers: headers + })).json(); }; + + this.post = async (query: string, body: object) => { + return (await fetch(url + '/' + query, + { + method: "POST", + body: JSON.stringify(body), + headers: { + ...headers, + 'Content-Type': 'application/json' + } + })).json(); + } } // register only one namepaced http get handler that take care per "bsb-lan-device" with the id @@ -25,7 +41,7 @@ export = function (RED: NodeAPI) { RED.auth.needsPermission('bsb-lan.read'), (req, res) => { try { - (RED.nodes.getNode(req.params.id) as BSBLanDeviceNode) + (RED.nodes.getNode(req.params.id) as BSBLanDeviceNode) .get(req.params.type) .then((result) => { res.status(200).send(result); diff --git a/src/bsb-lan.html.ts b/src/bsb-lan.html.ts index 27835d3..7a5f71d 100644 --- a/src/bsb-lan.html.ts +++ b/src/bsb-lan.html.ts @@ -24,8 +24,6 @@ RED.nodes.registerType('bsb-lan', { node._parameters = ([].concat(this.parameters ?? [])).sort(); - debugger; - const labelParameters = $('#node-label-parameters'); const labelParameter = $('#node-label-parameter'); const rowValue = $('#node-row-value'); @@ -37,7 +35,11 @@ RED.nodes.registerType('bsb-lan', { .appendTo("#node-row-parametertree"); treeList.treeList({}); - function loadData(id: string, requesttype: Trequesttype) { + function loadData() { + + let requesttype = inputRequestType.val() as Trequesttype; + let id = inputDevice.val() as string; + if (!(requesttype == "GET") && node._parameters.length > 1) { node._parameters = [node._parameters[0]]; updateparameters(); @@ -79,7 +81,7 @@ RED.nodes.registerType('bsb-lan', { checkbox: true, } } - // in the future reduce for INF messages + if (requesttype == "GET" || itemElement.readonly == 0) subTree.push(subLeaf); } @@ -93,16 +95,11 @@ RED.nodes.registerType('bsb-lan', { }); } - inputDevice.on('change', function () { - let reqType = inputRequestType.val() as Trequesttype; - let device = inputDevice.val() as string; - loadData(device, reqType); - }); + inputDevice.on('change', function () { loadData(); }); inputRequestType.on('change', function () { - let reqType = inputRequestType.val() as Trequesttype; - let device = inputDevice.val() as string; - if (reqType == "GET") + let requesttype = inputRequestType.val() as Trequesttype; + if (requesttype == "GET") { labelParameters.show(); labelParameter.hide(); @@ -115,7 +112,7 @@ RED.nodes.registerType('bsb-lan', { rowValue.show(); } - loadData(device, reqType); + loadData(); }); function updateparameters() { diff --git a/src/bsb-lan.ts b/src/bsb-lan.ts index 046465a..59e4a34 100644 --- a/src/bsb-lan.ts +++ b/src/bsb-lan.ts @@ -9,21 +9,43 @@ export = function (RED: NodeAPI) { let node = this; let device = RED.nodes.getNode(config.device) as BSBLanDeviceNode; - this.on('input', function (msg: NodeMessageInFlow & { }) { - device.get('JQ='+ config.values.join(',')) - .then((result) => { - msg.payload = result; - node.send(msg); - }) - .catch((error)=>{ - msg.payload = 'error '+ error; - node.send(msg); - }); - + this.on('input', function (msg: NodeMessageInFlow & {}) { + + let action: Promise; + + switch (config.requesttype) { + case "GET": + action = device.get('JQ=' + config.parameters.join(',')); + break; + case "SET": + case "INF": + if (config.parameters.length == 1) { + action = device.post('JS', + { + "Parameter": config.parameters[0], + "Value": config.value, + "Type": config.requesttype == "INF" ? "0" : "1" // "Type" (0 = INF, 1 = SET) + } + ); + } + break; + } + + if (action) { + action + .then((result) => { + msg.payload = result; + node.send(msg); + }) + .catch((error) => { + msg.payload = 'error ' + error; + node.send(msg); + }); + } }); this.on('close', function () { - + }); } diff --git a/src/interfaces.d.ts b/src/interfaces.d.ts index 6b91fc5..c7987c5 100644 --- a/src/interfaces.d.ts +++ b/src/interfaces.d.ts @@ -15,4 +15,5 @@ export interface BSBLanDeviceNodeConfig { export interface BSBLanDeviceNode extends Node { get: (query: string) => Promise + post:(query: string, body: object) => Promise } From 2c9faa266c73b0e3044eefc5617891ec35db9aa9 Mon Sep 17 00:00:00 2001 From: Konrad Mattheis Date: Thu, 3 Dec 2020 10:37:35 +0100 Subject: [PATCH 12/12] * add message override * finish readme --- README.md | 8 +++++--- example.json | 23 ----------------------- src/bsb-lan.ts | 25 ++++++++++++++++++------- 3 files changed, 23 insertions(+), 33 deletions(-) delete mode 100644 example.json diff --git a/README.md b/README.md index 11407c0..2c4b16c 100644 --- a/README.md +++ b/README.md @@ -56,9 +56,11 @@ Just add the connection settings and select what type of request you want to sen You can also override the configuration settings with properties that are injected into the incomig message. -property | type | example ----------|------|-------- - +property | type | example +------------|-----------------|-------- +requesttype | GET / SET / INF | GET +parameters | [] | [700,710] (fetched in GET the parameter 700 & 710) +value | number | 22.0 (only valid for requesttype SET / INF) ## GET diff --git a/example.json b/example.json deleted file mode 100644 index 20e307b..0000000 --- a/example.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "_msgid": "10af24a2.c7425b", - "payload": { - "700": { - "name": "Betriebsart", - "error": 0, - "value": "1", - "desc": "Automatik", - "dataType": 1, - "readonly": 0, - "unit": "" - }, - "710": { - "name": "Komfortsollwert", - "error": 0, - "value": "22.0", - "desc": "", - "dataType": 0, - "readonly": 0, - "unit": "°C" - } - } -} \ No newline at end of file diff --git a/src/bsb-lan.ts b/src/bsb-lan.ts index 59e4a34..027433c 100644 --- a/src/bsb-lan.ts +++ b/src/bsb-lan.ts @@ -9,22 +9,33 @@ export = function (RED: NodeAPI) { let node = this; let device = RED.nodes.getNode(config.device) as BSBLanDeviceNode; - this.on('input', function (msg: NodeMessageInFlow & {}) { + this.on('input', function (msg: NodeMessageInFlow & any) { let action: Promise; - switch (config.requesttype) { + let cfg = { ...config}; + + if (msg?.requesttype == 'GET' || msg?.requesttype == 'SET' || msg?.requesttype == 'INF') + cfg.requesttype= msg.requesttype; + + if (msg?.parameters?.length > 0) + cfg.parameters= msg.parameters; + + if (msg.value != undefined) + cfg.value = msg.value; + + switch (cfg.requesttype) { case "GET": - action = device.get('JQ=' + config.parameters.join(',')); + action = device.get('JQ=' + cfg.parameters.join(',')); break; case "SET": case "INF": - if (config.parameters.length == 1) { + if (cfg.parameters.length == 1) { action = device.post('JS', { - "Parameter": config.parameters[0], - "Value": config.value, - "Type": config.requesttype == "INF" ? "0" : "1" // "Type" (0 = INF, 1 = SET) + "Parameter": cfg.parameters[0], + "Value": cfg.value, + "Type": cfg.requesttype == "INF" ? "0" : "1" // "Type" (0 = INF, 1 = SET) } ); }