diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 140d83d2..b6e36c7a 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -14,8 +14,8 @@ jobs: matrix: os: - ubuntu-20.04 - - macos-latest - - windows-latest + - macos-11 + - windows-2019 node_version: - 14 node_arch: @@ -30,18 +30,18 @@ jobs: - true # include: - # - os: windows-latest - # node_version: 14 - # node_arch: x86 - # zmq_draft: false - # zmq_shared: false - # skip_gc_finalizer_tests: true + # - os: windows-latest + # node_version: 14 + # node_arch: x86 + # zmq_draft: false + # zmq_shared: false + # skip_gc_finalizer_tests: true - # - os: macos-11.0 - # node_version: 15 - # node_arch: arm64 - # zmq_draft: false - # zmq_shared: false + # - os: macos-11.0 + # node_version: 15 + # node_arch: arm64 + # zmq_draft: false + # zmq_shared: false env: ZMQ_VERSION: ${{ matrix.zmq_version }} @@ -49,10 +49,10 @@ jobs: ZMQ_SHARED: ${{ matrix.zmq_shared }} SKIP_GC_FINALIZER_TESTS: ${{ matrix.skip_gc_finalizer_tests }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Cache - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: | ./node_modules/ @@ -66,8 +66,16 @@ jobs: restore-keys: | "cache-OS:${{ matrix.os }}-arch:${{ matrix.node_arch }}-ZMQ_DRAFT:${{ matrix.zmq_draft }}-ZMQ_VERSION:${{ matrix.zmq_version }}-Node:${{ matrix.node_version }}" + - name: Setup Cpp + uses: aminya/setup-cpp@v1 + with: + vcvarsall: ${{ contains(matrix.os, 'windows') }} + cmake: true + ninja: true + architecture: ${{ matrix.node_arch }} + - name: Install Node - uses: actions/setup-node@v2 + uses: actions/setup-node@v3 with: node-version: ${{ matrix.node_version }} architecture: ${{ matrix.node_arch }} @@ -77,11 +85,6 @@ jobs: run: | brew install libsodium - - uses: ilammy/msvc-dev-cmd@v1 - if: contains(matrix.os, 'windows') - with: - arch: ${{ matrix.node_arch }} - - name: Install Dependencies and Build run: npm install diff --git a/.npmrc b/.npmrc index 952286c1..ac5613f6 100644 --- a/.npmrc +++ b/.npmrc @@ -1,4 +1,4 @@ public-hoist-pattern[]=* package-lock=false -lockfile=false +lockfile=true prefer-frozen-lockfile=false diff --git a/draft.js b/draft.js index d2befa0f..80036327 100644 --- a/draft.js +++ b/draft.js @@ -5,7 +5,7 @@ if (require(".").capability.draft) { } else { throw new Error( "ZeroMQ draft features are not enabled in this build. " + - "To enable support, (re)compile this library with --zmq-draft.", + "To enable support, (re)compile this library with --zmq-draft.", ) } diff --git a/examples/majordomo/index.ts b/examples/majordomo/index.ts index 144150b5..83660c2f 100644 --- a/examples/majordomo/index.ts +++ b/examples/majordomo/index.ts @@ -49,7 +49,9 @@ async function request( } async function main() { - for (const worker of workers) worker.start() + for (const worker of workers) { + worker.start() + } broker.start() /* Requests are issued in parallel. */ @@ -65,7 +67,9 @@ async function main() { request("coffee", "irish coffee"), ]) - for (const worker of workers) worker.stop() + for (const worker of workers) { + worker.stop() + } broker.stop() } diff --git a/examples/queue/queue.ts b/examples/queue/queue.ts index a784cd1f..d5a2fe0a 100644 --- a/examples/queue/queue.ts +++ b/examples/queue/queue.ts @@ -20,7 +20,9 @@ export class Queue { } async trySend() { - if (this.sending) return + if (this.sending) { + return + } this.sending = true while (this.queue.length) { diff --git a/examples/threaded-worker/processor.ts b/examples/threaded-worker/processor.ts index 2e5bb960..1e5b1baa 100644 --- a/examples/threaded-worker/processor.ts +++ b/examples/threaded-worker/processor.ts @@ -39,7 +39,9 @@ export class Processor { const output: string[] = Array.from({length: input.length}) for await (const [pos, res] of this.output) { output[parseInt(pos.toString(), 10)] = res.toString() - if (output.every(el => el !== undefined)) break + if (output.every(el => el !== undefined)) { + break + } } return output.join("") diff --git a/examples/threaded-worker/threaded-worker.ts b/examples/threaded-worker/threaded-worker.ts index 50074037..beda54a8 100644 --- a/examples/threaded-worker/threaded-worker.ts +++ b/examples/threaded-worker/threaded-worker.ts @@ -42,7 +42,9 @@ export class ThreadedWorker { const listen = async () => { for await (const [sig] of this.signal) { - if (sig.toString() === "stop") this.stop() + if (sig.toString() === "stop") { + this.stop() + } } } diff --git a/package.json b/package.json index 767c2c82..3fa3cc41 100644 --- a/package.json +++ b/package.json @@ -31,21 +31,21 @@ "chai": ">=4.3", "choma": ">= 1.2", "deasync": "^0.1.21", - "eslint-config-atomic": "^1.16.2", - "eslint-plugin-prettier": "^3.4.0", + "eslint-config-atomic": "^1.18.1", + "eslint-plugin-prettier": "^4.2.1", "fs-extra": "^10.0.0", "gunzip-maybe": "^1.4.2", "mocha": ">=9.0", "node-addon-api": "^4.0.0", "node-fetch": "^2.6.1", "prebuildify": "^4.1.2", - "prettier": "^2.3.2", + "prettier": "^2.7.1", "semver": ">=7", "shx": "^0.3.3", "tar-fs": "^2.1.1", "ts-morph": "^11.0.3", "ts-node": ">=10", - "typescript": ">=4.3", + "typescript": "4.3", "weak-napi": "^2.0.2" }, "engines": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 00000000..b424fb9f --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,3897 @@ +lockfileVersion: 5.4 + +specifiers: + '@gnd/typedoc': ^0.15.0-0 + '@types/chai': '>=4.2' + '@types/fs-extra': ^9.0.12 + '@types/mocha': '>=8.2' + '@types/node': '>=16.3' + '@types/semver': '>=7' + '@types/weak-napi': ^2.0.0 + benchmark: '>=2' + chai: '>=4.3' + choma: '>= 1.2' + deasync: ^0.1.21 + eslint-config-atomic: ^1.18.1 + eslint-plugin-prettier: ^4.2.1 + fs-extra: ^10.0.0 + gunzip-maybe: ^1.4.2 + mocha: '>=9.0' + node-addon-api: ^4.0.0 + node-fetch: ^2.6.1 + node-gyp-build: ^4.2.3 + prebuildify: ^4.1.2 + prettier: ^2.7.1 + semver: '>=7' + shx: ^0.3.3 + tar-fs: ^2.1.1 + ts-morph: ^11.0.3 + ts-node: '>=10' + typescript: '4.3' + weak-napi: ^2.0.2 + +dependencies: + node-gyp-build: 4.5.0 + +devDependencies: + '@gnd/typedoc': 0.15.0-0 + '@types/chai': 4.3.3 + '@types/fs-extra': 9.0.13 + '@types/mocha': 9.1.1 + '@types/node': 18.7.13 + '@types/semver': 7.3.12 + '@types/weak-napi': 2.0.1 + benchmark: 2.1.4 + chai: 4.3.6 + choma: 1.2.1_mocha@10.0.0 + deasync: 0.1.28 + eslint-config-atomic: 1.18.1 + eslint-plugin-prettier: 4.2.1_prettier@2.7.1 + fs-extra: 10.1.0 + gunzip-maybe: 1.4.2 + mocha: 10.0.0 + node-addon-api: 4.3.0 + node-fetch: 2.6.7 + prebuildify: 4.2.1 + prettier: 2.7.1 + semver: 7.3.7 + shx: 0.3.4 + tar-fs: 2.1.1 + ts-morph: 11.0.3 + ts-node: 10.9.1_ckbdxqkkfqe3aau5baiq6k5aji + typescript: 4.3.5 + weak-napi: 2.0.2 + +packages: + + /@aminya/eslint-plugin-only-warn/1.2.2: + resolution: {integrity: sha512-0VdfoicL+dorb0WrbbhsFsH8xH+8X2Y6CrO/3br68kimkMNOJB/5DFGRraVDYHfCIQgMnlv5Q9GX1yI7V4GcgQ==} + engines: {node: '>=6'} + dev: true + + /@ampproject/remapping/2.2.0: + resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.1.1 + '@jridgewell/trace-mapping': 0.3.15 + dev: true + + /@babel/code-frame/7.18.6: + resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.18.6 + dev: true + + /@babel/compat-data/7.18.13: + resolution: {integrity: sha512-5yUzC5LqyTFp2HLmDoxGQelcdYgSpP9xsnMWBphAscOdFrHSAVbLNzWiy32sVNDqJRDiJK6klfDnAgu6PAGSHw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/core/7.18.13: + resolution: {integrity: sha512-ZisbOvRRusFktksHSG6pjj1CSvkPkcZq/KHD45LAkVP/oiHJkNBZWfpvlLmX8OtHDG8IuzsFlVRWo08w7Qxn0A==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.0 + '@babel/code-frame': 7.18.6 + '@babel/generator': 7.18.13 + '@babel/helper-compilation-targets': 7.18.9_@babel+core@7.18.13 + '@babel/helper-module-transforms': 7.18.9 + '@babel/helpers': 7.18.9 + '@babel/parser': 7.18.13 + '@babel/template': 7.18.10 + '@babel/traverse': 7.18.13 + '@babel/types': 7.18.13 + convert-source-map: 1.8.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.1 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/eslint-parser/7.18.9_i2zlx7awpychpyuxyfseoqk6n4: + resolution: {integrity: sha512-KzSGpMBggz4fKbRbWLNyPVTuQr6cmCcBhOyXTw/fieOVaw5oYAwcAj4a7UKcDYCPxQq+CG1NCDZH9e2JTXquiQ==} + engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} + peerDependencies: + '@babel/core': '>=7.11.0' + eslint: ^7.5.0 || ^8.0.0 + dependencies: + '@babel/core': 7.18.13 + eslint: 8.22.0 + eslint-scope: 5.1.1 + eslint-visitor-keys: 2.1.0 + semver: 6.3.0 + dev: true + + /@babel/generator/7.18.13: + resolution: {integrity: sha512-CkPg8ySSPuHTYPJYo7IRALdqyjM9HCbt/3uOBEFbzyGVP6Mn8bwFPB0jX6982JVNBlYzM1nnPkfjuXSOPtQeEQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.18.13 + '@jridgewell/gen-mapping': 0.3.2 + jsesc: 2.5.2 + dev: true + + /@babel/helper-compilation-targets/7.18.9_@babel+core@7.18.13: + resolution: {integrity: sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.18.13 + '@babel/core': 7.18.13 + '@babel/helper-validator-option': 7.18.6 + browserslist: 4.21.3 + semver: 6.3.0 + dev: true + + /@babel/helper-environment-visitor/7.18.9: + resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-function-name/7.18.9: + resolution: {integrity: sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.18.10 + '@babel/types': 7.18.13 + dev: true + + /@babel/helper-hoist-variables/7.18.6: + resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.18.13 + dev: true + + /@babel/helper-module-imports/7.18.6: + resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.18.13 + dev: true + + /@babel/helper-module-transforms/7.18.9: + resolution: {integrity: sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-module-imports': 7.18.6 + '@babel/helper-simple-access': 7.18.6 + '@babel/helper-split-export-declaration': 7.18.6 + '@babel/helper-validator-identifier': 7.18.6 + '@babel/template': 7.18.10 + '@babel/traverse': 7.18.13 + '@babel/types': 7.18.13 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-plugin-utils/7.18.9: + resolution: {integrity: sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-simple-access/7.18.6: + resolution: {integrity: sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.18.13 + dev: true + + /@babel/helper-split-export-declaration/7.18.6: + resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.18.13 + dev: true + + /@babel/helper-string-parser/7.18.10: + resolution: {integrity: sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-identifier/7.18.6: + resolution: {integrity: sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-option/7.18.6: + resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helpers/7.18.9: + resolution: {integrity: sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.18.10 + '@babel/traverse': 7.18.13 + '@babel/types': 7.18.13 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/highlight/7.18.6: + resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.18.6 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + + /@babel/parser/7.18.13: + resolution: {integrity: sha512-dgXcIfMuQ0kgzLB2b9tRZs7TTFFaGM2AbtA4fJgUUYukzGH4jwsS7hzQHEGs67jdehpm22vkgKwvbU+aEflgwg==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.18.13 + dev: true + + /@babel/plugin-syntax-flow/7.18.6_@babel+core@7.18.13: + resolution: {integrity: sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.18.13 + '@babel/helper-plugin-utils': 7.18.9 + dev: true + + /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.18.13: + resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.18.13 + '@babel/helper-plugin-utils': 7.18.9 + dev: true + + /@babel/runtime-corejs3/7.18.9: + resolution: {integrity: sha512-qZEWeccZCrHA2Au4/X05QW5CMdm4VjUDCrGq5gf1ZDcM4hRqreKrtwAn7yci9zfgAS9apvnsFXiGBHBAxZdK9A==} + engines: {node: '>=6.9.0'} + dependencies: + core-js-pure: 3.25.0 + regenerator-runtime: 0.13.9 + dev: true + optional: true + + /@babel/runtime/7.18.9: + resolution: {integrity: sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.13.9 + dev: true + optional: true + + /@babel/template/7.18.10: + resolution: {integrity: sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.18.6 + '@babel/parser': 7.18.13 + '@babel/types': 7.18.13 + dev: true + + /@babel/traverse/7.18.13: + resolution: {integrity: sha512-N6kt9X1jRMLPxxxPYWi7tgvJRH/rtoU+dbKAPDM44RFHiMH8igdsaSBgFeskhSl/kLWLDUvIh1RXCrTmg0/zvA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.18.6 + '@babel/generator': 7.18.13 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.18.9 + '@babel/helper-hoist-variables': 7.18.6 + '@babel/helper-split-export-declaration': 7.18.6 + '@babel/parser': 7.18.13 + '@babel/types': 7.18.13 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/types/7.18.13: + resolution: {integrity: sha512-ePqfTihzW0W6XAU+aMw2ykilisStJfDnsejDCXRchCcMJ4O0+8DhPXf2YUbZ6wjBlsEmZwLK/sPweWtu8hcJYQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.18.10 + '@babel/helper-validator-identifier': 7.18.6 + to-fast-properties: 2.0.0 + dev: true + + /@cspotcode/source-map-support/0.8.1: + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + dev: true + + /@eslint/eslintrc/1.3.0: + resolution: {integrity: sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.3.3 + globals: 13.17.0 + ignore: 5.2.0 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@gnd/typedoc/0.15.0-0: + resolution: {integrity: sha512-wKtap5cyeOvJ3xWDHnZ6XUWzGqQ4RvrhKbT8UDyhQBJ+1bbKRI6e9dlWw/WX5k6wYoDUi4ZY1nLTZLY3a12i6Q==} + engines: {node: '>= 6.0.0'} + hasBin: true + dependencies: + '@types/minimatch': 3.0.3 + fs-extra: 8.1.0 + handlebars: 4.7.7 + highlight.js: 9.18.5 + lodash: 4.17.21 + marked: 0.7.0 + minimatch: 3.1.2 + progress: 2.0.3 + shelljs: 0.8.5 + typedoc-default-themes: 0.6.3 + typescript: 3.6.5 + dev: true + + /@humanwhocodes/config-array/0.10.4: + resolution: {integrity: sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 1.2.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/gitignore-to-minimatch/1.0.2: + resolution: {integrity: sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==} + dev: true + + /@humanwhocodes/object-schema/1.2.1: + resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + dev: true + + /@jridgewell/gen-mapping/0.1.1: + resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.14 + dev: true + + /@jridgewell/gen-mapping/0.3.2: + resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/trace-mapping': 0.3.15 + dev: true + + /@jridgewell/resolve-uri/3.1.0: + resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/set-array/1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/sourcemap-codec/1.4.14: + resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} + dev: true + + /@jridgewell/trace-mapping/0.3.15: + resolution: {integrity: sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==} + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 + dev: true + + /@jridgewell/trace-mapping/0.3.9: + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 + dev: true + + /@nodelib/fs.scandir/2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: true + + /@nodelib/fs.stat/2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk/1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.13.0 + dev: true + + /@ts-morph/common/0.10.1: + resolution: {integrity: sha512-rKN/VtZUUlW4M+6vjLFSaFc1Z9sK+1hh0832ucPtPkXqOw/mSWE80Lau4z2zTPNTqtxAjfZbvKpQcEwJy0KIEg==} + dependencies: + fast-glob: 3.2.11 + minimatch: 3.1.2 + mkdirp: 1.0.4 + path-browserify: 1.0.1 + dev: true + + /@tsconfig/node10/1.0.9: + resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + dev: true + + /@tsconfig/node12/1.0.11: + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + dev: true + + /@tsconfig/node14/1.0.3: + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + dev: true + + /@tsconfig/node16/1.0.3: + resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} + dev: true + + /@types/chai/4.3.3: + resolution: {integrity: sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==} + dev: true + + /@types/fs-extra/9.0.13: + resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} + dependencies: + '@types/node': 18.7.13 + dev: true + + /@types/json-schema/7.0.11: + resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} + dev: true + + /@types/json5/0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + dev: true + + /@types/minimatch/3.0.3: + resolution: {integrity: sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==} + dev: true + + /@types/mocha/9.1.1: + resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==} + dev: true + + /@types/node/18.7.13: + resolution: {integrity: sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw==} + dev: true + + /@types/normalize-package-data/2.4.1: + resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} + dev: true + + /@types/semver/7.3.12: + resolution: {integrity: sha512-WwA1MW0++RfXmCr12xeYOOC5baSC9mSb0ZqCquFzKhcoF4TvHu5MKOuXsncgZcpVFhB1pXd5hZmM0ryAoCp12A==} + dev: true + + /@types/weak-napi/2.0.1: + resolution: {integrity: sha512-07jFwDZ2JLexI5lGzRirWzsC8MdA1avc6QsdvidKvPOKNYXAAijpA/6ygxL1CEW/qbEU6udapLZmempcH3trXQ==} + dependencies: + '@types/node': 18.7.13 + dev: true + + /@typescript-eslint/eslint-plugin/5.35.1_ktjxjibzrfqejavile4bhmzhjq: + resolution: {integrity: sha512-RBZZXZlI4XCY4Wzgy64vB+0slT9+yAPQRjj/HSaRwUot33xbDjF1oN9BLwOLTewoOI0jothIltZRe9uJCHf8gg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/parser': 5.35.1_4rv7y5c6xz3vfxwhbrcxxi73bq + '@typescript-eslint/scope-manager': 5.35.1 + '@typescript-eslint/type-utils': 5.35.1_4rv7y5c6xz3vfxwhbrcxxi73bq + '@typescript-eslint/utils': 5.35.1_4rv7y5c6xz3vfxwhbrcxxi73bq + debug: 4.3.4 + eslint: 8.22.0 + functional-red-black-tree: 1.0.1 + ignore: 5.2.0 + regexpp: 3.2.0 + semver: 7.3.7 + tsutils: 3.21.0_typescript@4.7.4 + typescript: 4.7.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser/5.35.1_4rv7y5c6xz3vfxwhbrcxxi73bq: + resolution: {integrity: sha512-XL2TBTSrh3yWAsMYpKseBYTVpvudNf69rPOWXWVBI08My2JVT5jR66eTt4IgQFHA/giiKJW5dUD4x/ZviCKyGg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 5.35.1 + '@typescript-eslint/types': 5.35.1 + '@typescript-eslint/typescript-estree': 5.35.1_typescript@4.7.4 + debug: 4.3.4 + eslint: 8.22.0 + typescript: 4.7.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/scope-manager/5.35.1: + resolution: {integrity: sha512-kCYRSAzIW9ByEIzmzGHE50NGAvAP3wFTaZevgWva7GpquDyFPFcmvVkFJGWJJktg/hLwmys/FZwqM9EKr2u24Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.35.1 + '@typescript-eslint/visitor-keys': 5.35.1 + dev: true + + /@typescript-eslint/type-utils/5.35.1_4rv7y5c6xz3vfxwhbrcxxi73bq: + resolution: {integrity: sha512-8xT8ljvo43Mp7BiTn1vxLXkjpw8wS4oAc00hMSB4L1/jIiYbjjnc3Qp2GAUOG/v8zsNCd1qwcqfCQ0BuishHkw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/utils': 5.35.1_4rv7y5c6xz3vfxwhbrcxxi73bq + debug: 4.3.4 + eslint: 8.22.0 + tsutils: 3.21.0_typescript@4.7.4 + typescript: 4.7.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/types/5.35.1: + resolution: {integrity: sha512-FDaujtsH07VHzG0gQ6NDkVVhi1+rhq0qEvzHdJAQjysN+LHDCKDKCBRlZFFE0ec0jKxiv0hN63SNfExy0KrbQQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@typescript-eslint/typescript-estree/5.35.1_typescript@4.7.4: + resolution: {integrity: sha512-JUqE1+VRTGyoXlDWWjm6MdfpBYVq+hixytrv1oyjYIBEOZhBCwtpp5ZSvBt4wIA1MKWlnaC2UXl2XmYGC3BoQA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.35.1 + '@typescript-eslint/visitor-keys': 5.35.1 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.3.7 + tsutils: 3.21.0_typescript@4.7.4 + typescript: 4.7.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils/5.35.1_4rv7y5c6xz3vfxwhbrcxxi73bq: + resolution: {integrity: sha512-v6F8JNXgeBWI4pzZn36hT2HXXzoBBBJuOYvoQiaQaEEjdi5STzux3Yj8v7ODIpx36i/5s8TdzuQ54TPc5AITQQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@types/json-schema': 7.0.11 + '@typescript-eslint/scope-manager': 5.35.1 + '@typescript-eslint/types': 5.35.1 + '@typescript-eslint/typescript-estree': 5.35.1_typescript@4.7.4 + eslint: 8.22.0 + eslint-scope: 5.1.1 + eslint-utils: 3.0.0_eslint@8.22.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/visitor-keys/5.35.1: + resolution: {integrity: sha512-cEB1DvBVo1bxbW/S5axbGPE6b7FIMAbo3w+AGq6zNDA7+NYJOIkKj/sInfTv4edxd4PxJSgdN4t6/pbvgA+n5g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.35.1 + eslint-visitor-keys: 3.3.0 + dev: true + + /@ungap/promise-all-settled/1.1.2: + resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} + dev: true + + /acorn-jsx/5.3.2_acorn@8.8.0: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.8.0 + dev: true + + /acorn-walk/8.2.0: + resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + engines: {node: '>=0.4.0'} + dev: true + + /acorn/8.8.0: + resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /ajv/6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + + /ansi-colors/4.1.1: + resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} + engines: {node: '>=6'} + dev: true + + /ansi-regex/2.1.1: + resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} + engines: {node: '>=0.10.0'} + dev: true + optional: true + + /ansi-regex/5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true + + /ansi-styles/2.2.1: + resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} + engines: {node: '>=0.10.0'} + dev: true + optional: true + + /ansi-styles/3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + dev: true + + /ansi-styles/4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + dev: true + + /anymatch/3.1.2: + resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + + /arg/4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + dev: true + + /argparse/2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true + + /aria-query/4.2.2: + resolution: {integrity: sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==} + engines: {node: '>=6.0'} + dependencies: + '@babel/runtime': 7.18.9 + '@babel/runtime-corejs3': 7.18.9 + dev: true + optional: true + + /array-includes/3.1.5: + resolution: {integrity: sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.1 + get-intrinsic: 1.1.2 + is-string: 1.0.7 + dev: true + + /array-union/2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true + + /array.prototype.flat/1.3.0: + resolution: {integrity: sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.1 + es-shim-unscopables: 1.0.0 + dev: true + + /array.prototype.flatmap/1.3.0: + resolution: {integrity: sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.1 + es-shim-unscopables: 1.0.0 + dev: true + + /assertion-error/1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + dev: true + + /ast-types-flow/0.0.7: + resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==} + dev: true + optional: true + + /axe-core/3.5.6: + resolution: {integrity: sha512-LEUDjgmdJoA3LqklSTwKYqkjcZ4HKc4ddIYGSAiSkr46NTjzg2L9RNB+lekO9P7Dlpa87+hBtzc2Fzn/+GUWMQ==} + engines: {node: '>=4'} + dev: true + optional: true + + /axe-core/4.4.3: + resolution: {integrity: sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w==} + engines: {node: '>=4'} + dev: true + optional: true + + /axobject-query/2.2.0: + resolution: {integrity: sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==} + dev: true + optional: true + + /babel-code-frame/6.26.0: + resolution: {integrity: sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==} + dependencies: + chalk: 1.1.3 + esutils: 2.0.3 + js-tokens: 3.0.2 + dev: true + optional: true + + /babel-eslint/7.2.3: + resolution: {integrity: sha512-i2yKOhjgwUbUrJ8oJm6QqRzltIoFahGNPZ0HF22lUN4H1DW03JQyJm7WSv+I1LURQWjDNhVqFo04acYa07rhOQ==} + engines: {node: '>=4'} + deprecated: babel-eslint is now @babel/eslint-parser. This package will no longer receive updates. + dependencies: + babel-code-frame: 6.26.0 + babel-traverse: 6.26.0 + babel-types: 6.26.0 + babylon: 6.18.0 + transitivePeerDependencies: + - supports-color + dev: true + optional: true + + /babel-messages/6.23.0: + resolution: {integrity: sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w==} + dependencies: + babel-runtime: 6.26.0 + dev: true + optional: true + + /babel-runtime/6.26.0: + resolution: {integrity: sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==} + dependencies: + core-js: 2.6.12 + regenerator-runtime: 0.11.1 + dev: true + optional: true + + /babel-traverse/6.26.0: + resolution: {integrity: sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA==} + dependencies: + babel-code-frame: 6.26.0 + babel-messages: 6.23.0 + babel-runtime: 6.26.0 + babel-types: 6.26.0 + babylon: 6.18.0 + debug: 2.6.9 + globals: 9.18.0 + invariant: 2.2.4 + lodash: 4.17.21 + transitivePeerDependencies: + - supports-color + dev: true + optional: true + + /babel-types/6.26.0: + resolution: {integrity: sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==} + dependencies: + babel-runtime: 6.26.0 + esutils: 2.0.3 + lodash: 4.17.21 + to-fast-properties: 1.0.3 + dev: true + optional: true + + /babylon/6.18.0: + resolution: {integrity: sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==} + hasBin: true + dev: true + optional: true + + /babylon/7.0.0-beta.47: + resolution: {integrity: sha512-+rq2cr4GDhtToEzKFD6KZZMDBXhjFAr9JjPw9pAppZACeEWqNM294j+NdBzkSHYXwzzBmVjZ3nEVJlOhbR2gOQ==} + engines: {node: '>=6.0.0'} + hasBin: true + dev: true + optional: true + + /backbone/1.4.1: + resolution: {integrity: sha512-ADy1ztN074YkWbHi8ojJVFe3vAanO/lrzMGZWUClIP7oDD/Pjy2vrASraUP+2EVCfIiTtCW4FChVow01XneivA==} + dependencies: + underscore: 1.13.4 + dev: true + + /balanced-match/1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /base64-js/1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: true + + /benchmark/2.1.4: + resolution: {integrity: sha512-l9MlfN4M1K/H2fbhfMy3B7vJd6AGKJVQn2h6Sg/Yx+KckoUA7ewS5Vv6TjSq18ooE1kS9hhAlQRH3AkXIh/aOQ==} + dependencies: + lodash: 4.17.21 + platform: 1.3.6 + dev: true + + /binary-extensions/2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: true + + /bindings/1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + dependencies: + file-uri-to-path: 1.0.0 + dev: true + + /bl/4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.0 + dev: true + + /brace-expansion/1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + + /brace-expansion/2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + dev: true + + /braces/3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: true + + /browser-stdout/1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + dev: true + + /browserify-zlib/0.1.4: + resolution: {integrity: sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==} + dependencies: + pako: 0.2.9 + dev: true + + /browserslist/4.21.3: + resolution: {integrity: sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001383 + electron-to-chromium: 1.4.230 + node-releases: 2.0.6 + update-browserslist-db: 1.0.5_browserslist@4.21.3 + dev: true + + /buffer-from/1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + dev: true + + /buffer/5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: true + + /call-bind/1.0.2: + resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + dependencies: + function-bind: 1.1.1 + get-intrinsic: 1.1.2 + dev: true + + /callsites/3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + + /camelcase/6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + dev: true + + /caniuse-lite/1.0.30001383: + resolution: {integrity: sha512-swMpEoTp5vDoGBZsYZX7L7nXHe6dsHxi9o6/LKf/f0LukVtnrxly5GVb/fWdCDTqi/yw6Km6tiJ0pmBacm0gbg==} + dev: true + + /chai/4.3.6: + resolution: {integrity: sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==} + engines: {node: '>=4'} + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.2 + deep-eql: 3.0.1 + get-func-name: 2.0.0 + loupe: 2.3.4 + pathval: 1.1.1 + type-detect: 4.0.8 + dev: true + + /chalk/1.1.3: + resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-styles: 2.2.1 + escape-string-regexp: 1.0.5 + has-ansi: 2.0.0 + strip-ansi: 3.0.1 + supports-color: 2.0.0 + dev: true + optional: true + + /chalk/2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: true + + /chalk/4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + + /check-error/1.0.2: + resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} + dev: true + + /chokidar/3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.2 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /choma/1.2.1_mocha@10.0.0: + resolution: {integrity: sha512-4KwEouEHt6SfG8vYnN2gSJfq/cGmnY2gubnUgsgkRXzHoSRAgluX2YXQgDg6bTDWuOmUrTb/cfwMpNlvnnPZCg==} + peerDependencies: + mocha: '>=2' + dependencies: + chalk: 2.4.2 + mocha: 10.0.0 + seedrandom: 2.4.4 + dev: true + + /chownr/1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + dev: true + + /cli/1.0.1: + resolution: {integrity: sha512-41U72MB56TfUMGndAKK8vJ78eooOD4Z5NOL4xEfjc0c23s+6EYKXlXsmACBVclLP1yOfWCgEganVzddVrSNoTg==} + engines: {node: '>=0.2.5'} + dependencies: + exit: 0.1.2 + glob: 7.2.3 + dev: true + + /cliui/7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + + /code-block-writer/10.1.1: + resolution: {integrity: sha512-67ueh2IRGst/51p0n6FvPrnRjAGHY5F8xdjkgrYE7DDzpJe6qA07RYQ9VcoUeo5ATOjSOiWpSL3SWBRRbempMw==} + dev: true + + /coffeescript/1.12.7: + resolution: {integrity: sha512-pLXHFxQMPklVoEekowk8b3erNynC+DVJzChxS/LCBBgR6/8AJkHivkm//zbowcfc7BTCAjryuhx6gPqPRfsFoA==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + + /coffeescript/2.7.0: + resolution: {integrity: sha512-hzWp6TUE2d/jCcN67LrW1eh5b/rSDKQK6oD6VMLlggYVUUFexgTH9z3dNYihzX4RMhze5FTUsUmOXViJKFQR/A==} + engines: {node: '>=6'} + hasBin: true + dev: true + optional: true + + /color-convert/1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + dev: true + + /color-convert/2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + dev: true + + /color-name/1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + dev: true + + /color-name/1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true + + /concat-map/0.0.1: + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + dev: true + + /confusing-browser-globals/1.0.11: + resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} + dev: true + optional: true + + /console-browserify/1.1.0: + resolution: {integrity: sha512-duS7VP5pvfsNLDvL1O4VOEbw37AI3A4ZUQYemvDlnpGrNu9tprR7BYWpDYwC0Xia0Zxz5ZupdiIrUp0GH1aXfg==} + dependencies: + date-now: 0.1.4 + dev: true + + /convert-source-map/1.8.0: + resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} + dependencies: + safe-buffer: 5.1.2 + dev: true + + /core-js-pure/3.25.0: + resolution: {integrity: sha512-IeHpLwk3uoci37yoI2Laty59+YqH9x5uR65/yiA0ARAJrTrN4YU0rmauLWfvqOuk77SlNJXj2rM6oT/dBD87+A==} + requiresBuild: true + dev: true + optional: true + + /core-js/2.6.12: + resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==} + deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js. + requiresBuild: true + dev: true + optional: true + + /core-util-is/1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + dev: true + + /create-require/1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + dev: true + + /cross-spawn/7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + + /damerau-levenshtein/1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + dev: true + optional: true + + /date-now/0.1.4: + resolution: {integrity: sha512-AsElvov3LoNB7tf5k37H2jYSB+ZZPMT5sG2QjJCcdlV5chIv6htBUBUui2IKRjgtKAKtCBN7Zbwa+MtwLjSeNw==} + dev: true + + /deasync/0.1.28: + resolution: {integrity: sha512-QqLF6inIDwiATrfROIyQtwOQxjZuek13WRYZ7donU5wJPLoP67MnYxA6QtqdvdBy2mMqv5m3UefBVdJjvevOYg==} + engines: {node: '>=0.11.0'} + requiresBuild: true + dependencies: + bindings: 1.5.0 + node-addon-api: 1.7.2 + dev: true + + /debug/2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + dev: true + + /debug/3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + dev: true + + /debug/4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + + /debug/4.3.4_supports-color@8.1.1: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + supports-color: 8.1.1 + dev: true + + /decamelize/4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + dev: true + + /deep-eql/3.0.1: + resolution: {integrity: sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==} + engines: {node: '>=0.12'} + dependencies: + type-detect: 4.0.8 + dev: true + + /deep-is/0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true + + /define-properties/1.1.4: + resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} + engines: {node: '>= 0.4'} + dependencies: + has-property-descriptors: 1.0.0 + object-keys: 1.1.1 + dev: true + + /diff/4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + dev: true + + /diff/5.0.0: + resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} + engines: {node: '>=0.3.1'} + dev: true + + /dir-glob/3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: true + + /doctrine/2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /doctrine/3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /dom-serializer/0.2.2: + resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==} + dependencies: + domelementtype: 2.3.0 + entities: 2.2.0 + dev: true + + /dom-serializer/1.4.1: + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + entities: 2.2.0 + dev: true + + /domelementtype/1.3.1: + resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==} + dev: true + + /domelementtype/2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + dev: true + + /domhandler/2.3.0: + resolution: {integrity: sha512-q9bUwjfp7Eif8jWxxxPSykdRZAb6GkguBGSgvvCrhI9wB71W2K/Kvv4E61CF/mcCfnVJDeDWx/Vb/uAqbDj6UQ==} + dependencies: + domelementtype: 1.3.1 + dev: true + + /domhandler/4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} + dependencies: + domelementtype: 2.3.0 + dev: true + + /domutils/1.5.1: + resolution: {integrity: sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==} + dependencies: + dom-serializer: 0.2.2 + domelementtype: 1.3.1 + dev: true + + /domutils/2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + dependencies: + dom-serializer: 1.4.1 + domelementtype: 2.3.0 + domhandler: 4.3.1 + dev: true + + /duplexify/3.7.1: + resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==} + dependencies: + end-of-stream: 1.4.4 + inherits: 2.0.4 + readable-stream: 2.3.7 + stream-shift: 1.0.1 + dev: true + + /electron-to-chromium/1.4.230: + resolution: {integrity: sha512-3pwjAK0qHSDN9+YAF4fJknsSruP7mpjdWzUSruIJD/JCH77pEh0SorEyb3xVaKkfwk2tzjOt2D8scJ0KAdfXLA==} + dev: true + + /emoji-regex/8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true + + /emoji-regex/9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + dev: true + optional: true + + /end-of-stream/1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + dependencies: + once: 1.4.0 + dev: true + + /entities/1.0.0: + resolution: {integrity: sha512-LbLqfXgJMmy81t+7c14mnulFHJ170cM6E+0vMXR9k/ZiZwgX8i5pNgjTCX3SO4VeUsFLV+8InixoretwU+MjBQ==} + dev: true + + /entities/2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + dev: true + + /entities/3.0.1: + resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} + engines: {node: '>=0.12'} + dev: true + + /error-ex/1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 + dev: true + + /es-abstract/1.20.1: + resolution: {integrity: sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + es-to-primitive: 1.2.1 + function-bind: 1.1.1 + function.prototype.name: 1.1.5 + get-intrinsic: 1.1.2 + get-symbol-description: 1.0.0 + has: 1.0.3 + has-property-descriptors: 1.0.0 + has-symbols: 1.0.3 + internal-slot: 1.0.3 + is-callable: 1.2.4 + is-negative-zero: 2.0.2 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.2 + is-string: 1.0.7 + is-weakref: 1.0.2 + object-inspect: 1.12.2 + object-keys: 1.1.1 + object.assign: 4.1.4 + regexp.prototype.flags: 1.4.3 + string.prototype.trimend: 1.0.5 + string.prototype.trimstart: 1.0.5 + unbox-primitive: 1.0.2 + dev: true + + /es-shim-unscopables/1.0.0: + resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} + dependencies: + has: 1.0.3 + dev: true + + /es-to-primitive/1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.4 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + dev: true + + /escalade/3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: true + + /escape-string-regexp/1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + dev: true + + /escape-string-regexp/4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + dev: true + + /eslint-config-airbnb-base/14.2.1_2iahngt3u2tkbdlu6s4gkur3pu: + resolution: {integrity: sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==} + engines: {node: '>= 6'} + peerDependencies: + eslint: ^5.16.0 || ^6.8.0 || ^7.2.0 + eslint-plugin-import: ^2.22.1 + dependencies: + confusing-browser-globals: 1.0.11 + eslint: 8.22.0 + eslint-plugin-import: 2.26.0_lewfh47l4outvz5ytnjtm3tbm4 + object.assign: 4.1.4 + object.entries: 1.1.5 + dev: true + optional: true + + /eslint-config-airbnb/18.2.1_z6vy5hbzu6e7zzgyebhxdjfk6q: + resolution: {integrity: sha512-glZNDEZ36VdlZWoxn/bUR1r/sdFKPd1mHPbqUtkctgNG4yT2DLLtJ3D+yCV+jzZCc2V1nBVkmdknOJBZ5Hc0fg==} + engines: {node: '>= 6'} + peerDependencies: + eslint: ^5.16.0 || ^6.8.0 || ^7.2.0 + eslint-plugin-import: ^2.22.1 + eslint-plugin-jsx-a11y: ^6.4.1 + eslint-plugin-react: ^7.21.5 + eslint-plugin-react-hooks: ^4 || ^3 || ^2.3.0 || ^1.7.0 + dependencies: + eslint: 8.22.0 + eslint-config-airbnb-base: 14.2.1_2iahngt3u2tkbdlu6s4gkur3pu + eslint-plugin-import: 2.26.0_lewfh47l4outvz5ytnjtm3tbm4 + eslint-plugin-jsx-a11y: 6.6.1_eslint@8.22.0 + eslint-plugin-react: 7.23.2_eslint@8.22.0 + eslint-plugin-react-hooks: 4.6.0_eslint@8.22.0 + object.assign: 4.1.4 + object.entries: 1.1.5 + dev: true + optional: true + + /eslint-config-atomic/1.18.1: + resolution: {integrity: sha512-wS/1xK1detB18BYj3EFOFjpxp9H01kQNKJbO6tgGDycHYgurZyHKh+kU+o0zRoZMqwXw4hmFimTN0EvVerBX1w==} + dependencies: + '@babel/core': 7.18.13 + '@babel/eslint-parser': 7.18.9_i2zlx7awpychpyuxyfseoqk6n4 + '@babel/plugin-syntax-flow': 7.18.6_@babel+core@7.18.13 + '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.18.13 + '@typescript-eslint/eslint-plugin': 5.35.1_ktjxjibzrfqejavile4bhmzhjq + '@typescript-eslint/parser': 5.35.1_4rv7y5c6xz3vfxwhbrcxxi73bq + eslint: 8.22.0 + eslint-config-prettier: 8.5.0_eslint@8.22.0 + eslint-plugin-html: 6.2.0 + eslint-plugin-import: 2.26.0_lewfh47l4outvz5ytnjtm3tbm4 + eslint-plugin-json: 3.1.0 + eslint-plugin-node: 11.1.0_eslint@8.22.0 + eslint-plugin-only-warn: /@aminya/eslint-plugin-only-warn/1.2.2 + eslint-plugin-optimize-regex: 1.2.1 + eslint-plugin-react: 7.31.0_eslint@8.22.0 + eslint-plugin-yaml: 0.5.0 + prettier: 2.6.2 + read-pkg-up: 7.0.1 + semver: 7.3.7 + typescript: 4.7.4 + optionalDependencies: + coffeescript: 1.12.7 + eslint-plugin-coffee: 0.1.15_3jfu2bo3ghrhfqed2cmcdlharm + eslint-plugin-react-hooks: 4.6.0_eslint@8.22.0 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-config-prettier/8.5.0_eslint@8.22.0: + resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + dependencies: + eslint: 8.22.0 + dev: true + + /eslint-import-resolver-node/0.3.6: + resolution: {integrity: sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==} + dependencies: + debug: 3.2.7 + resolve: 1.22.1 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-module-utils/2.7.4_va7ylp564qspatm4akiorvmvv4: + resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 5.35.1_4rv7y5c6xz3vfxwhbrcxxi73bq + debug: 3.2.7 + eslint: 8.22.0 + eslint-import-resolver-node: 0.3.6 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-plugin-coffee/0.1.15_3jfu2bo3ghrhfqed2cmcdlharm: + resolution: {integrity: sha512-+qtkIPSc9etYqOODIlENqiRjID/oEoGMAAQJN988Aczy461NIwzaamFY6Fi0QDVVDb2v+OL/StVrk/QmyItfeg==} + requiresBuild: true + peerDependencies: + eslint: '>=6.0.0' + dependencies: + axe-core: 3.5.6 + babel-eslint: 7.2.3 + babylon: 7.0.0-beta.47 + coffeescript: 2.7.0 + doctrine: 2.1.0 + eslint: 8.22.0 + eslint-config-airbnb: 18.2.1_z6vy5hbzu6e7zzgyebhxdjfk6q + eslint-config-airbnb-base: 14.2.1_2iahngt3u2tkbdlu6s4gkur3pu + eslint-plugin-import: 2.26.0_lewfh47l4outvz5ytnjtm3tbm4 + eslint-plugin-jsx-a11y: 6.6.1_eslint@8.22.0 + eslint-plugin-react: 7.23.2_eslint@8.22.0 + eslint-plugin-react-native: 3.11.0_eslint@8.22.0 + eslint-scope: 3.7.3 + eslint-utils: 1.4.3 + eslint-visitor-keys: 1.3.0 + jsx-ast-utils: 2.4.1 + lodash: 4.17.21 + transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - eslint-plugin-react-hooks + - supports-color + dev: true + optional: true + + /eslint-plugin-es/3.0.1_eslint@8.22.0: + resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} + engines: {node: '>=8.10.0'} + peerDependencies: + eslint: '>=4.19.1' + dependencies: + eslint: 8.22.0 + eslint-utils: 2.1.0 + regexpp: 3.2.0 + dev: true + + /eslint-plugin-html/6.2.0: + resolution: {integrity: sha512-vi3NW0E8AJombTvt8beMwkL1R/fdRWl4QSNRNMhVQKWm36/X0KF0unGNAY4mqUF06mnwVWZcIcerrCnfn9025g==} + dependencies: + htmlparser2: 7.2.0 + dev: true + + /eslint-plugin-import/2.26.0_lewfh47l4outvz5ytnjtm3tbm4: + resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 5.35.1_4rv7y5c6xz3vfxwhbrcxxi73bq + array-includes: 3.1.5 + array.prototype.flat: 1.3.0 + debug: 2.6.9 + doctrine: 2.1.0 + eslint: 8.22.0 + eslint-import-resolver-node: 0.3.6 + eslint-module-utils: 2.7.4_va7ylp564qspatm4akiorvmvv4 + has: 1.0.3 + is-core-module: 2.10.0 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.values: 1.1.5 + resolve: 1.22.1 + tsconfig-paths: 3.14.1 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-plugin-json/3.1.0: + resolution: {integrity: sha512-MrlG2ynFEHe7wDGwbUuFPsaT2b1uhuEFhJ+W1f1u+1C2EkXmTYJp4B1aAdQQ8M+CC3t//N/oRKiIVw14L2HR1g==} + engines: {node: '>=12.0'} + dependencies: + lodash: 4.17.21 + vscode-json-languageservice: 4.2.1 + dev: true + + /eslint-plugin-jsx-a11y/6.6.1_eslint@8.22.0: + resolution: {integrity: sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + '@babel/runtime': 7.18.9 + aria-query: 4.2.2 + array-includes: 3.1.5 + ast-types-flow: 0.0.7 + axe-core: 4.4.3 + axobject-query: 2.2.0 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + eslint: 8.22.0 + has: 1.0.3 + jsx-ast-utils: 3.3.3 + language-tags: 1.0.5 + minimatch: 3.1.2 + semver: 6.3.0 + dev: true + optional: true + + /eslint-plugin-node/11.1.0_eslint@8.22.0: + resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} + engines: {node: '>=8.10.0'} + peerDependencies: + eslint: '>=5.16.0' + dependencies: + eslint: 8.22.0 + eslint-plugin-es: 3.0.1_eslint@8.22.0 + eslint-utils: 2.1.0 + ignore: 5.2.0 + minimatch: 3.1.2 + resolve: 1.22.1 + semver: 6.3.0 + dev: true + + /eslint-plugin-optimize-regex/1.2.1: + resolution: {integrity: sha512-fUaU7Tj1G/KSTDTABJw4Wp427Rl7RPl9ViYTu1Jrv36fJw4DFhd4elPdXiuYtdPsNsvzn9GcVlKEssGIVjw0UQ==} + engines: {node: '>=10'} + dependencies: + regexp-tree: 0.1.24 + dev: true + + /eslint-plugin-prettier/4.2.1_prettier@2.7.1: + resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} + engines: {node: '>=12.0.0'} + peerDependencies: + eslint: '>=7.28.0' + eslint-config-prettier: '*' + prettier: '>=2.0.0' + peerDependenciesMeta: + eslint-config-prettier: + optional: true + dependencies: + prettier: 2.7.1 + prettier-linter-helpers: 1.0.0 + dev: true + + /eslint-plugin-react-hooks/4.6.0_eslint@8.22.0: + resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} + engines: {node: '>=10'} + requiresBuild: true + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + dependencies: + eslint: 8.22.0 + dev: true + optional: true + + /eslint-plugin-react-native-globals/0.1.2: + resolution: {integrity: sha512-9aEPf1JEpiTjcFAmmyw8eiIXmcNZOqaZyHO77wgm0/dWfT/oxC1SrIq8ET38pMxHYrcB6Uew+TzUVsBeczF88g==} + dev: true + optional: true + + /eslint-plugin-react-native/3.11.0_eslint@8.22.0: + resolution: {integrity: sha512-7F3OTwrtQPfPFd+VygqKA2VZ0f2fz0M4gJmry/TRE18JBb94/OtMxwbL7Oqwu7FGyrdeIOWnXQbBAveMcSTZIA==} + peerDependencies: + eslint: ^3.17.0 || ^4 || ^5 || ^6 || ^7 + dependencies: + '@babel/traverse': 7.18.13 + eslint: 8.22.0 + eslint-plugin-react-native-globals: 0.1.2 + transitivePeerDependencies: + - supports-color + dev: true + optional: true + + /eslint-plugin-react/7.23.2_eslint@8.22.0: + resolution: {integrity: sha512-AfjgFQB+nYszudkxRkTFu0UR1zEQig0ArVMPloKhxwlwkzaw/fBiH0QWcBBhZONlXqQC51+nfqFrkn4EzHcGBw==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 + dependencies: + array-includes: 3.1.5 + array.prototype.flatmap: 1.3.0 + doctrine: 2.1.0 + eslint: 8.22.0 + has: 1.0.3 + jsx-ast-utils: 2.4.1 + minimatch: 3.1.2 + object.entries: 1.1.5 + object.fromentries: 2.0.5 + object.values: 1.1.5 + prop-types: 15.8.1 + resolve: 2.0.0-next.4 + string.prototype.matchall: 4.0.7 + dev: true + optional: true + + /eslint-plugin-react/7.31.0_eslint@8.22.0: + resolution: {integrity: sha512-BWriBttYYCnfb4RO9SB91Og8uA9CPcBMl5UlCOCtuYW1UjhN3QypzEcEHky4ZIRZDKjbO2Blh9BjP8E7W/b1SA==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + array-includes: 3.1.5 + array.prototype.flatmap: 1.3.0 + doctrine: 2.1.0 + eslint: 8.22.0 + estraverse: 5.3.0 + jsx-ast-utils: 3.3.3 + minimatch: 3.1.2 + object.entries: 1.1.5 + object.fromentries: 2.0.5 + object.hasown: 1.1.1 + object.values: 1.1.5 + prop-types: 15.8.1 + resolve: 2.0.0-next.4 + semver: 6.3.0 + string.prototype.matchall: 4.0.7 + dev: true + + /eslint-plugin-yaml/0.5.0: + resolution: {integrity: sha512-Z6km4HEiRptSuvzc96nXBND1Vlg57b7pzRmIJOgb9+3PAE+XpaBaiMx+Dg+3Y15tSrEMKCIZ9WoZMwkwUbPI8A==} + dependencies: + js-yaml: 4.1.0 + jshint: 2.13.5 + dev: true + + /eslint-scope/3.7.3: + resolution: {integrity: sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==} + engines: {node: '>=4.0.0'} + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + dev: true + optional: true + + /eslint-scope/5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + dev: true + + /eslint-scope/7.1.1: + resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + + /eslint-utils/1.4.3: + resolution: {integrity: sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==} + engines: {node: '>=6'} + dependencies: + eslint-visitor-keys: 1.3.0 + dev: true + optional: true + + /eslint-utils/2.1.0: + resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} + engines: {node: '>=6'} + dependencies: + eslint-visitor-keys: 1.3.0 + dev: true + + /eslint-utils/3.0.0_eslint@8.22.0: + resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} + engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} + peerDependencies: + eslint: '>=5' + dependencies: + eslint: 8.22.0 + eslint-visitor-keys: 2.1.0 + dev: true + + /eslint-visitor-keys/1.3.0: + resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} + engines: {node: '>=4'} + dev: true + + /eslint-visitor-keys/2.1.0: + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} + dev: true + + /eslint-visitor-keys/3.3.0: + resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /eslint/8.22.0: + resolution: {integrity: sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint/eslintrc': 1.3.0 + '@humanwhocodes/config-array': 0.10.4 + '@humanwhocodes/gitignore-to-minimatch': 1.0.2 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.1.1 + eslint-utils: 3.0.0_eslint@8.22.0 + eslint-visitor-keys: 3.3.0 + espree: 9.3.3 + esquery: 1.4.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + functional-red-black-tree: 1.0.1 + glob-parent: 6.0.2 + globals: 13.17.0 + globby: 11.1.0 + grapheme-splitter: 1.0.4 + ignore: 5.2.0 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.1 + regexpp: 3.2.0 + strip-ansi: 6.0.1 + strip-json-comments: 3.1.1 + text-table: 0.2.0 + v8-compile-cache: 2.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /espree/9.3.3: + resolution: {integrity: sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.8.0 + acorn-jsx: 5.3.2_acorn@8.8.0 + eslint-visitor-keys: 3.3.0 + dev: true + + /esquery/1.4.0: + resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: true + + /esrecurse/4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estraverse/4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + dev: true + + /estraverse/5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true + + /esutils/2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: true + + /execspawn/1.0.1: + resolution: {integrity: sha512-s2k06Jy9i8CUkYe0+DxRlvtkZoOkwwfhB+Xxo5HGUtrISVW2m98jO2tr67DGRFxZwkjQqloA3v/tNtjhBRBieg==} + dependencies: + util-extend: 1.0.3 + dev: true + + /exit/0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + dev: true + + /fast-deep-equal/3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true + + /fast-diff/1.2.0: + resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} + dev: true + + /fast-glob/3.2.11: + resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true + + /fast-json-stable-stringify/2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true + + /fast-levenshtein/2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: true + + /fastq/1.13.0: + resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} + dependencies: + reusify: 1.0.4 + dev: true + + /file-entry-cache/6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.0.4 + dev: true + + /file-uri-to-path/1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + dev: true + + /fill-range/7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + + /find-up/4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: true + + /find-up/5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + + /flat-cache/3.0.4: + resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.2.7 + rimraf: 3.0.2 + dev: true + + /flat/5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + dev: true + + /flatted/3.2.7: + resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} + dev: true + + /fs-constants/1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + dev: true + + /fs-extra/10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + dependencies: + graceful-fs: 4.2.10 + jsonfile: 6.1.0 + universalify: 2.0.0 + dev: true + + /fs-extra/8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + dependencies: + graceful-fs: 4.2.10 + jsonfile: 4.0.0 + universalify: 0.1.2 + dev: true + + /fs.realpath/1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true + + /fsevents/2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /function-bind/1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + dev: true + + /function.prototype.name/1.1.5: + resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.1 + functions-have-names: 1.2.3 + dev: true + + /functional-red-black-tree/1.0.1: + resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} + dev: true + + /functions-have-names/1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: true + + /gensync/1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + dev: true + + /get-caller-file/2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: true + + /get-func-name/2.0.0: + resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} + dev: true + + /get-intrinsic/1.1.2: + resolution: {integrity: sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==} + dependencies: + function-bind: 1.1.1 + has: 1.0.3 + has-symbols: 1.0.3 + dev: true + + /get-symbol-description/1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.1.2 + dev: true + + /get-symbol-from-current-process-h/1.0.2: + resolution: {integrity: sha512-syloC6fsCt62ELLrr1VKBM1ggOpMdetX9hTrdW77UQdcApPHLmf7CI7OKcN1c9kYuNxKcDe4iJ4FY9sX3aw2xw==} + dev: true + + /get-uv-event-loop-napi-h/1.0.6: + resolution: {integrity: sha512-t5c9VNR84nRoF+eLiz6wFrEp1SE2Acg0wS+Ysa2zF0eROes+LzOfuTaVHxGy8AbS8rq7FHEJzjnCZo1BupwdJg==} + dependencies: + get-symbol-from-current-process-h: 1.0.2 + dev: true + + /glob-parent/5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob-parent/6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob/7.2.0: + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /glob/7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /globals/11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: true + + /globals/13.17.0: + resolution: {integrity: sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + + /globals/9.18.0: + resolution: {integrity: sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==} + engines: {node: '>=0.10.0'} + dev: true + optional: true + + /globby/11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.2.11 + ignore: 5.2.0 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /graceful-fs/4.2.10: + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + dev: true + + /grapheme-splitter/1.0.4: + resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} + dev: true + + /gunzip-maybe/1.4.2: + resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==} + hasBin: true + dependencies: + browserify-zlib: 0.1.4 + is-deflate: 1.0.0 + is-gzip: 1.0.0 + peek-stream: 1.1.3 + pumpify: 1.5.1 + through2: 2.0.5 + dev: true + + /handlebars/4.7.7: + resolution: {integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==} + engines: {node: '>=0.4.7'} + hasBin: true + dependencies: + minimist: 1.2.6 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + optionalDependencies: + uglify-js: 3.17.0 + dev: true + + /has-ansi/2.0.0: + resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-regex: 2.1.1 + dev: true + optional: true + + /has-bigints/1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: true + + /has-flag/3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + dev: true + + /has-flag/4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + + /has-property-descriptors/1.0.0: + resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + dependencies: + get-intrinsic: 1.1.2 + dev: true + + /has-symbols/1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + dev: true + + /has-tostringtag/1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /has/1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + dependencies: + function-bind: 1.1.1 + dev: true + + /he/1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + dev: true + + /highlight.js/9.18.5: + resolution: {integrity: sha512-a5bFyofd/BHCX52/8i8uJkjr9DYwXIPnM/plwI6W7ezItLGqzt7X2G2nXuYSfsIJdkwwj/g9DG1LkcGJI/dDoA==} + deprecated: Support has ended for 9.x series. Upgrade to @latest + requiresBuild: true + dev: true + + /hosted-git-info/2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + dev: true + + /htmlparser2/3.8.3: + resolution: {integrity: sha512-hBxEg3CYXe+rPIua8ETe7tmG3XDn9B0edOE/e9wH2nLczxzgdu0m0aNHY+5wFZiviLWLdANPJTssa92dMcXQ5Q==} + dependencies: + domelementtype: 1.3.1 + domhandler: 2.3.0 + domutils: 1.5.1 + entities: 1.0.0 + readable-stream: 1.1.14 + dev: true + + /htmlparser2/7.2.0: + resolution: {integrity: sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==} + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + domutils: 2.8.0 + entities: 3.0.1 + dev: true + + /ieee754/1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: true + + /ignore/5.2.0: + resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} + engines: {node: '>= 4'} + dev: true + + /import-fresh/3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true + + /imurmurhash/0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: true + + /inflight/1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + + /inherits/2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true + + /internal-slot/1.0.3: + resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.1.2 + has: 1.0.3 + side-channel: 1.0.4 + dev: true + + /interpret/1.4.0: + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} + dev: true + + /invariant/2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + dependencies: + loose-envify: 1.4.0 + dev: true + optional: true + + /is-arrayish/0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + dev: true + + /is-bigint/1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + dependencies: + has-bigints: 1.0.2 + dev: true + + /is-binary-path/2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: true + + /is-boolean-object/1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: true + + /is-callable/1.2.4: + resolution: {integrity: sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==} + engines: {node: '>= 0.4'} + dev: true + + /is-core-module/2.10.0: + resolution: {integrity: sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==} + dependencies: + has: 1.0.3 + dev: true + + /is-date-object/1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-deflate/1.0.0: + resolution: {integrity: sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==} + dev: true + + /is-extglob/2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-fullwidth-code-point/3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true + + /is-glob/4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-gzip/1.0.0: + resolution: {integrity: sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-negative-zero/2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} + dev: true + + /is-number-object/1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-number/7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /is-plain-obj/2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + dev: true + + /is-regex/1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: true + + /is-shared-array-buffer/1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + dependencies: + call-bind: 1.0.2 + dev: true + + /is-string/1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-symbol/1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /is-unicode-supported/0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + dev: true + + /is-weakref/1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + dependencies: + call-bind: 1.0.2 + dev: true + + /isarray/0.0.1: + resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} + dev: true + + /isarray/1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + dev: true + + /isexe/2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + + /jquery/3.6.0: + resolution: {integrity: sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==} + dev: true + + /js-tokens/3.0.2: + resolution: {integrity: sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==} + dev: true + optional: true + + /js-tokens/4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: true + + /js-yaml/4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: true + + /jsesc/2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /jshint/2.13.5: + resolution: {integrity: sha512-dB2n1w3OaQ35PLcBGIWXlszjbPZwsgZoxsg6G8PtNf2cFMC1l0fObkYLUuXqTTdi6tKw4sAjfUseTdmDMHQRcg==} + hasBin: true + dependencies: + cli: 1.0.1 + console-browserify: 1.1.0 + exit: 0.1.2 + htmlparser2: 3.8.3 + lodash: 4.17.21 + minimatch: 3.0.8 + strip-json-comments: 1.0.4 + dev: true + + /json-parse-even-better-errors/2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: true + + /json-schema-traverse/0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true + + /json-stable-stringify-without-jsonify/1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true + + /json5/1.0.1: + resolution: {integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==} + hasBin: true + dependencies: + minimist: 1.2.6 + dev: true + + /json5/2.2.1: + resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==} + engines: {node: '>=6'} + hasBin: true + dev: true + + /jsonc-parser/3.1.0: + resolution: {integrity: sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg==} + dev: true + + /jsonfile/4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + optionalDependencies: + graceful-fs: 4.2.10 + dev: true + + /jsonfile/6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.0 + optionalDependencies: + graceful-fs: 4.2.10 + dev: true + + /jsx-ast-utils/2.4.1: + resolution: {integrity: sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w==} + engines: {node: '>=4.0'} + dependencies: + array-includes: 3.1.5 + object.assign: 4.1.4 + dev: true + optional: true + + /jsx-ast-utils/3.3.3: + resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==} + engines: {node: '>=4.0'} + dependencies: + array-includes: 3.1.5 + object.assign: 4.1.4 + dev: true + + /language-subtag-registry/0.3.22: + resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} + dev: true + optional: true + + /language-tags/1.0.5: + resolution: {integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==} + dependencies: + language-subtag-registry: 0.3.22 + dev: true + optional: true + + /levn/0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /lines-and-columns/1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true + + /locate-path/5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + dependencies: + p-locate: 4.1.0 + dev: true + + /locate-path/6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: true + + /lodash.merge/4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true + + /lodash/4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: true + + /log-symbols/4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + dev: true + + /loose-envify/1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + dev: true + + /loupe/2.3.4: + resolution: {integrity: sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==} + dependencies: + get-func-name: 2.0.0 + dev: true + + /lru-cache/6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + dev: true + + /lunr/2.3.9: + resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} + dev: true + + /make-error/1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + dev: true + + /marked/0.7.0: + resolution: {integrity: sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==} + engines: {node: '>=0.10.0'} + hasBin: true + dev: true + + /merge2/1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + + /micromatch/4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: true + + /minimatch/3.0.8: + resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /minimatch/3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /minimatch/5.0.1: + resolution: {integrity: sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimist/1.2.6: + resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==} + dev: true + + /mkdirp-classic/0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + dev: true + + /mkdirp/1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + dev: true + + /mocha/10.0.0: + resolution: {integrity: sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==} + engines: {node: '>= 14.0.0'} + hasBin: true + dependencies: + '@ungap/promise-all-settled': 1.1.2 + ansi-colors: 4.1.1 + browser-stdout: 1.3.1 + chokidar: 3.5.3 + debug: 4.3.4_supports-color@8.1.1 + diff: 5.0.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 7.2.0 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 5.0.1 + ms: 2.1.3 + nanoid: 3.3.3 + serialize-javascript: 6.0.0 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + workerpool: 6.2.1 + yargs: 16.2.0 + yargs-parser: 20.2.4 + yargs-unparser: 2.0.0 + dev: true + + /ms/2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + dev: true + + /ms/2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /ms/2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: true + + /nanoid/3.3.3: + resolution: {integrity: sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + + /natural-compare/1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true + + /neo-async/2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + dev: true + + /node-abi/2.30.1: + resolution: {integrity: sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==} + dependencies: + semver: 5.7.1 + dev: true + + /node-addon-api/1.7.2: + resolution: {integrity: sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==} + dev: true + + /node-addon-api/3.2.1: + resolution: {integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==} + dev: true + + /node-addon-api/4.3.0: + resolution: {integrity: sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==} + dev: true + + /node-fetch/2.6.7: + resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: true + + /node-gyp-build/4.5.0: + resolution: {integrity: sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==} + hasBin: true + + /node-releases/2.0.6: + resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==} + dev: true + + /normalize-package-data/2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + dependencies: + hosted-git-info: 2.8.9 + resolve: 1.22.1 + semver: 5.7.1 + validate-npm-package-license: 3.0.4 + dev: true + + /normalize-path/3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + + /npm-run-path/3.1.0: + resolution: {integrity: sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==} + engines: {node: '>=8'} + dependencies: + path-key: 3.1.1 + dev: true + + /object-assign/4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: true + + /object-inspect/1.12.2: + resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==} + dev: true + + /object-keys/1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: true + + /object.assign/4.1.4: + resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: true + + /object.entries/1.1.5: + resolution: {integrity: sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.1 + dev: true + + /object.fromentries/2.0.5: + resolution: {integrity: sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.1 + dev: true + + /object.hasown/1.1.1: + resolution: {integrity: sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==} + dependencies: + define-properties: 1.1.4 + es-abstract: 1.20.1 + dev: true + + /object.values/1.1.5: + resolution: {integrity: sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.1 + dev: true + + /once/1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: true + + /optionator/0.9.1: + resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} + engines: {node: '>= 0.8.0'} + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.3 + dev: true + + /p-limit/2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 + dev: true + + /p-limit/3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: true + + /p-locate/4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + dev: true + + /p-locate/5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: true + + /p-try/2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: true + + /pako/0.2.9: + resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} + dev: true + + /parent-module/1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: true + + /parse-json/5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': 7.18.6 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + dev: true + + /path-browserify/1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + dev: true + + /path-exists/4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true + + /path-is-absolute/1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: true + + /path-key/3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + + /path-parse/1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + + /path-type/4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true + + /pathval/1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + dev: true + + /peek-stream/1.1.3: + resolution: {integrity: sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==} + dependencies: + buffer-from: 1.1.2 + duplexify: 3.7.1 + through2: 2.0.5 + dev: true + + /picocolors/1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true + + /picomatch/2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true + + /platform/1.3.6: + resolution: {integrity: sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==} + dev: true + + /prebuildify/4.2.1: + resolution: {integrity: sha512-FFgf3jHbh404ZuM++Cr0nMhK/VIgpyzscEXXiZCX1gbQz1ktg0s4hFKr9nXQKDLA3De98BvqNZODfqvm0maA2w==} + hasBin: true + dependencies: + execspawn: 1.0.1 + minimist: 1.2.6 + mkdirp-classic: 0.5.3 + node-abi: 2.30.1 + npm-run-path: 3.1.0 + pump: 3.0.0 + tar-fs: 2.1.1 + dev: true + + /prelude-ls/1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: true + + /prettier-linter-helpers/1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + dependencies: + fast-diff: 1.2.0 + dev: true + + /prettier/2.6.2: + resolution: {integrity: sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==} + engines: {node: '>=10.13.0'} + hasBin: true + dev: true + + /prettier/2.7.1: + resolution: {integrity: sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==} + engines: {node: '>=10.13.0'} + hasBin: true + dev: true + + /process-nextick-args/2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + dev: true + + /progress/2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + dev: true + + /prop-types/15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + dev: true + + /pump/2.0.1: + resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: true + + /pump/3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: true + + /pumpify/1.5.1: + resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==} + dependencies: + duplexify: 3.7.1 + inherits: 2.0.4 + pump: 2.0.1 + dev: true + + /punycode/2.1.1: + resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} + engines: {node: '>=6'} + dev: true + + /queue-microtask/1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + + /randombytes/2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /react-is/16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + dev: true + + /read-pkg-up/7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + read-pkg: 5.2.0 + type-fest: 0.8.1 + dev: true + + /read-pkg/5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} + dependencies: + '@types/normalize-package-data': 2.4.1 + normalize-package-data: 2.5.0 + parse-json: 5.2.0 + type-fest: 0.6.0 + dev: true + + /readable-stream/1.1.14: + resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 0.0.1 + string_decoder: 0.10.31 + dev: true + + /readable-stream/2.3.7: + resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + dev: true + + /readable-stream/3.6.0: + resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: true + + /readdirp/3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: true + + /rechoir/0.6.2: + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} + engines: {node: '>= 0.10'} + dependencies: + resolve: 1.22.1 + dev: true + + /regenerator-runtime/0.11.1: + resolution: {integrity: sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==} + dev: true + optional: true + + /regenerator-runtime/0.13.9: + resolution: {integrity: sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==} + dev: true + optional: true + + /regexp-tree/0.1.24: + resolution: {integrity: sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==} + hasBin: true + dev: true + + /regexp.prototype.flags/1.4.3: + resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + functions-have-names: 1.2.3 + dev: true + + /regexpp/3.2.0: + resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} + engines: {node: '>=8'} + dev: true + + /require-directory/2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: true + + /resolve-from/4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true + + /resolve/1.22.1: + resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} + hasBin: true + dependencies: + is-core-module: 2.10.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /resolve/2.0.0-next.4: + resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} + hasBin: true + dependencies: + is-core-module: 2.10.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /reusify/1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rimraf/3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + + /run-parallel/1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true + + /safe-buffer/5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + dev: true + + /safe-buffer/5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: true + + /seedrandom/2.4.4: + resolution: {integrity: sha512-9A+PDmgm+2du77B5i0Ip2cxOqqHjgNxnBgglxLcX78A2D6c2rTo61z4jnVABpF4cKeDMDG+cmXXvdnqse2VqMA==} + dev: true + + /semver/5.7.1: + resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} + hasBin: true + dev: true + + /semver/6.3.0: + resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + hasBin: true + dev: true + + /semver/7.3.7: + resolution: {integrity: sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + + /serialize-javascript/6.0.0: + resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + dependencies: + randombytes: 2.1.0 + dev: true + + /setimmediate-napi/1.0.6: + resolution: {integrity: sha512-sdNXN15Av1jPXuSal4Mk4tEAKn0+8lfF9Z50/negaQMrAIO9c1qM0eiCh8fT6gctp0RiCObk+6/Xfn5RMGdZoA==} + dependencies: + get-symbol-from-current-process-h: 1.0.2 + get-uv-event-loop-napi-h: 1.0.6 + dev: true + + /shebang-command/2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + dev: true + + /shebang-regex/3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true + + /shelljs/0.8.5: + resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} + engines: {node: '>=4'} + hasBin: true + dependencies: + glob: 7.2.3 + interpret: 1.4.0 + rechoir: 0.6.2 + dev: true + + /shx/0.3.4: + resolution: {integrity: sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g==} + engines: {node: '>=6'} + hasBin: true + dependencies: + minimist: 1.2.6 + shelljs: 0.8.5 + dev: true + + /side-channel/1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.1.2 + object-inspect: 1.12.2 + dev: true + + /slash/3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: true + + /source-map/0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: true + + /spdx-correct/3.1.1: + resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.12 + dev: true + + /spdx-exceptions/2.3.0: + resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} + dev: true + + /spdx-expression-parse/3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + dependencies: + spdx-exceptions: 2.3.0 + spdx-license-ids: 3.0.12 + dev: true + + /spdx-license-ids/3.0.12: + resolution: {integrity: sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==} + dev: true + + /stream-shift/1.0.1: + resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} + dev: true + + /string-width/4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: true + + /string.prototype.matchall/4.0.7: + resolution: {integrity: sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.1 + get-intrinsic: 1.1.2 + has-symbols: 1.0.3 + internal-slot: 1.0.3 + regexp.prototype.flags: 1.4.3 + side-channel: 1.0.4 + dev: true + + /string.prototype.trimend/1.0.5: + resolution: {integrity: sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.1 + dev: true + + /string.prototype.trimstart/1.0.5: + resolution: {integrity: sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.1 + dev: true + + /string_decoder/0.10.31: + resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} + dev: true + + /string_decoder/1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + dependencies: + safe-buffer: 5.1.2 + dev: true + + /string_decoder/1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /strip-ansi/3.0.1: + resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-regex: 2.1.1 + dev: true + optional: true + + /strip-ansi/6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + dev: true + + /strip-bom/3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: true + + /strip-json-comments/1.0.4: + resolution: {integrity: sha512-AOPG8EBc5wAikaG1/7uFCNFJwnKOuQwFTpYBdTW6OvWHeZBQBrAA/amefHGrEiOnCPcLFZK6FUPtWVKpQVIRgg==} + engines: {node: '>=0.8.0'} + hasBin: true + dev: true + + /strip-json-comments/3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true + + /supports-color/2.0.0: + resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} + engines: {node: '>=0.8.0'} + dev: true + optional: true + + /supports-color/5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + dev: true + + /supports-color/7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: true + + /supports-color/8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + dependencies: + has-flag: 4.0.0 + dev: true + + /supports-preserve-symlinks-flag/1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + + /tar-fs/2.1.1: + resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.0 + tar-stream: 2.2.0 + dev: true + + /tar-stream/2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.0 + dev: true + + /text-table/0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true + + /through2/2.0.5: + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + dependencies: + readable-stream: 2.3.7 + xtend: 4.0.2 + dev: true + + /to-fast-properties/1.0.3: + resolution: {integrity: sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==} + engines: {node: '>=0.10.0'} + dev: true + optional: true + + /to-fast-properties/2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + dev: true + + /to-regex-range/5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: true + + /tr46/0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + dev: true + + /ts-morph/11.0.3: + resolution: {integrity: sha512-ymuPkndv9rzqTLiHWMkVrFXWcN4nBiBGhRP/kTC9F5amAAl7BNLfyrsTzMD1o9A0zishKoF1KQT/0yyFhJnPgA==} + dependencies: + '@ts-morph/common': 0.10.1 + code-block-writer: 10.1.1 + dev: true + + /ts-node/10.9.1_ckbdxqkkfqe3aau5baiq6k5aji: + resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.3 + '@types/node': 18.7.13 + acorn: 8.8.0 + acorn-walk: 8.2.0 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 4.3.5 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + dev: true + + /tsconfig-paths/3.14.1: + resolution: {integrity: sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==} + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.1 + minimist: 1.2.6 + strip-bom: 3.0.0 + dev: true + + /tslib/1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + dev: true + + /tsutils/3.21.0_typescript@4.7.4: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + dependencies: + tslib: 1.14.1 + typescript: 4.7.4 + dev: true + + /type-check/0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + dev: true + + /type-detect/4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + dev: true + + /type-fest/0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: true + + /type-fest/0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + dev: true + + /type-fest/0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + dev: true + + /typedoc-default-themes/0.6.3: + resolution: {integrity: sha512-rouf0TcIA4M2nOQFfC7Zp4NEwoYiEX4vX/ZtudJWU9IHA29MPC+PPgSXYLPESkUo7FuB//GxigO3mk9Qe1xp3Q==} + engines: {node: '>= 8'} + dependencies: + backbone: 1.4.1 + jquery: 3.6.0 + lunr: 2.3.9 + underscore: 1.13.4 + dev: true + + /typescript/3.6.5: + resolution: {integrity: sha512-BEjlc0Z06ORZKbtcxGrIvvwYs5hAnuo6TKdNFL55frVDlB+na3z5bsLhFaIxmT+dPWgBIjMo6aNnTOgHHmHgiQ==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: true + + /typescript/4.3.5: + resolution: {integrity: sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: true + + /typescript/4.7.4: + resolution: {integrity: sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: true + + /uglify-js/3.17.0: + resolution: {integrity: sha512-aTeNPVmgIMPpm1cxXr2Q/nEbvkmV8yq66F3om7X3P/cvOXQ0TMQ64Wk63iyT1gPlmdmGzjGpyLh1f3y8MZWXGg==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + + /unbox-primitive/1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + dependencies: + call-bind: 1.0.2 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + dev: true + + /underscore/1.13.4: + resolution: {integrity: sha512-BQFnUDuAQ4Yf/cYY5LNrK9NCJFKriaRbD9uR1fTeXnBeoa97W0i41qkZfGO9pSo8I5KzjAcSY2XYtdf0oKd7KQ==} + dev: true + + /universalify/0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + dev: true + + /universalify/2.0.0: + resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} + engines: {node: '>= 10.0.0'} + dev: true + + /update-browserslist-db/1.0.5_browserslist@4.21.3: + resolution: {integrity: sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.21.3 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: true + + /uri-js/4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.1.1 + dev: true + + /util-deprecate/1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: true + + /util-extend/1.0.3: + resolution: {integrity: sha512-mLs5zAK+ctllYBj+iAQvlDCwoxU/WDOUaJkcFudeiAX6OajC6BKXJUa9a+tbtkC11dz2Ufb7h0lyvIOVn4LADA==} + dev: true + + /v8-compile-cache-lib/3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + dev: true + + /v8-compile-cache/2.3.0: + resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} + dev: true + + /validate-npm-package-license/3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + dependencies: + spdx-correct: 3.1.1 + spdx-expression-parse: 3.0.1 + dev: true + + /vscode-json-languageservice/4.2.1: + resolution: {integrity: sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==} + dependencies: + jsonc-parser: 3.1.0 + vscode-languageserver-textdocument: 1.0.5 + vscode-languageserver-types: 3.17.2 + vscode-nls: 5.1.0 + vscode-uri: 3.0.3 + dev: true + + /vscode-languageserver-textdocument/1.0.5: + resolution: {integrity: sha512-1ah7zyQjKBudnMiHbZmxz5bYNM9KKZYz+5VQLj+yr8l+9w3g+WAhCkUkWbhMEdC5u0ub4Ndiye/fDyS8ghIKQg==} + dev: true + + /vscode-languageserver-types/3.17.2: + resolution: {integrity: sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==} + dev: true + + /vscode-nls/5.1.0: + resolution: {integrity: sha512-37Ha44QrLFwR2IfSSYdOArzUvOyoWbOYTwQC+wS0NfqKjhW7s0WQ1lMy5oJXgSZy9sAiZS5ifELhbpXodeMR8w==} + dev: true + + /vscode-uri/3.0.3: + resolution: {integrity: sha512-EcswR2S8bpR7fD0YPeS7r2xXExrScVMxg4MedACaWHEtx9ftCF/qHG1xGkolzTPcEmjTavCQgbVzHUIdTMzFGA==} + dev: true + + /weak-napi/2.0.2: + resolution: {integrity: sha512-LcOSVFrghtVXf4QH+DLIy8iPiCktV7lVbqRDYP+bDPpLzC41RCHQPMyQOnPpWO41Ie4CmnDxS+mbL72r5xFMMQ==} + requiresBuild: true + dependencies: + node-addon-api: 3.2.1 + node-gyp-build: 4.5.0 + setimmediate-napi: 1.0.6 + dev: true + + /webidl-conversions/3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + dev: true + + /whatwg-url/5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + dev: true + + /which-boxed-primitive/1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + dev: true + + /which/2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /word-wrap/1.2.3: + resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} + engines: {node: '>=0.10.0'} + dev: true + + /wordwrap/1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + dev: true + + /workerpool/6.2.1: + resolution: {integrity: sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==} + dev: true + + /wrap-ansi/7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /wrappy/1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: true + + /xtend/4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + dev: true + + /y18n/5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: true + + /yallist/4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: true + + /yargs-parser/20.2.4: + resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} + engines: {node: '>=10'} + dev: true + + /yargs-unparser/2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + dependencies: + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + dev: true + + /yargs/16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + dependencies: + cliui: 7.0.4 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.4 + dev: true + + /yn/3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + dev: true + + /yocto-queue/0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true diff --git a/script/ci/downlevel-dts.js b/script/ci/downlevel-dts.js index 903aa22b..59b3eb1a 100644 --- a/script/ci/downlevel-dts.js +++ b/script/ci/downlevel-dts.js @@ -142,7 +142,7 @@ function getModifiersText(node) { .getModifiers() .map(m => m.getText()) .join(" ") - return modifiersText.length > 0 ? modifiersText + " " : "" + return modifiersText.length > 0 ? `${modifiersText} ` : "" } function getLeadingComments(node) { @@ -174,7 +174,7 @@ function relativeModulePath(fromAbsModulePath, toAbsTargetDir) { path.join(revertedPath, path.basename(fromAbsModulePath)), ) if (!/^\./.test(relMod)) { - relMod = "./" + relMod + relMod = `./${relMod}` } if (path.sep === "/") { return relMod diff --git a/script/ci/download.js b/script/ci/download.js index b0b3caaa..45ce9289 100644 --- a/script/ci/download.js +++ b/script/ci/download.js @@ -4,34 +4,49 @@ const gunzip = require("gunzip-maybe") const tar = require("tar-fs") async function download() { - const {repository: {url}, version} = require(path.resolve("./package.json")) + const { + repository: {url}, + version, + } = require(path.resolve("./package.json")) if (process.env.TRAVIS_TAG && process.env.TRAVIS_TAG != `v${version}`) { - throw new Error(`Version mismatch (TRAVIS_TAG=${process.env.TRAVIS_TAG}, version=${version}`) + throw new Error( + `Version mismatch (TRAVIS_TAG=${process.env.TRAVIS_TAG}, version=${version}`, + ) } - const [, user, repo] = url.match(/\/([a-z0-9_.-]+)\/([a-z0-9_.-]+)\.git$/i) + const [, user, repo] = url.match(/\/([\w.-]+)\/([\w.-]+)\.git$/i) - const res = await fetch(`https://api.github.com/repos/${user}/${repo}/releases/tags/v${version}`) + const res = await fetch( + `https://api.github.com/repos/${user}/${repo}/releases/tags/v${version}`, + ) if (!res.ok) { if (res.status == 404) { throw new Error(`Github release v${version} not found (${res.status})`) } else { const body = await res.text() - throw new Error(`Github release v${version} not accessible (${res.status}): ${body}`) + throw new Error( + `Github release v${version} not accessible (${res.status}): ${body}`, + ) } } const {assets} = await res.json() - await Promise.all(assets.map(async ({browser_download_url: url}) => { - console.log(`Downloading prebuilds from ${url}`) - const res = await fetch(url) - return new Promise((resolve, reject) => { - res.body.pipe(gunzip()).pipe(tar.extract(".")).on("error", reject).on("finish", resolve) - }) - })) + await Promise.all( + assets.map(async ({browser_download_url: url}) => { + console.log(`Downloading prebuilds from ${url}`) + const res = await fetch(url) + return new Promise((resolve, reject) => { + res.body + .pipe(gunzip()) + .pipe(tar.extract(".")) + .on("error", reject) + .on("finish", resolve) + }) + }), + ) } download().catch(err => { diff --git a/src/compat.ts b/src/compat.ts index 5e9cb0de..8afab3b4 100644 --- a/src/compat.ts +++ b/src/compat.ts @@ -272,7 +272,9 @@ class Socket extends EventEmitter { await this._recv() } - if (!this._socket.closed) recv() + if (!this._socket.closed) { + recv() + } }) } @@ -286,11 +288,15 @@ class Socket extends EventEmitter { await this._send() } - if (!this._socket.closed) send() + if (!this._socket.closed) { + send() + } }) } - if (type !== "push" && type !== "pub") recv() + if (type !== "push" && type !== "pub") { + recv() + } send() this.emit("_flushRecv") @@ -337,7 +343,9 @@ class Socket extends EventEmitter { const [msg, cb] = this._sendQueue.shift()! try { await (this._socket as zmq.Writable).send(msg) - if (cb) cb() + if (cb) { + cb() + } } catch (err) { if (cb) { cb(err) @@ -354,7 +362,9 @@ class Socket extends EventEmitter { .then(() => { process.nextTick(() => { this.emit("bind", address) - if (cb) cb() + if (cb) { + cb() + } }) }) .catch(err => { @@ -376,7 +386,9 @@ class Socket extends EventEmitter { .then(() => { process.nextTick(() => { this.emit("unbind", address) - if (cb) cb() + if (cb) { + cb() + } }) }) .catch(err => { @@ -408,7 +420,9 @@ class Socket extends EventEmitter { if ((flags & sendOptions.ZMQ_SNDMORE) === 0) { this._sendQueue.push([this._msg, cb]) this._msg = [] - if (!this._paused) this.emit("_flushSend") + if (!this._paused) { + this.emit("_flushSend") + } } return this } @@ -634,7 +648,7 @@ class Socket extends EventEmitter { this._socket.ipv6 = !value break case longOptions.ZMQ_ROUTER_MANDATORY: - ;(this._socket as zmq.Router).mandatory = !!value + ;(this._socket as zmq.Router).mandatory = Boolean(value) break case longOptions.ZMQ_TCP_KEEPALIVE: this._socket.tcpKeepalive = value @@ -652,7 +666,7 @@ class Socket extends EventEmitter { this._socket.tcpAcceptFilter = value break case longOptions.ZMQ_DELAY_ATTACH_ON_CONNECT: - this._socket.immediate = !!value + this._socket.immediate = Boolean(value) break case longOptions.ZMQ_XPUB_VERBOSE: ;(this._socket as zmq.XPublisher).verbosity = value ? "allSubs" : null @@ -660,10 +674,10 @@ class Socket extends EventEmitter { case longOptions.ZMQ_ROUTER_RAW: throw new Error("ZMQ_ROUTER_RAW is not supported in compatibility mode") case longOptions.ZMQ_IPV6: - this._socket.ipv6 = !!value + this._socket.ipv6 = Boolean(value) break case longOptions.ZMQ_PLAIN_SERVER: - this._socket.plainServer = !!value + this._socket.plainServer = Boolean(value) break case longOptions.ZMQ_PLAIN_USERNAME: this._socket.plainUsername = value @@ -672,7 +686,7 @@ class Socket extends EventEmitter { this._socket.plainPassword = value break case longOptions.ZMQ_CURVE_SERVER: - this._socket.curveServer = !!value + this._socket.curveServer = Boolean(value) break case longOptions.ZMQ_CURVE_PUBLICKEY: this._socket.curvePublicKey = value @@ -699,7 +713,7 @@ class Socket extends EventEmitter { this._socket.connectTimeout = value break case longOptions.ZMQ_ROUTER_HANDOVER: - ;(this._socket as zmq.Router).handover = !!value + ;(this._socket as zmq.Router).handover = Boolean(value) break default: throw new Error("Unknown option") @@ -821,14 +835,20 @@ class Socket extends EventEmitter { } for (const key in shortOptions) { - if (!shortOptions.hasOwnProperty(key)) continue - if (Socket.prototype.hasOwnProperty(key)) continue + if (!shortOptions.hasOwnProperty(key)) { + continue + } + if (Socket.prototype.hasOwnProperty(key)) { + continue + } Object.defineProperty(Socket.prototype, key, { get(this: Socket) { return this.getsockopt(shortOptions[key as keyof typeof shortOptions]) }, set(this: Socket, val: string | Buffer) { - if ("string" === typeof val) val = Buffer.from(val, "utf8") + if ("string" === typeof val) { + val = Buffer.from(val, "utf8") + } return this.setsockopt( shortOptions[key as keyof typeof shortOptions], val, @@ -853,7 +873,7 @@ function curveKeypair() { } function proxy(frontend: Socket, backend: Socket, capture?: Socket) { - switch (frontend.type + "/" + backend.type) { + switch (`${frontend.type}/${backend.type}`) { case "push/pull": case "pull/push": case "xpub/xsub": diff --git a/src/draft.ts b/src/draft.ts index 325a6e27..b528b557 100644 --- a/src/draft.ts +++ b/src/draft.ts @@ -50,11 +50,15 @@ export class Dish extends Socket { the sake of simplicity. */ join(...values: Array): void { - for (const value of values) join.call(this, value) + for (const value of values) { + join.call(this, value) + } } leave(...values: Array): void { - for (const value of values) leave.call(this, value) + for (const value of values) { + leave.call(this, value) + } } } diff --git a/src/index.ts b/src/index.ts index d38dcc74..ba050fd2 100644 --- a/src/index.ts +++ b/src/index.ts @@ -56,7 +56,7 @@ export type MessageLike = */ export interface Writable< M extends MessageLike | MessageLike[] = MessageLike | MessageLike[], - O extends [...object[]] = [] + O extends [...object[]] = [], > { /** * ZMQ_MULTICAST_HOPS @@ -1636,7 +1636,7 @@ function defineOpt>>( set if the property has been defined as readonly in the interface/class. */ function defineOpt< T extends {prototype: any}, - K extends ReadableKeys> + K extends ReadableKeys>, >( targets: T[], name: K, @@ -1674,7 +1674,9 @@ function defineOpt< } for (const target of targets) { - if (target.prototype.hasOwnProperty(name)) continue + if (target.prototype.hasOwnProperty(name)) { + continue + } Object.defineProperty(target.prototype, name, desc) } } diff --git a/src/native.ts b/src/native.ts index ae1868f1..aa897c51 100644 --- a/src/native.ts +++ b/src/native.ts @@ -392,7 +392,7 @@ export declare class Observer { */ export declare class Proxy< F extends Socket = Socket, - B extends Socket = Socket + B extends Socket = Socket, > { /** * Returns the original front-end socket. @@ -646,7 +646,7 @@ export const enum SocketType { /* https://stackoverflow.com/questions/49579094 */ type IfEquals = (() => T extends X ? 1 : 2) extends < - T + T, >() => T extends Y ? 1 : 2 ? A : B diff --git a/src/poller.h b/src/poller.h index 3ef26f86..b8fdc652 100644 --- a/src/poller.h +++ b/src/poller.h @@ -67,7 +67,8 @@ class Poller { assert((events & UV_READABLE) == 0); if (timeout > 0) { - auto err = uv_timer_start(readable_timer, + auto err = uv_timer_start( + readable_timer, [](uv_timer_t* timer) { auto& poller = *reinterpret_cast(timer->data); poller.Trigger(UV_READABLE); @@ -90,7 +91,8 @@ class Poller { assert((events & UV_WRITABLE) == 0); if (timeout > 0) { - auto err = uv_timer_start(writable_timer, + auto err = uv_timer_start( + writable_timer, [](uv_timer_t* timer) { auto& poller = *reinterpret_cast(timer->data); poller.Trigger(UV_WRITABLE); diff --git a/src/proxy.cc b/src/proxy.cc index f2d8da12..86c2d598 100644 --- a/src/proxy.cc +++ b/src/proxy.cc @@ -97,7 +97,8 @@ Napi::Value Proxy::Run(const Napi::CallbackInfo& info) { auto front_ptr = front->socket; auto back_ptr = back->socket; - auto status = UvQueue(Env(), + auto status = UvQueue( + Env(), [=]() { /* Don't access V8 internals here! Executed in worker thread. */ if (zmq_bind(control_sub, run_ctx->address.c_str()) < 0) { diff --git a/src/socket.cc b/src/socket.cc index 77b54c99..b024176a 100644 --- a/src/socket.cc +++ b/src/socket.cc @@ -350,7 +350,8 @@ Napi::Value Socket::Bind(const Napi::CallbackInfo& info) { auto res = Napi::Promise::Deferred::New(Env()); auto run_ctx = std::make_shared(info[0].As()); - auto status = UvQueue(Env(), + auto status = UvQueue( + Env(), [=]() { /* Don't access V8 internals here! Executed in worker thread. */ while (zmq_bind(socket, run_ctx->address.c_str()) < 0) { @@ -400,7 +401,8 @@ Napi::Value Socket::Unbind(const Napi::CallbackInfo& info) { auto res = Napi::Promise::Deferred::New(Env()); auto run_ctx = std::make_shared(info[0].As()); - auto status = UvQueue(Env(), + auto status = UvQueue( + Env(), [=]() { /* Don't access V8 internals here! Executed in worker thread. */ while (zmq_unbind(socket, run_ctx->address.c_str()) < 0) { diff --git a/src/util/uvwork.h b/src/util/uvwork.h index 8ade4b63..20e7b7e9 100644 --- a/src/util/uvwork.h +++ b/src/util/uvwork.h @@ -21,7 +21,8 @@ class UvWork { } inline int32_t Schedule(uv_loop_t* loop) { - auto err = uv_queue_work(loop, work.get(), + auto err = uv_queue_work( + loop, work.get(), [](uv_work_t* req) { auto& work = *reinterpret_cast(req->data); work.execute_callback(); diff --git a/test/bench/create-socket.js b/test/bench/create-socket.js index 1a019d1d..63c529b1 100644 --- a/test/bench/create-socket.js +++ b/test/bench/create-socket.js @@ -1,27 +1,43 @@ if (zmq.cur) { zmq.cur.Context.setMaxSockets(n) - suite.add(`create socket n=${n} zmq=cur`, Object.assign({ - fn: deferred => { - const sockets = [] - for (let i = 0; i < n; i++) { - sockets.push(zmq.cur.socket("dealer")) - } - deferred.resolve() - for (const socket of sockets) socket.close() - } - }, benchOptions)) + suite.add( + `create socket n=${n} zmq=cur`, + Object.assign( + { + fn: deferred => { + const sockets = [] + for (let i = 0; i < n; i++) { + sockets.push(zmq.cur.socket("dealer")) + } + deferred.resolve() + for (const socket of sockets) { + socket.close() + } + }, + }, + benchOptions, + ), + ) } if (zmq.ng) { zmq.ng.context.maxSockets = n - suite.add(`create socket n=${n} zmq=ng`, Object.assign({ - fn: deferred => { - const sockets = [] - for (let i = 0; i < n; i++) { - sockets.push(new zmq.ng.Dealer) - } - deferred.resolve() - for (const socket of sockets) socket.close() - } - }, benchOptions)) + suite.add( + `create socket n=${n} zmq=ng`, + Object.assign( + { + fn: deferred => { + const sockets = [] + for (let i = 0; i < n; i++) { + sockets.push(new zmq.ng.Dealer()) + } + deferred.resolve() + for (const socket of sockets) { + socket.close() + } + }, + }, + benchOptions, + ), + ) } diff --git a/test/bench/deliver-async-iterator.js b/test/bench/deliver-async-iterator.js index 9f8096e7..3aab54d9 100644 --- a/test/bench/deliver-async-iterator.js +++ b/test/bench/deliver-async-iterator.js @@ -1,37 +1,45 @@ if (zmq.ng) { - suite.add(`deliver async iterator proto=${proto} msgsize=${msgsize} n=${n} zmq=ng`, Object.assign({ - fn: async deferred => { - const server = new zmq.ng.Dealer - const client = new zmq.ng.Dealer - - await server.bind(address) - client.connect(address) - - global.gc?.() - - const send = async () => { - for (let i = 0; i < n; i++) { - await client.send(Buffer.alloc(msgsize)) - } - } - - const receive = async () => { - let i = 0 - for await (const [msg] of server) { - if (++i == n) server.close() - } - } - - await Promise.all([send(), receive()]) - - global.gc?.() - - server.close() - client.close() - - global.gc?.() - - deferred.resolve() - } - }, benchOptions)) + suite.add( + `deliver async iterator proto=${proto} msgsize=${msgsize} n=${n} zmq=ng`, + Object.assign( + { + fn: async deferred => { + const server = new zmq.ng.Dealer() + const client = new zmq.ng.Dealer() + + await server.bind(address) + client.connect(address) + + global.gc?.() + + const send = async () => { + for (let i = 0; i < n; i++) { + await client.send(Buffer.alloc(msgsize)) + } + } + + const receive = async () => { + let i = 0 + for await (const [msg] of server) { + if (++i == n) { + server.close() + } + } + } + + await Promise.all([send(), receive()]) + + global.gc?.() + + server.close() + client.close() + + global.gc?.() + + deferred.resolve() + }, + }, + benchOptions, + ), + ) } diff --git a/test/bench/deliver-multipart.js b/test/bench/deliver-multipart.js index 6ad59a2a..06a0ab9c 100644 --- a/test/bench/deliver-multipart.js +++ b/test/bench/deliver-multipart.js @@ -1,71 +1,91 @@ if (zmq.cur) { - suite.add(`deliver multipart proto=${proto} msgsize=${msgsize} n=${n} zmq=cur`, Object.assign({ - fn: deferred => { - const server = zmq.cur.socket("dealer") - const client = zmq.cur.socket("dealer") - - let j = 0 - server.on("message", (msg1, msg2, mgs3) => { - j++ - if (j == n - 1) { - global.gc?.() - - server.close() - client.close() - - global.gc?.() - - deferred.resolve() - } - }) - - server.bind(address, () => { - client.connect(address) - - global.gc?.() - - for (let i = 0; i < n; i++) { - client.send([Buffer.alloc(msgsize), Buffer.alloc(msgsize), Buffer.alloc(msgsize)]) - } - }) - } - }, benchOptions)) + suite.add( + `deliver multipart proto=${proto} msgsize=${msgsize} n=${n} zmq=cur`, + Object.assign( + { + fn: deferred => { + const server = zmq.cur.socket("dealer") + const client = zmq.cur.socket("dealer") + + let j = 0 + server.on("message", (msg1, msg2, mgs3) => { + j++ + if (j == n - 1) { + global.gc?.() + + server.close() + client.close() + + global.gc?.() + + deferred.resolve() + } + }) + + server.bind(address, () => { + client.connect(address) + + global.gc?.() + + for (let i = 0; i < n; i++) { + client.send([ + Buffer.alloc(msgsize), + Buffer.alloc(msgsize), + Buffer.alloc(msgsize), + ]) + } + }) + }, + }, + benchOptions, + ), + ) } if (zmq.ng) { - suite.add(`deliver multipart proto=${proto} msgsize=${msgsize} n=${n} zmq=ng`, Object.assign({ - fn: async deferred => { - const server = new zmq.ng.Dealer - const client = new zmq.ng.Dealer - - await server.bind(address) - client.connect(address) - - global.gc?.() + suite.add( + `deliver multipart proto=${proto} msgsize=${msgsize} n=${n} zmq=ng`, + Object.assign( + { + fn: async deferred => { + const server = new zmq.ng.Dealer() + const client = new zmq.ng.Dealer() - const send = async () => { - for (let i = 0; i < n; i++) { - await client.send([Buffer.alloc(msgsize), Buffer.alloc(msgsize), Buffer.alloc(msgsize)]) - } - } + await server.bind(address) + client.connect(address) - const receive = async () => { - let j = 0 - for (j = 0; j < n - 1; j++) { - const [msg1, msg2, msg3] = await server.receive() - } - } + global.gc?.() - await Promise.all([send(), receive()]) + const send = async () => { + for (let i = 0; i < n; i++) { + await client.send([ + Buffer.alloc(msgsize), + Buffer.alloc(msgsize), + Buffer.alloc(msgsize), + ]) + } + } + + const receive = async () => { + let j = 0 + for (j = 0; j < n - 1; j++) { + const [msg1, msg2, msg3] = await server.receive() + } + } + + await Promise.all([send(), receive()]) - global.gc?.() + global.gc?.() - server.close() - client.close() + server.close() + client.close() - global.gc?.() + global.gc?.() - deferred.resolve() - } - }, benchOptions)) + deferred.resolve() + }, + }, + benchOptions, + ), + ) } diff --git a/test/bench/deliver.js b/test/bench/deliver.js index b52b4d39..ca3e878d 100644 --- a/test/bench/deliver.js +++ b/test/bench/deliver.js @@ -1,71 +1,83 @@ if (zmq.cur) { - suite.add(`deliver proto=${proto} msgsize=${msgsize} n=${n} zmq=cur`, Object.assign({ - fn: deferred => { - const server = zmq.cur.socket("dealer") - const client = zmq.cur.socket("dealer") - - let j = 0 - server.on("message", msg => { - j++ - if (j == n - 1) { - global.gc?.() - - server.close() - client.close() - - global.gc?.() - - deferred.resolve() - } - }) - - server.bind(address, () => { - client.connect(address) - - global.gc?.() - - for (let i = 0; i < n; i++) { - client.send(Buffer.alloc(msgsize)) - } - }) - } - }, benchOptions)) + suite.add( + `deliver proto=${proto} msgsize=${msgsize} n=${n} zmq=cur`, + Object.assign( + { + fn: deferred => { + const server = zmq.cur.socket("dealer") + const client = zmq.cur.socket("dealer") + + let j = 0 + server.on("message", msg => { + j++ + if (j == n - 1) { + global.gc?.() + + server.close() + client.close() + + global.gc?.() + + deferred.resolve() + } + }) + + server.bind(address, () => { + client.connect(address) + + global.gc?.() + + for (let i = 0; i < n; i++) { + client.send(Buffer.alloc(msgsize)) + } + }) + }, + }, + benchOptions, + ), + ) } if (zmq.ng) { - suite.add(`deliver proto=${proto} msgsize=${msgsize} n=${n} zmq=ng`, Object.assign({ - fn: async deferred => { - const server = new zmq.ng.Dealer - const client = new zmq.ng.Dealer + suite.add( + `deliver proto=${proto} msgsize=${msgsize} n=${n} zmq=ng`, + Object.assign( + { + fn: async deferred => { + const server = new zmq.ng.Dealer() + const client = new zmq.ng.Dealer() - await server.bind(address) - client.connect(address) + await server.bind(address) + client.connect(address) - global.gc?.() + global.gc?.() - const send = async () => { - for (let i = 0; i < n; i++) { - await client.send(Buffer.alloc(msgsize)) - } - } + const send = async () => { + for (let i = 0; i < n; i++) { + await client.send(Buffer.alloc(msgsize)) + } + } - const receive = async () => { - let j = 0 - for (j = 0; j < n - 1; j++) { - const [msg] = await server.receive() - } - } + const receive = async () => { + let j = 0 + for (j = 0; j < n - 1; j++) { + const [msg] = await server.receive() + } + } - await Promise.all([send(), receive()]) + await Promise.all([send(), receive()]) - global.gc?.() + global.gc?.() - server.close() - client.close() + server.close() + client.close() - global.gc?.() + global.gc?.() - deferred.resolve() - } - }, benchOptions)) + deferred.resolve() + }, + }, + benchOptions, + ), + ) } diff --git a/test/bench/index.js b/test/bench/index.js index 7e9a4a23..23737f44 100644 --- a/test/bench/index.js +++ b/test/bench/index.js @@ -22,8 +22,8 @@ const msgsizes = [ /* Which benchmarks to run. */ const benchmarks = { // "create-socket": {n, options: {delay: 0.5}}, - "queue": {n, msgsizes}, - "deliver": {n, protos, msgsizes}, + queue: {n, msgsizes}, + deliver: {n, protos, msgsizes}, "deliver-multipart": {n, protos, msgsizes}, "deliver-async-iterator": {n, protos, msgsizes}, } @@ -41,20 +41,20 @@ let seq = 5000 function uniqAddress(proto) { const id = seq++ switch (proto) { - case "ipc": - return `${proto}://${__dirname}/../../tmp/${proto}-${id}` - case "tcp": - case "udp": - return `${proto}://127.0.0.1:${id}` - default: - return `${proto}://${proto}-${id}` + case "ipc": + return `${proto}://${__dirname}/../../tmp/${proto}-${id}` + case "tcp": + case "udp": + return `${proto}://127.0.0.1:${id}` + default: + return `${proto}://${proto}-${id}` } } /* Continue to load and execute benchmarks. */ const fs = require("fs") const bench = require("benchmark") -const suite = new bench.Suite +const suite = new bench.Suite() const defaultOptions = { defer: true, @@ -62,8 +62,10 @@ const defaultOptions = { onError: console.error, } -for (const [benchmark, {n, protos, msgsizes, options}] of Object.entries(benchmarks)) { - let load = ({n, proto, msgsize, address}) => { +for (const [benchmark, {n, protos, msgsizes, options}] of Object.entries( + benchmarks, +)) { + const load = ({n, proto, msgsize, address}) => { const benchOptions = Object.assign({}, defaultOptions, options) eval(fs.readFileSync(`${__dirname}/${benchmark}.js`).toString()) } diff --git a/test/bench/queue.js b/test/bench/queue.js index 94120cd4..6e3cea57 100644 --- a/test/bench/queue.js +++ b/test/bench/queue.js @@ -1,44 +1,56 @@ if (zmq.cur) { - suite.add(`queue msgsize=${msgsize} n=${n} zmq=cur`, Object.assign({ - fn: deferred => { - const client = zmq.cur.socket("dealer") - client.linger = 0 - client.connect(address) - - global.gc?.() - - for (let i = 0; i < n; i++) { - client.send(Buffer.alloc(msgsize)) - } - - global.gc?.() - - client.close() - - deferred.resolve() - } - }, benchOptions)) + suite.add( + `queue msgsize=${msgsize} n=${n} zmq=cur`, + Object.assign( + { + fn: deferred => { + const client = zmq.cur.socket("dealer") + client.linger = 0 + client.connect(address) + + global.gc?.() + + for (let i = 0; i < n; i++) { + client.send(Buffer.alloc(msgsize)) + } + + global.gc?.() + + client.close() + + deferred.resolve() + }, + }, + benchOptions, + ), + ) } if (zmq.ng) { - suite.add(`queue msgsize=${msgsize} n=${n} zmq=ng`, Object.assign({ - fn: async deferred => { - const client = new zmq.ng.Dealer - client.linger = 0 - client.sendHighWaterMark = n * 2 - client.connect(address) - - global.gc?.() - - for (let i = 0; i < n; i++) { - await client.send(Buffer.alloc(msgsize)) - } - - global.gc?.() - - client.close() - - deferred.resolve() - } - }, benchOptions)) + suite.add( + `queue msgsize=${msgsize} n=${n} zmq=ng`, + Object.assign( + { + fn: async deferred => { + const client = new zmq.ng.Dealer() + client.linger = 0 + client.sendHighWaterMark = n * 2 + client.connect(address) + + global.gc?.() + + for (let i = 0; i < n; i++) { + await client.send(Buffer.alloc(msgsize)) + } + + global.gc?.() + + client.close() + + deferred.resolve() + }, + }, + benchOptions, + ), + ) } diff --git a/test/unit/compat/context-test.js b/test/unit/compat/context-test.js index de113ab3..741e5320 100644 --- a/test/unit/compat/context-test.js +++ b/test/unit/compat/context-test.js @@ -2,14 +2,14 @@ if (process.env.INCLUDE_COMPAT_TESTS) { const zmq = require("./load") const {assert} = require("chai") - describe("compat context", function() { - it("should support setting max io threads", function() { + describe("compat context", function () { + it("should support setting max io threads", function () { zmq.Context.setMaxThreads(3) assert.equal(zmq.Context.getMaxThreads(), 3) zmq.Context.setMaxThreads(1) }) - it("should support setting max number of sockets", function() { + it("should support setting max number of sockets", function () { const currMaxSockets = zmq.Context.getMaxSockets() zmq.Context.setMaxSockets(256) assert.equal(zmq.Context.getMaxSockets(), 256) diff --git a/test/unit/compat/exports-test.js b/test/unit/compat/exports-test.js index 410d968f..ff2eefe6 100644 --- a/test/unit/compat/exports-test.js +++ b/test/unit/compat/exports-test.js @@ -3,13 +3,15 @@ if (process.env.INCLUDE_COMPAT_TESTS) { const semver = require("semver") const {assert} = require("chai") - describe("compat exports", function() { - it("should export a valid version", function(){ + describe("compat exports", function () { + it("should export a valid version", function () { assert.ok(semver.valid(zmq.version)) }) - it("should generate valid curve keypair", function() { - if (!zmq.capability.curve) this.skip() + it("should generate valid curve keypair", function () { + if (!zmq.capability.curve) { + this.skip() + } const curve = zmq.curveKeypair() assert.typeOf(curve.public, "string") @@ -18,7 +20,7 @@ if (process.env.INCLUDE_COMPAT_TESTS) { assert.equal(curve.secret.length, 40) }) - it("should export socket types and options", function() { + it("should export socket types and options", function () { const constants = [ "PUB", "SUB", @@ -76,23 +78,23 @@ if (process.env.INCLUDE_COMPAT_TESTS) { "ROUTER_RAW", ] - constants.forEach(function(typeOrProp) { - assert.typeOf(zmq["ZMQ_" + typeOrProp], "number") + constants.forEach(function (typeOrProp) { + assert.typeOf(zmq[`ZMQ_${typeOrProp}`], "number") }) }) - it("should export states", function(){ - ["STATE_READY", "STATE_BUSY", "STATE_CLOSED"].forEach(function(state) { + it("should export states", function () { + ;["STATE_READY", "STATE_BUSY", "STATE_CLOSED"].forEach(function (state) { assert.typeOf(zmq[state], "number") }) }) - it("should export constructors", function(){ + it("should export constructors", function () { assert.typeOf(zmq.Context, "function") assert.typeOf(zmq.Socket, "function") }) - it("should export methods", function(){ + it("should export methods", function () { assert.typeOf(zmq.socket, "function") }) }) diff --git a/test/unit/compat/gc-test.js b/test/unit/compat/gc-test.js index a341d2e7..a742b630 100644 --- a/test/unit/compat/gc-test.js +++ b/test/unit/compat/gc-test.js @@ -4,8 +4,8 @@ if (process.env.INCLUDE_COMPAT_TESTS) { const {testProtos, uniqAddress} = require("../helpers") for (const proto of testProtos("tcp", "inproc")) { - describe(`compat socket with ${proto}`, function() { - it("should cooperate with gc", function(done) { + describe(`compat socket with ${proto}`, function () { + it("should cooperate with gc", function (done) { const sockA = zmq.socket("dealer") const sockB = zmq.socket("dealer") @@ -18,7 +18,7 @@ if (process.env.INCLUDE_COMPAT_TESTS) { * If a message is delivered, than everything is ok. Otherwise the guard * timeout will make the test fail. */ - sockA.on("message", function(msg) { + sockA.on("message", function (msg) { assert.instanceOf(msg, Buffer) assert.equal(msg.toString(), "hello") sockA.close() @@ -38,7 +38,7 @@ if (process.env.INCLUDE_COMPAT_TESTS) { } }) - let interval = setInterval(function() { + const interval = setInterval(function () { global.gc?.() if (bound) { clearInterval(interval) diff --git a/test/unit/compat/load.js b/test/unit/compat/load.js index 0aec5bb3..3de98396 100644 --- a/test/unit/compat/load.js +++ b/test/unit/compat/load.js @@ -1,10 +1,8 @@ const path = require("path") -module.exports = require( - process.env.ZMQ_COMPAT_PATH ? - path.resolve(process.cwd(), process.env.ZMQ_COMPAT_PATH) : - "../../../src/compat" -) +module.exports = require(process.env.ZMQ_COMPAT_PATH + ? path.resolve(process.cwd(), process.env.ZMQ_COMPAT_PATH) + : "../../../src/compat") /* Copy capabilities from regular module. */ module.exports.capability = require("../../../src").capability diff --git a/test/unit/compat/socket-error-callback-test.js b/test/unit/compat/socket-error-callback-test.js index 0ad1ef3d..d7d60117 100644 --- a/test/unit/compat/socket-error-callback-test.js +++ b/test/unit/compat/socket-error-callback-test.js @@ -2,23 +2,23 @@ if (process.env.INCLUDE_COMPAT_TESTS) { const zmq = require("./load") const {assert} = require("chai") - describe("compat socket error callback", function() { + describe("compat socket error callback", function () { let sock - beforeEach(function() { + beforeEach(function () { sock = zmq.socket("router") }) - afterEach(function() { + afterEach(function () { sock.close() }) - it("should create a socket with mandatory", function() { + it("should create a socket with mandatory", function () { sock.setsockopt(zmq.ZMQ_ROUTER_MANDATORY, 1) sock.setsockopt(zmq.ZMQ_SNDTIMEO, 10) }) - it("should callback with error when not connected", function(done) { + it("should callback with error when not connected", function (done) { sock.send(["foo", "bar"], null, err => { assert.instanceOf(err, Error) sock.close() diff --git a/test/unit/compat/socket-events-test.js b/test/unit/compat/socket-events-test.js index 78ca700d..edae1e85 100644 --- a/test/unit/compat/socket-events-test.js +++ b/test/unit/compat/socket-events-test.js @@ -4,26 +4,28 @@ if (process.env.INCLUDE_COMPAT_TESTS) { const {testProtos, uniqAddress} = require("../helpers") for (const proto of testProtos("tcp", "inproc")) { - describe(`compat socket with ${proto} events`, function() { - it("should support events", function(done) { + describe(`compat socket with ${proto} events`, function () { + it("should support events", function (done) { const rep = zmq.socket("rep") const req = zmq.socket("req") const address = uniqAddress(proto) - rep.on("message", function(msg) { + rep.on("message", function (msg) { assert.instanceOf(msg, Buffer) assert.equal(msg.toString(), "hello") rep.send("world") }) rep.bind(address, err => { - if (err) throw err + if (err) { + throw err + } }) - rep.on("bind", function() { + rep.on("bind", function () { req.connect(address) - req.on("message", function(msg) { + req.on("message", function (msg) { assert.instanceOf(msg, Buffer) assert.equal(msg.toString(), "world") req.close() diff --git a/test/unit/compat/socket-messages-test.js b/test/unit/compat/socket-messages-test.js index 234f4a1a..996069f8 100644 --- a/test/unit/compat/socket-messages-test.js +++ b/test/unit/compat/socket-messages-test.js @@ -4,20 +4,21 @@ if (process.env.INCLUDE_COMPAT_TESTS) { const {testProtos, uniqAddress} = require("../helpers") for (const proto of testProtos("tcp", "inproc")) { - describe(`compat socket with ${proto} messages`, function() { - let push, pull + describe(`compat socket with ${proto} messages`, function () { + let push + let pull - beforeEach(function() { + beforeEach(function () { push = zmq.socket("push") pull = zmq.socket("pull") }) - it("should support messages", function(done) { + it("should support messages", function (done) { const address = uniqAddress(proto) let n = 0 - pull.on("message", function(msg) { + pull.on("message", function (msg) { msg = msg.toString() switch (n++) { case 0: @@ -42,10 +43,10 @@ if (process.env.INCLUDE_COMPAT_TESTS) { push.send(Buffer.from("buffer")) }) - it("should support multipart messages", function(done) { + it("should support multipart messages", function (done) { const address = uniqAddress(proto) - pull.on("message", function(msg1, msg2, msg3) { + pull.on("message", function (msg1, msg2, msg3) { assert.equal(msg1.toString(), "string") assert.equal(msg2.toString(), "15.99") assert.equal(msg3.toString(), "buffer") @@ -59,10 +60,10 @@ if (process.env.INCLUDE_COMPAT_TESTS) { push.send(["string", 15.99, Buffer.from("buffer")]) }) - it("should support sndmore", function(done) { + it("should support sndmore", function (done) { const address = uniqAddress(proto) - pull.on("message", function(a, b, c, d, e) { + pull.on("message", function (a, b, c, d, e) { assert.equal(a.toString(), "tobi") assert.equal(b.toString(), "loki") assert.equal(c.toString(), "jane") @@ -81,11 +82,11 @@ if (process.env.INCLUDE_COMPAT_TESTS) { }) if (proto != "inproc") { - it("should handle late connect", function(done) { + it("should handle late connect", function (done) { const address = uniqAddress(proto) let n = 0 - pull.on("message", function(msg) { + pull.on("message", function (msg) { msg = msg.toString() switch (n++) { case 0: @@ -114,7 +115,7 @@ if (process.env.INCLUDE_COMPAT_TESTS) { }) } - it("should call send callbacks", function(done) { + it("should call send callbacks", function (done) { const address = uniqAddress(proto) let received = 0 let callbacks = 0 @@ -123,7 +124,7 @@ if (process.env.INCLUDE_COMPAT_TESTS) { callbacks += 1 } - pull.on("message", function() { + pull.on("message", function () { received += 1 if (received === 4) { diff --git a/test/unit/compat/socket-monitor-test.js b/test/unit/compat/socket-monitor-test.js index 4a910533..ced0d3c2 100644 --- a/test/unit/compat/socket-monitor-test.js +++ b/test/unit/compat/socket-monitor-test.js @@ -6,36 +6,38 @@ if (process.env.INCLUDE_COMPAT_TESTS) { /* This test case only seems to work reliably with TCP. */ for (const proto of testProtos("tcp")) { - describe(`compat socket with ${proto} monitor`, function() { - beforeEach(function() { + describe(`compat socket with ${proto} monitor`, function () { + beforeEach(function () { /* ZMQ < 4.2 occasionally fails with assertion errors. */ - if (semver.satisfies(zmq.version, "< 4.2")) this.skip() + if (semver.satisfies(zmq.version, "< 4.2")) { + this.skip() + } this.warningListeners = process.listeners("warning") }) - afterEach(function() { + afterEach(function () { process.removeAllListeners("warning") for (const listener of this.warningListeners) { process.on("warning", listener) } }) - it("should be able to monitor the socket", function(done) { + it("should be able to monitor the socket", function (done) { const rep = zmq.socket("rep") const req = zmq.socket("req") const address = uniqAddress(proto) - rep.on("message", function(msg) { + rep.on("message", function (msg) { assert.instanceOf(msg, Buffer) assert.equal(msg.toString(), "hello") rep.send("world") }) const testedEvents = ["listen", "accept", "disconnect"] - testedEvents.forEach(function(e) { - rep.on(e, function(event_value, event_endpoint_addr) { + testedEvents.forEach(function (e) { + rep.on(e, function (event_value, event_endpoint_addr) { assert.equal(event_endpoint_addr.toString(), address) testedEvents.pop() @@ -51,13 +53,15 @@ if (process.env.INCLUDE_COMPAT_TESTS) { rep.monitor() rep.bind(address, err => { - if (err) throw err + if (err) { + throw err + } }) - rep.on("bind", function() { + rep.on("bind", function () { req.connect(address) req.send("hello") - req.on("message", function(msg) { + req.on("message", function (msg) { assert.instanceOf(msg, Buffer) assert.equal(msg.toString(), "world") req.close() @@ -67,7 +71,7 @@ if (process.env.INCLUDE_COMPAT_TESTS) { // and to the monitor event const doubleRep = zmq.socket("rep") doubleRep.monitor() - doubleRep.on("bind_error", function(errno, bindAddr, ex) { + doubleRep.on("bind_error", function (errno, bindAddr, ex) { assert.instanceOf(ex, Error) doubleRep.close() }) diff --git a/test/unit/compat/socket-pair-test.js b/test/unit/compat/socket-pair-test.js index 59bcb81b..0e314418 100644 --- a/test/unit/compat/socket-pair-test.js +++ b/test/unit/compat/socket-pair-test.js @@ -4,8 +4,8 @@ if (process.env.INCLUDE_COMPAT_TESTS) { const {testProtos, uniqAddress} = require("../helpers") for (const proto of testProtos("tcp")) { - describe(`compat socket with ${proto} pair`, function() { - it("should support pair-pair", function(done) { + describe(`compat socket with ${proto} pair`, function () { + it("should support pair-pair", function (done) { const pairA = zmq.socket("pair") const pairB = zmq.socket("pair") @@ -16,7 +16,7 @@ if (process.env.INCLUDE_COMPAT_TESTS) { pairB.monitor() pairA.on("bindError", console.log) pairB.on("bindError", console.log) - pairA.on("message", function(msg) { + pairA.on("message", function (msg) { assert.instanceOf(msg, Buffer) switch (n++) { @@ -35,13 +35,15 @@ if (process.env.INCLUDE_COMPAT_TESTS) { } }) - pairB.on("message", function(msg) { + pairB.on("message", function (msg) { assert.instanceOf(msg, Buffer) assert.equal(msg.toString(), "barnacle") }) pairA.bind(address, async err => { - if (err) throw err + if (err) { + throw err + } pairB.connect(address) pairA.send("barnacle") diff --git a/test/unit/compat/socket-pub-sub-test.js b/test/unit/compat/socket-pub-sub-test.js index da181b76..60467ba1 100644 --- a/test/unit/compat/socket-pub-sub-test.js +++ b/test/unit/compat/socket-pub-sub-test.js @@ -4,20 +4,21 @@ if (process.env.INCLUDE_COMPAT_TESTS) { const {testProtos, uniqAddress} = require("../helpers") for (const proto of testProtos("tcp", "inproc")) { - describe(`compat socket with ${proto} pub-sub`, function() { - let pub, sub + describe(`compat socket with ${proto} pub-sub`, function () { + let pub + let sub - beforeEach(function() { + beforeEach(function () { pub = zmq.socket("pub") sub = zmq.socket("sub") }) - it("should support pub-sub", function(done) { + it("should support pub-sub", function (done) { const address = uniqAddress(proto) let n = 0 sub.subscribe("") - sub.on("message", function(msg) { + sub.on("message", function (msg) { assert.instanceOf(msg, Buffer) switch (n++) { case 0: @@ -36,7 +37,9 @@ if (process.env.INCLUDE_COMPAT_TESTS) { }) sub.bind(address, err => { - if (err) throw err + if (err) { + throw err + } pub.connect(address) // The connect is asynchronous, and messages published to a non- @@ -56,14 +59,14 @@ if (process.env.INCLUDE_COMPAT_TESTS) { }) }) - it("should support pub-sub filter", function(done) { + it("should support pub-sub filter", function (done) { const address = uniqAddress(proto) let n = 0 sub.subscribe("js") sub.subscribe("luna") - sub.on("message", function(msg) { + sub.on("message", function (msg) { assert.instanceOf(msg, Buffer) switch (n++) { case 0: @@ -79,7 +82,9 @@ if (process.env.INCLUDE_COMPAT_TESTS) { }) sub.bind(address, err => { - if (err) throw err + if (err) { + throw err + } pub.connect(address) // See comments on pub-sub test. @@ -93,28 +98,31 @@ if (process.env.INCLUDE_COMPAT_TESTS) { }) }) - describe("with errors", function() { - before(function() { - this.uncaughtExceptionListeners = process.listeners("uncaughtException") + describe("with errors", function () { + before(function () { + this.uncaughtExceptionListeners = + process.listeners("uncaughtException") process.removeAllListeners("uncaughtException") }) - after(function() { + after(function () { process.removeAllListeners("uncaughtException") for (const listener of this.uncaughtExceptionListeners) { process.on("uncaughtException", listener) } }) - it("should continue to deliver messages in message handler", function(done) { + it("should continue to deliver messages in message handler", function (done) { let error - process.once("uncaughtException", err => {error = err}) + process.once("uncaughtException", err => { + error = err + }) const address = uniqAddress(proto) let n = 0 sub.subscribe("") - sub.on("message", function(msg) { + sub.on("message", function (msg) { assert.instanceOf(msg, Buffer) switch (n++) { case 0: @@ -132,7 +140,9 @@ if (process.env.INCLUDE_COMPAT_TESTS) { }) sub.bind(address, err => { - if (err) throw err + if (err) { + throw err + } pub.connect(address) setTimeout(() => { diff --git a/test/unit/compat/socket-push-pull-test.js b/test/unit/compat/socket-push-pull-test.js index 263a553b..c589bf8d 100644 --- a/test/unit/compat/socket-push-pull-test.js +++ b/test/unit/compat/socket-push-pull-test.js @@ -4,15 +4,15 @@ if (process.env.INCLUDE_COMPAT_TESTS) { const {testProtos, uniqAddress} = require("../helpers") for (const proto of testProtos("tcp", "inproc")) { - describe(`compat socket with ${proto} push-pull`, function() { - it("should support push-pull", function(done) { + describe(`compat socket with ${proto} push-pull`, function () { + it("should support push-pull", function (done) { const push = zmq.socket("push") const pull = zmq.socket("pull") const address = uniqAddress(proto) let n = 0 - pull.on("message", function(msg) { + pull.on("message", function (msg) { assert.instanceOf(msg, Buffer) switch (n++) { case 0: @@ -31,7 +31,9 @@ if (process.env.INCLUDE_COMPAT_TESTS) { }) pull.bind(address, err => { - if (err) throw err + if (err) { + throw err + } push.connect(address) push.send("foo") @@ -40,8 +42,7 @@ if (process.env.INCLUDE_COMPAT_TESTS) { }) }) - - it("should not emit messages after pause", function(done) { + it("should not emit messages after pause", function (done) { const push = zmq.socket("push") const pull = zmq.socket("pull") @@ -49,7 +50,7 @@ if (process.env.INCLUDE_COMPAT_TESTS) { let n = 0 - pull.on("message", function(msg) { + pull.on("message", function (msg) { if (n++ === 0) { assert.equal(msg.toString(), "foo") } else { @@ -58,7 +59,9 @@ if (process.env.INCLUDE_COMPAT_TESTS) { }) pull.bind(address, err => { - if (err) throw err + if (err) { + throw err + } push.connect(address) push.send("foo") @@ -74,7 +77,7 @@ if (process.env.INCLUDE_COMPAT_TESTS) { }, 15) }) - it("should be able to read messages after pause", function(done) { + it("should be able to read messages after pause", function (done) { const push = zmq.socket("push") const pull = zmq.socket("pull") @@ -82,11 +85,13 @@ if (process.env.INCLUDE_COMPAT_TESTS) { const messages = ["bar", "foo"] pull.bind(address, err => { - if (err) throw err + if (err) { + throw err + } push.connect(address) pull.pause() - messages.forEach(function(message) { + messages.forEach(function (message) { push.send(message) }) @@ -103,8 +108,7 @@ if (process.env.INCLUDE_COMPAT_TESTS) { }, 15) }) - - it("should emit messages after resume", function(done) { + it("should emit messages after resume", function (done) { const push = zmq.socket("push") const pull = zmq.socket("pull") @@ -137,7 +141,9 @@ if (process.env.INCLUDE_COMPAT_TESTS) { pull.on("message", checkNoMessages) pull.bind(address, err => { - if (err) throw err + if (err) { + throw err + } push.connect(address) pull.pause() diff --git a/test/unit/compat/socket-req-rep-test.js b/test/unit/compat/socket-req-rep-test.js index 3702f3c1..d83168e0 100644 --- a/test/unit/compat/socket-req-rep-test.js +++ b/test/unit/compat/socket-req-rep-test.js @@ -4,24 +4,26 @@ if (process.env.INCLUDE_COMPAT_TESTS) { const {testProtos, uniqAddress} = require("../helpers") for (const proto of testProtos("tcp", "inproc")) { - describe(`compat socket with ${proto} req-rep`, function() { - it("should support req-rep", function(done) { + describe(`compat socket with ${proto} req-rep`, function () { + it("should support req-rep", function (done) { const rep = zmq.socket("rep") const req = zmq.socket("req") const address = uniqAddress(proto) - rep.on("message", function(msg) { + rep.on("message", function (msg) { assert.instanceOf(msg, Buffer) assert.equal(msg.toString(), "hello") rep.send("world") }) rep.bind(address, err => { - if (err) throw err + if (err) { + throw err + } req.connect(address) req.send("hello") - req.on("message", function(msg) { + req.on("message", function (msg) { assert.instanceOf(msg, Buffer) assert.equal(msg.toString(), "world") rep.close() @@ -31,59 +33,65 @@ if (process.env.INCLUDE_COMPAT_TESTS) { }) }) - it("should support multiple", function(done) { - let n = 5 + it("should support multiple", function (done) { + const n = 5 for (let i = 0; i < n; i++) { - (function(n) { + ;(function (n) { const rep = zmq.socket("rep") const req = zmq.socket("req") const address = uniqAddress(proto) - rep.on("message", function(msg) { + rep.on("message", function (msg) { assert.instanceOf(msg, Buffer) assert.equal(msg.toString(), "hello") rep.send("world") }) rep.bind(address, err => { - if (err) throw err + if (err) { + throw err + } req.connect(address) req.send("hello") - req.on("message", function(msg) { + req.on("message", function (msg) { assert.instanceOf(msg, Buffer) assert.equal(msg.toString(), "world") req.close() rep.close() - if (!--n) done() + if (!--n) { + done() + } }) }) })(i) } }) - it("should support a burst", function(done) { + it("should support a burst", function (done) { const rep = zmq.socket("rep") const req = zmq.socket("req") const address = uniqAddress(proto) - let n = 10 + const n = 10 - rep.on("message", function(msg) { + rep.on("message", function (msg) { assert.instanceOf(msg, Buffer) assert.equal(msg.toString(), "hello") rep.send("world") }) rep.bind(address, err => { - if (err) throw err + if (err) { + throw err + } req.connect(address) let received = 0 - req.on("message", function(msg) { + req.on("message", function (msg) { assert.instanceOf(msg, Buffer) assert.equal(msg.toString(), "world") diff --git a/test/unit/compat/socket-router-test.js b/test/unit/compat/socket-router-test.js index a52863dd..8413ffb8 100644 --- a/test/unit/compat/socket-router-test.js +++ b/test/unit/compat/socket-router-test.js @@ -4,13 +4,14 @@ if (process.env.INCLUDE_COMPAT_TESTS) { const {testProtos, uniqAddress} = require("../helpers") for (const proto of testProtos("tcp", "inproc")) { - describe(`compat socket with ${proto} router`, function() { - it("should handle unroutable messages", function(done) { + describe(`compat socket with ${proto} router`, function () { + it("should handle unroutable messages", function (done) { let complete = 0 const envelope = "12384982398293" - const errMsgs = require("os").platform() === "win32" ? ["Unknown error"] : [] + const errMsgs = + require("os").platform() === "win32" ? ["Unknown error"] : [] errMsgs.push("No route to host") errMsgs.push("Resource temporarily unavailable") errMsgs.push("Host unreachable") @@ -27,7 +28,9 @@ if (process.env.INCLUDE_COMPAT_TESTS) { sockA.on("error", err => { sockA.close() assertRouteError(err) - if (++complete === 2) done() + if (++complete === 2) { + done() + } }) sockA.setsockopt(zmq.ZMQ_ROUTER_MANDATORY, 1) @@ -63,10 +66,12 @@ if (process.env.INCLUDE_COMPAT_TESTS) { sockC.send([envelope, ""]) sockC.close() - if (++complete === 2) done() + if (++complete === 2) { + done() + } }) - it("should handle router-dealer message bursts", function(done) { + it("should handle router-dealer message bursts", function (done) { this.slow(150) // tests https://github.com/JustinTulloss/zeromq.node/issues/523 // based on https://gist.github.com/messa/862638ab44ca65f712fe4d6ef79aeb67 @@ -80,13 +85,15 @@ if (process.env.INCLUDE_COMPAT_TESTS) { let counted = 0 router.bind(address, err => { - if (err) throw err + if (err) { + throw err + } - router.on("message", function(...msg) { + router.on("message", function (...msg) { router.send(msg) }) - dealer.on("message", function(part1, part2, part3, part4, part5) { + dealer.on("message", function (part1, part2, part3, part4, part5) { assert.equal(part1.toString(), "Hello") assert.equal(part2.toString(), "world") assert.equal(part3.toString(), "part3") diff --git a/test/unit/compat/socket-stream-test.js b/test/unit/compat/socket-stream-test.js index a67ef8f8..6dcb4ace 100644 --- a/test/unit/compat/socket-stream-test.js +++ b/test/unit/compat/socket-stream-test.js @@ -4,54 +4,65 @@ if (process.env.INCLUDE_COMPAT_TESTS) { const {testProtos, uniqAddress} = require("../helpers") const http = require("http") - describe("compat socket stream", function() { - it("should support a stream socket type", function(done) { + describe("compat socket stream", function () { + it("should support a stream socket type", function (done) { const stream = zmq.socket("stream") const address = uniqAddress("tcp") - stream.on("message", function(id, msg) { + stream.on("message", function (id, msg) { assert.instanceOf(msg, Buffer) - if (msg.length == 0) return + if (msg.length == 0) { + return + } const raw_header = String(msg).split("\r\n") const method = raw_header[0].split(" ")[0] assert.equal(method, "GET") //finding an HTTP GET method, prepare HTTP response for TCP socket - const httpProtocolString = "HTTP/1.0 200 OK\r\n" //status code - + "Content-Type: text/html\r\n" //headers - + "\r\n" - + "" //response body - + "" //make it xml, json, html or something else - + "" - + "" - + "" - + "

