From b18eec513ad909d7f6e3f5029978f4d1e8c13b2f Mon Sep 17 00:00:00 2001 From: Ricardo Arturo Cabral Mejia Date: Sun, 14 Aug 2022 05:33:57 +0000 Subject: [PATCH] chore: add test & coverage --- .gitignore | 7 +- .mocharc.js | 16 + .nycrc.json | 49 + package-lock.json | 3083 +++++++++++++++++ package.json | 10 +- seeds/events.json | 892 +++++ src/handlers/event-message-handler.ts | 1 + src/handlers/subscribe-message-handler.ts | 8 +- src/repositories/event-repository.ts | 2 +- src/schemas/message-schema.ts | 26 +- src/utils/deep-freeze.ts | 6 - src/utils/event.ts | 4 +- src/utils/hash-event.ts | 12 - src/utils/serialize-event.ts | 10 - src/utils/stream.ts | 24 + src/utils/transform.ts | 5 + src/utils/transforms.ts | 26 - test/unit/data/events.ts | 899 +++++ test/unit/schemas/message-schema.spec.ts | 391 +-- .../{events.spec.ts => utils/event.spec.ts} | 16 +- test/unit/utils/stream.spec.ts | 57 + test/unit/utils/transform.spec.ts | 21 + test/unit/utils/validation.spec.ts | 32 + 23 files changed, 5235 insertions(+), 362 deletions(-) create mode 100644 .mocharc.js create mode 100644 .nycrc.json delete mode 100644 src/utils/deep-freeze.ts delete mode 100644 src/utils/hash-event.ts delete mode 100644 src/utils/serialize-event.ts create mode 100644 src/utils/stream.ts create mode 100644 src/utils/transform.ts delete mode 100644 src/utils/transforms.ts create mode 100644 test/unit/data/events.ts rename test/unit/{events.spec.ts => utils/event.spec.ts} (94%) create mode 100644 test/unit/utils/stream.spec.ts create mode 100644 test/unit/utils/transform.spec.ts create mode 100644 test/unit/utils/validation.spec.ts diff --git a/.gitignore b/.gitignore index 6644035..6e2a82f 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,11 @@ logs *.log npm-debug.log* +# Coverage +.nyc_output +.test-report +.coverage + # Dependency directories node_modules/ @@ -22,4 +27,4 @@ dist .vscode/* # Env files -*.env \ No newline at end of file +*.env diff --git a/.mocharc.js b/.mocharc.js new file mode 100644 index 0000000..ccbb8b8 --- /dev/null +++ b/.mocharc.js @@ -0,0 +1,16 @@ +module.exports = { + extension: ['ts'], + require: ['ts-node/register/transpile-only', 'source-map-support/register'], + reporter: 'mochawesome', + slow: 75, + sorted: true, + 'inline-diff': true, + diff: true, + 'reporter-option': [ + 'reportDir=.test-report', + 'reportFilename=index', + 'quiet=true', + 'json=false', + 'consoleReporter=spec', + ], +} diff --git a/.nycrc.json b/.nycrc.json new file mode 100644 index 0000000..86b8ab0 --- /dev/null +++ b/.nycrc.json @@ -0,0 +1,49 @@ +{ + "all": true, + "cache": true, + "check-coverage": true, + "branches": 80, + "lines": 80, + "functions": 80, + "statements": 80, + "watermarks": { + "lines": [ + 80, + 95 + ], + "functions": [ + 80, + 95 + ], + "branches": [ + 80, + 95 + ], + "statements": [ + 80, + 95 + ] + }, + "report-dir": ".coverage", + "extension": [ + ".ts" + ], + "include": [ + "src/**/*.ts" + ], + "exclude": [ + "src/@types", + "src/constants" + ], + "require": [ + "ts-node/register/transpile-only", + "source-map-support/register" + ], + "reporter": [ + "text", + "text-summary", + "html" + ], + "instrument": true, + "sourceMap": true +} diff --git a/package-lock.json b/package-lock.json index 923e0dc..97af0d5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,20 +24,437 @@ "@types/pg": "^8.6.5", "@types/ramda": "^0.28.13", "@types/sinon": "^10.0.11", + "@types/sinon-chai": "^3.2.8", "@types/ws": "^8.5.3", "@typescript-eslint/eslint-plugin": "^5.19.0", "@typescript-eslint/parser": "^5.19.0", "chai": "^4.3.6", "eslint": "^8.13.0", "mocha": "^9.2.2", + "mochawesome": "^7.1.3", + "nyc": "^15.1.0", "rimraf": "^3.0.2", "sinon-chai": "^3.7.0", + "source-map-support": "^0.5.21", "ts-node": "^10.7.0", "ts-node-dev": "^1.1.8", "typescript": "^4.6.3", "uuid": "^8.3.2" } }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", + "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz", + "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helpers": "^7.18.9", + "@babel/parser": "^7.18.10", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.10", + "@babel/types": "^7.18.10", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.18.12", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.12.tgz", + "integrity": "sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.10", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", + "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", + "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", + "dev": true, + "dependencies": { + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", + "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", + "dev": true, + "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.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", + "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", + "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.18.11", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.11.tgz", + "integrity": "sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.18.11", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.11.tgz", + "integrity": "sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@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.11", + "@babel/types": "^7.18.10", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz", + "integrity": "sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@cspotcode/source-map-consumer": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", @@ -112,6 +529,170 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.15", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", + "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/@noble/secp256k1": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz", @@ -292,6 +873,16 @@ "@types/sinonjs__fake-timers": "*" } }, + "node_modules/@types/sinon-chai": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.8.tgz", + "integrity": "sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g==", + "dev": true, + "dependencies": { + "@types/chai": "*", + "@types/sinon": "*" + } + }, "node_modules/@types/sinonjs__fake-timers": { "version": "8.1.2", "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", @@ -539,6 +1130,19 @@ "node": ">=0.4.0" } }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -601,6 +1205,24 @@ "node": ">= 8" } }, + "node_modules/append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, + "dependencies": { + "default-require-extensions": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "dev": true + }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -674,6 +1296,34 @@ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, + "node_modules/browserslist": { + "version": "4.21.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", + "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001370", + "electron-to-chromium": "^1.4.202", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.5" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -688,6 +1338,21 @@ "node": ">=4" } }, + "node_modules/caching-transform": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dev": true, + "dependencies": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -709,6 +1374,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/caniuse-lite": { + "version": "1.0.30001375", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001375.tgz", + "integrity": "sha512-kWIMkNzLYxSvnjy0hL8w1NOaWNr2rn39RTAVyIwcw8juu60bZDWiF1/loOYANzjtJmy6qPgNmn38ro5Pygagdw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, "node_modules/chai": { "version": "4.3.6", "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", @@ -791,6 +1472,15 @@ "node": ">= 6" } }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -833,12 +1523,33 @@ "node": "^12.20.0 || >=14" } }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/convert-source-map/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -859,6 +1570,15 @@ "node": ">= 8" } }, + "node_modules/dateformat": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -905,6 +1625,27 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/default-require-extensions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", + "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", + "dev": true, + "dependencies": { + "strip-bom": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-require-extensions/node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -947,12 +1688,24 @@ "xtend": "^4.0.0" } }, + "node_modules/electron-to-chromium": { + "version": "1.4.218", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.218.tgz", + "integrity": "sha512-INDylKH//YIf2w67D+IjkfVnGVrZ/D94DAU/FPPm6T4jEPbEDQvo9r2wTj0ncFdtJH8+V8BggZTaN8Rzk5wkgw==", + "dev": true + }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -961,6 +1714,12 @@ "node": ">=6" } }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -1118,6 +1877,19 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/esquery": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", @@ -1257,6 +2029,23 @@ "node": ">=8" } }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -1301,6 +2090,53 @@ "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", "dev": true }, + "node_modules/foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -1321,6 +2157,12 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/fsu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/fsu/-/fsu-1.1.1.tgz", + "integrity": "sha512-xQVsnjJ/5pQtcKh+KjUoZGzVWn4uNkchxTF6Lwjr4Gf7nQr8fmUfhKJ62zE77+xQg9xnxi5KUps7XGs+VC986A==", + "dev": true + }, "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -1332,6 +2174,15 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -1430,6 +2281,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, "node_modules/growl": { "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", @@ -1459,6 +2316,31 @@ "node": ">=8" } }, + "node_modules/hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, + "dependencies": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hasha/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -1468,6 +2350,12 @@ "he": "bin/he" } }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, "node_modules/ignore": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", @@ -1502,6 +2390,15 @@ "node": ">=0.8.19" } }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -1597,6 +2494,24 @@ "node": ">=8" } }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", @@ -1609,6 +2524,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", @@ -1622,6 +2546,109 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-hook": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "dev": true, + "dependencies": { + "append-transform": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-processinfo": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", + "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", + "dev": true, + "dependencies": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.3", + "istanbul-lib-coverage": "^3.2.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/joi": { "version": "17.6.0", "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz", @@ -1634,6 +2661,12 @@ "@sideway/pinpoint": "^2.0.0" } }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -1646,6 +2679,18 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -1658,6 +2703,36 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/just-extend": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", @@ -1756,6 +2831,12 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", + "dev": true + }, "node_modules/lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", @@ -1763,6 +2844,30 @@ "dev": true, "peer": true }, + "node_modules/lodash.isempty": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", + "integrity": "sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==", + "dev": true + }, + "node_modules/lodash.isfunction": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", + "dev": true + }, + "node_modules/lodash.isobject": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", + "integrity": "sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA==", + "dev": true + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "dev": true + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -1785,6 +2890,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, "node_modules/loupe": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", @@ -1806,6 +2923,30 @@ "node": ">=10" } }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -1972,6 +3113,86 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/mochawesome": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/mochawesome/-/mochawesome-7.1.3.tgz", + "integrity": "sha512-Vkb3jR5GZ1cXohMQQ73H3cZz7RoxGjjUo0G5hu0jLaW+0FdUxUwg3Cj29bqQdh0rFcnyV06pWmqmi5eBPnEuNQ==", + "dev": true, + "dependencies": { + "chalk": "^4.1.2", + "diff": "^5.0.0", + "json-stringify-safe": "^5.0.1", + "lodash.isempty": "^4.4.0", + "lodash.isfunction": "^3.0.9", + "lodash.isobject": "^3.0.2", + "lodash.isstring": "^4.0.1", + "mochawesome-report-generator": "^6.2.0", + "strip-ansi": "^6.0.1", + "uuid": "^8.3.2" + }, + "peerDependencies": { + "mocha": ">=7" + } + }, + "node_modules/mochawesome-report-generator": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/mochawesome-report-generator/-/mochawesome-report-generator-6.2.0.tgz", + "integrity": "sha512-Ghw8JhQFizF0Vjbtp9B0i//+BOkV5OWcQCPpbO0NGOoxV33o+gKDYU0Pr2pGxkIHnqZ+g5mYiXF7GMNgAcDpSg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.2", + "dateformat": "^4.5.1", + "escape-html": "^1.0.3", + "fs-extra": "^10.0.0", + "fsu": "^1.1.1", + "lodash.isfunction": "^3.0.9", + "opener": "^1.5.2", + "prop-types": "^15.7.2", + "tcomb": "^3.2.17", + "tcomb-validation": "^3.3.0", + "validator": "^13.6.0", + "yargs": "^17.2.1" + }, + "bin": { + "marge": "bin/cli.js" + } + }, + "node_modules/mochawesome-report-generator/node_modules/yargs": { + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/mochawesome-report-generator/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/mochawesome/node_modules/diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -2009,6 +3230,24 @@ "path-to-regexp": "^1.7.0" } }, + "node_modules/node-preload": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "dev": true, + "dependencies": { + "process-on-spawn": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -2018,6 +3257,201 @@ "node": ">=0.10.0" } }, + "node_modules/nyc": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", + "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", + "dev": true, + "dependencies": { + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^2.0.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" + }, + "bin": { + "nyc": "bin/nyc.js" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/nyc/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/nyc/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/nyc/node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nyc/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nyc/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/nyc/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -2027,6 +3461,15 @@ "wrappy": "1" } }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true, + "bin": { + "opener": "bin/opener-bin.js" + } + }, "node_modules/optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -2074,6 +3517,42 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-hash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/packet-reader": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", @@ -2241,6 +3720,12 @@ "split2": "^4.1.0" } }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -2253,6 +3738,70 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/postgres-array": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", @@ -2297,6 +3846,29 @@ "node": ">= 0.8.0" } }, + "node_modules/process-on-spawn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", + "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", + "dev": true, + "dependencies": { + "fromentries": "^1.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -2344,6 +3916,12 @@ "safe-buffer": "^5.1.0" } }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -2379,6 +3957,18 @@ "url": "https://github.com/sponsors/mysticatea" } }, + "node_modules/release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", + "dev": true, + "dependencies": { + "es6-error": "^4.0.1" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -2388,6 +3978,12 @@ "node": ">=0.10.0" } }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, "node_modules/resolve": { "version": "1.22.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", @@ -2505,6 +4101,12 @@ "randombytes": "^2.1.0" } }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -2526,6 +4128,12 @@ "node": ">=8" } }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, "node_modules/sinon": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/sinon/-/sinon-14.0.0.tgz", @@ -2593,6 +4201,23 @@ "source-map": "^0.6.0" } }, + "node_modules/spawn-wrap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", + "dev": true, + "dependencies": { + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/split2": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", @@ -2601,6 +4226,12 @@ "node": ">= 10.x" } }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -2679,6 +4310,35 @@ "node": ">=8.0.0" } }, + "node_modules/tcomb": { + "version": "3.2.29", + "resolved": "https://registry.npmjs.org/tcomb/-/tcomb-3.2.29.tgz", + "integrity": "sha512-di2Hd1DB2Zfw6StGv861JoAF5h/uQVu/QJp2g8KVbtfKnoHdBQl5M32YWq6mnSYBQ1vFFrns5B1haWJL7rKaOQ==", + "dev": true + }, + "node_modules/tcomb-validation": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tcomb-validation/-/tcomb-validation-3.4.1.tgz", + "integrity": "sha512-urVVMQOma4RXwiVCa2nM2eqrAomHROHvWPuj6UkDGz/eb5kcy0x6P0dVt6kzpUZtYMNoAqJLWmz1BPtxrtjtrA==", + "dev": true, + "dependencies": { + "tcomb": "^3.0.0" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -2693,6 +4353,15 @@ "node": ">=8" } }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -2910,6 +4579,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, "node_modules/typescript": { "version": "4.6.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", @@ -2923,6 +4601,41 @@ "node": ">=4.2.0" } }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", + "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -2953,6 +4666,15 @@ "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "dev": true }, + "node_modules/validator": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", + "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -2968,6 +4690,12 @@ "node": ">= 8" } }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", + "dev": true + }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -3006,6 +4734,18 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, "node_modules/ws": { "version": "8.5.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", @@ -3114,6 +4854,326 @@ } }, "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", + "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", + "dev": true + }, + "@babel/core": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz", + "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helpers": "^7.18.9", + "@babel/parser": "^7.18.10", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.10", + "@babel/types": "^7.18.10", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.18.12", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.12.tgz", + "integrity": "sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg==", + "dev": true, + "requires": { + "@babel/types": "^7.18.10", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-compilation-targets": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", + "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", + "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", + "dev": true, + "requires": { + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-transforms": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", + "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", + "dev": true, + "requires": { + "@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.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-simple-access": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-string-parser": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", + "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true + }, + "@babel/helpers": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", + "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", + "dev": true, + "requires": { + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.18.11", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.11.tgz", + "integrity": "sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ==", + "dev": true + }, + "@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + } + }, + "@babel/traverse": { + "version": "7.18.11", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.11.tgz", + "integrity": "sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@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.11", + "@babel/types": "^7.18.10", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz", + "integrity": "sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + } + }, "@cspotcode/source-map-consumer": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", @@ -3176,6 +5236,133 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.15", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", + "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "@noble/secp256k1": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz", @@ -3341,6 +5528,16 @@ "@types/sinonjs__fake-timers": "*" } }, + "@types/sinon-chai": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.8.tgz", + "integrity": "sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g==", + "dev": true, + "requires": { + "@types/chai": "*", + "@types/sinon": "*" + } + }, "@types/sinonjs__fake-timers": { "version": "8.1.2", "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", @@ -3488,6 +5685,16 @@ "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", "dev": true }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -3531,6 +5738,21 @@ "picomatch": "^2.0.4" } }, + "append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, + "requires": { + "default-require-extensions": "^3.0.0" + } + }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "dev": true + }, "arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -3592,6 +5814,18 @@ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, + "browserslist": { + "version": "4.21.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", + "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001370", + "electron-to-chromium": "^1.4.202", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.5" + } + }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -3603,6 +5837,18 @@ "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==" }, + "caching-transform": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dev": true, + "requires": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -3615,6 +5861,12 @@ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true }, + "caniuse-lite": { + "version": "1.0.30001375", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001375.tgz", + "integrity": "sha512-kWIMkNzLYxSvnjy0hL8w1NOaWNr2rn39RTAVyIwcw8juu60bZDWiF1/loOYANzjtJmy6qPgNmn38ro5Pygagdw==", + "dev": true + }, "chai": { "version": "4.3.6", "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", @@ -3673,6 +5925,12 @@ } } }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -3709,12 +5967,35 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-9.2.0.tgz", "integrity": "sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w==" }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, "create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -3732,6 +6013,12 @@ "which": "^2.0.1" } }, + "dateformat": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", + "dev": true + }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -3761,6 +6048,23 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "default-require-extensions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", + "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", + "dev": true, + "requires": { + "strip-bom": "^4.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + } + } + }, "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -3794,17 +6098,35 @@ "xtend": "^4.0.0" } }, + "electron-to-chromium": { + "version": "1.4.218", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.218.tgz", + "integrity": "sha512-INDylKH//YIf2w67D+IjkfVnGVrZ/D94DAU/FPPm6T4jEPbEDQvo9r2wTj0ncFdtJH8+V8BggZTaN8Rzk5wkgw==", + "dev": true + }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -3921,6 +6243,12 @@ "eslint-visitor-keys": "^3.3.0" } }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, "esquery": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", @@ -4036,6 +6364,17 @@ "to-regex-range": "^5.0.1" } }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -4068,6 +6407,33 @@ "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", "dev": true }, + "foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + } + }, + "fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "dev": true + }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -4081,6 +6447,12 @@ "dev": true, "optional": true }, + "fsu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/fsu/-/fsu-1.1.1.tgz", + "integrity": "sha512-xQVsnjJ/5pQtcKh+KjUoZGzVWn4uNkchxTF6Lwjr4Gf7nQr8fmUfhKJ62zE77+xQg9xnxi5KUps7XGs+VC986A==", + "dev": true + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -4092,6 +6464,12 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -4160,6 +6538,12 @@ "slash": "^3.0.0" } }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, "growl": { "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", @@ -4180,12 +6564,36 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, + "requires": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, "ignore": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", @@ -4208,6 +6616,12 @@ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -4279,12 +6693,30 @@ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, "is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", @@ -4298,6 +6730,87 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true + }, + "istanbul-lib-hook": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "dev": true, + "requires": { + "append-transform": "^2.0.0" + } + }, + "istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "requires": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "istanbul-lib-processinfo": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", + "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", + "dev": true, + "requires": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.3", + "istanbul-lib-coverage": "^3.2.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^8.3.2" + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + } + }, + "istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, "joi": { "version": "17.6.0", "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz", @@ -4310,6 +6823,12 @@ "@sideway/pinpoint": "^2.0.0" } }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -4319,6 +6838,12 @@ "argparse": "^2.0.1" } }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -4331,6 +6856,28 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, "just-extend": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", @@ -4390,6 +6937,12 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", + "dev": true + }, "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", @@ -4397,6 +6950,30 @@ "dev": true, "peer": true }, + "lodash.isempty": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", + "integrity": "sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==", + "dev": true + }, + "lodash.isfunction": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", + "dev": true + }, + "lodash.isobject": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", + "integrity": "sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA==", + "dev": true + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "dev": true + }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -4413,6 +6990,15 @@ "is-unicode-supported": "^0.1.0" } }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, "loupe": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", @@ -4431,6 +7017,23 @@ "yallist": "^4.0.0" } }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, "make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -4555,6 +7158,75 @@ } } }, + "mochawesome": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/mochawesome/-/mochawesome-7.1.3.tgz", + "integrity": "sha512-Vkb3jR5GZ1cXohMQQ73H3cZz7RoxGjjUo0G5hu0jLaW+0FdUxUwg3Cj29bqQdh0rFcnyV06pWmqmi5eBPnEuNQ==", + "dev": true, + "requires": { + "chalk": "^4.1.2", + "diff": "^5.0.0", + "json-stringify-safe": "^5.0.1", + "lodash.isempty": "^4.4.0", + "lodash.isfunction": "^3.0.9", + "lodash.isobject": "^3.0.2", + "lodash.isstring": "^4.0.1", + "mochawesome-report-generator": "^6.2.0", + "strip-ansi": "^6.0.1", + "uuid": "^8.3.2" + }, + "dependencies": { + "diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "dev": true + } + } + }, + "mochawesome-report-generator": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/mochawesome-report-generator/-/mochawesome-report-generator-6.2.0.tgz", + "integrity": "sha512-Ghw8JhQFizF0Vjbtp9B0i//+BOkV5OWcQCPpbO0NGOoxV33o+gKDYU0Pr2pGxkIHnqZ+g5mYiXF7GMNgAcDpSg==", + "dev": true, + "requires": { + "chalk": "^4.1.2", + "dateformat": "^4.5.1", + "escape-html": "^1.0.3", + "fs-extra": "^10.0.0", + "fsu": "^1.1.1", + "lodash.isfunction": "^3.0.9", + "opener": "^1.5.2", + "prop-types": "^15.7.2", + "tcomb": "^3.2.17", + "tcomb-validation": "^3.3.0", + "validator": "^13.6.0", + "yargs": "^17.2.1" + }, + "dependencies": { + "yargs": { + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + } + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -4586,12 +7258,182 @@ "path-to-regexp": "^1.7.0" } }, + "node-preload": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "dev": true, + "requires": { + "process-on-spawn": "^1.0.0" + } + }, + "node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, + "nyc": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", + "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", + "dev": true, + "requires": { + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^2.0.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -4601,6 +7443,12 @@ "wrappy": "1" } }, + "opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true + }, "optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -4633,6 +7481,33 @@ "p-limit": "^3.0.2" } }, + "p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "package-hash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + } + }, "packet-reader": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", @@ -4761,12 +7636,66 @@ "split2": "^4.1.0" } }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + } + } + }, "postgres-array": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", @@ -4796,6 +7725,26 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, + "process-on-spawn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", + "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", + "dev": true, + "requires": { + "fromentries": "^1.2.0" + } + }, + "prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -4822,6 +7771,12 @@ "safe-buffer": "^5.1.0" } }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -4845,12 +7800,27 @@ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, + "release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", + "dev": true, + "requires": { + "es6-error": "^4.0.1" + } + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, "resolve": { "version": "1.22.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", @@ -4915,6 +7885,12 @@ "randombytes": "^2.1.0" } }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -4930,6 +7906,12 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, "sinon": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/sinon/-/sinon-14.0.0.tgz", @@ -4983,11 +7965,31 @@ "source-map": "^0.6.0" } }, + "spawn-wrap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", + "dev": true, + "requires": { + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" + } + }, "split2": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==" }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -5039,6 +8041,32 @@ "resolved": "https://registry.npmjs.org/tarn/-/tarn-3.0.2.tgz", "integrity": "sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==" }, + "tcomb": { + "version": "3.2.29", + "resolved": "https://registry.npmjs.org/tcomb/-/tcomb-3.2.29.tgz", + "integrity": "sha512-di2Hd1DB2Zfw6StGv861JoAF5h/uQVu/QJp2g8KVbtfKnoHdBQl5M32YWq6mnSYBQ1vFFrns5B1haWJL7rKaOQ==", + "dev": true + }, + "tcomb-validation": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tcomb-validation/-/tcomb-validation-3.4.1.tgz", + "integrity": "sha512-urVVMQOma4RXwiVCa2nM2eqrAomHROHvWPuj6UkDGz/eb5kcy0x6P0dVt6kzpUZtYMNoAqJLWmz1BPtxrtjtrA==", + "dev": true, + "requires": { + "tcomb": "^3.0.0" + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -5050,6 +8078,12 @@ "resolved": "https://registry.npmjs.org/tildify/-/tildify-2.0.0.tgz", "integrity": "sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw==" }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -5191,12 +8225,37 @@ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, "typescript": { "version": "4.6.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", "dev": true }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "update-browserslist-db": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", + "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -5224,6 +8283,12 @@ "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "dev": true }, + "validator": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", + "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==", + "dev": true + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -5233,6 +8298,12 @@ "isexe": "^2.0.0" } }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", + "dev": true + }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -5262,6 +8333,18 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, "ws": { "version": "8.5.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", diff --git a/package.json b/package.json index ef7ca24..06f6e7b 100644 --- a/package.json +++ b/package.json @@ -15,8 +15,10 @@ "db:migrate:rollback": "knex migrate:rollback", "db:seed": "knex seed:run", "start": "npm run build && node dist/index.js", - "test": "mocha -r ts-node/register 'test/**/*.spec.ts'", - "test:watch": "npm run test -- --min --watch --watch-files src/**/*,test/**/*" + "test": "mocha 'test/**/*.spec.ts'", + "test:watch": "npm run test -- --min --watch --watch-files src/**/*,test/**/*", + "cover": "nyc npm run test", + "cover:watch": "nyc npm run test" }, "repository": { "type": "git", @@ -38,14 +40,18 @@ "@types/pg": "^8.6.5", "@types/ramda": "^0.28.13", "@types/sinon": "^10.0.11", + "@types/sinon-chai": "^3.2.8", "@types/ws": "^8.5.3", "@typescript-eslint/eslint-plugin": "^5.19.0", "@typescript-eslint/parser": "^5.19.0", "chai": "^4.3.6", "eslint": "^8.13.0", "mocha": "^9.2.2", + "mochawesome": "^7.1.3", + "nyc": "^15.1.0", "rimraf": "^3.0.2", "sinon-chai": "^3.7.0", + "source-map-support": "^0.5.21", "ts-node": "^10.7.0", "ts-node-dev": "^1.1.8", "typescript": "^4.6.3", diff --git a/seeds/events.json b/seeds/events.json index b521c69..f0c7ebb 100644 --- a/seeds/events.json +++ b/seeds/events.json @@ -1,4 +1,896 @@ [ + { + "id": "0d684e8ec2431de586aa3cafbee2f6d308d19b28805e53deabcac3220e9136a5", + "pubkey": "f43c1f9bff677b8f27b602725ea0ad51af221344f69a6b352a74991a4479bac3", + "created_at": 1660407625, + "kind": 3, + "tags": [ + [ + "p", + "b34417513f66497d7b0e1a8406b6689ac32afb184027717e57d281ea19186315", + "wss://nostr-relay.untethr.me" + ], + [ + "p", + "2ef93f01cd2493e04235a6b87b10d3c4a74e2a7eb7c3caf168268f6af73314b5", + "wss://nostr.rocks" + ], + [ + "p", + "13e7f234ef71ffd63fdf3fec4eaec6fdea9bb850a37ba1a854a62b934c97855e", + "wss://nostr-relay.untethr.me" + ], + [ + "p", + "40e162e0a8d139c9ef1d1bcba5265d1953be1381fb4acd227d8f3c391f9b9486", + "wss://nostr-relay.untethr.me" + ], + [ + "p", + "42a0825e980b9f97943d2501d99c3a3859d4e68cd6028c02afe58f96ba661a9d", + "wss://nostr-relay.untethr.me" + ], + [ + "p", + "3efdaebb1d8923ebd99c9e7ace3b4194ab45512e2be79c1b7d68d9243e0d2681", + "wss://nostr-pub.wellorder.net" + ], + [ + "p", + "ed04f9c719af697ac1c045bfff5f841cdf61a0b0d2170c9970f0ce0a04f708bf", + "wss://nostr-pub.wellorder.net" + ], + [ + "p", + "76f5960d381e7146b7f374a4a65afa403038441b46933840c71e436facb82ae7", + "wss://nostr.bitcoiner.social" + ], + [ + "p", + "c697f7f5f59de8ddb93c6b74fdd759ab2dc654bc36315f39770c214607fcd65e", + "wss://nostr-pub.wellorder.net" + ], + [ + "p", + "d3fe840f672c191849f8500762d81af8a258e673b7ff07cf9ce1211c2d0f493d", + "wss://nostr-pub.wellorder.net" + ], + [ + "p", + "14347702b99786cc0ee644620a5f71bc6a88e2882491f57c372f1deaed198701", + "wss://nostr-pub.wellorder.net" + ], + [ + "p", + "cbc5ef6b01cbd1ffa2cb95a954f04c385a936c1a86e1bb9ccdf2cf0f4ebeaccb", + "wss://nostr-pub.wellorder.net" + ], + [ + "p", + "8ff7a6132ffe1bb3600aa20496ab648f1daf6b50ceaa8054a37e6a0b1f7ee491", + "wss://nostr.bitcoiner.social" + ], + [ + "p", + "1f7dfb1b51bd4fb5d15245b28d86fab670a677580e2a0633a2cf76509d02471c", + "wss://nostr-pub.wellorder.net" + ], + [ + "p", + "f5424d002fd0d48fadd6e54879387714c54bfa46535976ff2b385843aaddf8e5", + "wss://nostr.rocks" + ], + [ + "p", + "9aeb3bb495f09be3799048c3ef76649917efc46a8c8a69fefc31a7d012f6eccb", + "wss://nostr-pub.wellorder.net" + ], + [ + "p", + "c181af1aca3a13243a9ef9c302d5e988eaec25caa60c9923e5faed097e52cd69", + "wss://nostr-pub.wellorder.net" + ], + [ + "p", + "a4cb51f4618cfcd16b2d3171c466179bed8e197c43b8598823b04de266cef110", + "wss://nostr-pub.wellorder.net" + ], + [ + "p", + "1221fd0054a6c8ebd07b39c5eeea388f7f0244409f8cd8649ac22fcd668d02f6", + "wss://nostr-pub.wellorder.net" + ], + [ + "p", + "f61abb9886e1f4cd5d20419c197d5d7f3649addab24b6a32a2367124ca3194b4", + "wss://nostr-pub.wellorder.net" + ], + [ + "p", + "b175db709771d32bbe7d8599e0c41f3f8768cc3a8333603d93c6d72d41c42f76", + "wss://nostr-pub.wellorder.net" + ], + [ + "p", + "57225e0adcbad1fddf8d9ba1f5f36d657f134b7e0ea7aed6c0eb7013e4ef45f1", + "wss://nostr-pub.wellorder.net" + ], + [ + "p", + "6446d04ecf9e0bb72c5ae218df9fc6c0a273149d9ecbfbe42519c53667b4405a", + "wss://nostr-pub.wellorder.net" + ], + [ + "p", + "e0d05a5b8c7789eb83f87672f4eb0dca78f99292ab038e5c66f84d97d77b95ae", + "wss://nostr-pub.wellorder.net" + ], + [ + "p", + "46fcbe3065eaf1ae7811465924e48923363ff3f526bd6f73d7c184b16bd8ce4d", + "wss://nostr-pub.wellorder.net" + ], + [ + "p", + "4d5ce768123563bc583697db5e84841fb528f7b708d966f2e546286ce3c72077" + ], + [ + "p", + "8d233d8babe9f40f170c5b0706fd4832869e07d040cfcd6b702d57e070aad1cb", + "wss://nostr-pub.wellorder.net" + ], + [ + "p", + "566516663d91d4fef824eaeccbf9c2631a8d8a2efee8048ca5ee6095e6e5c843", + "wss://nostr-pub.wellorder.net" + ], + [ + "p", + "0000a0fa65fcccd99e6fd32fc7870339af40f4a94703ea30999fc5c091daa222", + "wss://nostr-pub.wellorder.net" + ], + [ + "p", + "d987084c48390a290f5d2a34603ae64f55137d9b4affced8c0eae030eb222a25" + ], + [ + "p", + "3878d95db7b854c3a0d3b2d6b7bf9bf28b36162be64326f5521ba71cf3b45a69", + "wss://nostr.rocks" + ], + [ + "p", + "7f0be893dc501f391260aa2088de28b35280dfd4ae8f8bfa9bdbb7319952755b" + ], + [ + "p", + "44c39a01cbdeb70905aaa9cbd614a1ef39d0f4386d0dee9d7493e6e680548eb9", + "wss://nostr-relay.untethr.me" + ], + [ + "p", + "484712e818a8373182c64e53c0d1fb9cec5de96daa2d39424b42d7b0dcd8e6c9" + ], + [ + "p", + "b2222fc7844fef7b002440b3216213d9b01dcf5e412a604ddfa50967db4d8bd6", + "wss://nostr-relay.untethr.me" + ], + [ + "p", + "78aa0c9a0fe2d2476469db25f19a293a6606c113fe2e87e17b8ab51cb120dbb7" + ], + [ + "p", + "9ec7a778167afb1d30c4833de9322da0c08ba71a69e1911d5578d3144bb56437", + "wss://nostr.rocks" + ], + [ + "p", + "57f03c1604d109be088dbac71371b6939833dd24fdcf2886d3382a0479c0d4de" + ], + [ + "p", + "778fdd199044a2e8dc3cfac3c274f5577ed78c22fb3b5ccb13df6956980eff4c" + ], + [ + "p", + "e76e705283775febf3d5f4f97662648582d42ff822435924f21a47c8d46c5921", + "wss://nostr-relay.untethr.me" + ], + [ + "p", + "e794d71b8f7426a291004f592b758438a25d0012e5bb969e53307b3785fd5211", + "wss://nostr-pub.wellorder.net" + ], + [ + "p", + "88a2c3b420b4a027706a98600d1fd744ac6cfd12e201b74189be5ef4b2b3aa45", + "wss://nostr-relay.untethr.me" + ], + [ + "p", + "004db7605cfeba09b15625deb77c9369029f370591d68231b7c4dfd43f8f6f4f" + ], + [ + "p", + "b238e136091cb01cd21606dac1a2f503f504e7e8e7c75d98fcefd30aed084a1c", + "wss://nostr-relay.untethr.me" + ], + [ + "p", + "32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245" + ], + [ + "p", + "b2d670de53b27691c0c3400225b65c35a26d06093bcc41f48ffc71e0907f9d4a" + ], + [ + "p", + "dd81a8bacbab0b5c3007d1672fb8301383b4e9583d431835985057223eb298a5" + ], + [ + "p", + "ed1d0e1f743a7d19aa2dfb0162df73bacdbc699f67cc55bb91a98c35f7deac69" + ], + [ + "p", + "b2d1d0fc5b771a7041054ebded57bc3bf20f69ccbb9dc9b8ef432801d247df7c" + ], + [ + "p", + "d947d8f1be338c5cff194a6630453fa43c924eb9f58c339c68b26b2193efa276" + ], + [ + "p", + "6112a73a50518ed631dc6804a238525acdf10f26343199bc25ed7c9f5a0685c5" + ], + [ + "p", + "22e804d26ed16b68db5259e78449e96dab5d464c8f470bda3eb1a70467f2c793" + ], + [ + "p", + "1bbb8324577ac089607e45813bac499ebdab4621d029f8c02b2c82b4410fd3f4" + ], + [ + "p", + "e668a111aa647e63ef587c17fb0e2513d5c2859cd8d389563c7640ffea1fc216" + ], + [ + "p", + "2508ed2c2ab3f6728a880fafbc0895a2afeacbb74eb69847255fb60564af0d85" + ], + [ + "p", + "c2bb5d6529095edbfbdbe3f136175c146c6706526325b32da881c7c34c7b1ab8" + ], + [ + "p", + "8f87ac34eb27a86fc917866fbc9016429bd89cf1d0d27a038a8eaac4c62c63e5" + ], + [ + "p", + "52cb4b34775fa781b6a964bda0432dbcdfede7a59bf8dfc279cbff0ad8fb09ff" + ], + [ + "p", + "3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d" + ], + [ + "p", + "7e88f589d2677ea4a863c72af5d0e85fbe1d3db111667c50d33fa42196a1afc0" + ], + [ + "p", + "f0bed2e11260f0f77f781db928f40a34c18713fda1918d3be996f91d0776e985" + ], + [ + "p", + "565152b2d1793a253cba282588a4b287b0ab2acbe7faa7021ea0dced39d33716" + ], + [ + "p", + "d9c8c00017a2a345c2f32132436a26e1c72cb7a57e7b6b316f62dee2f8bcf8dd" + ], + [ + "p", + "b28a0714f86fd344a7ecad9566c2e33f8485ef560a702e15c3f537914abc152d" + ], + [ + "p", + "7e7272c475d920ad408e7a6faf9a123aa7b882cba7151e6105a0fc9d212fb240" + ], + [ + "p", + "ea42658e9a1291a32d1b74793edaef3d8757589a32b16931cacd85ba5470ea7c" + ], + [ + "p", + "aff9a9f017f32b2e8b60754a4102db9d9cf9ff2b967804b50e070780aa45c9a8" + ], + [ + "p", + "b74848fa6f8975f00b04ce12ccbe18673ad1f4511f66d4e5a3a151720fdce62a" + ], + [ + "p", + "7e3b8e221023e92c297cb35937d88e495de780ac3190c23e1e2e1e6274f43f59" + ], + [ + "p", + "547fcc5c7e655fe7c83da5a812e6332f0a4779c87bf540d8e75a4edbbf36fe4a" + ], + [ + "p", + "a12535e8bf4f712211b68f7fe7303d03c3c5cfe8155116d553fe6b8adba85d41" + ], + [ + "p", + "772405d14585d9d8fe481cef6ce560b83f03c24f0efc179415530d54eee97534" + ], + [ + "p", + "2163edbd81fa58e64c7e38bf968dda1b2f42811b78ea06accd32007bbb8a018b" + ], + [ + "p", + "e37d948a0eee45e6cd113faaad934fcf17a97de2236c655b70650d4252daa9d3" + ], + [ + "p", + "e9e4276490374a0daf7759fd5f475deff6ffb9b0fc5fa98c902b5f4b2fe3bba2" + ], + [ + "p", + "4557aab9aae76a892e01568064a9e262e613690421a79e584b8cc4c5ca9afb7e" + ], + [ + "p", + "9630f464cca6a5147aa8a35f0bcdd3ce485324e732fd39e09233b1d848238f31" + ], + [ + "p", + "1265c1c3d41f0f05bf306224ec40628231a5086a2eaa36643b3982a4eba19c9f" + ], + [ + "p", + "04c915daefee38317fa734444acee390a8269fe5810b2241e5e6dd343dfbecc9" + ], + [ + "p", + "d3646691ba5b1d796c1e1b3430df00fe1189ec9c232877adde18c8f656af18f0" + ], + [ + "p", + "b7c66ce6f7bbe034e96be54c2ffc0adf631a889abc0834ba1431171b67c489aa" + ], + [ + "p", + "8355095016fddbe31fcf1453b26f613553e9758cf2263e190eac8fd96a3d3de9" + ], + [ + "p", + "06fca9f06f74cf86a16fe4c2feec508700643e2b105b519fd93d35332c51ad53" + ], + [ + "p", + "6b0d4c8d9dc59e110d380b0429a02891f1341a0fa2ba1b1cf83a3db4d47e3964" + ], + [ + "p", + "35d26e4690cbe1a898af61cc3515661eb5fa763b57bd0b42e45099c8b32fd50f" + ], + [ + "p", + "dcecb5c4c228e15a1f04305c34b39b7ff67675544cb7dc74dd5c715cf62ada74" + ], + [ + "p", + "b2c61317687060b2b7e9cb7f7fde04f30bab23e12bf471f8d356000ca2b12b4a" + ], + [ + "p", + "51fc7209201b1414f721c3d2d2b3430699b1e6317716c5182cc1d7945072e358" + ], + [ + "p", + "ce5061bfcc16476b9bde3f1d5b3ec7730c4361cf8c827fbd9c14eb8c7003a1de" + ], + [ + "p", + "0810b5bc4cddc3e7624a1f6acbdccdc95c6e9409c144ce83365ee04a3a63314e" + ], + [ + "p", + "975bbd239f0b7e25a080675d3db5892492ea9e9c7705c819ba3dafd8de95f3d9" + ], + [ + "p", + "76f928b303b095a6f17784151acd9a5127d183cb5f989a173b00bd0c12d07e83" + ], + [ + "p", + "d4d4fdde8ab4924b1e452e896709a3bd236da4c0576274b52af5992d4d34762c" + ], + [ + "p", + "ac9ec020170155f0feb347f0d777ee5fc38dd1f36353093046323646cff5169f" + ], + [ + "p", + "d91191e30e00444b942c0e82cad470b32af171764c2275bee0bd99377efd4075" + ], + [ + "p", + "ea75802dd1c86933c1e20c582541bb283d44c88e3445ed90d4375fc3d973f3a0" + ], + [ + "p", + "9682c33f9024dadb1bffdf762c3156e26b4aa340de8d06c91ca537fcc0fdb3a9" + ], + [ + "p", + "a8f14f05c64f9e62bdada89c21a52f09aa5d7948b47ccf52da1be16b0de9efac" + ], + [ + "p", + "80482e60178c2ce996da6d67577f56a2b2c47ccb1c84c81f2b7960637cb71b78" + ], + [ + "p", + "b10c0000079a83cf26815dc7538818d8d56a2983e374e30a4143e50060978457" + ], + [ + "p", + "ae683cd251952448ad0d7b8ed6c2e0f8ab451578250cb35f0c977275b56b056e" + ], + [ + "p", + "954aaf69c2e7c9fb3f9998f61944ab8ab08ce3c8679ecd985e4486a6eb696217" + ], + [ + "p", + "d7f0e3917c466f1e2233e9624fbd6d4bd1392dbcfcaf3574f457569d496cb731" + ], + [ + "p", + "104749bc9151a0e54b9845ee50fc4b559439dd1ada006e36a6c49ad3ea16a55c" + ], + [ + "p", + "cf9413eb6bbe55c8a3c10119ec0635e134fa266f2c50f825d7225da9b92ecc4e" + ], + [ + "p", + "bae77874946ec111f94be59aef282de092dc4baf213f8ecb8c9e15cb7ed7304e" + ], + [ + "p", + "44bb2dd1615ed2a527946c41d854995f18866a8feffa88eb375728c20aeea30c" + ], + [ + "p", + "62903b1ff41559daf9ee98ef1ae67cc52f301bb5ce26d14baba3052f649c3f49" + ], + [ + "p", + "9a29ee8c3771573e5306bb7701182e970b188ce3552713ca68a157ebc3c0bf75" + ], + [ + "p", + "e3f0c72e7b653f395f64e03519bae3efeac184bcf0b3f38bdccb62a4d2aa5d30" + ], + [ + "p", + "9b9f5f1ec13105c8d1c2ea16aa952e98640b170b871420980ea11b18eb1f1e03" + ], + [ + "p", + "2b36fb6ae1022d0d4eac2a9f13fc2638f3350acc9b07bdca1de43a7c63429644" + ], + [ + "p", + "f00c952da33c06e02c930f76aba1085021b98075657daaff8ad119edcfde691e" + ], + [ + "p", + "8837f562e064282e4fb9902ae6062ee436a53236909a68c6d19564df6c208fbe" + ], + [ + "p", + "f43c1f9bff677b8f27b602725ea0ad51af221344f69a6b352a74991a4479bac3" + ], + [ + "p", + "66e346dfe3a4e572359519f086bf45771a19224343183aa1c86b9f9e31b78ac9" + ], + [ + "p", + "8c24f2bf7df33aea0f05706162176343f34389d95ca5696dba1c2768887f586f" + ], + [ + "p", + "343558f07b07ffcb24b27b73812d74d4ff8f46e81ea903f1e7f37d30d907bcfc" + ], + [ + "p", + "57400e5b11c8b52ed04765df605fe9c30aa50abdeacff49d3de6b58359c907ed" + ], + [ + "p", + "4535551a40271b059ab92b71e7ab7e8700061a2d91b0d20f313ef82f052eb085" + ], + [ + "p", + "8431af1a305fd23b869a12ad87118f78d87bec6e2a431e38fd1fabdac281ff45" + ], + [ + "p", + "4b12f6132a5ba813bdf55bcbf9d1acfefb02dabf67191dad71b455668c429b36" + ], + [ + "p", + "747adf8e9036ed78b47eca762bf80bc41af34df6da7bd44876cf2d27e6b7dd64" + ], + [ + "p", + "b832d7fdcf4f6fed87ccfc6e10426710b968d6c260206fecb24aa096879c44ce" + ], + [ + "p", + "09e935f7c01fda340051a4700cfb9dde533202bdf56808f68cafef6bae07a5bd" + ], + [ + "p", + "2b26251002f9bdd990da1990bcc378ac5c816f1446e82167819ab60c4b9a6ca9" + ], + [ + "p", + "2183e94758481d0f124fbd93c56ccaa45e7e545ceeb8d52848f98253f497b975" + ], + [ + "p", + "2bee8a0f48dcc76df4385df95ee184331e41fbde0731164c6627512b9b34f005" + ], + [ + "p", + "d0cb47a354003467a3a7cbc50ddc0c29250851f9040656bad9d0ab7adb5b7382" + ], + [ + "p", + "47bae3a008414e24b4d91c8c170f7fce777dedc6780a462d010761dca6482327" + ], + [ + "p", + "38b07a31f3b23dbeb9f59deb7bec5b993173fb4022206980f3809d0b68abf959" + ], + [ + "p", + "e6a92d8b6c20426f78bba8510ccdc73df5122814a3bac1d553adebac67a92b27" + ], + [ + "p", + "ad5aab5be883a571ea37b231cd996d37522e77d0f121cedfd6787b91d848268e" + ], + [ + "p", + "6d334336f9ba6c35fdc3b87950721b123f56f0d686fe9a5b4c95d2568b2398d8" + ], + [ + "p", + "c8b430569a2c95aa8d6eceea67f40c16e17f1ac10755fcf17f2ba772f3febd96" + ], + [ + "p", + "3b6a202702bc8c236ff2900aa564575fe56ae5a9e5b8386d3307c79b392674ab" + ], + [ + "p", + "d97cd1bcc21e393e5a8b053fba9db385ace78710ba68a6bc7828d57ad82e88bd" + ], + [ + "p", + "3235036bd0957dfb27ccda02d452d7c763be40c91a1ac082ba6983b25238388c" + ], + [ + "p", + "b99b149370e4f8533ce53d143af3f39e1f2628a39847f7fdd7544c9585da9299" + ], + [ + "p", + "e4c47aedea8ea54255f5ba07a77053b24553e9b975435e56da343da19aec7881" + ], + [ + "p", + "552b4d02f9db02f11bda4b4c1cdefe8852c6c6b6ca0e03b7013f182c854413b7" + ], + [ + "p", + "3f8e32d654fbc0da5fd570d70381a3e59843b208c5574a74a2305527bce8382b" + ], + [ + "p", + "84620a7b6a3d42b96b3e8a392fabca1e476e9049188808b0ecf3d64d36efffd1" + ], + [ + "p", + "047f497e13073d4303383c7abcc296a3b5b5956d243eafa6423c675a831a5cc1" + ], + [ + "p", + "b875065f96ff58c82e951f543857515798f5e50c6903d9602b425e2cd957f1ce" + ], + [ + "p", + "edfa27d49d2af37ee331e1225bb6ed1912c6d999281b36d8018ad99bc3573c29" + ], + [ + "p", + "8c0da4862130283ff9e67d889df264177a508974e2feb96de139804ea66d6168" + ], + [ + "p", + "bc1f8b83991f46f6f2f2b4569314d50b229e9f2761716ca56d4572a190801a44" + ], + [ + "p", + "84fe3febc748470ff1a363db8a375ffa1ff86603f2653d1c3c311ad0a70b5d0c" + ], + [ + "p", + "d543c820050efd6d2c1536b0990111ac293a4431e6a12929432366e0aa8001e7" + ], + [ + "p", + "7cf68b47a2b243d06322bfdb6a1c2422fb8b3a18d18a5c90c27b59e8f612553e" + ], + [ + "p", + "f0c864cf573de171053bef4df3b31c6593337a097fbbd9f20d78506e490c6b64" + ], + [ + "p", + "3702743c98430ba152e635b081637716a3c949c13ad3ad1e6c80e6e7d41fbc8a" + ], + [ + "p", + "2a043132d98c2457fb3581fdeddab380a8eda3760b2605f676be5059ed260066" + ], + [ + "p", + "c5072866b41d6b88ab2ffee16ad7cb648f940867371a7808aaa94cf7d01f4188" + ], + [ + "p", + "51535ad9f0e13a810f73ea8829a79b3733bd1fffb767c4885990b02f59103a13" + ], + [ + "p", + "3707f1efc7515524dce41d3bf50bfd9fdaed3494620b5f94fcf16d2766da4ec2" + ], + [ + "p", + "dbab9040bc1f0c436b0f92f517702498358edc1fde2c7884d0e1036c739d44f3" + ], + [ + "p", + "904ea00a4a245559d6184be5c6e2cf2c66ea7fc91eb5f1eb5349506d19d63a11" + ], + [ + "p", + "9ac12013d20fae4f8829ba4e5ba6343e410288d3a0752d6143386d2c1af1f57e" + ], + [ + "p", + "7bc0ff3de7b2205ed8bc366f7657138eacb5164d43d9580b8f5b47b7e6a7c235" + ], + [ + "p", + "c5cfda98d01f152b3493d995eed4cdb4d9e55a973925f6f9ea24769a5a21e778" + ], + [ + "p", + "887645fef0ce0c3c1218d2f5d8e6132a19304cdc57cd20281d082f38cfea0072" + ], + [ + "p", + "88a502f72f216c93eb840fa805c1a215b97e0800ab2dfa017450d38cb4b60a03" + ], + [ + "p", + "3f152ab665d1079108529ff6bf0ba48809b6788b22ab8a3d76f7a3f63bec19a0" + ], + [ + "p", + "27da3f032e0fea007947b0da12f1183630c5a2da79d7202b96f35f16ef6ce48e" + ], + [ + "p", + "de29897a4a9086a1c5e8f6c7d06691afeda77103eea35eabecbfda21189fa995" + ], + [ + "p", + "0a2bfced3f7c8a08d88a697da80d7d85f12e69260cf308de27da1f5b6f65bf00" + ], + [ + "p", + "95405f16211a88c869ec87b684cb450136b7bf2420e236f9ec793385893d01e8" + ], + [ + "p", + "f9e24c0a9544d119b4f0e31ceac53d1b650c763e378541e1dfde402e350f5792" + ], + [ + "p", + "7f3bd39154ce2994d67bc89b782c12871bcd7a30093b4700b07c438fb7b906db" + ], + [ + "p", + "1d914450975db68d850f13a8950abda9dc6a1b140de6460634f839c49f5de958" + ], + [ + "p", + "545320c902a7c7de8f44c6c3c0e7870b72e8ddfdd203139db18b5d518f6771c1" + ], + [ + "p", + "e740b0275f467618fdebf8ad54cb597deabbca2a0490d314e509730c50118499" + ], + [ + "p", + "179744407ac4fda143a8635e7ae9c9eabf3ab107a818a4f740a9e46b39412a42" + ], + [ + "p", + "2d11d3a3123287b478e19e9ef011bceb48e8f14a0d58e22bd156f35a839c5640" + ], + [ + "p", + "ce5a47f6328beab97310a27269c4725988ced2aec93fcd3ab01282f667d696c3" + ], + [ + "p", + "c7eda660a6bc8270530e82b4a7712acdea2e31dc0a56f8dc955ac009efd97c86" + ], + [ + "p", + "e8caa2028a7090ffa85f1afee67451b309ba2f9dee655ec8f7e0a02c29388180" + ], + [ + "p", + "9c8e6bcf8438812fe44ccd32ba4208b3c72193a944d7e6f68ff311b48a28523e" + ], + [ + "p", + "7215b2db8754494fd3452b7f2d28b56e23863b95446bf68d79f980a7ad5ec7cd" + ] + ], + "content": "{\"wss://rsslay.fiatjaf.com\":{\"read\":true,\"write\":false},\"wss://nostr-pub.wellorder.net\":{\"read\":true,\"write\":true},\"wss://expensive-relay.fiatjaf.com\":{\"read\":true,\"write\":true},\"wss://nostr.rocks\":{\"read\":true,\"write\":true},\"wss://nostr-relay.untethr.me\\t\":{\"read\":true,\"write\":true},\"wss://relayer.fiatjaf.com\":{\"read\":true,\"write\":true},\"wss://nostr-relay.untethr.me\":{\"read\":true,\"write\":true},\"wss://nostr-relay.wlvs.space\":{\"read\":true,\"write\":true},\"wss://nostr.openchain.fr\":{\"read\":true,\"write\":true},\"wss://relay.futohq.com\":{\"read\":true,\"write\":true}}", + "sig": "f5935788cf7a5a402b14f3199f2ecb2f181f710a475693f2866fe3cd8bdaf900ec9edb9f831d23783023e0aa9011fe403fbaa4e4c93562d56ac8f463fd201e3d" + }, + { + "id": "2e6dcaa6f7767b2f0ad7756e5bb19145dcd9817beb078ca7478154ad4fad54cd", + "pubkey": "42a0825e980b9f97943d2501d99c3a3859d4e68cd6028c02afe58f96ba661a9d", + "created_at": 1660400296, + "kind": 3, + "tags": [ + [ + "p", + "3efdaebb1d8923ebd99c9e7ace3b4194ab45512e2be79c1b7d68d9243e0d2681" + ], + [ + "p", + "42a0825e980b9f97943d2501d99c3a3859d4e68cd6028c02afe58f96ba661a9d" + ], + [ + "p", + "46fcbe3065eaf1ae7811465924e48923363ff3f526bd6f73d7c184b16bd8ce4d" + ], + [ + "p", + "2ef93f01cd2493e04235a6b87b10d3c4a74e2a7eb7c3caf168268f6af73314b5" + ], + [ + "p", + "32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245" + ], + [ + "p", + "2a043132d98c2457fb3581fdeddab380a8eda3760b2605f676be5059ed260066" + ], + [ + "p", + "35d26e4690cbe1a898af61cc3515661eb5fa763b57bd0b42e45099c8b32fd50f" + ], + [ + "p", + "aff9a9f017f32b2e8b60754a4102db9d9cf9ff2b967804b50e070780aa45c9a8" + ], + [ + "p", + "3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d" + ], + [ + "p", + "9ac12013d20fae4f8829ba4e5ba6343e410288d3a0752d6143386d2c1af1f57e" + ], + [ + "p", + "d7f0e3917c466f1e2233e9624fbd6d4bd1392dbcfcaf3574f457569d496cb731" + ], + [ + "p", + "47bae3a008414e24b4d91c8c170f7fce777dedc6780a462d010761dca6482327" + ], + [ + "p", + "dd81a8bacbab0b5c3007d1672fb8301383b4e9583d431835985057223eb298a5" + ], + [ + "p", + "c5072866b41d6b88ab2ffee16ad7cb648f940867371a7808aaa94cf7d01f4188" + ], + [ + "p", + "52b4a076bcbbbdc3a1aefa3735816cf74993b1b8db202b01c883c58be7fad8bd" + ], + [ + "p", + "80482e60178c2ce996da6d67577f56a2b2c47ccb1c84c81f2b7960637cb71b78" + ], + [ + "p", + "e37d948a0eee45e6cd113faaad934fcf17a97de2236c655b70650d4252daa9d3" + ], + [ + "p", + "22e804d26ed16b68db5259e78449e96dab5d464c8f470bda3eb1a70467f2c793" + ], + [ + "p", + "4570d7a0b49b5524797120810116a2a5c18281423b173a557056f08f15c5382d" + ], + [ + "p", + "4535551a40271b059ab92b71e7ab7e8700061a2d91b0d20f313ef82f052eb085" + ], + [ + "p", + "edfa27d49d2af37ee331e1225bb6ed1912c6d999281b36d8018ad99bc3573c29" + ], + [ + "p", + "4b12f6132a5ba813bdf55bcbf9d1acfefb02dabf67191dad71b455668c429b36" + ], + [ + "p", + "f5424d002fd0d48fadd6e54879387714c54bfa46535976ff2b385843aaddf8e5" + ], + [ + "p", + "047f497e13073d4303383c7abcc296a3b5b5956d243eafa6423c675a831a5cc1" + ], + [ + "p", + "8c0da4862130283ff9e67d889df264177a508974e2feb96de139804ea66d6168" + ], + [ + "p", + "f43c1f9bff677b8f27b602725ea0ad51af221344f69a6b352a74991a4479bac3" + ], + [ + "p", + "d987084c48390a290f5d2a34603ae64f55137d9b4affced8c0eae030eb222a25" + ], + [ + "p", + "c7eda660a6bc8270530e82b4a7712acdea2e31dc0a56f8dc955ac009efd97c86" + ] + ], + "content": "{\"wss:\\/\\/nostr.bitcoiner.social\":{\"write\":true,\"read\":true},\"wss:\\/\\/relay.damus.io\":{\"write\":true,\"read\":true},\"wss:\\/\\/nostr.onsats.org\":{\"write\":true,\"read\":true},\"wss:\\/\\/relay.zerosequioso.com\":{\"write\":true,\"read\":true},\"wss:\\/\\/relay.nostr.info\":{\"write\":true,\"read\":true}}", + "sig": "8d97d1027d28c0492c0d4733405e9680b8eea332418a3f5e65c13ba6d2c4e2db38c4d405cf06d144316a788cb9a7c6805e28aef286c775981872c922e6d2cbfd" + }, { "id": "92242fb2c2d2c8228fad83d54caeaea3b7b596bd2413cbc840c91763e276edcb", "pubkey": "32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245", diff --git a/src/handlers/event-message-handler.ts b/src/handlers/event-message-handler.ts index ff77072..afbc1a3 100644 --- a/src/handlers/event-message-handler.ts +++ b/src/handlers/event-message-handler.ts @@ -13,6 +13,7 @@ export class EventMessageHandler implements IMessageHandler { public async handleMessage(message: IncomingEventMessage): Promise { const [, event] = message + console.log('Received event:', event) if (!await isEventSignatureValid(event) || !isEventIdValid(event)) { console.warn(`Event ${event.id} from ${event.pubkey} with signature ${event.sig} is not valid`) return diff --git a/src/handlers/subscribe-message-handler.ts b/src/handlers/subscribe-message-handler.ts index 7886afe..cb9786b 100644 --- a/src/handlers/subscribe-message-handler.ts +++ b/src/handlers/subscribe-message-handler.ts @@ -7,7 +7,7 @@ import { IWebSocketAdapter } from '../@types/adapters' import { IEventRepository } from '../@types/repositories' import { SubscriptionId, SubscriptionFilter } from '../@types/subscription' import { toNostrEvent } from '../utils/event' -import { streamEach, streamMap } from '../utils/transforms' +import { streamEach, streamEnd, streamMap } from '../utils/stream' import { Event } from '../@types/event' @@ -39,10 +39,8 @@ export class SubscribeMessageHandler implements IMessageHandler, IAbortable { await pipeline( findEvents, streamMap(toNostrEvent), - streamEach( - sendEvent, - sendEOSE, // NIP-15: End of Stored Events Notice - ), + streamEach(sendEvent), + streamEnd(sendEOSE), // NIP-15: End of Stored Events Notice { signal: this.abortController.signal, }, diff --git a/src/repositories/event-repository.ts b/src/repositories/event-repository.ts index 8b9410a..6a3b2ee 100644 --- a/src/repositories/event-repository.ts +++ b/src/repositories/event-repository.ts @@ -6,7 +6,7 @@ import { DBEvent, Event } from '../@types/event' import { IEventRepository } from '../@types/repositories' import { SubscriptionFilter } from '../@types/subscription' import { isGenericTagQuery } from '../utils/filter' -import { toBuffer, toJSON } from '../utils/transforms' +import { toBuffer, toJSON } from '../utils/transform' const evenLengthTruncate = (input: string) => input.substring(0, input.length >> 1 << 1) diff --git a/src/schemas/message-schema.ts b/src/schemas/message-schema.ts index 4ca07fc..58ed08c 100644 --- a/src/schemas/message-schema.ts +++ b/src/schemas/message-schema.ts @@ -1,4 +1,6 @@ +import Joi from 'joi' import Schema from 'joi' +import { MessageType } from '../@types/messages' import { subscriptionSchema } from './base-schema' import { eventSchema } from './event-schema' import { filterSchema } from './filter-schema' @@ -7,18 +9,24 @@ export const eventMessageSchema = Schema.array().ordered( Schema.string().valid('EVENT').required(), eventSchema.required(), ) + .label('EVENT message') export const reqMessageSchema = Schema.array() - .ordered(Schema.string().valid('REQ').required(), Schema.string().required()) - .items(filterSchema.required()) + .ordered(Schema.string().valid('REQ').required(), Schema.string().required().label('subscriptionId')) + .items(filterSchema.required().label('filter')).max(12) + .label('REQ message') export const closeMessageSchema = Schema.array().ordered( Schema.string().valid('CLOSE').required(), - subscriptionSchema.required(), -) + subscriptionSchema.required().label('subscriptionId'), +).label('CLOSE message') -export const messageSchema = Schema.alternatives( - eventMessageSchema, - reqMessageSchema, - closeMessageSchema, -) + +export const messageSchema = Schema.alternatives() + .conditional(Joi.ref('.'), { + switch: [ + { is: Joi.array().ordered(Joi.string().equal(MessageType.EVENT)).items(Joi.any()), then: eventMessageSchema }, + { is: Joi.array().ordered(Joi.string().equal(MessageType.REQ)).items(Joi.any()), then: reqMessageSchema }, + { is: Joi.array().ordered(Joi.string().equal(MessageType.CLOSE)).items(Joi.any()), then: closeMessageSchema }, + ], + }) diff --git a/src/utils/deep-freeze.ts b/src/utils/deep-freeze.ts deleted file mode 100644 index 08d19ed..0000000 --- a/src/utils/deep-freeze.ts +++ /dev/null @@ -1,6 +0,0 @@ -export const deepFreeze = (obj) => { - Object.getOwnPropertyNames(obj) - .filter((prop) => obj[prop] && typeof obj[prop] === 'object') - .forEach(deepFreeze) - Object.freeze(obj) -} diff --git a/src/utils/event.ts b/src/utils/event.ts index 24332f6..b08e369 100644 --- a/src/utils/event.ts +++ b/src/utils/event.ts @@ -4,7 +4,7 @@ import { applySpec, pipe, prop } from 'ramda' import { CanonicalEvent, Event } from '../@types/event' import { SubscriptionFilter } from '../@types/subscription' import { isGenericTagQuery } from './filter' -import { fromBuffer } from './transforms' +import { fromBuffer } from './stream' export const serializeEvent = (event: Partial): CanonicalEvent => [ 0, @@ -26,7 +26,7 @@ export const toNostrEvent = applySpec({ }) export const isEventMatchingFilter = (filter: SubscriptionFilter) => (event: Event): boolean => { - const startsWith = (input: string | undefined) => (prefix) => input?.startsWith(prefix) + const startsWith = (input: string) => (prefix) => input.startsWith(prefix) if (Array.isArray(filter.ids) && ( !filter.ids.some(startsWith(event.id)) diff --git a/src/utils/hash-event.ts b/src/utils/hash-event.ts deleted file mode 100644 index 88f6d2e..0000000 --- a/src/utils/hash-event.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { createHash } from 'crypto' - -import { Event } from '../@types/event' -import { serializeEvent } from './serialize-event' - -export const getEventHash = (event: Event) => { - const hash = createHash('sha256') - .update(Buffer.from(serializeEvent(event))) - .digest() - - return Buffer.from(hash).toString('hex') -} diff --git a/src/utils/serialize-event.ts b/src/utils/serialize-event.ts deleted file mode 100644 index 13e7d22..0000000 --- a/src/utils/serialize-event.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Event } from '../@types/event' - -export const serializeEvent = ({ - pubkey, - created_at, - kind, - tags, - content, -}: Event): string => - JSON.stringify([0, pubkey, created_at, kind, tags, content]) diff --git a/src/utils/stream.ts b/src/utils/stream.ts new file mode 100644 index 0000000..661b822 --- /dev/null +++ b/src/utils/stream.ts @@ -0,0 +1,24 @@ +import { PassThrough, Transform } from 'stream' + +export const streamMap = (fn: (chunk) => any) => new Transform({ + objectMode: true, + transform(chunk, _encoding, callback) { + callback(null, fn(chunk)) + } +}) + +export const streamEach = (writeFn: (chunk: any) => void) => new PassThrough({ + objectMode: true, + write(chunk, _encoding, callback) { + writeFn(chunk) + callback(null) + }, +}) + +export const streamEnd = (finalFn: () => void) => new PassThrough({ + objectMode: true, + final(callback) { + finalFn() + callback() + }, +}) diff --git a/src/utils/transform.ts b/src/utils/transform.ts new file mode 100644 index 0000000..71aed3b --- /dev/null +++ b/src/utils/transform.ts @@ -0,0 +1,5 @@ +export const toJSON = (input: any) => JSON.stringify(input) + +export const toBuffer = (input: any) => Buffer.from(input, 'hex') + +export const fromBuffer = (input: Buffer) => input.toString('hex') diff --git a/src/utils/transforms.ts b/src/utils/transforms.ts deleted file mode 100644 index 6b099e9..0000000 --- a/src/utils/transforms.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Transform, Writable } from 'stream' - -export const toJSON = (input: any) => JSON.stringify(input) - -export const toBuffer = (input: any) => Buffer.from(input, 'hex') - -export const fromBuffer = (input: Buffer) => input.toString('hex') - -export const streamMap = (fn: (chunk) => any) => new Transform({ - objectMode: true, - transform(chunk, _encoding, callback) { - callback(null, fn(chunk)) - } -}) - -export const streamEach = (writeFn: (chunk: any) => void, finalFn: () => void) => new Writable({ - objectMode: true, - write(chunk, _encoding, callback) { - writeFn(chunk) - callback() - }, - final(callback) { - finalFn() - callback() - }, -}) diff --git a/test/unit/data/events.ts b/test/unit/data/events.ts new file mode 100644 index 0000000..957d3c2 --- /dev/null +++ b/test/unit/data/events.ts @@ -0,0 +1,899 @@ +import { Event } from '../../../src/@types/event' + +export const getEvents = (): Event[] => [ + { + 'id': 'e527fe8b0f64a38c6877f943a9e8841074056ba72aceb31a4c85e6d10b27095a', + 'pubkey': '55b702c167c85eb1c2d5ab35d68bedd1a35b94c01147364d2395c2f66f35a503', + 'created_at': 1564498626, + 'kind': 0, + 'tags': [], + 'content': '{"name":"ottman@minds.io","about":"","picture":"https://feat-2311-nostr.minds.io/icon/1002952989368913934/medium/1564498626/1564498626/1653379539"}', + 'sig': 'd1de98733de2b412549aa64454722d9b66ab3c68e9e0d0f9c5d42e7bd54c30a06174364b683d2c8dbb386ff47f31e6cb7e2f3c3498d8819ee80421216c8309a9' + }, + { + 'id': 'cf8de9db67a1d7203512d1d81e6190f5e53abfdc0ac90275f67172b65a5b09a0', + 'pubkey': 'e8b487c079b0f67c695ae6c4c2552a47f38adfa2533cc5926bd2c102942fdcb7', + 'created_at': 1645030752, + 'kind': 1, + 'tags': [['r', 'https://fiatjaf.com']], + 'content': 'r', + 'sig': '53d12018d036092794366283eca36df4e0cabd014b6e91bbf684c8bb9bbbe9dedafa77b6b928587e11e05e036227598dded8713e8da17d55076e12242b361542' + }, + { + 'id': '444b1e4cf4eea42d35c7f1be58ab9cf6a942153593251d66e0471084a3430dae', + 'pubkey': '32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245', + 'created_at': 1652470951, + 'kind': 2, + 'tags': [], + 'content': 'wss://relay.damus.io', + 'sig': '1d8625765364edffa42f83fa1e53bf3486e7fb94eec065dd0a00b48dd777702fafbfa1063ef27f1dd27b3892132e4d1703fb0da2bfb98b70045f826ee76d5526' + }, + { + 'id': '0d684e8ec2431de586aa3cafbee2f6d308d19b28805e53deabcac3220e9136a5', + 'pubkey': 'f43c1f9bff677b8f27b602725ea0ad51af221344f69a6b352a74991a4479bac3', + 'created_at': 1660407625, + 'kind': 3, + 'tags': [ + [ + 'p', + 'b34417513f66497d7b0e1a8406b6689ac32afb184027717e57d281ea19186315', + 'wss://nostr-relay.untethr.me' + ], + [ + 'p', + '2ef93f01cd2493e04235a6b87b10d3c4a74e2a7eb7c3caf168268f6af73314b5', + 'wss://nostr.rocks' + ], + [ + 'p', + '13e7f234ef71ffd63fdf3fec4eaec6fdea9bb850a37ba1a854a62b934c97855e', + 'wss://nostr-relay.untethr.me' + ], + [ + 'p', + '40e162e0a8d139c9ef1d1bcba5265d1953be1381fb4acd227d8f3c391f9b9486', + 'wss://nostr-relay.untethr.me' + ], + [ + 'p', + '42a0825e980b9f97943d2501d99c3a3859d4e68cd6028c02afe58f96ba661a9d', + 'wss://nostr-relay.untethr.me' + ], + [ + 'p', + '3efdaebb1d8923ebd99c9e7ace3b4194ab45512e2be79c1b7d68d9243e0d2681', + 'wss://nostr-pub.wellorder.net' + ], + [ + 'p', + 'ed04f9c719af697ac1c045bfff5f841cdf61a0b0d2170c9970f0ce0a04f708bf', + 'wss://nostr-pub.wellorder.net' + ], + [ + 'p', + '76f5960d381e7146b7f374a4a65afa403038441b46933840c71e436facb82ae7', + 'wss://nostr.bitcoiner.social' + ], + [ + 'p', + 'c697f7f5f59de8ddb93c6b74fdd759ab2dc654bc36315f39770c214607fcd65e', + 'wss://nostr-pub.wellorder.net' + ], + [ + 'p', + 'd3fe840f672c191849f8500762d81af8a258e673b7ff07cf9ce1211c2d0f493d', + 'wss://nostr-pub.wellorder.net' + ], + [ + 'p', + '14347702b99786cc0ee644620a5f71bc6a88e2882491f57c372f1deaed198701', + 'wss://nostr-pub.wellorder.net' + ], + [ + 'p', + 'cbc5ef6b01cbd1ffa2cb95a954f04c385a936c1a86e1bb9ccdf2cf0f4ebeaccb', + 'wss://nostr-pub.wellorder.net' + ], + [ + 'p', + '8ff7a6132ffe1bb3600aa20496ab648f1daf6b50ceaa8054a37e6a0b1f7ee491', + 'wss://nostr.bitcoiner.social' + ], + [ + 'p', + '1f7dfb1b51bd4fb5d15245b28d86fab670a677580e2a0633a2cf76509d02471c', + 'wss://nostr-pub.wellorder.net' + ], + [ + 'p', + 'f5424d002fd0d48fadd6e54879387714c54bfa46535976ff2b385843aaddf8e5', + 'wss://nostr.rocks' + ], + [ + 'p', + '9aeb3bb495f09be3799048c3ef76649917efc46a8c8a69fefc31a7d012f6eccb', + 'wss://nostr-pub.wellorder.net' + ], + [ + 'p', + 'c181af1aca3a13243a9ef9c302d5e988eaec25caa60c9923e5faed097e52cd69', + 'wss://nostr-pub.wellorder.net' + ], + [ + 'p', + 'a4cb51f4618cfcd16b2d3171c466179bed8e197c43b8598823b04de266cef110', + 'wss://nostr-pub.wellorder.net' + ], + [ + 'p', + '1221fd0054a6c8ebd07b39c5eeea388f7f0244409f8cd8649ac22fcd668d02f6', + 'wss://nostr-pub.wellorder.net' + ], + [ + 'p', + 'f61abb9886e1f4cd5d20419c197d5d7f3649addab24b6a32a2367124ca3194b4', + 'wss://nostr-pub.wellorder.net' + ], + [ + 'p', + 'b175db709771d32bbe7d8599e0c41f3f8768cc3a8333603d93c6d72d41c42f76', + 'wss://nostr-pub.wellorder.net' + ], + [ + 'p', + '57225e0adcbad1fddf8d9ba1f5f36d657f134b7e0ea7aed6c0eb7013e4ef45f1', + 'wss://nostr-pub.wellorder.net' + ], + [ + 'p', + '6446d04ecf9e0bb72c5ae218df9fc6c0a273149d9ecbfbe42519c53667b4405a', + 'wss://nostr-pub.wellorder.net' + ], + [ + 'p', + 'e0d05a5b8c7789eb83f87672f4eb0dca78f99292ab038e5c66f84d97d77b95ae', + 'wss://nostr-pub.wellorder.net' + ], + [ + 'p', + '46fcbe3065eaf1ae7811465924e48923363ff3f526bd6f73d7c184b16bd8ce4d', + 'wss://nostr-pub.wellorder.net' + ], + [ + 'p', + '4d5ce768123563bc583697db5e84841fb528f7b708d966f2e546286ce3c72077' + ], + [ + 'p', + '8d233d8babe9f40f170c5b0706fd4832869e07d040cfcd6b702d57e070aad1cb', + 'wss://nostr-pub.wellorder.net' + ], + [ + 'p', + '566516663d91d4fef824eaeccbf9c2631a8d8a2efee8048ca5ee6095e6e5c843', + 'wss://nostr-pub.wellorder.net' + ], + [ + 'p', + '0000a0fa65fcccd99e6fd32fc7870339af40f4a94703ea30999fc5c091daa222', + 'wss://nostr-pub.wellorder.net' + ], + [ + 'p', + 'd987084c48390a290f5d2a34603ae64f55137d9b4affced8c0eae030eb222a25' + ], + [ + 'p', + '3878d95db7b854c3a0d3b2d6b7bf9bf28b36162be64326f5521ba71cf3b45a69', + 'wss://nostr.rocks' + ], + [ + 'p', + '7f0be893dc501f391260aa2088de28b35280dfd4ae8f8bfa9bdbb7319952755b' + ], + [ + 'p', + '44c39a01cbdeb70905aaa9cbd614a1ef39d0f4386d0dee9d7493e6e680548eb9', + 'wss://nostr-relay.untethr.me' + ], + [ + 'p', + '484712e818a8373182c64e53c0d1fb9cec5de96daa2d39424b42d7b0dcd8e6c9' + ], + [ + 'p', + 'b2222fc7844fef7b002440b3216213d9b01dcf5e412a604ddfa50967db4d8bd6', + 'wss://nostr-relay.untethr.me' + ], + [ + 'p', + '78aa0c9a0fe2d2476469db25f19a293a6606c113fe2e87e17b8ab51cb120dbb7' + ], + [ + 'p', + '9ec7a778167afb1d30c4833de9322da0c08ba71a69e1911d5578d3144bb56437', + 'wss://nostr.rocks' + ], + [ + 'p', + '57f03c1604d109be088dbac71371b6939833dd24fdcf2886d3382a0479c0d4de' + ], + [ + 'p', + '778fdd199044a2e8dc3cfac3c274f5577ed78c22fb3b5ccb13df6956980eff4c' + ], + [ + 'p', + 'e76e705283775febf3d5f4f97662648582d42ff822435924f21a47c8d46c5921', + 'wss://nostr-relay.untethr.me' + ], + [ + 'p', + 'e794d71b8f7426a291004f592b758438a25d0012e5bb969e53307b3785fd5211', + 'wss://nostr-pub.wellorder.net' + ], + [ + 'p', + '88a2c3b420b4a027706a98600d1fd744ac6cfd12e201b74189be5ef4b2b3aa45', + 'wss://nostr-relay.untethr.me' + ], + [ + 'p', + '004db7605cfeba09b15625deb77c9369029f370591d68231b7c4dfd43f8f6f4f' + ], + [ + 'p', + 'b238e136091cb01cd21606dac1a2f503f504e7e8e7c75d98fcefd30aed084a1c', + 'wss://nostr-relay.untethr.me' + ], + [ + 'p', + '32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245' + ], + [ + 'p', + 'b2d670de53b27691c0c3400225b65c35a26d06093bcc41f48ffc71e0907f9d4a' + ], + [ + 'p', + 'dd81a8bacbab0b5c3007d1672fb8301383b4e9583d431835985057223eb298a5' + ], + [ + 'p', + 'ed1d0e1f743a7d19aa2dfb0162df73bacdbc699f67cc55bb91a98c35f7deac69' + ], + [ + 'p', + 'b2d1d0fc5b771a7041054ebded57bc3bf20f69ccbb9dc9b8ef432801d247df7c' + ], + [ + 'p', + 'd947d8f1be338c5cff194a6630453fa43c924eb9f58c339c68b26b2193efa276' + ], + [ + 'p', + '6112a73a50518ed631dc6804a238525acdf10f26343199bc25ed7c9f5a0685c5' + ], + [ + 'p', + '22e804d26ed16b68db5259e78449e96dab5d464c8f470bda3eb1a70467f2c793' + ], + [ + 'p', + '1bbb8324577ac089607e45813bac499ebdab4621d029f8c02b2c82b4410fd3f4' + ], + [ + 'p', + 'e668a111aa647e63ef587c17fb0e2513d5c2859cd8d389563c7640ffea1fc216' + ], + [ + 'p', + '2508ed2c2ab3f6728a880fafbc0895a2afeacbb74eb69847255fb60564af0d85' + ], + [ + 'p', + 'c2bb5d6529095edbfbdbe3f136175c146c6706526325b32da881c7c34c7b1ab8' + ], + [ + 'p', + '8f87ac34eb27a86fc917866fbc9016429bd89cf1d0d27a038a8eaac4c62c63e5' + ], + [ + 'p', + '52cb4b34775fa781b6a964bda0432dbcdfede7a59bf8dfc279cbff0ad8fb09ff' + ], + [ + 'p', + '3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d' + ], + [ + 'p', + '7e88f589d2677ea4a863c72af5d0e85fbe1d3db111667c50d33fa42196a1afc0' + ], + [ + 'p', + 'f0bed2e11260f0f77f781db928f40a34c18713fda1918d3be996f91d0776e985' + ], + [ + 'p', + '565152b2d1793a253cba282588a4b287b0ab2acbe7faa7021ea0dced39d33716' + ], + [ + 'p', + 'd9c8c00017a2a345c2f32132436a26e1c72cb7a57e7b6b316f62dee2f8bcf8dd' + ], + [ + 'p', + 'b28a0714f86fd344a7ecad9566c2e33f8485ef560a702e15c3f537914abc152d' + ], + [ + 'p', + '7e7272c475d920ad408e7a6faf9a123aa7b882cba7151e6105a0fc9d212fb240' + ], + [ + 'p', + 'ea42658e9a1291a32d1b74793edaef3d8757589a32b16931cacd85ba5470ea7c' + ], + [ + 'p', + 'aff9a9f017f32b2e8b60754a4102db9d9cf9ff2b967804b50e070780aa45c9a8' + ], + [ + 'p', + 'b74848fa6f8975f00b04ce12ccbe18673ad1f4511f66d4e5a3a151720fdce62a' + ], + [ + 'p', + '7e3b8e221023e92c297cb35937d88e495de780ac3190c23e1e2e1e6274f43f59' + ], + [ + 'p', + '547fcc5c7e655fe7c83da5a812e6332f0a4779c87bf540d8e75a4edbbf36fe4a' + ], + [ + 'p', + 'a12535e8bf4f712211b68f7fe7303d03c3c5cfe8155116d553fe6b8adba85d41' + ], + [ + 'p', + '772405d14585d9d8fe481cef6ce560b83f03c24f0efc179415530d54eee97534' + ], + [ + 'p', + '2163edbd81fa58e64c7e38bf968dda1b2f42811b78ea06accd32007bbb8a018b' + ], + [ + 'p', + 'e37d948a0eee45e6cd113faaad934fcf17a97de2236c655b70650d4252daa9d3' + ], + [ + 'p', + 'e9e4276490374a0daf7759fd5f475deff6ffb9b0fc5fa98c902b5f4b2fe3bba2' + ], + [ + 'p', + '4557aab9aae76a892e01568064a9e262e613690421a79e584b8cc4c5ca9afb7e' + ], + [ + 'p', + '9630f464cca6a5147aa8a35f0bcdd3ce485324e732fd39e09233b1d848238f31' + ], + [ + 'p', + '1265c1c3d41f0f05bf306224ec40628231a5086a2eaa36643b3982a4eba19c9f' + ], + [ + 'p', + '04c915daefee38317fa734444acee390a8269fe5810b2241e5e6dd343dfbecc9' + ], + [ + 'p', + 'd3646691ba5b1d796c1e1b3430df00fe1189ec9c232877adde18c8f656af18f0' + ], + [ + 'p', + 'b7c66ce6f7bbe034e96be54c2ffc0adf631a889abc0834ba1431171b67c489aa' + ], + [ + 'p', + '8355095016fddbe31fcf1453b26f613553e9758cf2263e190eac8fd96a3d3de9' + ], + [ + 'p', + '06fca9f06f74cf86a16fe4c2feec508700643e2b105b519fd93d35332c51ad53' + ], + [ + 'p', + '6b0d4c8d9dc59e110d380b0429a02891f1341a0fa2ba1b1cf83a3db4d47e3964' + ], + [ + 'p', + '35d26e4690cbe1a898af61cc3515661eb5fa763b57bd0b42e45099c8b32fd50f' + ], + [ + 'p', + 'dcecb5c4c228e15a1f04305c34b39b7ff67675544cb7dc74dd5c715cf62ada74' + ], + [ + 'p', + 'b2c61317687060b2b7e9cb7f7fde04f30bab23e12bf471f8d356000ca2b12b4a' + ], + [ + 'p', + '51fc7209201b1414f721c3d2d2b3430699b1e6317716c5182cc1d7945072e358' + ], + [ + 'p', + 'ce5061bfcc16476b9bde3f1d5b3ec7730c4361cf8c827fbd9c14eb8c7003a1de' + ], + [ + 'p', + '0810b5bc4cddc3e7624a1f6acbdccdc95c6e9409c144ce83365ee04a3a63314e' + ], + [ + 'p', + '975bbd239f0b7e25a080675d3db5892492ea9e9c7705c819ba3dafd8de95f3d9' + ], + [ + 'p', + '76f928b303b095a6f17784151acd9a5127d183cb5f989a173b00bd0c12d07e83' + ], + [ + 'p', + 'd4d4fdde8ab4924b1e452e896709a3bd236da4c0576274b52af5992d4d34762c' + ], + [ + 'p', + 'ac9ec020170155f0feb347f0d777ee5fc38dd1f36353093046323646cff5169f' + ], + [ + 'p', + 'd91191e30e00444b942c0e82cad470b32af171764c2275bee0bd99377efd4075' + ], + [ + 'p', + 'ea75802dd1c86933c1e20c582541bb283d44c88e3445ed90d4375fc3d973f3a0' + ], + [ + 'p', + '9682c33f9024dadb1bffdf762c3156e26b4aa340de8d06c91ca537fcc0fdb3a9' + ], + [ + 'p', + 'a8f14f05c64f9e62bdada89c21a52f09aa5d7948b47ccf52da1be16b0de9efac' + ], + [ + 'p', + '80482e60178c2ce996da6d67577f56a2b2c47ccb1c84c81f2b7960637cb71b78' + ], + [ + 'p', + 'b10c0000079a83cf26815dc7538818d8d56a2983e374e30a4143e50060978457' + ], + [ + 'p', + 'ae683cd251952448ad0d7b8ed6c2e0f8ab451578250cb35f0c977275b56b056e' + ], + [ + 'p', + '954aaf69c2e7c9fb3f9998f61944ab8ab08ce3c8679ecd985e4486a6eb696217' + ], + [ + 'p', + 'd7f0e3917c466f1e2233e9624fbd6d4bd1392dbcfcaf3574f457569d496cb731' + ], + [ + 'p', + '104749bc9151a0e54b9845ee50fc4b559439dd1ada006e36a6c49ad3ea16a55c' + ], + [ + 'p', + 'cf9413eb6bbe55c8a3c10119ec0635e134fa266f2c50f825d7225da9b92ecc4e' + ], + [ + 'p', + 'bae77874946ec111f94be59aef282de092dc4baf213f8ecb8c9e15cb7ed7304e' + ], + [ + 'p', + '44bb2dd1615ed2a527946c41d854995f18866a8feffa88eb375728c20aeea30c' + ], + [ + 'p', + '62903b1ff41559daf9ee98ef1ae67cc52f301bb5ce26d14baba3052f649c3f49' + ], + [ + 'p', + '9a29ee8c3771573e5306bb7701182e970b188ce3552713ca68a157ebc3c0bf75' + ], + [ + 'p', + 'e3f0c72e7b653f395f64e03519bae3efeac184bcf0b3f38bdccb62a4d2aa5d30' + ], + [ + 'p', + '9b9f5f1ec13105c8d1c2ea16aa952e98640b170b871420980ea11b18eb1f1e03' + ], + [ + 'p', + '2b36fb6ae1022d0d4eac2a9f13fc2638f3350acc9b07bdca1de43a7c63429644' + ], + [ + 'p', + 'f00c952da33c06e02c930f76aba1085021b98075657daaff8ad119edcfde691e' + ], + [ + 'p', + '8837f562e064282e4fb9902ae6062ee436a53236909a68c6d19564df6c208fbe' + ], + [ + 'p', + 'f43c1f9bff677b8f27b602725ea0ad51af221344f69a6b352a74991a4479bac3' + ], + [ + 'p', + '66e346dfe3a4e572359519f086bf45771a19224343183aa1c86b9f9e31b78ac9' + ], + [ + 'p', + '8c24f2bf7df33aea0f05706162176343f34389d95ca5696dba1c2768887f586f' + ], + [ + 'p', + '343558f07b07ffcb24b27b73812d74d4ff8f46e81ea903f1e7f37d30d907bcfc' + ], + [ + 'p', + '57400e5b11c8b52ed04765df605fe9c30aa50abdeacff49d3de6b58359c907ed' + ], + [ + 'p', + '4535551a40271b059ab92b71e7ab7e8700061a2d91b0d20f313ef82f052eb085' + ], + [ + 'p', + '8431af1a305fd23b869a12ad87118f78d87bec6e2a431e38fd1fabdac281ff45' + ], + [ + 'p', + '4b12f6132a5ba813bdf55bcbf9d1acfefb02dabf67191dad71b455668c429b36' + ], + [ + 'p', + '747adf8e9036ed78b47eca762bf80bc41af34df6da7bd44876cf2d27e6b7dd64' + ], + [ + 'p', + 'b832d7fdcf4f6fed87ccfc6e10426710b968d6c260206fecb24aa096879c44ce' + ], + [ + 'p', + '09e935f7c01fda340051a4700cfb9dde533202bdf56808f68cafef6bae07a5bd' + ], + [ + 'p', + '2b26251002f9bdd990da1990bcc378ac5c816f1446e82167819ab60c4b9a6ca9' + ], + [ + 'p', + '2183e94758481d0f124fbd93c56ccaa45e7e545ceeb8d52848f98253f497b975' + ], + [ + 'p', + '2bee8a0f48dcc76df4385df95ee184331e41fbde0731164c6627512b9b34f005' + ], + [ + 'p', + 'd0cb47a354003467a3a7cbc50ddc0c29250851f9040656bad9d0ab7adb5b7382' + ], + [ + 'p', + '47bae3a008414e24b4d91c8c170f7fce777dedc6780a462d010761dca6482327' + ], + [ + 'p', + '38b07a31f3b23dbeb9f59deb7bec5b993173fb4022206980f3809d0b68abf959' + ], + [ + 'p', + 'e6a92d8b6c20426f78bba8510ccdc73df5122814a3bac1d553adebac67a92b27' + ], + [ + 'p', + 'ad5aab5be883a571ea37b231cd996d37522e77d0f121cedfd6787b91d848268e' + ], + [ + 'p', + '6d334336f9ba6c35fdc3b87950721b123f56f0d686fe9a5b4c95d2568b2398d8' + ], + [ + 'p', + 'c8b430569a2c95aa8d6eceea67f40c16e17f1ac10755fcf17f2ba772f3febd96' + ], + [ + 'p', + '3b6a202702bc8c236ff2900aa564575fe56ae5a9e5b8386d3307c79b392674ab' + ], + [ + 'p', + 'd97cd1bcc21e393e5a8b053fba9db385ace78710ba68a6bc7828d57ad82e88bd' + ], + [ + 'p', + '3235036bd0957dfb27ccda02d452d7c763be40c91a1ac082ba6983b25238388c' + ], + [ + 'p', + 'b99b149370e4f8533ce53d143af3f39e1f2628a39847f7fdd7544c9585da9299' + ], + [ + 'p', + 'e4c47aedea8ea54255f5ba07a77053b24553e9b975435e56da343da19aec7881' + ], + [ + 'p', + '552b4d02f9db02f11bda4b4c1cdefe8852c6c6b6ca0e03b7013f182c854413b7' + ], + [ + 'p', + '3f8e32d654fbc0da5fd570d70381a3e59843b208c5574a74a2305527bce8382b' + ], + [ + 'p', + '84620a7b6a3d42b96b3e8a392fabca1e476e9049188808b0ecf3d64d36efffd1' + ], + [ + 'p', + '047f497e13073d4303383c7abcc296a3b5b5956d243eafa6423c675a831a5cc1' + ], + [ + 'p', + 'b875065f96ff58c82e951f543857515798f5e50c6903d9602b425e2cd957f1ce' + ], + [ + 'p', + 'edfa27d49d2af37ee331e1225bb6ed1912c6d999281b36d8018ad99bc3573c29' + ], + [ + 'p', + '8c0da4862130283ff9e67d889df264177a508974e2feb96de139804ea66d6168' + ], + [ + 'p', + 'bc1f8b83991f46f6f2f2b4569314d50b229e9f2761716ca56d4572a190801a44' + ], + [ + 'p', + '84fe3febc748470ff1a363db8a375ffa1ff86603f2653d1c3c311ad0a70b5d0c' + ], + [ + 'p', + 'd543c820050efd6d2c1536b0990111ac293a4431e6a12929432366e0aa8001e7' + ], + [ + 'p', + '7cf68b47a2b243d06322bfdb6a1c2422fb8b3a18d18a5c90c27b59e8f612553e' + ], + [ + 'p', + 'f0c864cf573de171053bef4df3b31c6593337a097fbbd9f20d78506e490c6b64' + ], + [ + 'p', + '3702743c98430ba152e635b081637716a3c949c13ad3ad1e6c80e6e7d41fbc8a' + ], + [ + 'p', + '2a043132d98c2457fb3581fdeddab380a8eda3760b2605f676be5059ed260066' + ], + [ + 'p', + 'c5072866b41d6b88ab2ffee16ad7cb648f940867371a7808aaa94cf7d01f4188' + ], + [ + 'p', + '51535ad9f0e13a810f73ea8829a79b3733bd1fffb767c4885990b02f59103a13' + ], + [ + 'p', + '3707f1efc7515524dce41d3bf50bfd9fdaed3494620b5f94fcf16d2766da4ec2' + ], + [ + 'p', + 'dbab9040bc1f0c436b0f92f517702498358edc1fde2c7884d0e1036c739d44f3' + ], + [ + 'p', + '904ea00a4a245559d6184be5c6e2cf2c66ea7fc91eb5f1eb5349506d19d63a11' + ], + [ + 'p', + '9ac12013d20fae4f8829ba4e5ba6343e410288d3a0752d6143386d2c1af1f57e' + ], + [ + 'p', + '7bc0ff3de7b2205ed8bc366f7657138eacb5164d43d9580b8f5b47b7e6a7c235' + ], + [ + 'p', + 'c5cfda98d01f152b3493d995eed4cdb4d9e55a973925f6f9ea24769a5a21e778' + ], + [ + 'p', + '887645fef0ce0c3c1218d2f5d8e6132a19304cdc57cd20281d082f38cfea0072' + ], + [ + 'p', + '88a502f72f216c93eb840fa805c1a215b97e0800ab2dfa017450d38cb4b60a03' + ], + [ + 'p', + '3f152ab665d1079108529ff6bf0ba48809b6788b22ab8a3d76f7a3f63bec19a0' + ], + [ + 'p', + '27da3f032e0fea007947b0da12f1183630c5a2da79d7202b96f35f16ef6ce48e' + ], + [ + 'p', + 'de29897a4a9086a1c5e8f6c7d06691afeda77103eea35eabecbfda21189fa995' + ], + [ + 'p', + '0a2bfced3f7c8a08d88a697da80d7d85f12e69260cf308de27da1f5b6f65bf00' + ], + [ + 'p', + '95405f16211a88c869ec87b684cb450136b7bf2420e236f9ec793385893d01e8' + ], + [ + 'p', + 'f9e24c0a9544d119b4f0e31ceac53d1b650c763e378541e1dfde402e350f5792' + ], + [ + 'p', + '7f3bd39154ce2994d67bc89b782c12871bcd7a30093b4700b07c438fb7b906db' + ], + [ + 'p', + '1d914450975db68d850f13a8950abda9dc6a1b140de6460634f839c49f5de958' + ], + [ + 'p', + '545320c902a7c7de8f44c6c3c0e7870b72e8ddfdd203139db18b5d518f6771c1' + ], + [ + 'p', + 'e740b0275f467618fdebf8ad54cb597deabbca2a0490d314e509730c50118499' + ], + [ + 'p', + '179744407ac4fda143a8635e7ae9c9eabf3ab107a818a4f740a9e46b39412a42' + ], + [ + 'p', + '2d11d3a3123287b478e19e9ef011bceb48e8f14a0d58e22bd156f35a839c5640' + ], + [ + 'p', + 'ce5a47f6328beab97310a27269c4725988ced2aec93fcd3ab01282f667d696c3' + ], + [ + 'p', + 'c7eda660a6bc8270530e82b4a7712acdea2e31dc0a56f8dc955ac009efd97c86' + ], + [ + 'p', + 'e8caa2028a7090ffa85f1afee67451b309ba2f9dee655ec8f7e0a02c29388180' + ], + [ + 'p', + '9c8e6bcf8438812fe44ccd32ba4208b3c72193a944d7e6f68ff311b48a28523e' + ], + [ + 'p', + '7215b2db8754494fd3452b7f2d28b56e23863b95446bf68d79f980a7ad5ec7cd' + ] + ], + 'content': '{"wss://rsslay.fiatjaf.com":{"read":true,"write":false},"wss://nostr-pub.wellorder.net":{"read":true,"write":true},"wss://expensive-relay.fiatjaf.com":{"read":true,"write":true},"wss://nostr.rocks":{"read":true,"write":true},"wss://nostr-relay.untethr.me\\t":{"read":true,"write":true},"wss://relayer.fiatjaf.com":{"read":true,"write":true},"wss://nostr-relay.untethr.me":{"read":true,"write":true},"wss://nostr-relay.wlvs.space":{"read":true,"write":true},"wss://nostr.openchain.fr":{"read":true,"write":true},"wss://relay.futohq.com":{"read":true,"write":true}}', + 'sig': 'f5935788cf7a5a402b14f3199f2ecb2f181f710a475693f2866fe3cd8bdaf900ec9edb9f831d23783023e0aa9011fe403fbaa4e4c93562d56ac8f463fd201e3d' + }, + { + 'id': 'f937a7ca5e109b4527849681ceedea944abd5a2e516d3383cb17e7e189736e3b', + 'pubkey': '7225179d3d25d907d843cd3824e6a74799e2b47b0f2fd1cc0250d3589816faa0', + 'created_at': 1660432741, + 'kind': 4, + 'tags': [ + [ + 'p', + '14347702b99786cc0ee644620a5f71bc6a88e2882491f57c372f1deaed198701', + '' + ] + ], + 'content': '+of2PlIcxGeMRExh7kpacc4fkZurwj8yL+uChrregn2DDbeSRE2rQV7SG1GQRUn5mq3gtOuX9P8tP0MzJbuXfqBryK2gRKJdyG7Yphmq5gods458VVME2yLMcUjAFU4P?iv=rPLf0PBhDYYub6BiJSiq4w==', + 'sig': '632754a45a8556e408ceaa9a8e5c7b443044cb37a1c58126f96c4a44c87c1285e00c8997a7c9bd44325ef8782a4cf494c2bed3d7e5d94385d80c1b1d3795be30' + }, + { + pubkey: 'f6f33f0b9cac10e1136c620501721565f561e564554a9a35ad9b190bd743b4c2', + created_at: 1660448789, + kind: 5, + tags: [ + [ + 'e', + '2ef93f01cd2493e04235a6b87b10d3c4a74e2a7eb7c3caf168268f6af73314b5' + ] + ], + content: '', + sig: 'b6fc44d7b1bcab4ef9b40d3c5a92afce9d778964f5a477437af037aa3dd3de7f7498a1c56ea816e49cf5705252fe8dcd77384bb91580277ff576d60367047ee1', + id: '20942205680e130a7602fd735fe715f52edf814a0b6e6e7f0990a02b257504ed' + }, + { + 'id': '444cec7f44c53eee60ba62858920c74173aa6bbb76c622f484a88cfcca2e07ad', + 'pubkey': '35d26e4690cbe1a898af61cc3515661eb5fa763b57bd0b42e45099c8b32fd50f', + 'created_at': 1660449145, + 'kind': 5, + 'tags': [ + [ + 'e', '9fafc99518ce02cb52a4e3befe82ca84088a79cc45e5340ebf5af042b464d84f' + ] + ], + 'content': 'This is a demonstration of NIP-09.', + 'sig': '45cfbfcb202521d87a2d0bf70eabb2533c7993f239065538fa9d336aef74160c072596f1792e95682b2098b9a339df03f1ca480c859a46c6f10543398f12c213' + }, + { + 'id': '23677e3d035be5de01172de203103e292126d542897086bf797d8794fe6b1081', + 'pubkey': '7dbf37fb6692b6c5f792edad1972b5ae5616235622d92cb977ad3d8d71a1da2f', + 'created_at': 1660424316, + 'kind': 6, + 'tags': [ + [ + 'e', + '8da089fad0df548e490d93eccc413ecee63cc9da4901051b0bdcb801032f05d3' + ], + [ + 'p', + '4d5ce768123563bc583697db5e84841fb528f7b708d966f2e546286ce3c72077' + ] + ], + 'content': '{"pubkey":"4d5ce768123563bc583697db5e84841fb528f7b708d966f2e546286ce3c72077","content":"sometimes people just need a reason to believe ","id":"8da089fad0df548e490d93eccc413ecee63cc9da4901051b0bdcb801032f05d3","created_at":1660406626,"sig":"18ce5648b6c434258cf347c38a2939579ffea1211a1d20e5159c2b8a28960c053607916eeffa71d4d20f7f0b30bb4b34cf7965e254b4c41057730cb13f77b69d","kind":1,"tags":[]}', + 'sig': '75f9117d90adc8ac768983cfce19e5156a0f62ecfe6c1e2d33d62ef1c438b83e87551916f1d2e62513f899d706dd54a98af0b5ce5dce3fba299b3e62791e6e8e' + }, + { + 'id': '1a621c1ff8f6ea2641205bcb8a2908c80f7e70338179ac6f0dab8dfebf748132', + 'pubkey': '32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245', + 'created_at': 1660438975, + 'kind': 7, + 'tags': [ + [ + 'e', + 'dc191f093c4e8932434aa939431be375a40eded7877ce03b0c549ff98de8460c', + '', + 'root' + ], + [ + 'e', + '834c0da081608ba0587f330a0e9038a983bb2f331bd3ca0af13acf923205afd9', + '', + 'reply' + ], + [ + 'p', + 'c7eda660a6bc8270530e82b4a7712acdea2e31dc0a56f8dc955ac009efd97c86' + ], + [ + 'p', + '32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245' + ], + [ + 'e', + 'c7499698cb59ab0e1dc3b15fa5ad1373bdb6d45e1a85f6c24da783bd2e13c2db' + ], + [ + 'p', + '2ef93f01cd2493e04235a6b87b10d3c4a74e2a7eb7c3caf168268f6af73314b5' + ] + ], + 'content': '', + 'sig': '7bfc0ec98e6adcfc1ea9a8848b1e88ff3ded36175e7b3641791383f9eb88e362aae2909db1fb9138349170035dff63308ce6ba991c98752c1e4dbf8ad0f66583' + } +] diff --git a/test/unit/schemas/message-schema.spec.ts b/test/unit/schemas/message-schema.spec.ts index e941874..0ce9c56 100644 --- a/test/unit/schemas/message-schema.spec.ts +++ b/test/unit/schemas/message-schema.spec.ts @@ -1,300 +1,121 @@ - - import { expect } from 'chai' -import { IncomingEventMessage } from '../../../src/@types/messages' +import { range } from 'ramda' +import { Event } from '../../../src/@types/event' + +import { IncomingMessage } from '../../../src/@types/messages' import { messageSchema } from '../../../src/schemas/message-schema' import { validateSchema } from '../../../src/utils/validation' +import { getEvents } from '../data/events' describe('NIP-01', () => { - let message: IncomingEventMessage - describe('validate message schema', () => { - it('returns message if EVENT message is valid', () => { - message = [ - 'EVENT', - { - 'id': 'f6e771f7380374a4a8616dcc862925d0978ab646be54df6ae479a39228401d16', - 'pubkey': '47bae3a008414e24b4d91c8c170f7fce777dedc6780a462d010761dca6482327', - 'created_at': 1660371895, - 'kind': 3, - 'tags': [ - [ - 'p', - '3efdaebb1d8923ebd99c9e7ace3b4194ab45512e2be79c1b7d68d9243e0d2681' - ], - [ - 'p', - '47bae3a008414e24b4d91c8c170f7fce777dedc6780a462d010761dca6482327' - ], - [ - 'p', - '32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245' - ], - [ - 'p', - '80482e60178c2ce996da6d67577f56a2b2c47ccb1c84c81f2b7960637cb71b78' - ], - [ - 'p', - 'd7f0e3917c466f1e2233e9624fbd6d4bd1392dbcfcaf3574f457569d496cb731' - ], - [ - 'p', - 'b1dd5e8ed19644671e8693ca2445c68729249f6d4f2d2d8f072d5e1399ba7ecb' - ], - [ - 'p', - '3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d', - 'wss://relay.damus.io' - ], - [ - 'p', - 'c7eda660a6bc8270530e82b4a7712acdea2e31dc0a56f8dc955ac009efd97c86', - 'wss://relay.damus.io' - ], - [ - 'p', - 'e4c47aedea8ea54255f5ba07a77053b24553e9b975435e56da343da19aec7881', - 'wss://nostr-pub.wellorder.net' - ], - [ - 'p', - '9211af4fe742043111e923a6235065b1df69acb34df4d894b50f10e5ba57de8b', - 'wss://relay.damus.io' - ], - [ - 'p', - '22e804d26ed16b68db5259e78449e96dab5d464c8f470bda3eb1a70467f2c793' - ], - [ - 'p', - '2b5c634536c53974fcc39c9cb0fc598d7bb1900b00fe9d4745144ac79ddfb140' - ], - [ - 'p', - 'f61abb9886e1f4cd5d20419c197d5d7f3649addab24b6a32a2367124ca3194b4', - 'wss://relay.damus.io' - ], - [ - 'p', - '8355095016fddbe31fcf1453b26f613553e9758cf2263e190eac8fd96a3d3de9', - 'wss://nostr-pub.wellorder.net' - ], - [ - 'p', - '489485b5d4254bf11c72abfff3f254e7275e109516a4adf021426c0adc00df5a', - 'wss://nostr-pub.wellorder.net' - ], - [ - 'p', - 'cdb55b719d18e264364d53b7826422daf05cf11af0ef6fa4076a7e2724b722a8', - 'wss://nostr.onsats.org' - ], - [ - 'p', - '38b07a31f3b23dbeb9f59deb7bec5b993173fb4022206980f3809d0b68abf959' - ], - [ - 'p', - '6398e15e3416de093b963ca38783d2a66a9657cb08cbba4f02546cdd55b6f1a4' - ], - [ - 'p', - 'ac4e18391f45932c0067e28203d5083a356ce301ab60867de094c94b98358666', - 'wss://nostr.onsats.org' - ], - [ - 'p', - '40e162e0a8d139c9ef1d1bcba5265d1953be1381fb4acd227d8f3c391f9b9486' - ], - [ - 'p', - '4d5ce768123563bc583697db5e84841fb528f7b708d966f2e546286ce3c72077' - ], - [ - 'p', - '8bc3c8faf56ef7fea539c3e53192723633c1e6e586194c328bd7ef341da89574' - ], - [ - 'p', - 'd987084c48390a290f5d2a34603ae64f55137d9b4affced8c0eae030eb222a25' - ], - [ - 'p', - '52b4a076bcbbbdc3a1aefa3735816cf74993b1b8db202b01c883c58be7fad8bd' - ], - [ - 'p', - '7927bc6e25892729a9c02a1332c409a69b285e143b9d845c54fd9c1fe829e25e' - ], - [ - 'p', - '1221fd0054a6c8ebd07b39c5eeea388f7f0244409f8cd8649ac22fcd668d02f6' - ], - [ - 'p', - '9ec7a778167afb1d30c4833de9322da0c08ba71a69e1911d5578d3144bb56437' - ], - [ - 'p', - '234d39919c1bd120766c4d874e8f34df4c80981236d76cdd95e246b1d01ae10b' - ], - [ - 'p', - 'b2d670de53b27691c0c3400225b65c35a26d06093bcc41f48ffc71e0907f9d4a' - ], - [ - 'p', - 'd72af1d47e5ab48a9ff112c1ca348c06d11623d9ddb07f19581a37e1c3147fe4' - ], - [ - 'p', - '9aeb3bb495f09be3799048c3ef76649917efc46a8c8a69fefc31a7d012f6eccb' - ], - [ - 'p', - 'c5072866b41d6b88ab2ffee16ad7cb648f940867371a7808aaa94cf7d01f4188' - ], - [ - 'p', - 'c765522880ce949f2529f7cd090daa007e7a013d72472c085fd4db9355fa8eab' - ], - [ - 'p', - '2ae8e03d89cb52861a0089a2f34c861dfd7f896a87b26fdaa8d84049029f5e56' - ], - [ - 'p', - 'cbc5ef6b01cbd1ffa2cb95a954f04c385a936c1a86e1bb9ccdf2cf0f4ebeaccb' - ], - [ - 'p', - '5408e58979e6772bd7dd2830011eaaf4c346ce22650acec1939a7a4d33407a75' - ], - [ - 'p', - 'b1576eb99a4774158a32fc5e190afa3ded4da19f51fbfa0b1a1bf6421ea5733a' - ], - [ - 'p', - '6f1a30b7951cab01c7217b673cac807f0195b05b1ab36ad4e6c7a5ee5b05c1ab' - ], - [ - 'p', - '2b36fb6ae1022d0d4eac2a9f13fc2638f3350acc9b07bdca1de43a7c63429644' - ], - [ - 'p', - '42a0825e980b9f97943d2501d99c3a3859d4e68cd6028c02afe58f96ba661a9d' - ], - [ - 'p', - 'e37d948a0eee45e6cd113faaad934fcf17a97de2236c655b70650d4252daa9d3' - ], - [ - 'p', - 'd3646691ba5b1d796c1e1b3430df00fe1189ec9c232877adde18c8f656af18f0' - ], - [ - 'p', - '146bda4ec6932830503ee4f8e8b626bd7b3a5784232b8240ba15c8cbff9a07cd' - ], - [ - 'p', - 'c5cfda98d01f152b3493d995eed4cdb4d9e55a973925f6f9ea24769a5a21e778' - ], - [ - 'p', - 'f58708031143f54b521dc4b008533e72fbbbc74b0950b0e268e9143d3945e578' - ], - [ - 'p', - '1f5cd0b7618dcd0b4040e0daa1e6719ae9e4b5c0822fc5f47ed55725e08b6564' - ], - [ - 'p', - '2ef93f01cd2493e04235a6b87b10d3c4a74e2a7eb7c3caf168268f6af73314b5' - ], - [ - 'p', - '4d960b819ff5c4f417431e73e7bf70ad41f181136d1baef47c25d1c8b23b4de2' - ], - [ - 'p', - '4b12f6132a5ba813bdf55bcbf9d1acfefb02dabf67191dad71b455668c429b36' - ], - [ - 'p', - 'f43c1f9bff677b8f27b602725ea0ad51af221344f69a6b352a74991a4479bac3' - ], - [ - 'p', - 'd7e747f60a16bf0081c0a88184a34086cc13e6edb0662d4e55202531b47be026' - ], - [ - 'p', - '8c0da4862130283ff9e67d889df264177a508974e2feb96de139804ea66d6168' - ], - [ - 'p', - '9f376635bfcc2021daa2ddf5b93420e0a8a468ba35ccf613587948697bc42976' - ], - [ - 'p', - '60d53675f07dee9e7d77910efa44682d87cb532313ba66b8f4449d649172296b' - ], - [ - 'p', - 'b9e76546ba06456ed301d9e52bc49fa48e70a6bf2282be7a1ae72947612023dc' - ], - [ - 'p', - '7dbf37fb6692b6c5f792edad1972b5ae5616235622d92cb977ad3d8d71a1da2f' - ], - [ - 'p', - '83f514b1e8c9beb71627094fc387ad141bd7b3a7ef75c52722bdf1d429265f54' - ], - [ - 'p', - 'fb019155556a54696af5e5625fc0283fbe519d1dec8b7059e01e8585c2a21798' - ], - [ - 'p', - '16fa0fe9d13191a4349d154356941731db6dfffc4341386eb13818f5a69f0627' - ] - ], - 'content': '{"wss:\\/\\/nostr-pub.wellorder.net\\t":{"write":true,"read":true},"wss:\\/\\/relay.damus.io":{"write":true,"read":true},"wss:\\/\\/nostr.rocks":{"write":true,"read":true},"wss:\\/\\/nostr.onsats.org":{"write":true,"read":true},"wss:\\/\\/relay.nostr.info\\/":{"write":true,"read":true},"wss:\\/\\/rsslay.fiatjaf.com":{"write":true,"read":true},"wss:\\/\\/relayer.fiatjaf.com":{"write":true,"read":true},"ws:\\/\\/192.168.1.103:8889":{"write":true,"read":true}}', - 'sig': '4653bc7fd43b76abcbad92ebb105c34d4612deafcdac4820ed97e0ea62ca0afa996bd700988b3971a3590bf4ab40f5e5360c101c638c924782cc803edf1534b2' - } - ] as any + let message: IncomingMessage + describe('validateSchema', () => { + describe('EVENT', () => { + let events: Event[] + beforeEach(() => { + events = getEvents() + }) - expect(validateSchema(messageSchema)(message)).to.have.deep.property('value', message) + it('returns same message if valid', () => { + events.forEach((event) => { + message = [ + 'EVENT', + event + ] as any + + const result = validateSchema(messageSchema)(message) + + expect(result).not.to.have.property('error') + expect(result).to.have.deep.property('value', message) + }) + }) }) - it('returns message if CLOSE message is valid', () => { - message = ['CLOSE', 'id'] as any + describe('CLOSE', () => { + it('returns same message if valid', () => { + message = ['CLOSE', 'id'] as any - expect(validateSchema(messageSchema)(message)).to.have.deep.property('value', message) + const result = validateSchema(messageSchema)(message) + + expect(result).not.to.have.property('error') + expect(validateSchema(messageSchema)(message)).to.have.deep.property('value', message) + }) + + it('returns error if subscription ID is missing', () => { + message = ['CLOSE'] as any + + const result = validateSchema(messageSchema)(message) + + expect(result).to.have.nested.property('error.message', '"CLOSE message" does not contain [subscriptionId]') + }) }) - it('returns message if REQ message is valid', () => { - message = [ - 'REQ', - 'id', - { - ids: ['aa', 'bb', 'cc'], - authors: ['aa', 'bb', 'cc'], - kinds: [0, 1, 2, 3], - since: 1000, - until: 1000, - limit: 100, - '#e': ['aa', 'bb', 'cc'], - '#p': ['dd', 'ee', 'ff'], - '#r': ['00', '11', '22'], - }, - ] as any + describe('REQ', () => { + beforeEach(() => { + message = [ + 'REQ', + 'id', + { + ids: ['aa', 'bb', 'cc'], + authors: ['aa', 'bb', 'cc'], + kinds: [0, 1, 2, 3], + since: 1000, + until: 1000, + limit: 100, + '#e': ['aa', 'bb', 'cc'], + '#p': ['dd', 'ee', 'ff'], + '#r': ['00', '11', '22'], + }, + { + ids: ['aa', 'bb', 'cc'], + authors: ['aa', 'bb', 'cc'], + kinds: [0, 1, 2, 3], + since: 1000, + until: 1000, + limit: 100, + '#e': ['aa', 'bb', 'cc'], + '#p': ['dd', 'ee', 'ff'], + '#r': ['00', '11', '22'], + }, + ] as any + }) - expect(validateSchema(messageSchema)(message)).to.have.deep.property('value', message) + it('returns same message if valid', () => { + const result = validateSchema(messageSchema)(message) + + expect(result).not.to.have.property('error') + expect(result).to.have.deep.property('value', message) + }) + + it('returns error if subscription Id is missing', () => { + message[1] = null + + const result = validateSchema(messageSchema)(message) + expect(result).to.have.nested.property('error.message', '"subscriptionId" must be a string') + }) + + it('returns error if filter is not an object', () => { + message[2] = null + + const result = validateSchema(messageSchema)(message) + expect(result).to.have.nested.property('error.message', '"filter" must be of type object') + }) + + it('returns error if filter is missing', () => { + (message as any[]).splice(2, 2) + + const result = validateSchema(messageSchema)(message) + expect(result).to.have.nested.property('error.message', '"REQ message" does not contain [filter]') + }) + + it('returns error if there are too many filters', () => { + + (message as any[]).splice(2, 2); + (message as any[]).push(...range(0, 11).map(() => ({}))) + + const result = validateSchema(messageSchema)(message) + expect(result).to.have.nested.property('error.message', '"REQ message" must contain less than or equal to 12 items') + }) }) }) }) diff --git a/test/unit/events.spec.ts b/test/unit/utils/event.spec.ts similarity index 94% rename from test/unit/events.spec.ts rename to test/unit/utils/event.spec.ts index 831b64f..a1abb85 100644 --- a/test/unit/events.spec.ts +++ b/test/unit/utils/event.spec.ts @@ -1,7 +1,7 @@ import { expect } from 'chai' -import { Event, CanonicalEvent } from '../../src/@types/event' -import { isEphemeralEvent, isEventIdValid, isEventMatchingFilter, isEventSignatureValid, isReplaceableEvent, serializeEvent } from '../../src/utils/event' -import { EventKinds } from '../../src/constants/base' +import { Event, CanonicalEvent } from '../../../src/@types/event' +import { isEphemeralEvent, isEventIdValid, isEventMatchingFilter, isEventSignatureValid, isNullEvent, isReplaceableEvent, serializeEvent } from '../../../src/utils/event' +import { EventKinds } from '../../../src/constants/base' describe('NIP-01', () => { describe('serializeEvent', () => { @@ -320,3 +320,13 @@ describe('NIP-16', () => { }) }) }) + +describe('isNullEvent', () => { + it('returns true if kind equals max safe integer', () => { + expect(isNullEvent({ kind: Number.MAX_SAFE_INTEGER } as any)).to.be.true + }) + + it('returns false if kind does not equal max safe integer', () => { + expect(isNullEvent({ kind: Number.MAX_SAFE_INTEGER - 1 } as any)).to.be.false + }) +}) diff --git a/test/unit/utils/stream.spec.ts b/test/unit/utils/stream.spec.ts new file mode 100644 index 0000000..98d1faa --- /dev/null +++ b/test/unit/utils/stream.spec.ts @@ -0,0 +1,57 @@ +import * as chai from 'chai' +import * as sinon from 'sinon' +import sinonChai from 'sinon-chai' +import { PassThrough } from 'stream' + +import { streamEach, streamEnd, streamMap } from '../../../src/utils/stream' + +chai.use(sinonChai) + +const { expect } = chai + +describe('streamMap', () => { + it('transforms chunk with given function', () => { + const spy = sinon.spy() + const sum = ({ a, b }: { a: number, b: number }) => ({ sum: a + b }) + + const stream = streamMap(sum) + stream.on('data', spy) + stream.write({ a: 1, b: 2 }) + stream.write({ a: 10, b: 20 }) + stream.end() + + expect(spy).to.have.been.calledTwice + expect(spy.firstCall).to.have.been.calledWithExactly({ sum: 3 }) + expect(spy.secondCall).to.have.been.calledWithExactly({ sum: 30 }) + }) +}) + +describe('streamEach', () => { + it('calls given function for each value in stream', () => { + const spy = sinon.spy() + + const stream = streamEach(spy) + stream.write({ a: 1 }) + stream.write({ b: 2 }) + stream.end() + + expect(spy).to.have.been.calledTwice + expect(spy.firstCall).to.have.been.calledWithExactly({ a: 1 }) + expect(spy.secondCall).to.have.been.calledWithExactly({ b: 2 }) + }) +}) + +describe('streamEnd', () => { + it('calls given function for each value in stream', () => { + const spy = sinon.spy() + + const stream = streamEnd(spy) + stream.write({ a: 1 }) + stream.write({ b: 2 }) + stream.end() + stream.end() + + expect(spy).to.have.been.calledOnce + }) +}) + diff --git a/test/unit/utils/transform.spec.ts b/test/unit/utils/transform.spec.ts new file mode 100644 index 0000000..aac1a6c --- /dev/null +++ b/test/unit/utils/transform.spec.ts @@ -0,0 +1,21 @@ +import { expect } from 'chai' +import { fromBuffer, toBuffer, toJSON } from '../../../src/utils/transform' + + +describe('toJSON', () => { + it('returns given value JSON stringified', () => { + expect(toJSON({ a: 1 })).to.equal('{"a":1}') + }) +}) + +describe('toBuffer', () => { + it('returns buffer given a hex string', () => { + expect(toBuffer('aa55')).to.deep.equal(Buffer.from([0xAA, 0x55])) + }) +}) + +describe('fromBuffer', () => { + it('returns given value JSON stringified', () => { + expect(fromBuffer(Buffer.from('aa55', 'hex'))).to.equal('aa55') + }) +}) diff --git a/test/unit/utils/validation.spec.ts b/test/unit/utils/validation.spec.ts new file mode 100644 index 0000000..80274d6 --- /dev/null +++ b/test/unit/utils/validation.spec.ts @@ -0,0 +1,32 @@ +import { expect } from 'chai' +import Joi from 'joi' + +import { attemptValidation, validateSchema } from '../../../src/utils/validation' + +describe('attemptValidation', () => { + it('returns value if given value matches schema', () => { + const schema = Joi.string() + + expect(attemptValidation(schema)('string')).to.equal('string') + }) + + it('throws error if given value does not match schema', () => { + const schema = Joi.string() + + expect(() => attemptValidation(schema)(1)).to.throw(Joi.ValidationError) + }) +}) + +describe('validateSchema', () => { + it('returns value property with given value if it matches schema', () => { + const schema = Joi.string() + + expect(validateSchema(schema)('string')).to.have.property('value', 'string') + }) + + it('returns error property with ValidationError if given value does not match schema', () => { + const schema = Joi.string() + + expect(validateSchema(schema)(1)).to.have.property('error').and.be.an.instanceOf(Joi.ValidationError) + }) +})