derpin over protocols

" - + "" - + "" + const httpProtocolString = + "HTTP/1.0 200 OK\r\n" + //status code + "Content-Type: text/html\r\n" + //headers + "\r\n" + + "" + //response body + "" + //make it xml, json, html or something else + "" + + "" + + "" + + "

derpin over protocols

" + + "" + + "" //zmq streaming prefixed by envelope"s routing identifier stream.send([id, httpProtocolString]) }) stream.bind(address, err => { - if (err) throw err + if (err) { + throw err + } //send non-peer request to zmq, like an http GET method with URI path - http.get(address.replace("tcp:", "http:") + "/aRandomRequestPath", function(httpMsg) { - assert.equal(httpMsg.socket._readableState.reading, false) - - httpMsg.on("data", function(msg) { - assert.instanceOf(msg, Buffer) - assert.equal(msg.toString(), "" - + "" - + "

derpin over protocols

" - + "" - + "") - stream.close() - done() - }) - }) + http.get( + `${address.replace("tcp:", "http:")}/aRandomRequestPath`, + function (httpMsg) { + assert.equal(httpMsg.socket._readableState.reading, false) + + httpMsg.on("data", function (msg) { + assert.instanceOf(msg, Buffer) + assert.equal( + msg.toString(), + "" + + "" + + "

derpin over protocols

" + + "" + + "", + ) + stream.close() + done() + }) + }, + ) }) }) }) diff --git a/test/unit/compat/socket-test.js b/test/unit/compat/socket-test.js index 24625b82..bf8d178f 100644 --- a/test/unit/compat/socket-test.js +++ b/test/unit/compat/socket-test.js @@ -2,34 +2,34 @@ if (process.env.INCLUDE_COMPAT_TESTS) { const zmq = require("./load") const {assert} = require("chai") - describe("compat socket", function() { + describe("compat socket", function () { let sock - beforeEach(function() { + beforeEach(function () { sock = zmq.socket("req") }) - afterEach(function() { + afterEach(function () { sock.close() }) - it("should alias socket", function() { + it("should alias socket", function () { assert.equal(zmq.createSocket, zmq.socket) }) - it("should include type and close", function() { + it("should include type and close", function () { assert.equal(sock.type, "req") assert.typeOf(sock.close, "function") }) - it("should use socketopt", function() { + it("should use socketopt", function () { assert.notEqual(sock.getsockopt(zmq.ZMQ_BACKLOG), 75) assert.equal(sock.setsockopt(zmq.ZMQ_BACKLOG, 75), sock) assert.equal(sock.getsockopt(zmq.ZMQ_BACKLOG), 75) sock.setsockopt(zmq.ZMQ_BACKLOG, 100) }) - it("should use socketopt with sugar", function() { + it("should use socketopt with sugar", function () { assert.notEqual(sock.getsockopt("backlog"), 75) assert.equal(sock.setsockopt("backlog", 75), sock) assert.equal(sock.getsockopt("backlog"), 75) @@ -40,12 +40,12 @@ if (process.env.INCLUDE_COMPAT_TESTS) { assert.equal(sock.backlog, 50) }) - it("should close", function() { + it("should close", function () { sock.close() assert.equal(sock.closed, true) }) - it("should support options", function() { + it("should support options", function () { sock.close() sock = zmq.socket("req", {backlog: 30}) assert.equal(sock.getsockopt("backlog"), 30) diff --git a/test/unit/compat/socket-unbind-test.js b/test/unit/compat/socket-unbind-test.js index 20cf6ab8..dfb72bb8 100644 --- a/test/unit/compat/socket-unbind-test.js +++ b/test/unit/compat/socket-unbind-test.js @@ -1,33 +1,40 @@ /* This test is very unreliable in practice, especially in CI. It is disabled by default. */ -if (process.env.INCLUDE_COMPAT_TESTS && process.env.INCLUDE_COMPAT_UNBIND_TEST) { +if ( + process.env.INCLUDE_COMPAT_TESTS && + process.env.INCLUDE_COMPAT_UNBIND_TEST +) { const zmq = require("./load") const semver = require("semver") const {assert} = require("chai") const {testProtos, uniqAddress} = require("../helpers") for (const proto of testProtos("tcp")) { - describe(`compat socket with ${proto} unbind`, function() { - beforeEach(function() { + describe(`compat socket with ${proto} unbind`, function () { + beforeEach(function () { /* Seems < 4.2 is affected by https://github.com/zeromq/libzmq/issues/1583 */ - if (semver.satisfies(zmq.version, "< 4.2")) this.skip() + if (semver.satisfies(zmq.version, "< 4.2")) { + this.skip() + } }) - let sockA, sockB, sockC + let sockA + let sockB + let sockC - beforeEach(function() { + beforeEach(function () { sockA = zmq.socket("dealer", {linger: 0}) sockB = zmq.socket("dealer", {linger: 0}) sockC = zmq.socket("dealer", {linger: 0}) }) - afterEach(function() { + afterEach(function () { sockA.close() sockB.close() sockC.close() }) - it("should be able to unbind", function(done) { + it("should be able to unbind", function (done) { const address1 = uniqAddress(proto) const address2 = uniqAddress(proto) @@ -35,7 +42,7 @@ if (process.env.INCLUDE_COMPAT_TESTS && process.env.INCLUDE_COMPAT_UNBIND_TEST) sockA.bindSync(address1) sockA.bindSync(address2) - sockA.on("unbind", async function(addr) { + sockA.on("unbind", async function (addr) { if (addr === address1) { sockB.send("Error from sockB.") sockC.send("Messsage from sockC.") @@ -43,7 +50,7 @@ if (process.env.INCLUDE_COMPAT_TESTS && process.env.INCLUDE_COMPAT_UNBIND_TEST) } }) - sockA.on("message", async function(msg) { + sockA.on("message", async function (msg) { msgCount++ if (msg.toString() === "Hello from sockB.") { sockA.unbindSync(address1) diff --git a/test/unit/compat/socket-xpub-xsub-test.js b/test/unit/compat/socket-xpub-xsub-test.js index 76d7afcd..f101a94c 100644 --- a/test/unit/compat/socket-xpub-xsub-test.js +++ b/test/unit/compat/socket-xpub-xsub-test.js @@ -4,8 +4,8 @@ if (process.env.INCLUDE_COMPAT_TESTS) { const {testProtos, uniqAddress} = require("../helpers") for (const proto of testProtos("tcp", "inproc")) { - describe(`compat socket with ${proto} xpub-xsub`, function() { - it("should support pub-sub tracing and filtering", function(done) { + describe(`compat socket with ${proto} xpub-xsub`, function () { + it("should support pub-sub tracing and filtering", function (done) { let n = 0 let m = 0 const pub = zmq.socket("pub") @@ -17,18 +17,22 @@ if (process.env.INCLUDE_COMPAT_TESTS) { const address2 = uniqAddress(proto) pub.bind(address1, err => { - if (err) throw err + if (err) { + throw err + } xsub.connect(address1) xpub.bind(address2, err => { - if (err) throw err + if (err) { + throw err + } sub.connect(address2) - xsub.on("message", function(msg) { + xsub.on("message", function (msg) { xpub.send(msg) // Forward message using the xpub so subscribers can receive it }) - xpub.on("message", function(msg) { + xpub.on("message", function (msg) { assert.instanceOf(msg, Buffer) const type = msg[0] === 0 ? "unsubscribe" : "subscribe" @@ -62,7 +66,7 @@ if (process.env.INCLUDE_COMPAT_TESTS) { xsub.send(msg) // Forward message using the xsub so the publisher knows it has a subscriber }) - sub.on("message", function(msg) { + sub.on("message", function (msg) { assert.instanceOf(msg, Buffer) switch (n++) { case 0: diff --git a/test/unit/compat/socket-zap-test.js b/test/unit/compat/socket-zap-test.js index 2c6c4551..11973829 100644 --- a/test/unit/compat/socket-zap-test.js +++ b/test/unit/compat/socket-zap-test.js @@ -7,21 +7,25 @@ if (process.env.INCLUDE_COMPAT_TESTS) { function start() { const zap = zmq.socket("router") - zap.on("message", function() { + zap.on("message", function () { const data = Array.prototype.slice.call(arguments) - if (!data || !data.length) throw new Error("Invalid ZAP request") + if (!data || !data.length) { + throw new Error("Invalid ZAP request") + } const returnPath = [] let frame = data.shift() - while (frame && (frame.length != 0)) { + while (frame && frame.length != 0) { returnPath.push(frame) frame = data.shift() } returnPath.push(frame) - if (data.length < 6) throw new Error("Invalid ZAP request") + if (data.length < 6) { + throw new Error("Invalid ZAP request") + } const zapReq = { version: data.shift(), @@ -30,63 +34,85 @@ if (process.env.INCLUDE_COMPAT_TESTS) { address: Buffer.from(data.shift()).toString("utf8"), identity: Buffer.from(data.shift()).toString("utf8"), mechanism: Buffer.from(data.shift()).toString("utf8"), - credentials: data.slice(0) + credentials: data.slice(0), } - zap.send(returnPath.concat([ - zapReq.version, - zapReq.requestId, - Buffer.from("200", "utf8"), - Buffer.from("OK", "utf8"), - Buffer.alloc(0), - Buffer.alloc(0) - ])) + zap.send( + returnPath.concat([ + zapReq.version, + zapReq.requestId, + Buffer.from("200", "utf8"), + Buffer.from("OK", "utf8"), + Buffer.alloc(0), + Buffer.alloc(0), + ]), + ) }) return new Promise((resolve, reject) => { zap.bind("inproc://zeromq.zap.01", err => { - if (err) return reject(err) + if (err) { + return reject(err) + } resolve(zap) }) }) } for (const proto of testProtos("tcp", "inproc")) { - describe(`compat socket with ${proto} zap`, function() { - let zapSocket, rep, req + describe(`compat socket with ${proto} zap`, function () { + let zapSocket + let rep + let req - before(async function() { + before(async function () { zapSocket = await start() }) - after(async function() { + after(async function () { zapSocket.close() await new Promise(resolve => setTimeout(resolve, 15)) }) - beforeEach(function() { + beforeEach(function () { /* Since ZAP uses inproc transport, it does not work reliably. */ - if (semver.satisfies(zmq.version, "< 4.2")) this.skip() + if (semver.satisfies(zmq.version, "< 4.2")) { + this.skip() + } rep = zmq.socket("rep") req = zmq.socket("req") }) - afterEach(function() { + afterEach(function () { req.close() rep.close() }) - it("should support curve", function(done) { - if (!zmq.capability.curve) this.skip() + it("should support curve", function (done) { + if (!zmq.capability.curve) { + this.skip() + } const address = uniqAddress(proto) - const serverPublicKey = Buffer.from("7f188e5244b02bf497b86de417515cf4d4053ce4eb977aee91a55354655ec33a", "hex") - const serverPrivateKey = Buffer.from("1f5d3873472f95e11f4723d858aaf0919ab1fb402cb3097742c606e61dd0d7d8", "hex") - const clientPublicKey = Buffer.from("ea1cc8bd7c8af65497d43fc21dbec6560c5e7b61bcfdcbd2b0dfacf0b4c38d45", "hex") - const clientPrivateKey = Buffer.from("83f99afacfab052406e5f421612568034e85f4c8182a1c92671e83dca669d31d", "hex") - - rep.on("message", function(msg) { + const serverPublicKey = Buffer.from( + "7f188e5244b02bf497b86de417515cf4d4053ce4eb977aee91a55354655ec33a", + "hex", + ) + const serverPrivateKey = Buffer.from( + "1f5d3873472f95e11f4723d858aaf0919ab1fb402cb3097742c606e61dd0d7d8", + "hex", + ) + const clientPublicKey = Buffer.from( + "ea1cc8bd7c8af65497d43fc21dbec6560c5e7b61bcfdcbd2b0dfacf0b4c38d45", + "hex", + ) + const clientPrivateKey = Buffer.from( + "83f99afacfab052406e5f421612568034e85f4c8182a1c92671e83dca669d31d", + "hex", + ) + + rep.on("message", function (msg) { assert.instanceOf(msg, Buffer) assert.equal(msg.toString(), "hello") rep.send("world") @@ -98,7 +124,9 @@ if (process.env.INCLUDE_COMPAT_TESTS) { assert.equal(rep.mechanism, 2) rep.bind(address, err => { - if (err) throw err + if (err) { + throw err + } req.curve_serverkey = serverPublicKey req.curve_publickey = clientPublicKey req.curve_secretkey = clientPrivateKey @@ -106,19 +134,18 @@ if (process.env.INCLUDE_COMPAT_TESTS) { req.connect(address) req.send("hello") - req.on("message", function(msg) { + req.on("message", function (msg) { assert.instanceOf(msg, Buffer) assert.equal(msg.toString(), "world") done() }) }) - }) - it("should support null", function(done) { + it("should support null", function (done) { const address = uniqAddress(proto) - rep.on("message", function(msg) { + rep.on("message", function (msg) { assert.instanceOf(msg, Buffer) assert.equal(msg.toString(), "hello") rep.send("world") @@ -128,11 +155,13 @@ if (process.env.INCLUDE_COMPAT_TESTS) { assert.equal(rep.mechanism, 0) rep.bind(address, err => { - if (err) throw err + if (err) { + throw err + } assert.equal(req.mechanism, 0) req.connect(address) req.send("hello") - req.on("message", function(msg) { + req.on("message", function (msg) { assert.instanceOf(msg, Buffer) assert.equal(msg.toString(), "world") done() @@ -140,10 +169,10 @@ if (process.env.INCLUDE_COMPAT_TESTS) { }) }) - it("should support plain", function(done) { + it("should support plain", function (done) { const address = uniqAddress(proto) - rep.on("message", function(msg) { + rep.on("message", function (msg) { assert.instanceOf(msg, Buffer) assert.equal(msg.toString(), "hello") rep.send("world") @@ -154,14 +183,16 @@ if (process.env.INCLUDE_COMPAT_TESTS) { assert.equal(rep.mechanism, 1) rep.bind(address, err => { - if (err) throw err + if (err) { + throw err + } req.plain_username = "user" req.plain_password = "pass" assert.equal(req.mechanism, 1) req.connect(address) req.send("hello") - req.on("message", function(msg) { + req.on("message", function (msg) { assert.instanceOf(msg, Buffer) assert.equal(msg.toString(), "world") done() diff --git a/test/unit/compat/zmq-proxy-push-pull-test.js b/test/unit/compat/zmq-proxy-push-pull-test.js index 12003be9..41837694 100644 --- a/test/unit/compat/zmq-proxy-push-pull-test.js +++ b/test/unit/compat/zmq-proxy-push-pull-test.js @@ -4,16 +4,16 @@ if (process.env.INCLUDE_COMPAT_TESTS) { const {testProtos, uniqAddress} = require("../helpers") for (const proto of testProtos("tcp")) { - describe(`compat proxy with ${proto} push-pull`, function() { + describe(`compat proxy with ${proto} push-pull`, function () { const sockets = [] - afterEach(function() { + afterEach(function () { while (sockets.length) { sockets.pop().close() } }) - it("should proxy push-pull connected to pull-push", function(done) { + it("should proxy push-pull connected to pull-push", function (done) { const frontendAddr = uniqAddress(proto) const backendAddr = uniqAddress(proto) @@ -24,9 +24,13 @@ if (process.env.INCLUDE_COMPAT_TESTS) { const push = zmq.socket("push") frontend.bind(frontendAddr, err => { - if (err) throw err + if (err) { + throw err + } backend.bind(backendAddr, err => { - if (err) throw err + if (err) { + throw err + } push.connect(frontendAddr) pull.connect(backendAddr) sockets.push(frontend, backend, push, pull) @@ -43,7 +47,7 @@ if (process.env.INCLUDE_COMPAT_TESTS) { }) }) - it("should proxy pull-push connected to push-pull with capture", function(done) { + it("should proxy pull-push connected to push-pull with capture", function (done) { const frontendAddr = uniqAddress(proto) const backendAddr = uniqAddress(proto) const captureAddr = uniqAddress(proto) @@ -59,30 +63,40 @@ if (process.env.INCLUDE_COMPAT_TESTS) { sockets.push(frontend, backend, push, pull, capture, capSub) frontend.bind(frontendAddr, err => { - if (err) throw err + if (err) { + throw err + } backend.bind(backendAddr, err => { - if (err) throw err + if (err) { + throw err + } capture.bind(captureAddr, err => { - if (err) throw err + if (err) { + throw err + } pull.connect(frontendAddr) push.connect(backendAddr) capSub.connect(captureAddr) let counter = 2 - pull.on("message", function(msg) { + pull.on("message", function (msg) { assert.instanceOf(msg, Buffer) assert.equal(msg.toString(), "foo") - if (--counter == 0) done() + if (--counter == 0) { + done() + } }) capSub.subscribe("") - capSub.on("message", function(msg) { + capSub.on("message", function (msg) { assert.instanceOf(msg, Buffer) assert.equal(msg.toString(), "foo") - if (--counter == 0) done() + if (--counter == 0) { + done() + } }) setTimeout(() => push.send("foo"), 15) diff --git a/test/unit/compat/zmq-proxy-router-dealer-test.js b/test/unit/compat/zmq-proxy-router-dealer-test.js index 1084501a..148412dd 100644 --- a/test/unit/compat/zmq-proxy-router-dealer-test.js +++ b/test/unit/compat/zmq-proxy-router-dealer-test.js @@ -4,16 +4,16 @@ if (process.env.INCLUDE_COMPAT_TESTS) { const {testProtos, uniqAddress} = require("../helpers") for (const proto of testProtos("tcp")) { - describe(`compat proxy with ${proto} router-dealer`, function() { + describe(`compat proxy with ${proto} router-dealer`, function () { const sockets = [] - afterEach(function() { + afterEach(function () { while (sockets.length) { sockets.pop().close() } }) - it("should proxy req-rep connected over router-dealer", function(done) { + it("should proxy req-rep connected over router-dealer", function (done) { const frontendAddr = uniqAddress(proto) const backendAddr = uniqAddress(proto) @@ -24,22 +24,26 @@ if (process.env.INCLUDE_COMPAT_TESTS) { const req = zmq.socket("req") frontend.bind(frontendAddr, err => { - if (err) throw err + if (err) { + throw err + } backend.bind(backendAddr, err => { - if (err) throw err + if (err) { + throw err + } req.connect(frontendAddr) rep.connect(backendAddr) sockets.push(frontend, backend, req, rep) - req.on("message", function(msg) { + req.on("message", function (msg) { assert.instanceOf(msg, Buffer) assert.equal(msg.toString(), "foo bar") done() }) - rep.on("message", function(msg) { - rep.send(msg + " bar") + rep.on("message", function (msg) { + rep.send(`${msg} bar`) }) setTimeout(() => req.send("foo"), 15) @@ -48,7 +52,7 @@ if (process.env.INCLUDE_COMPAT_TESTS) { }) }) - it("should proxy rep-req connections with capture", function(done) { + it("should proxy rep-req connections with capture", function (done) { const frontendAddr = uniqAddress(proto) const backendAddr = uniqAddress(proto) const captureAddr = uniqAddress(proto) @@ -63,11 +67,17 @@ if (process.env.INCLUDE_COMPAT_TESTS) { const capSub = zmq.socket("sub") frontend.bind(frontendAddr, err => { - if (err) throw err + if (err) { + throw err + } backend.bind(backendAddr, err => { - if (err) throw err + if (err) { + throw err + } capture.bind(captureAddr, err => { - if (err) throw err + if (err) { + throw err + } req.connect(frontendAddr) rep.connect(backendAddr) @@ -77,19 +87,23 @@ if (process.env.INCLUDE_COMPAT_TESTS) { let counter = 2 - req.on("message", function(msg) { - if (--counter == 0) done() + req.on("message", function (msg) { + if (--counter == 0) { + done() + } }) - rep.on("message", function(msg) { - rep.send(msg + " bar") + rep.on("message", function (msg) { + rep.send(`${msg} bar`) }) - capSub.on("message", function(msg) { + capSub.on("message", function (msg) { assert.instanceOf(msg, Buffer) assert.equal(msg.toString(), "foo bar") - if (--counter == 0) done() + if (--counter == 0) { + done() + } }) setTimeout(() => req.send("foo"), 15) diff --git a/test/unit/compat/zmq-proxy-test.js b/test/unit/compat/zmq-proxy-test.js index 7f893d71..8146a89f 100644 --- a/test/unit/compat/zmq-proxy-test.js +++ b/test/unit/compat/zmq-proxy-test.js @@ -2,8 +2,8 @@ if (process.env.INCLUDE_COMPAT_TESTS) { const zmq = require("./load") const {assert} = require("chai") - describe("compat proxy", function() { - it("should be a function off the module namespace", function() { + describe("compat proxy", function () { + it("should be a function off the module namespace", function () { assert.typeOf(zmq.proxy, "function") }) }) diff --git a/test/unit/compat/zmq-proxy-xpub-xsub-test.js b/test/unit/compat/zmq-proxy-xpub-xsub-test.js index c687f77d..c0580fca 100644 --- a/test/unit/compat/zmq-proxy-xpub-xsub-test.js +++ b/test/unit/compat/zmq-proxy-xpub-xsub-test.js @@ -4,16 +4,16 @@ if (process.env.INCLUDE_COMPAT_TESTS) { const {testProtos, uniqAddress} = require("../helpers") for (const proto of testProtos("tcp")) { - describe(`compat proxy with ${proto} xpub-xsub`, function() { + describe(`compat proxy with ${proto} xpub-xsub`, function () { const sockets = [] - afterEach(function() { + afterEach(function () { while (sockets.length) { sockets.pop().close() } }) - it("should proxy pub-sub connected to xpub-xsub", function(done) { + it("should proxy pub-sub connected to xpub-xsub", function (done) { const frontendAddr = uniqAddress(proto) const backendAddr = uniqAddress(proto) @@ -25,16 +25,20 @@ if (process.env.INCLUDE_COMPAT_TESTS) { sockets.push(frontend, backend, sub, pub) sub.subscribe("") - sub.on("message", function(msg) { + sub.on("message", function (msg) { assert.instanceOf(msg, Buffer) assert.equal(msg.toString(), "foo") done() }) frontend.bind(frontendAddr, err => { - if (err) throw err + if (err) { + throw err + } backend.bind(backendAddr, err => { - if (err) throw err + if (err) { + throw err + } sub.connect(frontendAddr) pub.connect(backendAddr) @@ -45,7 +49,7 @@ if (process.env.INCLUDE_COMPAT_TESTS) { }) }) - it("should proxy connections with capture", function(done) { + it("should proxy connections with capture", function (done) { const frontendAddr = uniqAddress(proto) const backendAddr = uniqAddress(proto) const captureAddr = uniqAddress(proto) @@ -63,27 +67,37 @@ if (process.env.INCLUDE_COMPAT_TESTS) { let counter = 2 sub.subscribe("") - sub.on("message", function(msg) { + sub.on("message", function (msg) { assert.instanceOf(msg, Buffer) assert.equal(msg.toString(), "foo") - if (--counter == 0) done() + if (--counter == 0) { + done() + } }) capSub.subscribe("") - capSub.on("message", function(msg) { + capSub.on("message", function (msg) { assert.instanceOf(msg, Buffer) assert.equal(msg.toString(), "foo") - if (--counter == 0) done() + if (--counter == 0) { + done() + } }) capture.bind(captureAddr, err => { - if (err) throw err + if (err) { + throw err + } frontend.bind(frontendAddr, err => { - if (err) throw err + if (err) { + throw err + } backend.bind(backendAddr, err => { - if (err) throw err + if (err) { + throw err + } pub.connect(backendAddr) sub.connect(frontendAddr) @@ -96,7 +110,7 @@ if (process.env.INCLUDE_COMPAT_TESTS) { }) }) - it("should throw an error if the order is wrong", function() { + it("should throw an error if the order is wrong", function () { const frontend = zmq.socket("xpub") const backend = zmq.socket("xsub") @@ -105,10 +119,13 @@ if (process.env.INCLUDE_COMPAT_TESTS) { try { zmq.proxy(backend, frontend) } catch (err) { - assert.include([ - "wrong socket order to proxy", - "This socket type order is not supported in compatibility mode", - ], err.message) + assert.include( + [ + "wrong socket order to proxy", + "This socket type order is not supported in compatibility mode", + ], + err.message, + ) } }) }) diff --git a/test/unit/context-construction-test.ts b/test/unit/context-construction-test.ts index f4c57b8b..6b8e70c0 100644 --- a/test/unit/context-construction-test.ts +++ b/test/unit/context-construction-test.ts @@ -2,12 +2,12 @@ import * as zmq from "../../src" import {assert} from "chai" -describe("context construction", function() { - afterEach(function() { +describe("context construction", function () { + afterEach(function () { global.gc?.() }) - it("should throw if called as function", function() { + it("should throw if called as function", function () { assert.throws( () => (zmq.Context as any)(), TypeError, @@ -15,7 +15,7 @@ describe("context construction", function() { ) }) - it("should throw with wrong options argument", function() { + it("should throw with wrong options argument", function () { assert.throws( () => new (zmq.Context as any)(1), TypeError, @@ -23,7 +23,7 @@ describe("context construction", function() { ) }) - it("should throw with too many arguments", function() { + it("should throw with too many arguments", function () { assert.throws( () => new (zmq.Context as any)({}, 2), TypeError, @@ -31,12 +31,12 @@ describe("context construction", function() { ) }) - it("should set option", function() { + it("should set option", function () { const context = new zmq.Context({ioThreads: 5}) assert.equal(context.ioThreads, 5) }) - it("should throw with invalid option value", function() { + it("should throw with invalid option value", function () { assert.throws( () => new (zmq.Context as any)({ioThreads: "hello"}), TypeError, @@ -44,7 +44,7 @@ describe("context construction", function() { ) }) - it("should throw with readonly option", function() { + it("should throw with readonly option", function () { assert.throws( () => new (zmq.Context as any)({maxSocketsLimit: 1}), TypeError, @@ -52,7 +52,7 @@ describe("context construction", function() { ) }) - it("should throw with unknown option", function() { + it("should throw with unknown option", function () { assert.throws( () => new (zmq.Context as any)({doesNotExist: 1}), TypeError, diff --git a/test/unit/context-options-test.ts b/test/unit/context-options-test.ts index 95b50d2a..6e344114 100644 --- a/test/unit/context-options-test.ts +++ b/test/unit/context-options-test.ts @@ -2,26 +2,26 @@ import * as zmq from "../../src" import {assert} from "chai" -describe("context options", function() { - afterEach(function() { +describe("context options", function () { + afterEach(function () { global.gc?.() }) - it("should set and get bool socket option", function() { + it("should set and get bool socket option", function () { const context = new zmq.Context() assert.equal(context.ipv6, false) context.ipv6 = true assert.equal(context.ipv6, true) }) - it("should set and get int socket option", function() { + it("should set and get int socket option", function () { const context = new zmq.Context() assert.equal(context.ioThreads, 1) context.ioThreads = 75 assert.equal(context.ioThreads, 75) }) - it("should throw for readonly option", function() { + it("should throw for readonly option", function () { const context = new zmq.Context() assert.throws( () => ((context as any).maxSocketsLimit = 1), @@ -30,7 +30,7 @@ describe("context options", function() { ) }) - it("should throw for unknown option", function() { + it("should throw for unknown option", function () { const context = new zmq.Context() assert.throws( () => ((context as any).doesNotExist = 1), diff --git a/test/unit/context-process-exit-test.ts b/test/unit/context-process-exit-test.ts index 8bdbf9bd..8eebc58f 100644 --- a/test/unit/context-process-exit-test.ts +++ b/test/unit/context-process-exit-test.ts @@ -4,9 +4,9 @@ import * as zmq from "../../src" import {assert} from "chai" import {createProcess} from "./helpers" -describe("context process exit", function() { - describe("with default context", function() { - it("should occur when sockets are closed", async function() { +describe("context process exit", function () { + describe("with default context", function () { + it("should occur when sockets are closed", async function () { this.slow(200) const {code} = await createProcess(() => { const socket1 = new zmq.Dealer() @@ -18,7 +18,7 @@ describe("context process exit", function() { assert.equal(code, 0) }) - it("should occur when sockets are not closed", async function() { + it("should occur when sockets are not closed", async function () { this.slow(200) const {code} = await createProcess(() => { const socket1 = new zmq.Dealer() @@ -28,7 +28,7 @@ describe("context process exit", function() { assert.equal(code, 0) }) - it("should not occur when sockets are open and polling", async function() { + it("should not occur when sockets are open and polling", async function () { this.slow(1000) const {code} = await createProcess(() => { const socket1 = new zmq.Dealer() @@ -39,7 +39,7 @@ describe("context process exit", function() { assert.equal(code, -1) }) - it("should produce warning when messages are queued with blocky", async function() { + it("should produce warning when messages are queued with blocky", async function () { this.slow(2000) const {stderr} = await createProcess(() => { zmq.context.blocky = true @@ -61,7 +61,7 @@ describe("context process exit", function() { } }) - it("should produce warning when messages are queued without blocky", async function() { + it("should produce warning when messages are queued without blocky", async function () { this.slow(2000) const {stderr} = await createProcess(() => { zmq.context.blocky = false @@ -76,7 +76,7 @@ describe("context process exit", function() { ) }) - it("should not produce warning when messages are queued for a short time", async function() { + it("should not produce warning when messages are queued for a short time", async function () { this.slow(1000) const {stderr} = await createProcess(() => { zmq.context.blocky = true @@ -89,8 +89,8 @@ describe("context process exit", function() { }) }) - describe("with custom context", function() { - it("should occur when sockets are closed", async function() { + describe("with custom context", function () { + it("should occur when sockets are closed", async function () { this.slow(200) const {code} = await createProcess(() => { const context = new zmq.Context() @@ -103,7 +103,7 @@ describe("context process exit", function() { assert.equal(code, 0) }) - it("should occur when sockets are closed and context is gced", async function() { + it("should occur when sockets are closed and context is gced", async function () { this.slow(200) const {code} = await createProcess(() => { function run() { @@ -121,7 +121,7 @@ describe("context process exit", function() { assert.equal(code, 0) }) - it("should occur when sockets are not closed", async function() { + it("should occur when sockets are not closed", async function () { this.slow(200) const {code} = await createProcess(() => { const context = new zmq.Context() @@ -132,7 +132,7 @@ describe("context process exit", function() { assert.equal(code, 0) }) - it("should not occur when sockets are open and polling", async function() { + it("should not occur when sockets are open and polling", async function () { this.slow(1000) const {code} = await createProcess(() => { const context = new zmq.Context() diff --git a/test/unit/context-thread-test.ts b/test/unit/context-thread-test.ts index 83f8e687..3d44a206 100644 --- a/test/unit/context-thread-test.ts +++ b/test/unit/context-thread-test.ts @@ -4,17 +4,19 @@ import * as zmq from "../../src" import {assert} from "chai" import {createWorker} from "./helpers" -describe("context in thread", function() { +describe("context in thread", function () { this.slow(2000) this.timeout(5000) - beforeEach(function() { + beforeEach(function () { /* Node.js worker support introduced in version 10.5. */ - if (semver.satisfies(process.versions.node, "< 10.5")) this.skip() + if (semver.satisfies(process.versions.node, "< 10.5")) { + this.skip() + } }) - describe("with default context", function() { - it("should be shared", async function() { + describe("with default context", function () { + it("should be shared", async function () { try { zmq.context.ioThreads = 3 diff --git a/test/unit/helpers.ts b/test/unit/helpers.ts index 73bded4f..a0088607 100644 --- a/test/unit/helpers.ts +++ b/test/unit/helpers.ts @@ -37,12 +37,18 @@ export function testProtos(...requested: Proto[]) { const set = new Set(requested) /* Do not test with ipc if unsupported. */ - if (!zmq.capability.ipc) set.delete("ipc") + if (!zmq.capability.ipc) { + set.delete("ipc") + } /* Only test inproc with version 4.2+, earlier versions are unreliable. */ - if (semver.satisfies(zmq.version, "< 4.2")) set.delete("inproc") + if (semver.satisfies(zmq.version, "< 4.2")) { + set.delete("inproc") + } - if (!set.size) console.error("Warning: test protocol set is empty") + if (!set.size) { + console.error("Warning: test protocol set is empty") + } return [...set] } @@ -144,7 +150,9 @@ export async function captureEventsUntil( for await (const event of socket.events) { events.push(event) - if (event.type === type) break + if (event.type === type) { + break + } } return events diff --git a/test/unit/proxy-construction-test.ts b/test/unit/proxy-construction-test.ts index 048abb89..0275d101 100644 --- a/test/unit/proxy-construction-test.ts +++ b/test/unit/proxy-construction-test.ts @@ -3,18 +3,20 @@ import * as zmq from "../../src" import {assert} from "chai" -describe("proxy construction", function() { - beforeEach(function() { +describe("proxy construction", function () { + beforeEach(function () { /* ZMQ < 4.0.5 has no steerable proxy support. */ - if (semver.satisfies(zmq.version, "< 4.0.5")) this.skip() + if (semver.satisfies(zmq.version, "< 4.0.5")) { + this.skip() + } }) - afterEach(function() { + afterEach(function () { global.gc?.() }) - describe("with constructor", function() { - it("should throw if called as function", function() { + describe("with constructor", function () { + it("should throw if called as function", function () { assert.throws( () => (zmq.Proxy as any)(), TypeError, @@ -22,7 +24,7 @@ describe("proxy construction", function() { ) }) - it("should throw with too few arguments", function() { + it("should throw with too few arguments", function () { assert.throws( () => new (zmq.Proxy as any)(), TypeError, @@ -30,7 +32,7 @@ describe("proxy construction", function() { ) }) - it("should throw with too many arguments", function() { + it("should throw with too many arguments", function () { assert.throws( () => new (zmq.Proxy as any)( @@ -43,7 +45,7 @@ describe("proxy construction", function() { ) }) - it("should throw with invalid socket", function() { + it("should throw with invalid socket", function () { try { new (zmq.Proxy as any)({}, {}) assert.ok(false) diff --git a/test/unit/proxy-router-dealer-test.ts b/test/unit/proxy-router-dealer-test.ts index 5b347c6f..2bd5ecc2 100644 --- a/test/unit/proxy-router-dealer-test.ts +++ b/test/unit/proxy-router-dealer-test.ts @@ -5,7 +5,7 @@ import {assert} from "chai" import {testProtos, uniqAddress} from "./helpers" for (const proto of testProtos("tcp", "ipc", "inproc")) { - describe(`proxy with ${proto} router/dealer`, function() { + describe(`proxy with ${proto} router/dealer`, function () { let proxy: zmq.Proxy let frontAddress: string @@ -14,9 +14,11 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { let req: zmq.Request let rep: zmq.Reply - beforeEach(async function() { + beforeEach(async function () { /* ZMQ < 4.0.5 has no steerable proxy support. */ - if (semver.satisfies(zmq.version, "< 4.0.5")) this.skip() + if (semver.satisfies(zmq.version, "< 4.0.5")) { + this.skip() + } proxy = new zmq.Proxy(new zmq.Router(), new zmq.Dealer()) @@ -27,7 +29,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { rep = new zmq.Reply() }) - afterEach(function() { + afterEach(function () { /* Closing proxy sockets is only necessary if run() fails. */ proxy.frontEnd.close() proxy.backEnd.close() @@ -37,8 +39,8 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { global.gc?.() }) - describe("run", function() { - it("should proxy messages", async function() { + describe("run", function () { + it("should proxy messages", async function () { /* REQ -> foo -> ROUTER <-> DEALER -> foo -> REP <- foo <- <- foo <- -> bar -> -> bar -> @@ -79,7 +81,9 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { const [res] = await req.receive() received.push(res.toString()) - if (received.length === messages.length) break + if (received.length === messages.length) { + break + } } rep.close() diff --git a/test/unit/proxy-run-test.ts b/test/unit/proxy-run-test.ts index d86d204e..08e875ff 100644 --- a/test/unit/proxy-run-test.ts +++ b/test/unit/proxy-run-test.ts @@ -5,23 +5,25 @@ import {assert} from "chai" import {testProtos, uniqAddress} from "./helpers" for (const proto of testProtos("tcp", "ipc", "inproc")) { - describe(`proxy with ${proto} run`, function() { + describe(`proxy with ${proto} run`, function () { let proxy: zmq.Proxy - beforeEach(async function() { + beforeEach(async function () { /* ZMQ < 4.0.5 has no steerable proxy support. */ - if (semver.satisfies(zmq.version, "< 4.0.5")) this.skip() + if (semver.satisfies(zmq.version, "< 4.0.5")) { + this.skip() + } proxy = new zmq.Proxy(new zmq.Router(), new zmq.Dealer()) }) - afterEach(function() { + afterEach(function () { proxy.frontEnd.close() proxy.backEnd.close() global.gc?.() }) - it("should fail if front end is not bound or connected", async function() { + it("should fail if front end is not bound or connected", async function () { await proxy.backEnd.bind(uniqAddress(proto)) try { @@ -33,7 +35,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { } }) - it("should fail if front end is not open", async function() { + it("should fail if front end is not open", async function () { await proxy.frontEnd.bind(uniqAddress(proto)) await proxy.backEnd.bind(uniqAddress(proto)) proxy.frontEnd.close() @@ -47,7 +49,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { } }) - it("should fail if back end is not bound or connected", async function() { + it("should fail if back end is not bound or connected", async function () { await proxy.frontEnd.bind(uniqAddress(proto)) try { @@ -61,7 +63,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { } }) - it("should fail if back end is not open", async function() { + it("should fail if back end is not open", async function () { await proxy.frontEnd.bind(uniqAddress(proto)) await proxy.backEnd.bind(uniqAddress(proto)) proxy.backEnd.close() diff --git a/test/unit/proxy-terminate-test.ts b/test/unit/proxy-terminate-test.ts index d62e4953..29d45485 100644 --- a/test/unit/proxy-terminate-test.ts +++ b/test/unit/proxy-terminate-test.ts @@ -5,23 +5,25 @@ import {assert} from "chai" import {testProtos, uniqAddress} from "./helpers" for (const proto of testProtos("tcp", "ipc", "inproc")) { - describe(`proxy with ${proto} terminate`, function() { + describe(`proxy with ${proto} terminate`, function () { let proxy: zmq.Proxy - beforeEach(async function() { + beforeEach(async function () { /* ZMQ < 4.0.5 has no steerable proxy support. */ - if (semver.satisfies(zmq.version, "< 4.0.5")) this.skip() + if (semver.satisfies(zmq.version, "< 4.0.5")) { + this.skip() + } proxy = new zmq.Proxy(new zmq.Router(), new zmq.Dealer()) }) - afterEach(function() { + afterEach(function () { proxy.frontEnd.close() proxy.backEnd.close() global.gc?.() }) - it("should throw if called after termination", async function() { + it("should throw if called after termination", async function () { await proxy.frontEnd.bind(uniqAddress(proto)) await proxy.backEnd.bind(uniqAddress(proto)) diff --git a/test/unit/socket-bind-unbind-test.ts b/test/unit/socket-bind-unbind-test.ts index 47e849fb..ef8cc765 100644 --- a/test/unit/socket-bind-unbind-test.ts +++ b/test/unit/socket-bind-unbind-test.ts @@ -4,25 +4,25 @@ import {assert} from "chai" import {testProtos, uniqAddress} from "./helpers" for (const proto of testProtos("tcp", "ipc", "inproc")) { - describe(`socket with ${proto} bind/unbind`, function() { + describe(`socket with ${proto} bind/unbind`, function () { let sock: zmq.Dealer - beforeEach(function() { + beforeEach(function () { sock = new zmq.Dealer() }) - afterEach(function() { + afterEach(function () { sock.close() global.gc?.() }) - describe("bind", function() { - it("should resolve", async function() { + describe("bind", function () { + it("should resolve", async function () { await sock.bind(uniqAddress(proto)) assert.ok(true) }) - it("should throw error if not bound to endpoint", async function() { + it("should throw error if not bound to endpoint", async function () { const address = uniqAddress(proto) try { await sock.unbind(address) @@ -36,7 +36,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { } }) - it("should throw error for invalid uri", async function() { + it("should throw error for invalid uri", async function () { try { await sock.bind("foo-bar") assert.ok(false) @@ -49,7 +49,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { } }) - it("should throw error for invalid protocol", async function() { + it("should throw error for invalid protocol", async function () { try { await sock.bind("foo://bar") assert.ok(false) @@ -62,7 +62,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { } }) - it("should fail during other bind", async function() { + it("should fail during other bind", async function () { let promise try { promise = sock.bind(uniqAddress(proto)) @@ -81,15 +81,15 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { }) }) - describe("unbind", function() { - it("should unbind", async function() { + describe("unbind", function () { + it("should unbind", async function () { const address = uniqAddress(proto) await sock.bind(address) await sock.unbind(address) assert.ok(true) }) - it("should throw error for invalid uri", async function() { + it("should throw error for invalid uri", async function () { try { await sock.unbind("foo-bar") assert.ok(false) @@ -102,7 +102,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { } }) - it("should throw error for invalid protocol", async function() { + it("should throw error for invalid protocol", async function () { try { await sock.unbind("foo://bar") assert.ok(false) @@ -115,7 +115,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { } }) - it("should fail during other unbind", async function() { + it("should fail during other unbind", async function () { let promise const address = uniqAddress(proto) await sock.bind(address) diff --git a/test/unit/socket-close-test.ts b/test/unit/socket-close-test.ts index 39bda25c..29695035 100644 --- a/test/unit/socket-close-test.ts +++ b/test/unit/socket-close-test.ts @@ -5,26 +5,26 @@ import {assert} from "chai" import {testProtos, uniqAddress} from "./helpers" for (const proto of testProtos("tcp", "ipc", "inproc")) { - describe(`socket with ${proto} close`, function() { + describe(`socket with ${proto} close`, function () { let sock: zmq.Dealer - beforeEach(function() { + beforeEach(function () { sock = new zmq.Dealer() }) - afterEach(function() { + afterEach(function () { sock.close() global.gc?.() }) - describe("with explicit call", function() { - it("should close socket", function() { + describe("with explicit call", function () { + it("should close socket", function () { assert.equal(sock.closed, false) sock.close() assert.equal(sock.closed, true) }) - it("should close socket and cancel send", async function() { + it("should close socket and cancel send", async function () { assert.equal(sock.closed, false) const promise = sock.send(Buffer.from("foo")) sock.close() @@ -39,7 +39,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { } }) - it("should close socket and cancel receive", async function() { + it("should close socket and cancel receive", async function () { assert.equal(sock.closed, false) const promise = sock.receive() sock.close() @@ -54,7 +54,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { } }) - it("should close after successful bind", async function() { + it("should close after successful bind", async function () { const promise = sock.bind(uniqAddress(proto)) sock.close() assert.equal(sock.closed, false) @@ -62,7 +62,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { assert.equal(sock.closed, true) }) - it("should close after unsuccessful bind", async function() { + it("should close after unsuccessful bind", async function () { const address = uniqAddress(proto) await sock.bind(address) const promise = sock.bind(address) @@ -77,7 +77,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { assert.equal(sock.closed, true) }) - it("should close after successful unbind", async function() { + it("should close after successful unbind", async function () { const address = uniqAddress(proto) await sock.bind(address) const promise = sock.unbind(address) @@ -87,7 +87,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { assert.equal(sock.closed, true) }) - it("should close after unsuccessful unbind", async function() { + it("should close after unsuccessful unbind", async function () { const address = uniqAddress(proto) const promise = sock.unbind(address) sock.close() @@ -101,8 +101,10 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { assert.equal(sock.closed, true) }) - it("should release reference to context", async function() { - if (process.env.SKIP_GC_TESTS) this.skip() + it("should release reference to context", async function () { + if (process.env.SKIP_GC_TESTS) { + this.skip() + } this.slow(200) const weak = require("weak-napi") as typeof import("weak-napi") @@ -130,10 +132,14 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { }) }) - describe("in gc finalizer", function() { - it("should release reference to context", async function() { - if (process.env.SKIP_GC_TESTS) this.skip() - if (process.env.SKIP_GC_FINALIZER_TESTS) this.skip() + describe("in gc finalizer", function () { + it("should release reference to context", async function () { + if (process.env.SKIP_GC_TESTS) { + this.skip() + } + if (process.env.SKIP_GC_FINALIZER_TESTS) { + this.skip() + } this.slow(200) const weak = require("weak-napi") as typeof import("weak-napi") diff --git a/test/unit/socket-connect-disconnect-test.ts b/test/unit/socket-connect-disconnect-test.ts index 15415524..60ad1d1c 100644 --- a/test/unit/socket-connect-disconnect-test.ts +++ b/test/unit/socket-connect-disconnect-test.ts @@ -5,20 +5,20 @@ import {assert} from "chai" import {testProtos, uniqAddress} from "./helpers" for (const proto of testProtos("tcp", "ipc", "inproc")) { - describe(`socket with ${proto} connect/disconnect`, function() { + describe(`socket with ${proto} connect/disconnect`, function () { let sock: zmq.Dealer | zmq.Router - beforeEach(function() { + beforeEach(function () { sock = new zmq.Dealer() }) - afterEach(function() { + afterEach(function () { sock.close() global.gc?.() }) - describe("connect", function() { - it("should throw error for invalid uri", async function() { + describe("connect", function () { + it("should throw error for invalid uri", async function () { try { await sock.connect("foo-bar") assert.ok(false) @@ -31,7 +31,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { } }) - it("should throw error for invalid protocol", async function() { + it("should throw error for invalid protocol", async function () { try { await sock.connect("foo://bar") assert.ok(false) @@ -45,7 +45,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { }) if (semver.satisfies(zmq.version, ">= 4.1")) { - it("should allow setting routing id on router", async function() { + it("should allow setting routing id on router", async function () { sock = new zmq.Router({mandatory: true, linger: 0}) await sock.connect(uniqAddress(proto), {routingId: "remoteId"}) await sock.send(["remoteId", "hi"]) @@ -53,8 +53,8 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { } }) - describe("disconnect", function() { - it("should throw error if not connected to endpoint", async function() { + describe("disconnect", function () { + it("should throw error if not connected to endpoint", async function () { const address = uniqAddress(proto) try { await sock.disconnect(address) @@ -68,7 +68,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { } }) - it("should throw error for invalid uri", async function() { + it("should throw error for invalid uri", async function () { try { await sock.disconnect("foo-bar") assert.ok(false) @@ -81,7 +81,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { } }) - it("should throw error for invalid protocol", async function() { + it("should throw error for invalid protocol", async function () { try { await sock.disconnect("foo://bar") assert.ok(false) diff --git a/test/unit/socket-construction-test.ts b/test/unit/socket-construction-test.ts index d3c82cde..b6b75b26 100644 --- a/test/unit/socket-construction-test.ts +++ b/test/unit/socket-construction-test.ts @@ -2,13 +2,13 @@ import * as zmq from "../../src" import {assert} from "chai" -describe("socket construction", function() { - afterEach(function() { +describe("socket construction", function () { + afterEach(function () { global.gc?.() }) - describe("with constructor", function() { - it("should throw if called as function", function() { + describe("with constructor", function () { + it("should throw if called as function", function () { assert.throws( () => (zmq.Socket as any)(1, new zmq.Context()), TypeError, @@ -16,7 +16,7 @@ describe("socket construction", function() { ) }) - it("should throw with too few arguments", function() { + it("should throw with too few arguments", function () { assert.throws( () => new (zmq.Socket as any)(), TypeError, @@ -24,7 +24,7 @@ describe("socket construction", function() { ) }) - it("should throw with too many arguments", function() { + it("should throw with too many arguments", function () { assert.throws( () => new (zmq.Socket as any)(1, new zmq.Context(), 2), TypeError, @@ -32,7 +32,7 @@ describe("socket construction", function() { ) }) - it("should throw with wrong options argument", function() { + it("should throw with wrong options argument", function () { assert.throws( () => new (zmq.Socket as any)(3, 1), TypeError, @@ -40,7 +40,7 @@ describe("socket construction", function() { ) }) - it("should throw with wrong type argument", function() { + it("should throw with wrong type argument", function () { assert.throws( () => new (zmq.Socket as any)("foo", new zmq.Context()), TypeError, @@ -48,7 +48,7 @@ describe("socket construction", function() { ) }) - it("should throw with wrong type id", function() { + it("should throw with wrong type id", function () { try { new (zmq.Socket as any)(37, new zmq.Context()) assert.ok(false) @@ -60,7 +60,7 @@ describe("socket construction", function() { } }) - it("should throw with invalid context", function() { + it("should throw with invalid context", function () { try { new (zmq.Socket as any)(1, {context: {}}) assert.ok(false) @@ -73,7 +73,7 @@ describe("socket construction", function() { } }) - it("should create socket with default context", function() { + it("should create socket with default context", function () { class MySocket extends zmq.Socket { constructor() { super(1) @@ -85,7 +85,7 @@ describe("socket construction", function() { assert.equal(sock1.context, sock2.context) }) - it("should create socket with given context", function() { + it("should create socket with given context", function () { class MySocket extends zmq.Socket { constructor(opts: zmq.SocketOptions) { super(1, opts) @@ -98,8 +98,8 @@ describe("socket construction", function() { }) }) - describe("with child constructor", function() { - it("should throw if called as function", function() { + describe("with child constructor", function () { + it("should throw if called as function", function () { assert.throws( () => (zmq.Dealer as any)(), TypeError, @@ -107,25 +107,25 @@ describe("socket construction", function() { ) }) - it("should create socket with default context", function() { + it("should create socket with default context", function () { const sock = new zmq.Dealer() assert.instanceOf(sock, zmq.Dealer) assert.equal(sock.context, zmq.context) }) - it("should create socket with given context", function() { + it("should create socket with given context", function () { const ctxt = new zmq.Context() const sock = new zmq.Dealer({context: ctxt}) assert.instanceOf(sock, zmq.Socket) assert.equal(sock.context, ctxt) }) - it("should set option", function() { + it("should set option", function () { const sock = new zmq.Dealer({recoveryInterval: 5}) assert.equal(sock.recoveryInterval, 5) }) - it("should throw with invalid option value", function() { + it("should throw with invalid option value", function () { assert.throws( () => new (zmq.Dealer as any)({recoveryInterval: "hello"}), TypeError, @@ -133,7 +133,7 @@ describe("socket construction", function() { ) }) - it("should throw with readonly option", function() { + it("should throw with readonly option", function () { assert.throws( () => new (zmq.Dealer as any)({securityMechanism: 1}), TypeError, @@ -141,7 +141,7 @@ describe("socket construction", function() { ) }) - it("should throw with unknown option", function() { + it("should throw with unknown option", function () { assert.throws( () => new (zmq.Dealer as any)({doesNotExist: 1}), TypeError, @@ -149,7 +149,7 @@ describe("socket construction", function() { ) }) - it("should throw with invalid type", function() { + it("should throw with invalid type", function () { assert.throws( () => new (zmq.Socket as any)(4591), Error, @@ -158,7 +158,7 @@ describe("socket construction", function() { }) if (!zmq.capability.draft) { - it("should throw with draft type", function() { + it("should throw with draft type", function () { assert.throws( () => new (zmq.Socket as any)(14), Error, @@ -167,7 +167,7 @@ describe("socket construction", function() { }) } - it("should throw error on file descriptor limit", async function() { + it("should throw error on file descriptor limit", async function () { const context = new zmq.Context({maxSockets: 10}) const sockets = [] const n = 10 diff --git a/test/unit/socket-curve-send-receive-test.ts b/test/unit/socket-curve-send-receive-test.ts index d8fb1416..c2681679 100644 --- a/test/unit/socket-curve-send-receive-test.ts +++ b/test/unit/socket-curve-send-receive-test.ts @@ -4,12 +4,14 @@ import {assert} from "chai" import {testProtos, uniqAddress} from "./helpers" for (const proto of testProtos("tcp", "ipc", "inproc")) { - describe(`socket with ${proto} curve send/receive`, function() { + describe(`socket with ${proto} curve send/receive`, function () { let sockA: zmq.Pair let sockB: zmq.Pair - beforeEach(function() { - if (!zmq.capability.curve) this.skip() + beforeEach(function () { + if (!zmq.capability.curve) { + this.skip() + } const serverKeypair = zmq.curveKeyPair() const clientKeypair = zmq.curveKeyPair() @@ -29,22 +31,24 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { }) }) - afterEach(function() { + afterEach(function () { sockA.close() sockB.close() global.gc?.() }) - describe("when connected", function() { - beforeEach(async function() { - if (!zmq.capability.curve) this.skip() + describe("when connected", function () { + beforeEach(async function () { + if (!zmq.capability.curve) { + this.skip() + } const address = uniqAddress(proto) await sockB.bind(address) await sockA.connect(address) }) - it("should deliver single string message", async function() { + it("should deliver single string message", async function () { const sent = "foo" await sockA.send(sent) diff --git a/test/unit/socket-draft-dgram-test.ts b/test/unit/socket-draft-dgram-test.ts index 55523e12..02b10312 100644 --- a/test/unit/socket-draft-dgram-test.ts +++ b/test/unit/socket-draft-dgram-test.ts @@ -7,20 +7,20 @@ import {testProtos, uniqAddress} from "./helpers" if (zmq.capability.draft) { for (const proto of testProtos("udp")) { - describe(`draft socket with ${proto} dgram`, function() { + describe(`draft socket with ${proto} dgram`, function () { let dgram: draft.Datagram - beforeEach(function() { + beforeEach(function () { dgram = new draft.Datagram() }) - afterEach(function() { + afterEach(function () { dgram.close() global.gc?.() }) - describe("send/receive", function() { - it("should deliver messages", async function() { + describe("send/receive", function () { + it("should deliver messages", async function () { const messages = ["foo", "bar", "baz", "qux"] const address = uniqAddress(proto) const port = parseInt(address.split(":").pop()!, 10) diff --git a/test/unit/socket-draft-radio-dish-test.ts b/test/unit/socket-draft-radio-dish-test.ts index 120aa253..b33f9d15 100644 --- a/test/unit/socket-draft-radio-dish-test.ts +++ b/test/unit/socket-draft-radio-dish-test.ts @@ -6,24 +6,24 @@ import {testProtos, uniqAddress} from "./helpers" if (zmq.capability.draft) { for (const proto of testProtos("tcp", "ipc", "inproc", "udp")) { - describe(`draft socket with ${proto} radio/dish`, function() { + describe(`draft socket with ${proto} radio/dish`, function () { let radio: draft.Radio let dish: draft.Dish - beforeEach(function() { + beforeEach(function () { radio = new draft.Radio() dish = new draft.Dish() }) - afterEach(function() { + afterEach(function () { global.gc?.() radio.close() dish.close() global.gc?.() }) - describe("send/receive", function() { - it("should deliver messages", async function() { + describe("send/receive", function () { + it("should deliver messages", async function () { /* RADIO -> foo -> DISH -> bar -> joined all -> baz -> @@ -35,21 +35,8 @@ if (zmq.capability.draft) { /* Max 15 non-null bytes. */ const uuid = Buffer.from([ - 0xf6, - 0x46, - 0x1f, - 0x03, - 0xd2, - 0x0d, - 0xc8, - 0x66, - 0xe5, - 0x5f, - 0xf5, - 0xa1, - 0x65, - 0x62, - 0xb2, + 0xf6, 0x46, 0x1f, 0x03, 0xd2, 0x0d, 0xc8, 0x66, 0xe5, 0x5f, 0xf5, + 0xa1, 0x65, 0x62, 0xb2, ]) const received: string[] = [] @@ -73,7 +60,9 @@ if (zmq.capability.draft) { assert.instanceOf(group, Buffer) assert.deepEqual(group, uuid) received.push(msg.toString()) - if (received.length === messages.length) break + if (received.length === messages.length) { + break + } } } @@ -82,8 +71,8 @@ if (zmq.capability.draft) { }) }) - describe("join/leave", function() { - it("should filter messages", async function() { + describe("join/leave", function () { + it("should filter messages", async function () { /* RADIO -> foo -X DISH -> bar -> joined "ba" -> baz -> @@ -114,7 +103,9 @@ if (zmq.capability.draft) { assert.instanceOf(msg, Buffer) assert.deepEqual(group, msg.slice(0, 2)) received.push(msg.toString()) - if (received.length === 2) break + if (received.length === 2) { + break + } } } diff --git a/test/unit/socket-draft-scatter-gather-test.ts b/test/unit/socket-draft-scatter-gather-test.ts index 842a9ed7..dcfaa369 100644 --- a/test/unit/socket-draft-scatter-gather-test.ts +++ b/test/unit/socket-draft-scatter-gather-test.ts @@ -6,23 +6,23 @@ import {testProtos, uniqAddress} from "./helpers" if (zmq.capability.draft) { for (const proto of testProtos("tcp", "ipc", "inproc")) { - describe(`socket with ${proto} scatter/gather`, function() { + describe(`socket with ${proto} scatter/gather`, function () { let scatter: draft.Scatter let gather: draft.Gather - beforeEach(function() { + beforeEach(function () { scatter = new draft.Scatter() gather = new draft.Gather() }) - afterEach(function() { + afterEach(function () { scatter.close() gather.close() global.gc?.() }) - describe("send/receive", function() { - it("should deliver messages", async function() { + describe("send/receive", function () { + it("should deliver messages", async function () { /* SCATTER -> foo -> GATHER -> bar -> -> baz -> @@ -43,14 +43,16 @@ if (zmq.capability.draft) { for await (const [msg] of gather) { assert.instanceOf(msg, Buffer) received.push(msg.toString()) - if (received.length === messages.length) break + if (received.length === messages.length) { + break + } } assert.deepEqual(received, messages) }) if (proto !== "inproc") { - it("should deliver messages with immediate", async function() { + it("should deliver messages with immediate", async function () { const address = uniqAddress(proto) const messages = ["foo", "bar", "baz", "qux"] const received: string[] = [] @@ -70,7 +72,9 @@ if (zmq.capability.draft) { for await (const [msg] of gather) { assert.instanceOf(msg, Buffer) received.push(msg.toString()) - if (received.length === messages.length) break + if (received.length === messages.length) { + break + } } assert.deepEqual(received, messages) diff --git a/test/unit/socket-draft-server-client-test.ts b/test/unit/socket-draft-server-client-test.ts index bb00348c..52809575 100644 --- a/test/unit/socket-draft-server-client-test.ts +++ b/test/unit/socket-draft-server-client-test.ts @@ -6,26 +6,26 @@ import {testProtos, uniqAddress} from "./helpers" if (zmq.capability.draft) { for (const proto of testProtos("tcp", "ipc", "inproc")) { - describe(`draft socket with ${proto} server/client`, function() { + describe(`draft socket with ${proto} server/client`, function () { let server: draft.Server let clientA: draft.Client let clientB: draft.Client - beforeEach(function() { + beforeEach(function () { server = new draft.Server() clientA = new draft.Client() clientB = new draft.Client() }) - afterEach(function() { + afterEach(function () { server.close() clientA.close() clientB.close() global.gc?.() }) - describe("send/receive", function() { - it("should deliver messages", async function() { + describe("send/receive", function () { + it("should deliver messages", async function () { const address = uniqAddress(proto) const messages = ["foo", "bar", "baz", "qux"] const receivedA: string[] = [] @@ -50,12 +50,16 @@ if (zmq.capability.draft) { for await (const msg of clientA) { receivedA.push(msg.toString()) - if (receivedA.length === messages.length) break + if (receivedA.length === messages.length) { + break + } } for await (const msg of clientB) { receivedB.push(msg.toString()) - if (receivedB.length === messages.length) break + if (receivedB.length === messages.length) { + break + } } server.close() @@ -66,7 +70,7 @@ if (zmq.capability.draft) { assert.deepEqual(receivedB, messages) }) - it("should fail with unroutable message", async function() { + it("should fail with unroutable message", async function () { try { await server.send("foo", {routingId: 12345}) assert.ok(false) diff --git a/test/unit/socket-events-test.ts b/test/unit/socket-events-test.ts index 8d904950..422a4c63 100644 --- a/test/unit/socket-events-test.ts +++ b/test/unit/socket-events-test.ts @@ -9,23 +9,23 @@ import { } from "./helpers" for (const proto of testProtos("tcp", "ipc", "inproc")) { - describe(`socket with ${proto} events`, function() { + describe(`socket with ${proto} events`, function () { let sockA: zmq.Dealer let sockB: zmq.Dealer - beforeEach(function() { + beforeEach(function () { sockA = new zmq.Dealer() sockB = new zmq.Dealer() }) - afterEach(function() { + afterEach(function () { sockA.close() sockB.close() global.gc?.() }) - describe("when not connected", function() { - it("should receive events", async function() { + describe("when not connected", function () { + it("should receive events", async function () { const done = captureEventsUntil(sockA, "end") sockA.close() @@ -34,13 +34,13 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { }) }) - describe("when connected", function() { - it("should return same object", function() { + describe("when connected", function () { + it("should return same object", function () { assert.equal(sockA.events, sockA.events) }) if (proto !== "inproc") { - it("should receive bind events", async function() { + it("should receive bind events", async function () { const address = uniqAddress(proto) const [event] = await Promise.all([ @@ -52,7 +52,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { assert.deepEqual(event, {type: "bind", address}) }) - it("should receive connect events", async function() { + it("should receive connect events", async function () { this.slow(250) const address = uniqAddress(proto) @@ -67,7 +67,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { } if (proto === "tcp") { - it("should receive error events", async function() { + it("should receive error events", async function () { const address = uniqAddress(proto) await sockA.bind(address) @@ -78,7 +78,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { }), ]) - assert.equal("tcp://" + event.address, address) + assert.equal(`tcp://${event.address}`, address) assert.instanceOf(event.error, Error) assert.equal(event.error.message, "Address already in use") assert.equal(event.error.code, "EADDRINUSE") @@ -86,7 +86,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { }) } - it("should receive events with emitter", async function() { + it("should receive events with emitter", async function () { const address = uniqAddress(proto) const events: zmq.Event[] = [] @@ -120,7 +120,9 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { sockB.connect(address), ]) - if (proto !== "inproc") await connected + if (proto !== "inproc") { + await connected + } sockA.close() sockB.close() @@ -136,8 +138,8 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { }) }) - describe("when closed automatically", function() { - it("should not be able to receive", async function() { + describe("when closed automatically", function () { + it("should not be able to receive", async function () { const events = sockA.events sockA.close() @@ -155,7 +157,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { } }) - it("should be closed", async function() { + it("should be closed", async function () { const events = sockA.events sockA.close() await events.receive() diff --git a/test/unit/socket-options-test.ts b/test/unit/socket-options-test.ts index e86516fc..8b164adc 100644 --- a/test/unit/socket-options-test.ts +++ b/test/unit/socket-options-test.ts @@ -4,14 +4,14 @@ import * as zmq from "../../src" import {assert} from "chai" import {uniqAddress} from "./helpers" -describe("socket options", function() { +describe("socket options", function () { let warningListeners: NodeJS.WarningListener[] - beforeEach(function() { + beforeEach(function () { warningListeners = process.listeners("warning") }) - afterEach(function() { + afterEach(function () { process.removeAllListeners("warning") for (const listener of warningListeners) { process.on("warning", listener as (warning: Error) => void) @@ -20,42 +20,42 @@ describe("socket options", function() { global.gc?.() }) - it("should set and get bool socket option", function() { + it("should set and get bool socket option", function () { const sock = new zmq.Dealer() assert.equal(sock.immediate, false) sock.immediate = true assert.equal(sock.immediate, true) }) - it("should set and get int32 socket option", function() { + it("should set and get int32 socket option", function () { const sock = new zmq.Dealer() assert.equal(sock.backlog, 100) sock.backlog = 75 assert.equal(sock.backlog, 75) }) - it("should set and get int64 socket option", function() { + it("should set and get int64 socket option", function () { const sock = new zmq.Dealer() assert.equal(sock.maxMessageSize, -1) sock.maxMessageSize = 0xffffffff assert.equal(sock.maxMessageSize, 0xffffffff) }) - it("should set and get string socket option", function() { + it("should set and get string socket option", function () { const sock = new zmq.Dealer() assert.equal(sock.routingId, null) sock.routingId = "åbçdéfghïjk" assert.equal(sock.routingId, "åbçdéfghïjk") }) - it("should set and get string socket option as buffer", function() { + it("should set and get string socket option as buffer", function () { const sock = new zmq.Dealer() assert.equal(sock.routingId, null) ;(sock as any).routingId = Buffer.from("åbçdéfghïjk") assert.equal(sock.routingId, "åbçdéfghïjk") }) - it("should set and get string socket option to undefined", function() { + it("should set and get string socket option to undefined", function () { if (semver.satisfies(zmq.version, "> 4.2.3")) { /* As of ZMQ 4.2.4, zap domain can no longer be reset to null. */ const sock = new zmq.Dealer() @@ -75,28 +75,28 @@ describe("socket options", function() { } }) - it("should set and get bool socket option", function() { + it("should set and get bool socket option", function () { const sock = new zmq.Dealer() assert.equal((sock as any).getBoolOption(39), false) ;(sock as any).setBoolOption(39, true) assert.equal((sock as any).getBoolOption(39), true) }) - it("should set and get int32 socket option", function() { + it("should set and get int32 socket option", function () { const sock = new zmq.Dealer() assert.equal((sock as any).getInt32Option(19), 100) ;(sock as any).setInt32Option(19, 75) assert.equal((sock as any).getInt32Option(19), 75) }) - it("should set and get int64 socket option", function() { + it("should set and get int64 socket option", function () { const sock = new zmq.Dealer() assert.equal((sock as any).getInt64Option(22), -1) ;(sock as any).setInt64Option(22, 0xffffffffffff) assert.equal((sock as any).getInt64Option(22), 0xffffffffffff) }) - it("should set and get uint64 socket option", function() { + it("should set and get uint64 socket option", function () { process.removeAllListeners("warning") const sock = new zmq.Dealer() @@ -105,21 +105,21 @@ describe("socket options", function() { assert.equal((sock as any).getUint64Option(4), 0xffffffffffffffff) }) - it("should set and get string socket option", function() { + it("should set and get string socket option", function () { const sock = new zmq.Dealer() assert.equal((sock as any).getStringOption(5), null) ;(sock as any).setStringOption(5, "åbçdéfghïjk") assert.equal((sock as any).getStringOption(5), "åbçdéfghïjk") }) - it("should set and get string socket option as buffer", function() { + it("should set and get string socket option as buffer", function () { const sock = new zmq.Dealer() assert.equal((sock as any).getStringOption(5), null) ;(sock as any).setStringOption(5, Buffer.from("åbçdéfghïjk")) assert.equal((sock as any).getStringOption(5), "åbçdéfghïjk") }) - it("should set and get string socket option to null", function() { + it("should set and get string socket option to null", function () { if (semver.satisfies(zmq.version, "> 4.2.3")) { /* As of ZMQ 4.2.4, zap domain can no longer be reset to null. */ const sock = new zmq.Dealer() @@ -145,7 +145,7 @@ describe("socket options", function() { } }) - it("should throw for readonly option", function() { + it("should throw for readonly option", function () { const sock = new zmq.Dealer() assert.throws( () => ((sock as any).securityMechanism = 1), @@ -154,7 +154,7 @@ describe("socket options", function() { ) }) - it("should throw for unknown option", function() { + it("should throw for unknown option", function () { const sock = new zmq.Dealer() assert.throws( () => ((sock as any).doesNotExist = 1), @@ -163,30 +163,32 @@ describe("socket options", function() { ) }) - it("should get mechanism", function() { + it("should get mechanism", function () { const sock = new zmq.Dealer() assert.equal(sock.securityMechanism, null) sock.plainServer = true assert.equal(sock.securityMechanism, "plain") }) - describe("warnings", function() { - beforeEach(function() { + describe("warnings", function () { + beforeEach(function () { /* ZMQ < 4.2 fails with assertion errors with inproc. See: https://github.com/zeromq/libzmq/pull/2123/files */ - if (semver.satisfies(zmq.version, "< 4.2")) this.skip() + if (semver.satisfies(zmq.version, "< 4.2")) { + this.skip() + } warningListeners = process.listeners("warning") }) - afterEach(function() { + afterEach(function () { process.removeAllListeners("warning") for (const listener of warningListeners) { process.on("warning", listener as (warning: Error) => void) } }) - it("should be emitted for set after connect", async function() { + it("should be emitted for set after connect", async function () { const warnings: Error[] = [] process.removeAllListeners("warning") process.on("warning", warning => warnings.push(warning)) @@ -204,7 +206,7 @@ describe("socket options", function() { sock.close() }) - it("should be emitted for set during bind", async function() { + it("should be emitted for set during bind", async function () { const warnings: Error[] = [] process.removeAllListeners("warning") process.on("warning", warning => warnings.push(warning)) @@ -223,7 +225,7 @@ describe("socket options", function() { sock.close() }) - it("should be emitted for set after bind", async function() { + it("should be emitted for set after bind", async function () { const warnings: Error[] = [] process.removeAllListeners("warning") process.on("warning", warning => warnings.push(warning)) @@ -241,7 +243,7 @@ describe("socket options", function() { sock.close() }) - it("should be emitted when setting large uint64 socket option", async function() { + it("should be emitted when setting large uint64 socket option", async function () { const warnings: Error[] = [] process.removeAllListeners("warning") process.on("warning", warning => warnings.push(warning)) diff --git a/test/unit/socket-pair-test.ts b/test/unit/socket-pair-test.ts index 649d8fc1..df66fdcd 100644 --- a/test/unit/socket-pair-test.ts +++ b/test/unit/socket-pair-test.ts @@ -4,23 +4,23 @@ import {assert} from "chai" import {testProtos, uniqAddress} from "./helpers" for (const proto of testProtos("tcp", "ipc", "inproc")) { - describe(`socket with ${proto} pair/pair`, function() { + describe(`socket with ${proto} pair/pair`, function () { let sockA: zmq.Pair let sockB: zmq.Pair - beforeEach(function() { + beforeEach(function () { sockA = new zmq.Pair() sockB = new zmq.Pair() }) - afterEach(function() { + afterEach(function () { sockA.close() sockB.close() global.gc?.() }) - describe("send/receive", function() { - it("should deliver messages", async function() { + describe("send/receive", function () { + it("should deliver messages", async function () { /* PAIR -> foo -> PAIR [A] -> bar -> [B] -> baz -> responds when received @@ -51,7 +51,9 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { for await (const msg of sockA) { received.push(msg.toString()) - if (received.length === messages.length) break + if (received.length === messages.length) { + break + } } sockB.close() diff --git a/test/unit/socket-process-exit-test.ts b/test/unit/socket-process-exit-test.ts index cd758014..2d3392fb 100644 --- a/test/unit/socket-process-exit-test.ts +++ b/test/unit/socket-process-exit-test.ts @@ -3,9 +3,9 @@ import * as zmq from "../../src" import {assert} from "chai" import {createProcess} from "./helpers" -describe("socket process exit", function() { +describe("socket process exit", function () { /* Reported: https://github.com/nodejs/node-addon-api/issues/591 */ - it.skip("should occur cleanly when sending in exit hook", async function() { + it.skip("should occur cleanly when sending in exit hook", async function () { this.slow(200) const {code} = await createProcess(async () => { const sockA = new zmq.Pair() @@ -23,7 +23,7 @@ describe("socket process exit", function() { assert.equal(code, 0) }) - it("should occur cleanly when sending on unbound socket", async function() { + it("should occur cleanly when sending on unbound socket", async function () { this.slow(200) const {code} = await createProcess(async () => { const sock = new zmq.Publisher() @@ -33,7 +33,7 @@ describe("socket process exit", function() { assert.equal(code, 0) }) - it("should not occur when sending and blocked on unbound socket", async function() { + it("should not occur when sending and blocked on unbound socket", async function () { this.slow(1000) const {code} = await createProcess(async () => { const sock = new zmq.Dealer() @@ -43,7 +43,7 @@ describe("socket process exit", function() { assert.equal(code, -1) }) - it("should occur cleanly on socket close when reading events", async function() { + it("should occur cleanly on socket close when reading events", async function () { this.slow(200) const {code} = await createProcess(() => { const sock = new zmq.Dealer() @@ -62,7 +62,7 @@ describe("socket process exit", function() { assert.equal(code, 0) }) - it("should not occur while reading events", async function() { + it("should not occur while reading events", async function () { this.slow(1000) const {code} = await createProcess(async () => { const sock = new zmq.Dealer() diff --git a/test/unit/socket-pub-sub-test.ts b/test/unit/socket-pub-sub-test.ts index 3472f799..f85e1bc3 100644 --- a/test/unit/socket-pub-sub-test.ts +++ b/test/unit/socket-pub-sub-test.ts @@ -4,23 +4,23 @@ import {assert} from "chai" import {testProtos, uniqAddress} from "./helpers" for (const proto of testProtos("tcp", "ipc", "inproc")) { - describe(`socket with ${proto} pub/sub`, function() { + describe(`socket with ${proto} pub/sub`, function () { let pub: zmq.Publisher let sub: zmq.Subscriber - beforeEach(function() { + beforeEach(function () { pub = new zmq.Publisher() sub = new zmq.Subscriber() }) - afterEach(function() { + afterEach(function () { pub.close() sub.close() global.gc?.() }) - describe("send/receive", function() { - it("should deliver messages", async function() { + describe("send/receive", function () { + it("should deliver messages", async function () { /* PUB -> foo -> SUB -> bar -> subscribed to all -> baz -> @@ -49,7 +49,9 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { for await (const [msg] of sub) { assert.instanceOf(msg, Buffer) received.push(msg.toString()) - if (received.length === messages.length) break + if (received.length === messages.length) { + break + } } } @@ -58,8 +60,8 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { }) }) - describe("subscribe/unsubscribe", function() { - it("should filter messages", async function() { + describe("subscribe/unsubscribe", function () { + it("should filter messages", async function () { /* PUB -> foo -X SUB -> bar -> subscribed to "ba" -> baz -> @@ -88,7 +90,9 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { for await (const [msg] of sub) { assert.instanceOf(msg, Buffer) received.push(msg.toString()) - if (received.length === 2) break + if (received.length === 2) { + break + } } } diff --git a/test/unit/socket-push-pull-test.ts b/test/unit/socket-push-pull-test.ts index c04f4edd..c0e5c95a 100644 --- a/test/unit/socket-push-pull-test.ts +++ b/test/unit/socket-push-pull-test.ts @@ -4,23 +4,23 @@ import {assert} from "chai" import {testProtos, uniqAddress} from "./helpers" for (const proto of testProtos("tcp", "ipc", "inproc")) { - describe(`socket with ${proto} push/pull`, function() { + describe(`socket with ${proto} push/pull`, function () { let push: zmq.Push let pull: zmq.Pull - beforeEach(function() { + beforeEach(function () { push = new zmq.Push() pull = new zmq.Pull() }) - afterEach(function() { + afterEach(function () { push.close() pull.close() global.gc?.() }) - describe("send/receive", function() { - it("should deliver messages", async function() { + describe("send/receive", function () { + it("should deliver messages", async function () { /* PUSH -> foo -> PULL -> bar -> -> baz -> @@ -41,14 +41,16 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { for await (const [msg] of pull) { assert.instanceOf(msg, Buffer) received.push(msg.toString()) - if (received.length === messages.length) break + if (received.length === messages.length) { + break + } } assert.deepEqual(received, messages) }) if (proto !== "inproc") { - it("should deliver messages with immediate", async function() { + it("should deliver messages with immediate", async function () { const address = uniqAddress(proto) const messages = ["foo", "bar", "baz", "qux"] const received: string[] = [] @@ -68,7 +70,9 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { for await (const [msg] of pull) { assert.instanceOf(msg, Buffer) received.push(msg.toString()) - if (received.length === messages.length) break + if (received.length === messages.length) { + break + } } assert.deepEqual(received, messages) diff --git a/test/unit/socket-req-rep-test.ts b/test/unit/socket-req-rep-test.ts index fad69103..8e0e96d7 100644 --- a/test/unit/socket-req-rep-test.ts +++ b/test/unit/socket-req-rep-test.ts @@ -4,23 +4,23 @@ import {assert} from "chai" import {testProtos, uniqAddress} from "./helpers" for (const proto of testProtos("tcp", "ipc", "inproc")) { - describe(`socket with ${proto} req/rep`, function() { + describe(`socket with ${proto} req/rep`, function () { let req: zmq.Request let rep: zmq.Reply - beforeEach(function() { + beforeEach(function () { req = new zmq.Request() rep = new zmq.Reply() }) - afterEach(function() { + afterEach(function () { req.close() rep.close() global.gc?.() }) - describe("send/receive", function() { - it("should deliver messages", async function() { + describe("send/receive", function () { + it("should deliver messages", async function () { /* REQ -> foo -> REP <- foo <- -> bar -> @@ -50,7 +50,9 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { const [res] = await req.receive() received.push(res.toString()) - if (received.length === messages.length) break + if (received.length === messages.length) { + break + } } rep.close() @@ -60,7 +62,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { assert.deepEqual(received, messages) }) - it("should throw when waiting for a response", async function() { + it("should throw when waiting for a response", async function () { /* REQ -> foo -> REP -X foo <- foo <- diff --git a/test/unit/socket-router-dealer-test.ts b/test/unit/socket-router-dealer-test.ts index 61072515..bdeecfbd 100644 --- a/test/unit/socket-router-dealer-test.ts +++ b/test/unit/socket-router-dealer-test.ts @@ -5,26 +5,26 @@ import {assert} from "chai" import {testProtos, uniqAddress} from "./helpers" for (const proto of testProtos("tcp", "ipc", "inproc")) { - describe(`socket with ${proto} router/dealer`, function() { + describe(`socket with ${proto} router/dealer`, function () { let router: zmq.Router let dealerA: zmq.Dealer let dealerB: zmq.Dealer - beforeEach(function() { + beforeEach(function () { router = new zmq.Router() dealerA = new zmq.Dealer() dealerB = new zmq.Dealer() }) - afterEach(function() { + afterEach(function () { router.close() dealerA.close() dealerB.close() global.gc?.() }) - describe("send/receive", function() { - it("should deliver messages", async function() { + describe("send/receive", function () { + it("should deliver messages", async function () { const address = uniqAddress(proto) const messages = ["foo", "bar", "baz", "qux"] const receivedA: string[] = [] @@ -48,12 +48,16 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { for await (const msg of dealerA) { receivedA.push(msg.toString()) - if (receivedA.length === messages.length) break + if (receivedA.length === messages.length) { + break + } } for await (const msg of dealerB) { receivedB.push(msg.toString()) - if (receivedB.length === messages.length) break + if (receivedB.length === messages.length) { + break + } } router.close() @@ -66,7 +70,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { /* This only works reliably with ZMQ 4.2.3+ */ if (semver.satisfies(zmq.version, ">= 4.2.3")) { - it("should fail with unroutable message if mandatory", async function() { + it("should fail with unroutable message if mandatory", async function () { router.mandatory = true router.sendTimeout = 0 try { diff --git a/test/unit/socket-send-receive-test.ts b/test/unit/socket-send-receive-test.ts index a242c96b..7bd9dbf8 100644 --- a/test/unit/socket-send-receive-test.ts +++ b/test/unit/socket-send-receive-test.ts @@ -5,23 +5,23 @@ import {assert} from "chai" import {testProtos, uniqAddress} from "./helpers" for (const proto of testProtos("tcp", "ipc", "inproc")) { - describe(`socket with ${proto} send/receive`, function() { + describe(`socket with ${proto} send/receive`, function () { let sockA: zmq.Pair let sockB: zmq.Pair - beforeEach(function() { + beforeEach(function () { sockA = new zmq.Pair({linger: 0}) sockB = new zmq.Pair({linger: 0}) }) - afterEach(function() { + afterEach(function () { sockA.close() sockB.close() global.gc?.() }) - describe("when not applicable", function() { - it("should fail sending", function() { + describe("when not applicable", function () { + it("should fail sending", function () { try { ;(new zmq.Subscriber() as any).send() } catch (err) { @@ -30,7 +30,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { } }) - it("should fail receiving", function() { + it("should fail receiving", function () { try { ;(new zmq.Publisher() as any).receive() } catch (err) { @@ -39,7 +39,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { } }) - it("should fail iterating", async function() { + it("should fail iterating", async function () { try { /* eslint-disable-next-line no-empty */ for await (const msg of new zmq.Publisher() as any) { @@ -51,21 +51,21 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { }) }) - describe("when not connected", function() { - beforeEach(async function() { + describe("when not connected", function () { + beforeEach(async function () { sockA.sendHighWaterMark = 1 await sockA.connect(uniqAddress(proto)) }) - it("should be writable", async function() { + it("should be writable", async function () { assert.equal(sockA.writable, true) }) - it("should not be readable", async function() { + it("should not be readable", async function () { assert.equal(sockA.readable, false) }) - it("should honor send high water mark and timeout", async function() { + it("should honor send high water mark and timeout", async function () { sockA.sendTimeout = 2 await sockA.send(Buffer.alloc(8192)) try { @@ -79,8 +79,10 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { } }) - it("should copy and release small buffers", async function() { - if (process.env.SKIP_GC_TESTS) this.skip() + it("should copy and release small buffers", async function () { + if (process.env.SKIP_GC_TESTS) { + this.skip() + } const weak = require("weak-napi") let released = false @@ -99,8 +101,10 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { assert.equal(released, true) }) - it("should retain large buffers", async function() { - if (process.env.SKIP_GC_TESTS) this.skip() + it("should retain large buffers", async function () { + if (process.env.SKIP_GC_TESTS) { + this.skip() + } const weak = require("weak-napi") let released = false @@ -120,28 +124,28 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { }) }) - describe("when connected", function() { - beforeEach(async function() { + describe("when connected", function () { + beforeEach(async function () { const address = uniqAddress(proto) await sockB.bind(address) await sockA.connect(address) }) - it("should be writable", async function() { + it("should be writable", async function () { assert.equal(sockA.writable, true) }) - it("should not be readable", async function() { + it("should not be readable", async function () { assert.equal(sockA.readable, false) }) - it("should be readable if message is available", async function() { + it("should be readable if message is available", async function () { await sockB.send(Buffer.from("foo")) await new Promise(resolve => setTimeout(resolve, 15)) assert.equal(sockA.readable, true) }) - it("should deliver single string message", async function() { + it("should deliver single string message", async function () { const sent = "foo" await sockA.send(sent) @@ -152,7 +156,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { ) }) - it("should deliver single buffer message", async function() { + it("should deliver single buffer message", async function () { const sent = Buffer.from("foo") await sockA.send(sent) @@ -160,7 +164,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { assert.deepEqual([sent], recv) }) - it("should deliver single multipart string message", async function() { + it("should deliver single multipart string message", async function () { const sent = ["foo", "bar"] await sockA.send(sent) @@ -171,7 +175,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { ) }) - it("should deliver single multipart buffer message", async function() { + it("should deliver single multipart buffer message", async function () { const sent = [Buffer.from("foo"), Buffer.from("bar")] await sockA.send(sent) @@ -179,7 +183,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { assert.deepEqual(sent, recv) }) - it("should deliver multiple messages", async function() { + it("should deliver multiple messages", async function () { const messages = ["foo", "bar", "baz", "qux"] for (const msg of messages) { await sockA.send(msg) @@ -188,13 +192,15 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { const received: string[] = [] for await (const msg of sockB) { received.push(msg.toString()) - if (received.length === messages.length) break + if (received.length === messages.length) { + break + } } assert.deepEqual(received, messages) }) - it("should deliver typed array and array buffer messages", async function() { + it("should deliver typed array and array buffer messages", async function () { const messages = [ Uint8Array.from([0x66, 0x6f, 0x6f]), Uint8Array.from([0x66, 0x6f, 0x6f]).buffer, @@ -209,7 +215,9 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { const received: string[] = [] for await (const msg of sockB) { received.push(msg.toString()) - if (received.length === messages.length) break + if (received.length === messages.length) { + break + } } assert.deepEqual(received, [ @@ -220,11 +228,11 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { ]) }) - it("should deliver messages coercible to string", async function() { + it("should deliver messages coercible to string", async function () { const messages = [ null, /* eslint-disable-next-line @typescript-eslint/no-empty-function */ - function() {}, + function () {}, 16.19, true, {}, @@ -237,7 +245,9 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { const received: string[] = [] for await (const msg of sockB) { received.push(msg.toString()) - if (received.length === messages.length) break + if (received.length === messages.length) { + break + } } /* Unify different output across Node/TypeScript versions. */ @@ -253,7 +263,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { ]) }) - it("should poll simultaneously", async function() { + it("should poll simultaneously", async function () { const sendReceiveA = async () => { const [msg1] = await Promise.all([ sockA.receive(), @@ -274,7 +284,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { assert.deepEqual(msgs, ["bar", "foo"]) }) - it("should poll simultaneously after delay", async function() { + it("should poll simultaneously after delay", async function () { await new Promise(resolve => setTimeout(resolve, 15)) const sendReceiveA = async () => { const [msg1] = await Promise.all([ @@ -296,7 +306,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { assert.deepEqual(msgs, ["bar", "foo"]) }) - it("should honor receive timeout", async function() { + it("should honor receive timeout", async function () { sockA.receiveTimeout = 2 try { await sockA.receive() @@ -309,8 +319,10 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { } }) - it("should release buffers", async function() { - if (process.env.SKIP_GC_TESTS) this.skip() + it("should release buffers", async function () { + if (process.env.SKIP_GC_TESTS) { + this.skip() + } const weak = require("weak-napi") const n = 10 @@ -346,8 +358,10 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { assert.equal(released, n * 2) }) - it("should release buffers after echo", async function() { - if (process.env.SKIP_GC_TESTS) this.skip() + it("should release buffers after echo", async function () { + if (process.env.SKIP_GC_TESTS) { + this.skip() + } const weak = require("weak-napi") const n = 10 @@ -393,7 +407,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { }) if (proto === "inproc") { - it("should share memory of large buffers", async function() { + it("should share memory of large buffers", async function () { const orig = Buffer.alloc(2048) await sockA.send(orig) @@ -410,7 +424,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { }) } - it("should not starve event loop", async function() { + it("should not starve event loop", async function () { this.slow(250) sockA.sendHighWaterMark = 5000 @@ -450,8 +464,8 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { }) if (proto !== "inproc") { - describe("when connected after send/receive", function() { - it("should deliver message", async function() { + describe("when connected after send/receive", function () { + it("should deliver message", async function () { const address = uniqAddress(proto) const sent = "foo" @@ -469,21 +483,21 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { }) } - describe("when closed", function() { - beforeEach(function() { + describe("when closed", function () { + beforeEach(function () { sockA.close() sockB.close() }) - it("should not be writable", async function() { + it("should not be writable", async function () { assert.equal(sockA.writable, false) }) - it("should not be readable", async function() { + it("should not be readable", async function () { assert.equal(sockA.readable, false) }) - it("should not be able to send", async function() { + it("should not be able to send", async function () { try { await sockA.send(Buffer.alloc(8192)) assert.ok(false) @@ -495,7 +509,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { } }) - it("should not be able to receive", async function() { + it("should not be able to receive", async function () { try { await sockA.receive() assert.ok(false) @@ -508,15 +522,15 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { }) }) - describe("during close", function() { - it("should gracefully stop async iterator", async function() { + describe("during close", function () { + it("should gracefully stop async iterator", async function () { process.nextTick(() => sockA.close()) /* eslint-disable-next-line no-empty */ for await (const _ of sockA) { } }) - it("should not mask other error type in async iterator", async function() { + it("should not mask other error type in async iterator", async function () { sockA = new zmq.Request() process.nextTick(() => sockA.close()) try { @@ -536,8 +550,8 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { }) }) - describe("concurrently", function() { - it("should throw error on concurrent send", async function() { + describe("concurrently", function () { + it("should throw error on concurrent send", async function () { sockA.sendTimeout = 20 const done = sockA.send(null).catch(() => null) try { @@ -556,7 +570,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { } }) - it("should throw error on concurrent receive", async function() { + it("should throw error on concurrent receive", async function () { sockA.receiveTimeout = 20 const done = sockA.receive().catch(() => null) try { diff --git a/test/unit/socket-stream-test.ts b/test/unit/socket-stream-test.ts index d2301613..158f91ec 100644 --- a/test/unit/socket-stream-test.ts +++ b/test/unit/socket-stream-test.ts @@ -5,27 +5,29 @@ import {createServer, get, Server} from "http" import {testProtos, uniqAddress} from "./helpers" for (const proto of testProtos("tcp")) { - describe(`socket with ${proto} stream`, function() { + describe(`socket with ${proto} stream`, function () { let stream: zmq.Stream - beforeEach(function() { + beforeEach(function () { stream = new zmq.Stream() }) - afterEach(function() { + afterEach(function () { stream.close() global.gc?.() }) - describe("send/receive as server", function() { - it("should deliver messages", async function() { + describe("send/receive as server", function () { + it("should deliver messages", async function () { const address = uniqAddress(proto) await stream.bind(address) const serve = async () => { for await (const [id, msg] of stream) { - if (!msg.length) continue + if (!msg.length) { + continue + } assert.equal(msg.toString().split("\r\n")[0], "GET /foo HTTP/1.1") await stream.send([ @@ -43,7 +45,7 @@ for (const proto of testProtos("tcp")) { let body = "" const request = async () => { return new Promise(resolve => { - get(address.replace("tcp:", "http:") + "/foo", res => { + get(`${address.replace("tcp:", "http:")}/foo`, res => { res.on("data", buffer => { body += buffer.toString() }) @@ -57,8 +59,8 @@ for (const proto of testProtos("tcp")) { }) }) - describe("send/receive as client", function() { - it("should deliver messages", async function() { + describe("send/receive as client", function () { + it("should deliver messages", async function () { const address = uniqAddress(proto) const port = parseInt(address.split(":").pop()!, 10) diff --git a/test/unit/socket-thread-test.ts b/test/unit/socket-thread-test.ts index 8a9a2b25..f0038c91 100644 --- a/test/unit/socket-thread-test.ts +++ b/test/unit/socket-thread-test.ts @@ -5,17 +5,19 @@ import {assert} from "chai" import {createWorker, testProtos, uniqAddress} from "./helpers" for (const proto of testProtos("tcp", "ipc", "inproc")) { - describe(`socket with ${proto} in thread`, function() { + describe(`socket with ${proto} in thread`, function () { this.slow(2000) this.timeout(5000) - beforeEach(function() { + beforeEach(function () { /* Node.js worker support introduced in version 10.5. */ - if (semver.satisfies(process.versions.node, "< 10.5")) this.skip() + if (semver.satisfies(process.versions.node, "< 10.5")) { + this.skip() + } }) - describe("when connected within thread", function() { - it("should deliver messages", async function() { + describe("when connected within thread", function () { + it("should deliver messages", async function () { const data = {address: uniqAddress(proto)} const recv = await createWorker(data, async ({address}) => { const sockA = new zmq.Pair({linger: 0}) @@ -34,8 +36,8 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { }) }) - describe("when connected to thread", function() { - it("should deliver messages", async function() { + describe("when connected to thread", function () { + it("should deliver messages", async function () { const address = uniqAddress(proto) const sockA = new zmq.Pair({linger: 0}) @@ -60,8 +62,8 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { }) }) - describe("when connected between threads", function() { - it("should deliver messages", async function() { + describe("when connected between threads", function () { + it("should deliver messages", async function () { const address = uniqAddress(proto) const worker1 = createWorker({address}, async ({address}) => { diff --git a/test/unit/socket-xpub-xsub-test.ts b/test/unit/socket-xpub-xsub-test.ts index bbca03ae..30e54bbd 100644 --- a/test/unit/socket-xpub-xsub-test.ts +++ b/test/unit/socket-xpub-xsub-test.ts @@ -5,20 +5,20 @@ import {assert} from "chai" import {testProtos, uniqAddress} from "./helpers" for (const proto of testProtos("tcp", "ipc", "inproc")) { - describe(`socket with ${proto} xpub/xsub`, function() { + describe(`socket with ${proto} xpub/xsub`, function () { let pub: zmq.Publisher let sub: zmq.Subscriber let xpub: zmq.XPublisher let xsub: zmq.XSubscriber - beforeEach(function() { + beforeEach(function () { pub = new zmq.Publisher() sub = new zmq.Subscriber() xpub = new zmq.XPublisher() xsub = new zmq.XSubscriber() }) - afterEach(function() { + afterEach(function () { pub.close() sub.close() xpub.close() @@ -26,8 +26,8 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { global.gc?.() }) - describe("send/receive", function() { - it("should deliver messages", async function() { + describe("send/receive", function () { + it("should deliver messages", async function () { /* PUB -> foo -> XSUB -> XPUB -> SUB -> bar -> subscribed to all -> baz -> @@ -61,7 +61,9 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { for await (const [msg] of xpub) { assert.instanceOf(msg, Buffer) await xsub.send(msg) - if (++subbed === 1) break + if (++subbed === 1) { + break + } } } @@ -70,7 +72,9 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { for await (const [msg] of xsub) { assert.instanceOf(msg, Buffer) await xpub.send(msg) - if (++pubbed === messages.length) break + if (++pubbed === messages.length) { + break + } } } @@ -78,7 +82,9 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { for await (const [msg] of sub) { assert.instanceOf(msg, Buffer) received.push(msg.toString()) - if (received.length === messages.length) break + if (received.length === messages.length) { + break + } } } @@ -87,8 +93,8 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { }) }) - describe("subscribe/unsubscribe", function() { - it("should filter messages", async function() { + describe("subscribe/unsubscribe", function () { + it("should filter messages", async function () { /* PUB -> foo -X XSUB -> XPUB -> SUB -> bar -> subscribed to "ba" -> baz -> @@ -123,7 +129,9 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { for await (const [msg] of xpub) { assert.instanceOf(msg, Buffer) await xsub.send(msg) - if (++subbed === 1) break + if (++subbed === 1) { + break + } } } @@ -132,7 +140,9 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { for await (const [msg] of xsub) { assert.instanceOf(msg, Buffer) await xpub.send(msg) - if (++pubbed === 2) break + if (++pubbed === 2) { + break + } } } @@ -140,7 +150,9 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { for await (const [msg] of sub) { assert.instanceOf(msg, Buffer) received.push(msg.toString()) - if (received.length === 2) break + if (received.length === 2) { + break + } } } @@ -149,8 +161,8 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { }) }) - describe("verbosity", function() { - it("should deduplicate subscriptions/unsubscriptions", async function() { + describe("verbosity", function () { + it("should deduplicate subscriptions/unsubscriptions", async function () { const address = uniqAddress(proto) const subs: Buffer[] = [] @@ -175,7 +187,9 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { assert.instanceOf(msg, Buffer) await xsub.send(msg) subs.push(msg) - if (subs.length === 1) break + if (subs.length === 1) { + break + } } } @@ -185,7 +199,7 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { sub2.close() }) - it("should forward all subscriptions", async function() { + it("should forward all subscriptions", async function () { const address = uniqAddress(proto) const subs: Buffer[] = [] @@ -210,7 +224,9 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { assert.instanceOf(msg, Buffer) await xsub.send(msg) subs.push(msg) - if (subs.length === 2) break + if (subs.length === 2) { + break + } } } @@ -223,9 +239,11 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { sub2.close() }) - it("should forward all subscriptions/unsubscriptions", async function() { + it("should forward all subscriptions/unsubscriptions", async function () { /* ZMQ 4.2 first introduced ZMQ_XPUB_VERBOSER. */ - if (semver.satisfies(zmq.version, "< 4.2")) this.skip() + if (semver.satisfies(zmq.version, "< 4.2")) { + this.skip() + } const address = uniqAddress(proto) @@ -251,7 +269,9 @@ for (const proto of testProtos("tcp", "ipc", "inproc")) { assert.instanceOf(msg, Buffer) await xsub.send(msg) subs.push(msg) - if (subs.length === 3) break + if (subs.length === 3) { + break + } } } diff --git a/test/unit/socket-zap-test.ts b/test/unit/socket-zap-test.ts index 90e0ee85..213cef1e 100644 --- a/test/unit/socket-zap-test.ts +++ b/test/unit/socket-zap-test.ts @@ -5,25 +5,27 @@ import {assert} from "chai" import {captureEvent, testProtos, uniqAddress} from "./helpers" for (const proto of testProtos("tcp", "ipc")) { - describe(`socket with ${proto} zap`, function() { + describe(`socket with ${proto} zap`, function () { let sockA: zmq.Pair let sockB: zmq.Pair let handler: ZapHandler - beforeEach(function() { + beforeEach(function () { sockA = new zmq.Pair() sockB = new zmq.Pair() }) - afterEach(function() { - if (handler) handler.stop() + afterEach(function () { + if (handler) { + handler.stop() + } sockA.close() sockB.close() global.gc?.() }) - describe("with plain mechanism", function() { - it("should deliver message", async function() { + describe("with plain mechanism", function () { + it("should deliver message", async function () { handler = new ValidatingZapHandler({ domain: "test", mechanism: "PLAIN", @@ -52,9 +54,11 @@ for (const proto of testProtos("tcp", "ipc")) { ) }) - it("should report authentication error", async function() { + it("should report authentication error", async function () { /* ZMQ < 4.3.0 does not have these event details. */ - if (semver.satisfies(zmq.version, "< 4.3.0")) this.skip() + if (semver.satisfies(zmq.version, "< 4.3.0")) { + this.skip() + } handler = new ValidatingZapHandler({ domain: "test", @@ -93,9 +97,11 @@ for (const proto of testProtos("tcp", "ipc")) { assert.equal(eventB.error.status, 400) }) - it("should report protocol version error", async function() { + it("should report protocol version error", async function () { /* ZMQ < 4.3.0 does not have these event details. */ - if (semver.satisfies(zmq.version, "< 4.3.0")) this.skip() + if (semver.satisfies(zmq.version, "< 4.3.0")) { + this.skip() + } handler = new CustomZapHandler( ([path, delim, version, id, ...rest]) => { @@ -122,9 +128,11 @@ for (const proto of testProtos("tcp", "ipc")) { assert.equal(eventA.error.code, "ERR_ZAP_BAD_VERSION") }) - it("should report protocol format error", async function() { + it("should report protocol format error", async function () { /* ZMQ < 4.3.0 does not have these event details. */ - if (semver.satisfies(zmq.version, "< 4.3.0")) this.skip() + if (semver.satisfies(zmq.version, "< 4.3.0")) { + this.skip() + } handler = new CustomZapHandler(([path, delim, ...rest]) => { return [path, delim, null, null] @@ -149,9 +157,11 @@ for (const proto of testProtos("tcp", "ipc")) { assert.equal(eventA.error.code, "ERR_ZAP_MALFORMED_REPLY") }) - it("should report mechanism mismatch error", async function() { + it("should report mechanism mismatch error", async function () { /* ZMQ < 4.3.0 does not have these event details. */ - if (semver.satisfies(zmq.version, "< 4.3.0")) this.skip() + if (semver.satisfies(zmq.version, "< 4.3.0")) { + this.skip() + } this.slow(250) diff --git a/test/unit/typings-compatibility-test.ts b/test/unit/typings-compatibility-test.ts index 587e0cc1..a47b3b23 100644 --- a/test/unit/typings-compatibility-test.ts +++ b/test/unit/typings-compatibility-test.ts @@ -72,9 +72,9 @@ async function run( errorAsString: boolean, ): Promise { return new Promise(resolve => { - exec(cmd, {cwd: cwd}, (error, stdout, stderr) => { + exec(cmd, {cwd}, (error, stdout, stderr) => { if (error) { - resolve(errorAsString ? stdout + "\n" + stderr : error) + resolve(errorAsString ? `${stdout}\n${stderr}` : error) } else { resolve(undefined) } @@ -86,16 +86,18 @@ function getItLabelDetails(tsVer: TestDef): string { const lbl = `v${tsVer.version} for (minimal) compile target ${JSON.stringify( tsVer.minTarget, )}` - if (!tsVer.requiredLibs || tsVer.requiredLibs.length === 0) return lbl + if (!tsVer.requiredLibs || tsVer.requiredLibs.length === 0) { + return lbl + } return `${lbl}, and required compile lib: ${JSON.stringify( tsVer.requiredLibs, )}` } -describe("compatibility of typings for typescript versions", function() { +describe("compatibility of typings for typescript versions", function () { let execCmd: "npm" | "yarn" - before(function(done) { + before(function (done) { this.timeout(10000) if (/^true$/.test(process.env.EXCLUDE_TYPINGS_COMPAT_TESTS as string)) { this.skip() @@ -124,7 +126,7 @@ describe("compatibility of typings for typescript versions", function() { }) for (const tsVer of tsVersions) { - describe(`when used in a project with typescript version ${tsVer.version}`, function() { + describe(`when used in a project with typescript version ${tsVer.version}`, function () { // must increase timeout for allowing `npm install`'ing the version of // the typescript package to complete this.timeout(30000) @@ -167,9 +169,11 @@ describe("compatibility of typings for typescript versions", function() { ), ), ]) - .then(() => run(execCmd + " install", tscTargetPath, false)) + .then(() => run(`${execCmd} install`, tscTargetPath, false)) .catch(err => { - if (err) done(err) + if (err) { + done(err) + } }) .then(() => done()) }) @@ -177,16 +181,18 @@ describe("compatibility of typings for typescript versions", function() { afterEach(done => { remove(tscTargetPath, err => { - if (err) return done(err) + if (err) { + return done(err) + } done() }) }) it(`it should compile successfully with tsc ${getItLabelDetails( tsVer, - )}`, async function() { - const cmd = execCmd === "npm" ? execCmd + " run" : execCmd - const errMsg = (await run(cmd + " test", tscTargetPath, true)) as + )}`, async function () { + const cmd = execCmd === "npm" ? `${execCmd} run` : execCmd + const errMsg = (await run(`${cmd} test`, tscTargetPath, true)) as | string | undefined assert.isUndefined(errMsg, errMsg) diff --git a/test/unit/typings-test.ts b/test/unit/typings-test.ts index a1095b5d..906ae599 100644 --- a/test/unit/typings-test.ts +++ b/test/unit/typings-test.ts @@ -1,7 +1,7 @@ import * as zmq from "../../src" -describe("typings", function() { - it("should compile successfully", function() { +describe("typings", function () { + it("should compile successfully", function () { /* To test the TypeScript typings this file should compile successfully. We don't actually execute the code in this function. */ @@ -11,13 +11,27 @@ describe("typings", function() { console.log(version) const capability = zmq.capability - if (capability.ipc) console.log("ipc") - if (capability.pgm) console.log("pgm") - if (capability.tipc) console.log("tipc") - if (capability.norm) console.log("norm") - if (capability.curve) console.log("curve") - if (capability.gssapi) console.log("gssapi") - if (capability.draft) console.log("draft") + if (capability.ipc) { + console.log("ipc") + } + if (capability.pgm) { + console.log("pgm") + } + if (capability.tipc) { + console.log("tipc") + } + if (capability.norm) { + console.log("norm") + } + if (capability.curve) { + console.log("curve") + } + if (capability.gssapi) { + console.log("gssapi") + } + if (capability.draft) { + console.log("draft") + } const keypair = zmq.curveKeyPair() console.log(keypair.publicKey) @@ -44,7 +58,9 @@ describe("typings", function() { }) const router = new zmq.Router() - if (router.type !== 6) throw new Error() + if (router.type !== 6) { + throw new Error() + } console.log(socket.context) console.log(socket.sendTimeout) diff --git a/test/unit/zmq-draft-test.ts b/test/unit/zmq-draft-test.ts index 2b1b513c..c1568ac2 100644 --- a/test/unit/zmq-draft-test.ts +++ b/test/unit/zmq-draft-test.ts @@ -4,9 +4,9 @@ import * as draft from "../../src/draft" import {assert} from "chai" if (zmq.capability.draft) { - describe("zmq draft", function() { - describe("exports", function() { - it("should include functions and constructors", function() { + describe("zmq draft", function () { + describe("exports", function () { + it("should include functions and constructors", function () { const expected = [ /* Specific socket constructors. */ "Server", diff --git a/test/unit/zmq-test.ts b/test/unit/zmq-test.ts index 0a84be9d..23ee0687 100644 --- a/test/unit/zmq-test.ts +++ b/test/unit/zmq-test.ts @@ -3,9 +3,9 @@ import * as zmq from "../../src" import {assert} from "chai" -describe("zmq", function() { - describe("exports", function() { - it("should include functions and constructors", function() { +describe("zmq", function () { + describe("exports", function () { + it("should include functions and constructors", function () { const expected = [ /* Utility functions. */ "version", @@ -45,8 +45,8 @@ describe("zmq", function() { }) }) - describe("version", function() { - it("should return version string", function() { + describe("version", function () { + it("should return version string", function () { if (process.env.ZMQ_VERSION) { assert.equal(zmq.version, process.env.ZMQ_VERSION) } else { @@ -55,8 +55,8 @@ describe("zmq", function() { }) }) - describe("capability", function() { - it("should return library capability booleans", function() { + describe("capability", function () { + it("should return library capability booleans", function () { assert.equal( Object.values(zmq.capability).every(c => typeof c === "boolean"), true, @@ -64,12 +64,14 @@ describe("zmq", function() { }) }) - describe("curve keypair", function() { - beforeEach(function() { - if (!zmq.capability.curve) this.skip() + describe("curve keypair", function () { + beforeEach(function () { + if (!zmq.capability.curve) { + this.skip() + } }) - it("should return keypair", function() { + it("should return keypair", function () { const {publicKey, secretKey} = zmq.curveKeyPair() assert.match(publicKey, /^[\x20-\x7F]{40}$/) assert.match(secretKey, /^[\x20-\x7F]{40}$/)