diff --git a/djx/build.gradle b/djx/build.gradle --- a/djx/build.gradle +++ b/djx/build.gradle @@ -1,8 +1,15 @@ plugins { - id "org.implab.gradle-typescript" version "1.3.3" + id "org.implab.gradle-typescript" version "1.3.4" id "ivy-publish" } +configurations { + "default" { + canBeConsumed = true + canBeResolved = false + } +} + typescript { compilerOptions { lib = ["es5", "dom", "scripthost", "es2015.promise", "es2015.symbol", "es2015.iterable"] @@ -52,6 +59,19 @@ configureTsTest { } } +tasks.matching{ it.name =~ /^configureTs/ }.configureEach { + compilerOptions { + if (symbols != 'none') { + sourceMap = true + switch(symbols) { + case "local": + sourceRoot = ( isWindows ? "file:///" : "file://" ) + it.rootDir + break; + } + } + } +} + npmPackMeta { meta { name = "@$npmScope/$project.name" @@ -75,4 +95,10 @@ task printVersion { println "module: $typescript.compilerOptions.module"; println "symbols: $symbols"; } +} + +artifacts { + "default" (npm.packageDir) { + builtBy npmAssemblePackage + } } \ No newline at end of file diff --git a/djx/gradle.properties b/djx/gradle.properties --- a/djx/gradle.properties +++ b/djx/gradle.properties @@ -5,4 +5,3 @@ description=Create HyperText with Typesc license=BSD-2-Clause repository=http://hg.code.sf.net/p/implabjs/djx npmScope=implab -symbols=pack \ No newline at end of file diff --git a/djx/package-lock.json b/djx/package-lock.json --- a/djx/package-lock.json +++ b/djx/package-lock.json @@ -13,12 +13,14 @@ "@implab/dojo-typings": "1.0.0", "@types/chai": "4.1.3", "@types/requirejs": "2.1.31", + "@types/tap": "15.0.7", "@types/yaml": "1.2.0", "dojo": "1.16.0", "eslint": "6.8.0", "requirejs": "2.3.6", + "tap": "16.3.0", "tslint": "^6.1.3", - "typescript": "4.2.4", + "typescript": "4.8.2", "yaml": "~1.7.2" }, "peerDependencies": { @@ -26,24 +28,270 @@ "dojo": "^1.10.0" } }, + "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.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.8.3" + "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.19.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.0.tgz", + "integrity": "sha512-y5rqgTTPTmaF5e2nVhOxw+Ur9HDJLsWb6U/KpgUzRZEdPfE6VOubXBKLdbcUTijzRptednSBDQbYZBOSqJxpJw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.0.tgz", + "integrity": "sha512-reM4+U7B9ss148rh2n1Qs9ASS+w94irYXga7c2jaQv9RVzpS7Mv1a9rnYYwuDa45G+DkORt9g6An2k/V4d9LbQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.0", + "@babel/helper-compilation-targets": "^7.19.0", + "@babel/helper-module-transforms": "^7.19.0", + "@babel/helpers": "^7.19.0", + "@babel/parser": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0", + "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/generator": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.0.tgz", + "integrity": "sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.19.0", + "@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.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.0.tgz", + "integrity": "sha512-Ai5bNWXIvwDvWM7njqsG3feMlL9hCVQsPYXodsZyLwshYkZVJt59Gftau4VrE8S9IT9asd2uSP1hG6wCNw+sXA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.19.0", + "@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-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.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "dev": true, + "dependencies": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + }, + "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.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz", + "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==", + "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.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" + }, + "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.19.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz", + "integrity": "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", - "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", - "dev": true, - "dependencies": { + "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", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.0.tgz", + "integrity": "sha512-74bEXKX2h+8rrfQUfsBfuZZHzsEs6Eql4pqy/T4Nn6Y9wNPggQOqD6z6pn5Bl8ZfysKouFZT/UXEH94ummEeQw==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" } }, "node_modules/@babel/runtime": { @@ -55,6 +303,64 @@ "regenerator-runtime": "^0.13.2" } }, + "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.19.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.0.tgz", + "integrity": "sha512-4pKpFRDh+utd2mbRC8JLnlsMUii3PMHjpL6a0SZ4NMZy7YFP9aXORxEhdMVOc9CpWtDF09IkciQLEhK7Ml7gRA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.0", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.19.0", + "@babel/types": "^7.19.0", + "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.19.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.0.tgz", + "integrity": "sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==", + "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/@implab/core-amd": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@implab/core-amd/-/core-amd-1.4.0.tgz", @@ -67,18 +373,114 @@ "integrity": "sha512-B2kvlKJgvyIQAl/k1pVyNmtp4ADvBDCs4Lw/qfBC+Sz/ft4c7EuRXmN/+2dhWrd6A5SMjEgex5oeq6Ja2ntrig==", "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/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/@types/chai": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.3.tgz", "integrity": "sha512-f5dXGzOJycyzSMdaXVhiBhauL4dYydXwVpavfQ1mVCaGjR56a9QfklXObUxlIY9bGTmCPHEEZ04I16BZ/8w5ww==", "dev": true }, + "node_modules/@types/node": { + "version": "18.7.15", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.15.tgz", + "integrity": "sha512-XnjpaI8Bgc3eBag2Aw4t2Uj/49lLBSStHWfqKvIuXD7FIrZyMLWp8KuAFHAqxMZYTF9l08N1ctUn9YNybZJVmQ==", + "dev": true + }, "node_modules/@types/requirejs": { "version": "2.1.31", "resolved": "https://registry.npmjs.org/@types/requirejs/-/requirejs-2.1.31.tgz", "integrity": "sha512-b2soeyuU76rMbcRJ4e0hEl0tbMhFwZeTC0VZnfuWlfGlk6BwWNsev6kFu/twKABPX29wkX84wU2o+cEJoXsiTw==", "dev": true }, + "node_modules/@types/tap": { + "version": "15.0.7", + "resolved": "https://registry.npmjs.org/@types/tap/-/tap-15.0.7.tgz", + "integrity": "sha512-TTMajw4gxQfFgYbhXhy/Tb2OiNcwS+4oP/9yp1/GdU0pFJo3wtnkYhRgmQy39ksh+rnoa0VrPHJ4Tuv2cLNQ5A==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/yaml": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@types/yaml/-/yaml-1.2.0.tgz", @@ -103,6 +505,19 @@ "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==", "dev": true }, + "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.11.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.11.0.tgz", @@ -128,9 +543,9 @@ } }, "node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { "node": ">=8" @@ -148,6 +563,37 @@ "node": ">=4" } }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "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/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -166,12 +612,39 @@ "node": ">=4" } }, + "node_modules/async-hook-domain": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/async-hook-domain/-/async-hook-domain-2.0.4.tgz", + "integrity": "sha512-14LjCmlK1PK8eDtTezR6WX8TMaYNIzBIsd2D1sGoGjgx0BuNMMoSdk7i/drlbtamy0AWv9yv2tkB+ASdmeqFIw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bind-obj-methods": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bind-obj-methods/-/bind-obj-methods-3.0.0.tgz", + "integrity": "sha512-nLEaaz3/sEzNSyPWRsN9HNsqwk1AUyECtGj+XwGdIi3xABnEqecvXtIJ0wehQXuuER5uZ/5fTs2usONgYjG+iw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -182,6 +655,52 @@ "concat-map": "0.0.1" } }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.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", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, "node_modules/builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", @@ -191,6 +710,21 @@ "node": ">=0.10.0" } }, + "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", @@ -200,6 +734,31 @@ "node": ">=6" } }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001390", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001390.tgz", + "integrity": "sha512-sS4CaUM+/+vqQUlCvCJ2WtDlV81aWtHhqeEVkLokVJJa3ViN4zDxAGfq9R8i1m90uGHxo99cy10Od+lvn3hf0g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -220,6 +779,42 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/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/cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -238,6 +833,29 @@ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", "dev": true }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -253,18 +871,42 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "bin": { + "color-support": "bin.js" + } + }, "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, + "node_modules/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/cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -299,12 +941,33 @@ "ms": "^2.1.1" } }, + "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/deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "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/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -332,12 +995,33 @@ "integrity": "sha512-DUiXyoLK6vMF5BPr/qiMLTxDMfiM9qlzN1jxfDsVfuvB/CwhYpNxA/M4mbqKN8PCVGLmccXBJbfmFJPP5+zmzw==", "dev": true }, + "node_modules/electron-to-chromium": { + "version": "1.4.243", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.243.tgz", + "integrity": "sha512-BgLD2gBX43OSXwlT01oYRRD5NIB4n3okTRxkzEAC6G0SZG4TTlyrWMjbOo0fajCwqwpRtMHXQNMjtRN6qpNtfw==", + "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", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -501,6 +1185,12 @@ "node": ">=0.10.0" } }, + "node_modules/events-to-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-1.1.2.tgz", + "integrity": "sha512-inRWzRY7nG+aXZxBzEqYKB3HPgwflZRopAjDCHv0whhRx+MTUr1ei0ICZUypdyE0HRm4L2d5VEcIqLD6yl+BFA==", + "dev": true + }, "node_modules/external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -557,6 +1247,54 @@ "node": ">=4" } }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-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": "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/findit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findit/-/findit-2.0.0.tgz", + "integrity": "sha512-ENZS237/Hr8bjczn5eKuBohLgaD0JyUd0arxretR1f9RO46vZHA1b2y0VorgGV3WaOT3c+78P8h7v4JGJ1i/rg==", + "dev": true + }, "node_modules/flat-cache": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", @@ -577,39 +1315,187 @@ "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", "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/foreground-child/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/foreground-child/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/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-exists-cached": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz", + "integrity": "sha512-kSxoARUDn4F2RPXX48UXnaFKwVU7Ivd/6qpzZL29MCDmr9sTvybv4gFCp+qaI4fM9m0z9fgz/yJvi56GAz+BZg==", + "dev": true + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-loop": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/function-loop/-/function-loop-2.0.1.tgz", + "integrity": "sha512-ktIR+O6i/4h+j/ZhZJNdzeI4i9lEPeEK6UPR2EVyTVBqOwcU3Za9xYKLH64ZR9HmcROyRrOkizNyjjtWJzDDkQ==", + "dev": true + }, "node_modules/functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "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", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, "engines": { "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "dependencies": { "is-glob": "^4.0.1" @@ -630,6 +1516,12 @@ "node": ">=8" } }, + "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/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -639,6 +1531,28 @@ "node": ">=4" } }, + "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/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/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -682,6 +1596,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", @@ -722,6 +1645,18 @@ "node": ">=6.0.0" } }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -752,18 +1687,255 @@ "node": ">=0.10.0" } }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", "dev": true }, + "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-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/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, + "node_modules/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-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-processinfo/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/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-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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/jackspeak": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-1.4.1.tgz", + "integrity": "sha512-npN8f+M4+IQ8xD3CcWi3U62VQwKlT3Tj4GxbdT/fYTmeogD9eBF9OFdpoFG/VPNoshRjPUijdkp/p2XrzUHaVg==", + "dev": true, + "dependencies": { + "cliui": "^7.0.4" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -783,6 +1955,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", @@ -795,6 +1979,18 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "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/levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -808,12 +2004,72 @@ "node": ">= 0.8.0" } }, + "node_modules/libtap": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/libtap/-/libtap-1.4.0.tgz", + "integrity": "sha512-STLFynswQ2A6W14JkabgGetBNk6INL1REgJ9UeNKw5llXroC2cGLgKTqavv0sl8OLVztLLipVKMcQ7yeUcqpmg==", + "dev": true, + "dependencies": { + "async-hook-domain": "^2.0.4", + "bind-obj-methods": "^3.0.0", + "diff": "^4.0.2", + "function-loop": "^2.0.1", + "minipass": "^3.1.5", + "own-or": "^1.0.0", + "own-or-env": "^1.0.2", + "signal-exit": "^3.0.4", + "stack-utils": "^2.0.4", + "tap-parser": "^11.0.0", + "tap-yaml": "^1.0.0", + "tcompare": "^5.0.6", + "trivial-deferred": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/lodash": { "version": "4.17.20", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", "dev": true }, + "node_modules/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/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/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -824,9 +2080,9 @@ } }, "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { "brace-expansion": "^1.1.7" @@ -835,6 +2091,24 @@ "node": "*" } }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "node_modules/minipass": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", @@ -847,12 +2121,6 @@ "mkdirp": "bin/cmd.js" } }, - "node_modules/mkdirp/node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -877,6 +2145,98 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, + "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", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "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/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/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -898,6 +2258,15 @@ "node": ">=6" } }, + "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.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", @@ -924,6 +2293,84 @@ "node": ">=0.10.0" } }, + "node_modules/own-or": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/own-or/-/own-or-1.0.0.tgz", + "integrity": "sha512-NfZr5+Tdf6MB8UI9GLvKRs4cXY8/yB0w3xtt84xFdWy8hkGjn+JFc60VhzS/hFRfbyxFcGYMTjnF4Me+RbbqrA==", + "dev": true + }, + "node_modules/own-or-env": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/own-or-env/-/own-or-env-1.0.2.tgz", + "integrity": "sha512-NQ7v0fliWtK7Lkb+WdFqe6ky9XAzYmlkXthQrBbzlYbmFKoAYbDDcwmOm6q8kOuwSRXW8bdL5ORksploUJmWgw==", + "dev": true, + "dependencies": { + "own-or": "^1.0.0" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-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/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -936,6 +2383,15 @@ "node": ">=6" } }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -955,10 +2411,40 @@ } }, "node_modules/path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "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", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, "node_modules/prelude-ls": { "version": "1.1.2", @@ -969,6 +2455,18 @@ "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/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -987,6 +2485,18 @@ "node": ">=6" } }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, "node_modules/regenerator-runtime": { "version": "0.13.3", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", @@ -1002,6 +2512,33 @@ "node": ">=6.5.0" } }, + "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", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "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/requirejs": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz", @@ -1082,6 +2619,12 @@ "npm": ">=2.0.0" } }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -1097,6 +2640,12 @@ "semver": "bin/semver.js" } }, + "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": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -1119,9 +2668,9 @@ } }, "node_modules/signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "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/slice-ansi": { @@ -1147,12 +2696,99 @@ "node": ">=4" } }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "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/spawn-wrap/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/spawn-wrap/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, + "node_modules/stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/string-width": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", @@ -1200,6 +2836,15 @@ "node": ">=6" } }, + "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/strip-json-comments": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", @@ -1265,6 +2910,2052 @@ "node": ">=6" } }, + "node_modules/tap": { + "version": "16.3.0", + "resolved": "https://registry.npmjs.org/tap/-/tap-16.3.0.tgz", + "integrity": "sha512-J9GffPUAbX6FnWbQ/jj7ktzd9nnDFP1fH44OzidqOmxUfZ1hPLMOvpS99LnDiP0H2mO8GY3kGN5XoY0xIKbNFA==", + "bundleDependencies": [ + "ink", + "treport", + "@types/react", + "@isaacs/import-jsx", + "react" + ], + "dev": true, + "dependencies": { + "@isaacs/import-jsx": "^4.0.1", + "@types/react": "^17", + "chokidar": "^3.3.0", + "findit": "^2.0.0", + "foreground-child": "^2.0.0", + "fs-exists-cached": "^1.0.0", + "glob": "^7.1.6", + "ink": "^3.2.0", + "isexe": "^2.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "jackspeak": "^1.4.1", + "libtap": "^1.4.0", + "minipass": "^3.1.1", + "mkdirp": "^1.0.4", + "nyc": "^15.1.0", + "opener": "^1.5.1", + "react": "^17.0.2", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.6", + "source-map-support": "^0.5.16", + "tap-mocha-reporter": "^5.0.3", + "tap-parser": "^11.0.1", + "tap-yaml": "^1.0.0", + "tcompare": "^5.0.7", + "treport": "^3.0.3", + "which": "^2.0.2" + }, + "bin": { + "tap": "bin/run.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "peerDependencies": { + "coveralls": "^3.1.1", + "flow-remove-types": ">=2.112.0", + "ts-node": ">=8.5.2", + "typescript": ">=3.7.2" + }, + "peerDependenciesMeta": { + "coveralls": { + "optional": true + }, + "flow-remove-types": { + "optional": true + }, + "ts-node": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/tap-mocha-reporter": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/tap-mocha-reporter/-/tap-mocha-reporter-5.0.3.tgz", + "integrity": "sha512-6zlGkaV4J+XMRFkN0X+yuw6xHbE9jyCZ3WUKfw4KxMyRGOpYSRuuQTRJyWX88WWuLdVTuFbxzwXhXuS2XE6o0g==", + "dev": true, + "dependencies": { + "color-support": "^1.1.0", + "debug": "^4.1.1", + "diff": "^4.0.1", + "escape-string-regexp": "^2.0.0", + "glob": "^7.0.5", + "tap-parser": "^11.0.0", + "tap-yaml": "^1.0.0", + "unicode-length": "^2.0.2" + }, + "bin": { + "tap-mocha-reporter": "index.js" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tap-mocha-reporter/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tap-parser": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-11.0.1.tgz", + "integrity": "sha512-5ow0oyFOnXVSALYdidMX94u0GEjIlgc/BPFYLx0yRh9hb8+cFGNJqJzDJlUqbLOwx8+NBrIbxCWkIQi7555c0w==", + "dev": true, + "dependencies": { + "events-to-array": "^1.0.1", + "minipass": "^3.1.6", + "tap-yaml": "^1.0.0" + }, + "bin": { + "tap-parser": "bin/cmd.js" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tap-yaml": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tap-yaml/-/tap-yaml-1.0.0.tgz", + "integrity": "sha512-Rxbx4EnrWkYk0/ztcm5u3/VznbyFJpyXO12dDBHKWiDVxy7O2Qw6MRrwO5H6Ww0U5YhRY/4C/VzWmFPhBQc4qQ==", + "dev": true, + "dependencies": { + "yaml": "^1.5.0" + } + }, + "node_modules/tap/node_modules/@ampproject/remapping": { + "version": "2.1.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/tap/node_modules/@babel/code-frame": { + "version": "7.16.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/compat-data": { + "version": "7.17.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/core": { + "version": "7.17.8", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.7", + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-module-transforms": "^7.17.7", + "@babel/helpers": "^7.17.8", + "@babel/parser": "^7.17.8", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/tap/node_modules/@babel/generator": { + "version": "7.17.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.17.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/helper-compilation-targets": { + "version": "7.17.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/tap/node_modules/@babel/helper-environment-visitor": { + "version": "7.16.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/helper-function-name": { + "version": "7.16.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/helper-get-function-arity": { + "version": "7.16.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/helper-hoist-variables": { + "version": "7.16.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/helper-module-imports": { + "version": "7.16.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/helper-module-transforms": { + "version": "7.17.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/helper-simple-access": { + "version": "7.17.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/helper-validator-identifier": { + "version": "7.16.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/helper-validator-option": { + "version": "7.16.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/helpers": { + "version": "7.17.8", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/highlight": { + "version": "7.16.10", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/parser": { + "version": "7.17.8", + "dev": true, + "inBundle": true, + "license": "MIT", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/tap/node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.17.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.17.0", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/tap/node_modules/@babel/plugin-syntax-jsx": { + "version": "7.16.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/tap/node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/tap/node_modules/@babel/plugin-transform-destructuring": { + "version": "7.17.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/tap/node_modules/@babel/plugin-transform-parameters": { + "version": "7.16.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/tap/node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.17.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-jsx": "^7.16.7", + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/tap/node_modules/@babel/template": { + "version": "7.16.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/traverse": { + "version": "7.17.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.3", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@babel/types": { + "version": "7.17.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/@isaacs/import-jsx": { + "version": "4.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.5.5", + "@babel/plugin-proposal-object-rest-spread": "^7.5.5", + "@babel/plugin-transform-destructuring": "^7.5.0", + "@babel/plugin-transform-react-jsx": "^7.3.0", + "caller-path": "^3.0.1", + "find-cache-dir": "^3.2.0", + "make-dir": "^3.0.2", + "resolve-from": "^3.0.0", + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tap/node_modules/@jridgewell/resolve-uri": { + "version": "3.0.5", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/tap/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.11", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.4", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/tap/node_modules/@types/prop-types": { + "version": "15.7.4", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/@types/react": { + "version": "17.0.41", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/tap/node_modules/@types/scheduler": { + "version": "0.16.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/@types/yoga-layout": { + "version": "1.9.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/ansi-escapes": { + "version": "4.3.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tap/node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "dev": true, + "inBundle": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tap/node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tap/node_modules/ansicolors": { + "version": "0.3.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/astral-regex": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/auto-bind": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tap/node_modules/balanced-match": { + "version": "1.0.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/tap/node_modules/browserslist": { + "version": "4.20.2", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "inBundle": true, + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001317", + "electron-to-chromium": "^1.4.84", + "escalade": "^3.1.1", + "node-releases": "^2.0.2", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/tap/node_modules/caller-callsite": { + "version": "4.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/caller-path": { + "version": "3.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "caller-callsite": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/callsites": { + "version": "3.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tap/node_modules/caniuse-lite": { + "version": "1.0.30001319", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ], + "inBundle": true, + "license": "CC-BY-4.0" + }, + "node_modules/tap/node_modules/cardinal": { + "version": "2.1.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansicolors": "~0.3.2", + "redeyed": "~2.1.0" + }, + "bin": { + "cdl": "bin/cdl.js" + } + }, + "node_modules/tap/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tap/node_modules/ci-info": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/cli-boxes": { + "version": "2.2.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tap/node_modules/cli-cursor": { + "version": "3.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/cli-truncate": { + "version": "2.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tap/node_modules/code-excerpt": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "convert-to-spaces": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tap/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/tap/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/commondir": { + "version": "1.0.1", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/concat-map": { + "version": "0.0.1", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/convert-source-map": { + "version": "1.8.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/tap/node_modules/convert-to-spaces": { + "version": "1.0.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/tap/node_modules/csstype": { + "version": "3.0.11", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/tap/node_modules/electron-to-chromium": { + "version": "1.4.89", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/tap/node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/escalade": { + "version": "3.1.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tap/node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/tap/node_modules/esprima": { + "version": "4.0.1", + "dev": true, + "inBundle": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tap/node_modules/events-to-array": { + "version": "1.1.2", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/tap/node_modules/find-cache-dir": { + "version": "3.3.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "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/tap/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/fs.realpath": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/tap/node_modules/gensync": { + "version": "1.0.0-beta.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/tap/node_modules/glob": { + "version": "7.2.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/tap/node_modules/globals": { + "version": "11.12.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/tap/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/tap/node_modules/indent-string": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/inflight": { + "version": "1.0.6", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/tap/node_modules/inherits": { + "version": "2.0.4", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/tap/node_modules/ink": { + "version": "3.2.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "auto-bind": "4.0.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.0", + "cli-cursor": "^3.1.0", + "cli-truncate": "^2.1.0", + "code-excerpt": "^3.0.0", + "indent-string": "^4.0.0", + "is-ci": "^2.0.0", + "lodash": "^4.17.20", + "patch-console": "^1.0.0", + "react-devtools-core": "^4.19.1", + "react-reconciler": "^0.26.2", + "scheduler": "^0.20.2", + "signal-exit": "^3.0.2", + "slice-ansi": "^3.0.0", + "stack-utils": "^2.0.2", + "string-width": "^4.2.2", + "type-fest": "^0.12.0", + "widest-line": "^3.1.0", + "wrap-ansi": "^6.2.0", + "ws": "^7.5.5", + "yoga-layout-prebuilt": "^1.9.6" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": ">=16.8.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/tap/node_modules/ink/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/tap/node_modules/ink/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/tap/node_modules/ink/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/tap/node_modules/ink/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/ink/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/ink/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/is-ci": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/tap/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/js-tokens": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/jsesc": { + "version": "2.5.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tap/node_modules/json5": { + "version": "2.2.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tap/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/lodash": { + "version": "4.17.21", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/loose-envify": { + "version": "1.4.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/tap/node_modules/make-dir": { + "version": "3.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tap/node_modules/mimic-fn": { + "version": "2.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tap/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tap/node_modules/minipass": { + "version": "3.1.6", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tap/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/node-releases": { + "version": "2.0.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/object-assign": { + "version": "4.1.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tap/node_modules/once": { + "version": "1.4.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/tap/node_modules/onetime": { + "version": "5.1.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tap/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tap/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/p-try": { + "version": "2.2.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tap/node_modules/patch-console": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/tap/node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/path-is-absolute": { + "version": "1.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tap/node_modules/picocolors": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/tap/node_modules/pkg-dir": { + "version": "4.2.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/punycode": { + "version": "2.1.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tap/node_modules/react": { + "version": "17.0.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tap/node_modules/react-devtools-core": { + "version": "4.24.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "shell-quote": "^1.6.1", + "ws": "^7" + } + }, + "node_modules/tap/node_modules/react-reconciler": { + "version": "0.26.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "react": "^17.0.2" + } + }, + "node_modules/tap/node_modules/redeyed": { + "version": "2.1.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "esprima": "~4.0.0" + } + }, + "node_modules/tap/node_modules/resolve-from": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/tap/node_modules/restore-cursor": { + "version": "3.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/tap/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/scheduler": { + "version": "0.20.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "node_modules/tap/node_modules/semver": { + "version": "6.3.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/tap/node_modules/shell-quote": { + "version": "1.7.3", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/signal-exit": { + "version": "3.0.7", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/tap/node_modules/slice-ansi": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/tap/node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/tap/node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/source-map": { + "version": "0.5.7", + "dev": true, + "inBundle": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tap/node_modules/stack-utils": { + "version": "2.0.5", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tap/node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tap/node_modules/tap-parser": { + "version": "11.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "events-to-array": "^1.0.1", + "minipass": "^3.1.6", + "tap-yaml": "^1.0.0" + }, + "bin": { + "tap-parser": "bin/cmd.js" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tap/node_modules/tap-yaml": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "yaml": "^1.5.0" + } + }, + "node_modules/tap/node_modules/to-fast-properties": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/tap/node_modules/treport": { + "version": "3.0.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@isaacs/import-jsx": "^4.0.1", + "cardinal": "^2.1.1", + "chalk": "^3.0.0", + "ink": "^3.2.0", + "ms": "^2.1.2", + "tap-parser": "^11.0.0", + "unicode-length": "^2.0.2" + }, + "peerDependencies": { + "react": "^17.0.2" + } + }, + "node_modules/tap/node_modules/treport/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/tap/node_modules/treport/node_modules/chalk": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/treport/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/tap/node_modules/treport/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/treport/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/treport/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/type-fest": { + "version": "0.12.0", + "dev": true, + "inBundle": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tap/node_modules/unicode-length": { + "version": "2.0.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.0.0", + "strip-ansi": "^3.0.1" + } + }, + "node_modules/tap/node_modules/unicode-length/node_modules/ansi-regex": { + "version": "2.1.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tap/node_modules/unicode-length/node_modules/strip-ansi": { + "version": "3.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tap/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tap/node_modules/widest-line": { + "version": "3.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/wrap-ansi": { + "version": "6.2.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tap/node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/tap/node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/tap/node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/tap/node_modules/wrappy": { + "version": "1.0.2", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/tap/node_modules/ws": { + "version": "7.5.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/tap/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/tap/node_modules/yaml": { + "version": "1.10.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/tap/node_modules/yoga-layout-prebuilt": { + "version": "1.10.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@types/yoga-layout": "1.9.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tcompare": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/tcompare/-/tcompare-5.0.7.tgz", + "integrity": "sha512-d9iddt6YYGgyxJw5bjsN7UJUO1kGOtjSlNy/4PoGYAjQS5pAT/hzIoLf1bZCw+uUxRmZJh7Yy1aA7xKVRT9B4w==", + "dev": true, + "dependencies": { + "diff": "^4.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "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", @@ -1289,6 +4980,33 @@ "node": ">=0.6.0" } }, + "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", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/trivial-deferred": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trivial-deferred/-/trivial-deferred-1.0.1.tgz", + "integrity": "sha512-dagAKX7vaesNNAwOc9Np9C2mJ+7YopF4lk+jE2JML9ta4kZ91Y6UruJNH65bLRYoUROD8EY+Pmi44qQWwXR7sw==", + "dev": true + }, "node_modules/tslib": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", @@ -1367,10 +5085,19 @@ "node": ">=8" } }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, "node_modules/typescript": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", - "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz", + "integrity": "sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -1380,6 +5107,41 @@ "node": ">=4.2.0" } }, + "node_modules/unicode-length": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-length/-/unicode-length-2.1.0.tgz", + "integrity": "sha512-4bV582zTV9Q02RXBxSUMiuN/KHo5w4aTojuKTNT96DIKps/SIawFp7cS5Mu25VuY1AioGXrmYyzKZUzh8OqoUw==", + "dev": true, + "dependencies": { + "punycode": "^2.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.7.tgz", + "integrity": "sha512-iN/XYesmZ2RmmWAiI4Z5rq0YqSiv0brj9Ce9CfhNE4xIW2h+MFxcgkxIzZ+ShkFPUkjU3gQ+3oypadD3RAMtrg==", + "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.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", @@ -1389,6 +5151,15 @@ "punycode": "^2.1.0" } }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/v8-compile-cache": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", @@ -1407,6 +5178,12 @@ "which": "bin/which" } }, + "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", @@ -1416,6 +5193,68 @@ "node": ">=0.10.0" } }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -1434,6 +5273,30 @@ "node": ">=4" } }, + "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/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/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/yaml": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.7.2.tgz", @@ -1445,29 +5308,312 @@ "engines": { "node": ">= 6" } + }, + "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/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/yargs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/yargs/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/yargs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/yargs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/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" + } } }, "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.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.8.3" + "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.19.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.0.tgz", + "integrity": "sha512-y5rqgTTPTmaF5e2nVhOxw+Ur9HDJLsWb6U/KpgUzRZEdPfE6VOubXBKLdbcUTijzRptednSBDQbYZBOSqJxpJw==", + "dev": true + }, + "@babel/core": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.0.tgz", + "integrity": "sha512-reM4+U7B9ss148rh2n1Qs9ASS+w94irYXga7c2jaQv9RVzpS7Mv1a9rnYYwuDa45G+DkORt9g6An2k/V4d9LbQ==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.0", + "@babel/helper-compilation-targets": "^7.19.0", + "@babel/helper-module-transforms": "^7.19.0", + "@babel/helpers": "^7.19.0", + "@babel/parser": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + } + }, + "@babel/generator": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.0.tgz", + "integrity": "sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg==", + "dev": true, + "requires": { + "@babel/types": "^7.19.0", + "@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.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.0.tgz", + "integrity": "sha512-Ai5bNWXIvwDvWM7njqsG3feMlL9hCVQsPYXodsZyLwshYkZVJt59Gftau4VrE8S9IT9asd2uSP1hG6wCNw+sXA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.19.0", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + } + }, + "@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.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "dev": true, + "requires": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + } + }, + "@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.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz", + "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==", + "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.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" + } + }, + "@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.19.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz", + "integrity": "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==", + "dev": true, + "requires": { + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" } }, "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", - "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", - "dev": true, - "requires": { + "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", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, + "@babel/parser": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.0.tgz", + "integrity": "sha512-74bEXKX2h+8rrfQUfsBfuZZHzsEs6Eql4pqy/T4Nn6Y9wNPggQOqD6z6pn5Bl8ZfysKouFZT/UXEH94ummEeQw==", + "dev": true + }, "@babel/runtime": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.3.tgz", @@ -1477,6 +5623,54 @@ "regenerator-runtime": "^0.13.2" } }, + "@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.19.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.0.tgz", + "integrity": "sha512-4pKpFRDh+utd2mbRC8JLnlsMUii3PMHjpL6a0SZ4NMZy7YFP9aXORxEhdMVOc9CpWtDF09IkciQLEhK7Ml7gRA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.0", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.19.0", + "@babel/types": "^7.19.0", + "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.19.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.0.tgz", + "integrity": "sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + } + }, "@implab/core-amd": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@implab/core-amd/-/core-amd-1.4.0.tgz", @@ -1489,18 +5683,98 @@ "integrity": "sha512-B2kvlKJgvyIQAl/k1pVyNmtp4ADvBDCs4Lw/qfBC+Sz/ft4c7EuRXmN/+2dhWrd6A5SMjEgex5oeq6Ja2ntrig==", "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": { + "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" + } + }, "@types/chai": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.3.tgz", "integrity": "sha512-f5dXGzOJycyzSMdaXVhiBhauL4dYydXwVpavfQ1mVCaGjR56a9QfklXObUxlIY9bGTmCPHEEZ04I16BZ/8w5ww==", "dev": true }, + "@types/node": { + "version": "18.7.15", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.15.tgz", + "integrity": "sha512-XnjpaI8Bgc3eBag2Aw4t2Uj/49lLBSStHWfqKvIuXD7FIrZyMLWp8KuAFHAqxMZYTF9l08N1ctUn9YNybZJVmQ==", + "dev": true + }, "@types/requirejs": { "version": "2.1.31", "resolved": "https://registry.npmjs.org/@types/requirejs/-/requirejs-2.1.31.tgz", "integrity": "sha512-b2soeyuU76rMbcRJ4e0hEl0tbMhFwZeTC0VZnfuWlfGlk6BwWNsev6kFu/twKABPX29wkX84wU2o+cEJoXsiTw==", "dev": true }, + "@types/tap": { + "version": "15.0.7", + "resolved": "https://registry.npmjs.org/@types/tap/-/tap-15.0.7.tgz", + "integrity": "sha512-TTMajw4gxQfFgYbhXhy/Tb2OiNcwS+4oP/9yp1/GdU0pFJo3wtnkYhRgmQy39ksh+rnoa0VrPHJ4Tuv2cLNQ5A==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/yaml": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@types/yaml/-/yaml-1.2.0.tgz", @@ -1519,6 +5793,16 @@ "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==", "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.11.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.11.0.tgz", @@ -1541,9 +5825,9 @@ } }, "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { @@ -1555,6 +5839,31 @@ "color-convert": "^1.9.0" } }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "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 + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -1570,12 +5879,30 @@ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", "dev": true }, + "async-hook-domain": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/async-hook-domain/-/async-hook-domain-2.0.4.tgz", + "integrity": "sha512-14LjCmlK1PK8eDtTezR6WX8TMaYNIzBIsd2D1sGoGjgx0BuNMMoSdk7i/drlbtamy0AWv9yv2tkB+ASdmeqFIw==", + "dev": true + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bind-obj-methods": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bind-obj-methods/-/bind-obj-methods-3.0.0.tgz", + "integrity": "sha512-nLEaaz3/sEzNSyPWRsN9HNsqwk1AUyECtGj+XwGdIi3xABnEqecvXtIJ0wehQXuuER5uZ/5fTs2usONgYjG+iw==", + "dev": true + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1586,18 +5913,69 @@ "concat-map": "0.0.1" } }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.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", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, "builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true }, + "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", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001390", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001390.tgz", + "integrity": "sha512-sS4CaUM+/+vqQUlCvCJ2WtDlV81aWtHhqeEVkLokVJJa3ViN4zDxAGfq9R8i1m90uGHxo99cy10Od+lvn3hf0g==", + "dev": true + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -1615,6 +5993,28 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "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 + }, "cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -1630,6 +6030,28 @@ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", "dev": true }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -1645,18 +6067,39 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true + }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, + "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" + } + }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -1687,12 +6130,27 @@ "ms": "^2.1.1" } }, + "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 + }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "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" + } + }, "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -1714,12 +6172,30 @@ "integrity": "sha512-DUiXyoLK6vMF5BPr/qiMLTxDMfiM9qlzN1jxfDsVfuvB/CwhYpNxA/M4mbqKN8PCVGLmccXBJbfmFJPP5+zmzw==", "dev": true }, + "electron-to-chromium": { + "version": "1.4.243", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.243.tgz", + "integrity": "sha512-BgLD2gBX43OSXwlT01oYRRD5NIB4n3okTRxkzEAC6G0SZG4TTlyrWMjbOo0fajCwqwpRtMHXQNMjtRN6qpNtfw==", + "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==", + "dev": true + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -1843,6 +6319,12 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, + "events-to-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-1.1.2.tgz", + "integrity": "sha512-inRWzRY7nG+aXZxBzEqYKB3HPgwflZRopAjDCHv0whhRx+MTUr1ei0ICZUypdyE0HRm4L2d5VEcIqLD6yl+BFA==", + "dev": true + }, "external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -1890,6 +6372,42 @@ "flat-cache": "^2.0.1" } }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-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": "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" + } + }, + "findit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findit/-/findit-2.0.0.tgz", + "integrity": "sha512-ENZS237/Hr8bjczn5eKuBohLgaD0JyUd0arxretR1f9RO46vZHA1b2y0VorgGV3WaOT3c+78P8h7v4JGJ1i/rg==", + "dev": true + }, "flat-cache": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", @@ -1907,36 +6425,132 @@ "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", "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" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "dev": true + }, + "fs-exists-cached": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz", + "integrity": "sha512-kSxoARUDn4F2RPXX48UXnaFKwVU7Ivd/6qpzZL29MCDmr9sTvybv4gFCp+qaI4fM9m0z9fgz/yJvi56GAz+BZg==", + "dev": true + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-loop": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/function-loop/-/function-loop-2.0.1.tgz", + "integrity": "sha512-ktIR+O6i/4h+j/ZhZJNdzeI4i9lEPeEK6UPR2EVyTVBqOwcU3Za9xYKLH64ZR9HmcROyRrOkizNyjjtWJzDDkQ==", + "dev": true + }, "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "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", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { "is-glob": "^4.0.1" @@ -1951,12 +6565,34 @@ "type-fest": "^0.8.1" } }, + "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 + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "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" + } + }, + "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 + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -1988,6 +6624,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", @@ -2025,6 +6667,15 @@ "through": "^2.3.6" } }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -2046,18 +6697,193 @@ "is-extglob": "^2.1.1" } }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", "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-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 + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "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" + } + }, + "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" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "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" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "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" + } + }, + "jackspeak": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-1.4.1.tgz", + "integrity": "sha512-npN8f+M4+IQ8xD3CcWi3U62VQwKlT3Tj4GxbdT/fYTmeogD9eBF9OFdpoFG/VPNoshRjPUijdkp/p2XrzUHaVg==", + "dev": true, + "requires": { + "cliui": "^7.0.4" + } + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -2074,6 +6900,12 @@ "esprima": "^4.0.0" } }, + "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", @@ -2086,6 +6918,12 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true + }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -2096,12 +6934,57 @@ "type-check": "~0.3.2" } }, + "libtap": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/libtap/-/libtap-1.4.0.tgz", + "integrity": "sha512-STLFynswQ2A6W14JkabgGetBNk6INL1REgJ9UeNKw5llXroC2cGLgKTqavv0sl8OLVztLLipVKMcQ7yeUcqpmg==", + "dev": true, + "requires": { + "async-hook-domain": "^2.0.4", + "bind-obj-methods": "^3.0.0", + "diff": "^4.0.2", + "function-loop": "^2.0.1", + "minipass": "^3.1.5", + "own-or": "^1.0.0", + "own-or-env": "^1.0.2", + "signal-exit": "^3.0.4", + "stack-utils": "^2.0.4", + "tap-parser": "^11.0.0", + "tap-yaml": "^1.0.0", + "tcompare": "^5.0.6", + "trivial-deferred": "^1.0.1" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, "lodash": { "version": "4.17.20", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", "dev": true }, + "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 + }, + "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" + } + }, "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -2109,14 +6992,29 @@ "dev": true }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "minipass": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, "mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", @@ -2124,14 +7022,6 @@ "dev": true, "requires": { "minimist": "^1.2.5" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - } } }, "ms": { @@ -2158,6 +7048,79 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, + "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": { + "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 + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -2176,6 +7139,12 @@ "mimic-fn": "^2.1.0" } }, + "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.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", @@ -2196,6 +7165,66 @@ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, + "own-or": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/own-or/-/own-or-1.0.0.tgz", + "integrity": "sha512-NfZr5+Tdf6MB8UI9GLvKRs4cXY8/yB0w3xtt84xFdWy8hkGjn+JFc60VhzS/hFRfbyxFcGYMTjnF4Me+RbbqrA==", + "dev": true + }, + "own-or-env": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/own-or-env/-/own-or-env-1.0.2.tgz", + "integrity": "sha512-NQ7v0fliWtK7Lkb+WdFqe6ky9XAzYmlkXthQrBbzlYbmFKoAYbDDcwmOm6q8kOuwSRXW8bdL5ORksploUJmWgw==", + "dev": true, + "requires": { + "own-or": "^1.0.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" + } + }, + "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" + } + }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -2205,6 +7234,12 @@ "callsites": "^3.0.0" } }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -2218,10 +7253,31 @@ "dev": true }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "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" + } }, "prelude-ls": { "version": "1.1.2", @@ -2229,6 +7285,15 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "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" + } + }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -2241,6 +7306,15 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, "regenerator-runtime": { "version": "0.13.3", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", @@ -2253,6 +7327,27 @@ "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", "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": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "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 + }, "requirejs": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz", @@ -2311,6 +7406,12 @@ "tslib": "^1.9.0" } }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -2323,6 +7424,12 @@ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, + "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": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -2339,9 +7446,9 @@ "dev": true }, "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "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 }, "slice-ansi": { @@ -2363,12 +7470,79 @@ } } }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "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" + }, + "dependencies": { + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, + "stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + } + } + }, "string-width": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", @@ -2408,6 +7582,12 @@ } } }, + "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 + }, "strip-json-comments": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", @@ -2460,6 +7640,1342 @@ } } }, + "tap": { + "version": "16.3.0", + "resolved": "https://registry.npmjs.org/tap/-/tap-16.3.0.tgz", + "integrity": "sha512-J9GffPUAbX6FnWbQ/jj7ktzd9nnDFP1fH44OzidqOmxUfZ1hPLMOvpS99LnDiP0H2mO8GY3kGN5XoY0xIKbNFA==", + "dev": true, + "requires": { + "@isaacs/import-jsx": "^4.0.1", + "@types/react": "^17", + "chokidar": "^3.3.0", + "findit": "^2.0.0", + "foreground-child": "^2.0.0", + "fs-exists-cached": "^1.0.0", + "glob": "^7.1.6", + "ink": "^3.2.0", + "isexe": "^2.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "jackspeak": "^1.4.1", + "libtap": "^1.4.0", + "minipass": "^3.1.1", + "mkdirp": "^1.0.4", + "nyc": "^15.1.0", + "opener": "^1.5.1", + "react": "^17.0.2", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.6", + "source-map-support": "^0.5.16", + "tap-mocha-reporter": "^5.0.3", + "tap-parser": "^11.0.1", + "tap-yaml": "^1.0.0", + "tcompare": "^5.0.7", + "treport": "^3.0.3", + "which": "^2.0.2" + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.0" + } + }, + "@babel/code-frame": { + "version": "7.16.7", + "bundled": true, + "dev": true, + "requires": { + "@babel/highlight": "^7.16.7" + } + }, + "@babel/compat-data": { + "version": "7.17.7", + "bundled": true, + "dev": true + }, + "@babel/core": { + "version": "7.17.8", + "bundled": true, + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.7", + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-module-transforms": "^7.17.7", + "@babel/helpers": "^7.17.8", + "@babel/parser": "^7.17.8", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0" + } + }, + "@babel/generator": { + "version": "7.17.7", + "bundled": true, + "dev": true, + "requires": { + "@babel/types": "^7.17.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "bundled": true, + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.17.7", + "bundled": true, + "dev": true, + "requires": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.16.7", + "bundled": true, + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-function-name": { + "version": "7.16.7", + "bundled": true, + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.16.7", + "bundled": true, + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.16.7", + "bundled": true, + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-module-imports": { + "version": "7.16.7", + "bundled": true, + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-module-transforms": { + "version": "7.17.7", + "bundled": true, + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "bundled": true, + "dev": true + }, + "@babel/helper-simple-access": { + "version": "7.17.7", + "bundled": true, + "dev": true, + "requires": { + "@babel/types": "^7.17.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.16.7", + "bundled": true, + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "bundled": true, + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.16.7", + "bundled": true, + "dev": true + }, + "@babel/helpers": { + "version": "7.17.8", + "bundled": true, + "dev": true, + "requires": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" + } + }, + "@babel/highlight": { + "version": "7.16.10", + "bundled": true, + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.17.8", + "bundled": true, + "dev": true + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.17.3", + "bundled": true, + "dev": true, + "requires": { + "@babel/compat-data": "^7.17.0", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.16.7" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.16.7", + "bundled": true, + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "bundled": true, + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.17.7", + "bundled": true, + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.16.7", + "bundled": true, + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.17.3", + "bundled": true, + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-jsx": "^7.16.7", + "@babel/types": "^7.17.0" + } + }, + "@babel/template": { + "version": "7.16.7", + "bundled": true, + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/traverse": { + "version": "7.17.3", + "bundled": true, + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.3", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.17.0", + "bundled": true, + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + }, + "@isaacs/import-jsx": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "requires": { + "@babel/core": "^7.5.5", + "@babel/plugin-proposal-object-rest-spread": "^7.5.5", + "@babel/plugin-transform-destructuring": "^7.5.0", + "@babel/plugin-transform-react-jsx": "^7.3.0", + "caller-path": "^3.0.1", + "find-cache-dir": "^3.2.0", + "make-dir": "^3.0.2", + "resolve-from": "^3.0.0", + "rimraf": "^3.0.0" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.0.5", + "bundled": true, + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.11", + "bundled": true, + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.4", + "bundled": true, + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@types/prop-types": { + "version": "15.7.4", + "bundled": true, + "dev": true + }, + "@types/react": { + "version": "17.0.41", + "bundled": true, + "dev": true, + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/scheduler": { + "version": "0.16.2", + "bundled": true, + "dev": true + }, + "@types/yoga-layout": { + "version": "1.9.2", + "bundled": true, + "dev": true + }, + "ansi-escapes": { + "version": "4.3.2", + "bundled": true, + "dev": true, + "requires": { + "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "bundled": true, + "dev": true + } + } + }, + "ansi-regex": { + "version": "5.0.1", + "bundled": true, + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "bundled": true, + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "ansicolors": { + "version": "0.3.2", + "bundled": true, + "dev": true + }, + "astral-regex": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "auto-bind": { + "version": "4.0.0", + "bundled": true, + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "browserslist": { + "version": "4.20.2", + "bundled": true, + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001317", + "electron-to-chromium": "^1.4.84", + "escalade": "^3.1.1", + "node-releases": "^2.0.2", + "picocolors": "^1.0.0" + } + }, + "caller-callsite": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "requires": { + "callsites": "^3.1.0" + } + }, + "caller-path": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "caller-callsite": "^4.1.0" + } + }, + "callsites": { + "version": "3.1.0", + "bundled": true, + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001319", + "bundled": true, + "dev": true + }, + "cardinal": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "requires": { + "ansicolors": "~0.3.2", + "redeyed": "~2.1.0" + } + }, + "chalk": { + "version": "2.4.2", + "bundled": true, + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "ci-info": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "cli-boxes": { + "version": "2.2.1", + "bundled": true, + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-truncate": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + } + }, + "code-excerpt": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "convert-to-spaces": "^1.0.1" + } + }, + "color-convert": { + "version": "1.9.3", + "bundled": true, + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "bundled": true, + "dev": true + }, + "commondir": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "convert-source-map": { + "version": "1.8.0", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "convert-to-spaces": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "csstype": { + "version": "3.0.11", + "bundled": true, + "dev": true + }, + "debug": { + "version": "4.3.4", + "bundled": true, + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "electron-to-chromium": { + "version": "1.4.89", + "bundled": true, + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "bundled": true, + "dev": true + }, + "escalade": { + "version": "3.1.1", + "bundled": true, + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "bundled": true, + "dev": true + }, + "esprima": { + "version": "4.0.1", + "bundled": true, + "dev": true + }, + "events-to-array": { + "version": "1.1.2", + "bundled": true, + "dev": true + }, + "find-cache-dir": { + "version": "3.3.2", + "bundled": true, + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "bundled": true, + "dev": true + }, + "glob": { + "version": "7.2.0", + "bundled": true, + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "globals": { + "version": "11.12.0", + "bundled": true, + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "bundled": true, + "dev": true + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "bundled": true, + "dev": true + }, + "ink": { + "version": "3.2.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "auto-bind": "4.0.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.0", + "cli-cursor": "^3.1.0", + "cli-truncate": "^2.1.0", + "code-excerpt": "^3.0.0", + "indent-string": "^4.0.0", + "is-ci": "^2.0.0", + "lodash": "^4.17.20", + "patch-console": "^1.0.0", + "react-devtools-core": "^4.19.1", + "react-reconciler": "^0.26.2", + "scheduler": "^0.20.2", + "signal-exit": "^3.0.2", + "slice-ansi": "^3.0.0", + "stack-utils": "^2.0.2", + "string-width": "^4.2.2", + "type-fest": "^0.12.0", + "widest-line": "^3.1.0", + "wrap-ansi": "^6.2.0", + "ws": "^7.5.5", + "yoga-layout-prebuilt": "^1.9.6" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "bundled": true, + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "bundled": true, + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "bundled": true, + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "bundled": true, + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "is-ci": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "bundled": true, + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "bundled": true, + "dev": true + }, + "json5": { + "version": "2.2.1", + "bundled": true, + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "bundled": true, + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "bundled": true, + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "make-dir": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "bundled": true, + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minipass": { + "version": "3.1.6", + "bundled": true, + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "bundled": true, + "dev": true + }, + "node-releases": { + "version": "2.0.2", + "bundled": true, + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "bundled": true, + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "bundled": true, + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "bundled": true, + "dev": true + }, + "patch-console": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "bundled": true, + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "bundled": true, + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "punycode": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "react": { + "version": "17.0.2", + "bundled": true, + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "react-devtools-core": { + "version": "4.24.1", + "bundled": true, + "dev": true, + "requires": { + "shell-quote": "^1.6.1", + "ws": "^7" + } + }, + "react-reconciler": { + "version": "0.26.2", + "bundled": true, + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + } + }, + "redeyed": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "requires": { + "esprima": "~4.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "restore-cursor": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "rimraf": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true + }, + "scheduler": { + "version": "0.20.2", + "bundled": true, + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "semver": { + "version": "6.3.0", + "bundled": true, + "dev": true + }, + "shell-quote": { + "version": "1.7.3", + "bundled": true, + "dev": true + }, + "signal-exit": { + "version": "3.0.7", + "bundled": true, + "dev": true + }, + "slice-ansi": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "bundled": true, + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "bundled": true, + "dev": true + } + } + }, + "source-map": { + "version": "0.5.7", + "bundled": true, + "dev": true + }, + "stack-utils": { + "version": "2.0.5", + "bundled": true, + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "bundled": true, + "dev": true + } + } + }, + "string-width": { + "version": "4.2.3", + "bundled": true, + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "supports-color": { + "version": "5.5.0", + "bundled": true, + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "tap-parser": { + "version": "11.0.1", + "bundled": true, + "dev": true, + "requires": { + "events-to-array": "^1.0.1", + "minipass": "^3.1.6", + "tap-yaml": "^1.0.0" + } + }, + "tap-yaml": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "yaml": "^1.5.0" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "treport": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "requires": { + "@isaacs/import-jsx": "^4.0.1", + "cardinal": "^2.1.1", + "chalk": "^3.0.0", + "ink": "^3.2.0", + "ms": "^2.1.2", + "tap-parser": "^11.0.0", + "unicode-length": "^2.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "bundled": true, + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "bundled": true, + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "bundled": true, + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "bundled": true, + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "type-fest": { + "version": "0.12.0", + "bundled": true, + "dev": true + }, + "unicode-length": { + "version": "2.0.2", + "bundled": true, + "dev": true, + "requires": { + "punycode": "^2.0.0", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "widest-line": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "string-width": "^4.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "bundled": true, + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "bundled": true, + "dev": true + } + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "ws": { + "version": "7.5.7", + "bundled": true, + "dev": true, + "requires": {} + }, + "yallist": { + "version": "4.0.0", + "bundled": true, + "dev": true + }, + "yaml": { + "version": "1.10.2", + "bundled": true, + "dev": true + }, + "yoga-layout-prebuilt": { + "version": "1.10.0", + "bundled": true, + "dev": true, + "requires": { + "@types/yoga-layout": "1.9.2" + } + } + } + }, + "tap-mocha-reporter": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/tap-mocha-reporter/-/tap-mocha-reporter-5.0.3.tgz", + "integrity": "sha512-6zlGkaV4J+XMRFkN0X+yuw6xHbE9jyCZ3WUKfw4KxMyRGOpYSRuuQTRJyWX88WWuLdVTuFbxzwXhXuS2XE6o0g==", + "dev": true, + "requires": { + "color-support": "^1.1.0", + "debug": "^4.1.1", + "diff": "^4.0.1", + "escape-string-regexp": "^2.0.0", + "glob": "^7.0.5", + "tap-parser": "^11.0.0", + "tap-yaml": "^1.0.0", + "unicode-length": "^2.0.2" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + } + } + }, + "tap-parser": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-11.0.1.tgz", + "integrity": "sha512-5ow0oyFOnXVSALYdidMX94u0GEjIlgc/BPFYLx0yRh9hb8+cFGNJqJzDJlUqbLOwx8+NBrIbxCWkIQi7555c0w==", + "dev": true, + "requires": { + "events-to-array": "^1.0.1", + "minipass": "^3.1.6", + "tap-yaml": "^1.0.0" + } + }, + "tap-yaml": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tap-yaml/-/tap-yaml-1.0.0.tgz", + "integrity": "sha512-Rxbx4EnrWkYk0/ztcm5u3/VznbyFJpyXO12dDBHKWiDVxy7O2Qw6MRrwO5H6Ww0U5YhRY/4C/VzWmFPhBQc4qQ==", + "dev": true, + "requires": { + "yaml": "^1.5.0" + } + }, + "tcompare": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/tcompare/-/tcompare-5.0.7.tgz", + "integrity": "sha512-d9iddt6YYGgyxJw5bjsN7UJUO1kGOtjSlNy/4PoGYAjQS5pAT/hzIoLf1bZCw+uUxRmZJh7Yy1aA7xKVRT9B4w==", + "dev": true, + "requires": { + "diff": "^4.0.2" + } + }, + "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", @@ -2481,6 +8997,27 @@ "os-tmpdir": "~1.0.2" } }, + "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", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "trivial-deferred": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trivial-deferred/-/trivial-deferred-1.0.1.tgz", + "integrity": "sha512-dagAKX7vaesNNAwOc9Np9C2mJ+7YopF4lk+jE2JML9ta4kZ91Y6UruJNH65bLRYoUROD8EY+Pmi44qQWwXR7sw==", + "dev": true + }, "tslib": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", @@ -2546,11 +9083,39 @@ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, "typescript": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", - "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", - "dev": true + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz", + "integrity": "sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==", + "dev": true + }, + "unicode-length": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-length/-/unicode-length-2.1.0.tgz", + "integrity": "sha512-4bV582zTV9Q02RXBxSUMiuN/KHo5w4aTojuKTNT96DIKps/SIawFp7cS5Mu25VuY1AioGXrmYyzKZUzh8OqoUw==", + "dev": true, + "requires": { + "punycode": "^2.0.0" + } + }, + "update-browserslist-db": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.7.tgz", + "integrity": "sha512-iN/XYesmZ2RmmWAiI4Z5rq0YqSiv0brj9Ce9CfhNE4xIW2h+MFxcgkxIzZ+ShkFPUkjU3gQ+3oypadD3RAMtrg==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } }, "uri-js": { "version": "4.2.2", @@ -2561,6 +9126,12 @@ "punycode": "^2.1.0" } }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + }, "v8-compile-cache": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", @@ -2576,12 +9147,64 @@ "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", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -2597,6 +9220,30 @@ "mkdirp": "^0.5.1" } }, + "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" + } + }, + "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 + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "yaml": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.7.2.tgz", @@ -2605,6 +9252,92 @@ "requires": { "@babel/runtime": "^7.6.3" } + }, + "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" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "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" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "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" + } + } + } + }, + "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" + } } } } diff --git a/djx/package.json b/djx/package.json --- a/djx/package.json +++ b/djx/package.json @@ -23,12 +23,14 @@ "@types/chai": "4.1.3", "@types/requirejs": "2.1.31", "@types/yaml": "1.2.0", + "@types/tap": "15.0.7", "dojo": "1.16.0", "@implab/dojo-typings": "1.0.0", "eslint": "6.8.0", "requirejs": "2.3.6", "tslint": "^6.1.3", - "typescript": "4.2.4", - "yaml": "~1.7.2" + "typescript": "4.8.2", + "yaml": "~1.7.2", + "tap": "16.3.0" } } diff --git a/djx/src/main/ts/observable.ts b/djx/src/main/ts/observable.ts new file mode 100644 --- /dev/null +++ b/djx/src/main/ts/observable.ts @@ -0,0 +1,147 @@ +/** + * The interface for the consumer of an observable sequence + */ +export interface Observer { + /** + * Called for the next element in the sequence + */ + next: (value: T) => void; + + /** + * Called once when the error occurs in the sequence. + */ + error: (e: unknown) => void; + + /** + * Called once at the end of the sequence. + */ + complete: () => void; +} + +/** + * The group of functions to feed an observable. This methods are provided to + * the producer to generate a stream of events. + */ +export type Sink = { + [k in keyof Observer]: (this: void, ...args: Parameters[k]>) => void; +}; + +export type Producer = (sink: Sink) => (void | (() => void)); + +export interface Unsubscribable { + unsubscribe(): void; +} + +export const isUnsubsribable = (v: unknown): v is Unsubscribable => + v !== null && v !== undefined && typeof (v as Unsubscribable).unsubscribe === "function"; + +export const isSubsribable = (v: unknown): v is Subscribable => + v !== null && v !== undefined && typeof (v as Subscribable).subscribe === "function"; + +export interface Subscribable { + subscribe(consumer: Partial>): Unsubscribable; +} + +/** The observable source of items. */ +export interface Observable extends Subscribable { + /** Transforms elements of the sequence with the specified mapper + * + * @param mapper The mapper used to transform the values + */ + map(mapper: (value: T) => T2): Observable; + + /** Filters elements of the sequence. The resulting sequence will + * contain only elements which match the specified predicate. + * + * @param predicate The filter predicate. + */ + filter(predicate: (value: T) => boolean): Observable; + + /** Applies accumulator to each value in the sequence and + * emits the accumulated value for each source element + * + * @param accumulator + * @param initial + */ + scan(accumulator: (acc: A, value: T) => A, initial: A): Observable; +} + +const noop = () => { }; + +const sink = (consumer: Partial>) => { + const { next, error, complete } = consumer; + return { + next: next ? next.bind(consumer) : noop, + error: error ? error.bind(consumer) : noop, + complete: complete ? complete.bind(consumer) : noop + } +}; + +const fuse = ({ next, error, complete }: Sink) => { + let done = false; + return { + next: (value: T) => { !done && next(value) }, + error: (e: unknown) => { !done && (done = true, error(e)) }, + complete: () => { !done && (done = true, complete()) } + } +} + +const _observe = (producer: Producer): Observable => ({ + subscribe: (consumer: Partial>) => ({ + unsubscribe: producer(sink(consumer)) ?? noop + }), + map: (mapper) => _observe(({ next, error, complete }) => + producer({ + next: next !== noop ? (v: T) => next(mapper(v)) : noop, + error, + complete + }) + ), + filter: (predicate) => _observe(({ next, error, complete }) => + producer({ + next: next !== noop ? + (v: T) => predicate(v) ? next(v) : void(0) : noop, + error, + complete + }) + ), + scan: (accumulator, initial) => _observe(({ next, error, complete }) => { + let _acc = initial; + return producer({ + next: next !== noop ? + (v: T) => next(_acc = accumulator(_acc, v)) : noop, + error, + complete + }); + }) +}); + +export const observe = (producer: Producer): Observable => ({ + subscribe: (consumer: Partial>) => ({ + unsubscribe: producer(fuse(sink(consumer))) ?? noop + }), + map: (mapper) => _observe(({ next, error, complete }) => + producer(fuse({ + next: next !== noop ? + (v: T) => next(mapper(v)) : noop, + error, + complete + })) + ), + filter: (predicate) => _observe(({ next, error, complete }) => + producer(fuse({ + next: next !== noop ? + (v: T) => predicate(v) ? next(v) : void (0) : noop, + error, + complete + })) + ), + scan: (accumulator, initial?) => observe(({ next, error, complete }) => { + let _acc = initial; + return producer(fuse({ + next: next !== noop ? (v: T) => next(_acc = accumulator(_acc, v)) : noop, + error, + complete + })); + }) +}); diff --git a/djx/src/main/ts/tsx.ts b/djx/src/main/ts/tsx.ts --- a/djx/src/main/ts/tsx.ts +++ b/djx/src/main/ts/tsx.ts @@ -1,11 +1,15 @@ -import { Constructor, IDestroyable, IRemovable } from "@implab/core-amd/interfaces"; +import { Constructor } from "@implab/core-amd/interfaces"; import { HtmlRendition } from "./tsx/HtmlRendition"; import { WidgetRendition } from "./tsx/WidgetRendition"; -import { destroy, isWidgetConstructor, Rendition } from "./tsx/traits"; +import { isElementNode, isWidget, isWidgetConstructor, Rendition } from "./tsx/traits"; import { FunctionRendition } from "./tsx/FunctionRendition"; import Stateful = require("dojo/Stateful"); import _WidgetBase = require("dijit/_WidgetBase"); import { DjxWidgetBase } from "./tsx/DjxWidgetBase"; +import { WatchRendition } from "./tsx/WatchRendition"; +import { Observable, observe, Subscribable } from "./observable"; +import djAttr = require("dojo/dom-attr"); +import djClass = require("dojo/dom-class"); export function createElement Element)>(elementType: T, ...args: any[]): Rendition { if (typeof elementType === "string") { @@ -42,9 +46,9 @@ export interface EventSelector { export type DojoMouseEvent = MouseEvent & EventSelector & EventDetails; -type StatefulProps = T extends Stateful ? A : never; +type StatefulProps = T extends Stateful ? A : + T extends _WidgetBase ? T : never; -type CleanFn = (instance: IRemovable | IDestroyable) => void; /** * Observers the property and calls render callback each change. @@ -52,14 +56,12 @@ type CleanFn = (instance: IRemovable | I * @param target The target object which property will be observed. * @param prop The name of the property. * @param render The callback which will be called every time the value is changed - * @param cleanupOrOwner The object with method `own` or an callback to register lifecycle for the observer. * @returns Rendition which is created instantly */ export function watch( target: W, prop: K, - render: (model: W[K]) => any, - cleanupOrOwner?: { own: CleanFn } | CleanFn + render: (model: W[K]) => any ): Rendition; /** * Observers the property and calls render callback each change. @@ -67,34 +69,89 @@ export function watch>( target: T, prop: K, - render: (model: StatefulProps[K]) => any, - cleanupOrOwner?: { own: CleanFn } | CleanFn + render: (model: StatefulProps[K]) => any ): Rendition; -export function watch & string>( - target: T, - prop: K, - render: (model: StatefulProps[K]) => any, - cleanupOrOwner: { own: CleanFn } | CleanFn = () => { } +export function watch(subj: Subscribable, render: (model: V) => unknown): Rendition; +export function watch( + ...args: [Stateful, string, (model: unknown) => unknown] | + [Subscribable, (model: unknown) => unknown] ) { - let rendition = new FunctionRendition(() => render(target.get(prop))); - const _own = cleanupOrOwner instanceof Function ? cleanupOrOwner : (x: IRemovable) => cleanupOrOwner.own(x); - _own(target.watch(prop, (_name, oldValue, newValue) => { - if (oldValue !== newValue) { - const newRendition = new FunctionRendition(() => render(newValue)); - newRendition.placeAt(rendition.getDomNode(), "replace"); - destroy(rendition.getDomNode()); - rendition = newRendition; + if (args.length === 3) { + const [target, prop, render] = args; + return new WatchRendition( + render, + observe(({next}) => { + const h = target.watch( + prop, + (_prop, oldValue, newValue) => oldValue !== newValue && next(newValue) + ); + next(target.get(prop)); + return () => h.remove(); + }) + ); + } else { + const [subj, render] = args; + return new WatchRendition(render, subj); + } +} + +export const prop: { + >(target: T, name: K): Observable[K]>; + (target: T, name: K): Observable; +} = (target: Stateful, name: string) => { + return observe(({next}) => { + const h = target.watch( + name, + (_prop, oldValue, newValue) => oldValue !== newValue && next(newValue) + ); + next(target.get(name)); + return () => h.remove(); + }) +}; + +export const attach = (target: W, name: K) => (v: W[K]) => target.set(name, v); + +export const bind = (attr: K, subj: Subscribable) => { + let h = { unsubscribe() { } }; + + return (el: E | undefined) => { + if (el) { + if (isElementNode(el)) { + h = subj.subscribe({ + next: value => djAttr.set(el, attr, value) + }); + } else { + h = subj.subscribe({ + next: value => el.set(attr, value) + }); + } + } else { + h.unsubscribe(); } - })); - return rendition; + } +}; + +export const toggleClass = (className: string, subj: Subscribable) => { + let h = { unsubscribe() { } }; + return (elOrWidget: HTMLElement | _WidgetBase | undefined) => { + const el = isWidget(elOrWidget) ? elOrWidget.domNode : elOrWidget; + if (el) { + h = subj.subscribe({ + next: v => djClass.toggle(el, className, v) + }); + } else { + h.unsubscribe(); + } + } } +export const all = []>(...cbs: A): JSX.Ref => (arg: T | undefined) => cbs.forEach(cb => cb(arg)); + /** Decorates the method which will be registered as the handle for the specified event. * This decorator can be applied to DjxWidgetBase subclass methods. * diff --git a/djx/src/main/ts/tsx/DjxWidgetBase.ts b/djx/src/main/ts/tsx/DjxWidgetBase.ts --- a/djx/src/main/ts/tsx/DjxWidgetBase.ts +++ b/djx/src/main/ts/tsx/DjxWidgetBase.ts @@ -1,9 +1,11 @@ import { djbase, djclass } from "../declare"; import _WidgetBase = require("dijit/_WidgetBase"); import _AttachMixin = require("dijit/_AttachMixin"); -import { Rendition, isNode } from "./traits"; +import { Rendition, isNode, isElementNode } from "./traits"; import registry = require("dijit/registry"); import on = require("dojo/on"); +import { Scope } from "./Scope"; +import { render } from "./render"; // type Handle = dojo.Handle; @@ -36,13 +38,20 @@ export interface DjxWidgetBase extends djbase<_super, _AttachMixin>(_WidgetBase, _AttachMixin) { + private readonly _scope = new Scope(); buildRendering() { - this.domNode = this.render().getDomNode(); + const node = render(this.render(), this._scope); + if (!isElementNode(node)) + throw new Error("The render method must return a single DOM element"); + this.domNode = node as HTMLElement; + super.buildRendering(); // now we should get assigned data-dojo-attach-points @@ -111,4 +120,9 @@ export abstract class DjxWidgetBase w.startup()); super.startup(); } + + destroy(preserveDom?: boolean) { + this._scope.destroy(); + super.destroy(preserveDom); + } } diff --git a/djx/src/main/ts/tsx/FunctionRendition.ts b/djx/src/main/ts/tsx/FunctionRendition.ts --- a/djx/src/main/ts/tsx/FunctionRendition.ts +++ b/djx/src/main/ts/tsx/FunctionRendition.ts @@ -1,4 +1,5 @@ import { argumentNotNull } from "@implab/core-amd/safe"; +import { getItemDom } from "./render"; import { RenditionBase } from "./RenditionBase"; export class FunctionRendition extends RenditionBase { @@ -15,10 +16,9 @@ export class FunctionRendition extends R protected _create(attrs: object, children: any[]) { const _attrs: any = attrs || {}; - const _children = children.map(x => this.getItemDom(x)); - this._node = this.getItemDom( - this._component.call(null, { ..._attrs, children: _children }) - ); + const _children = children.map(x => getItemDom(x)); + this._node = getItemDom( + this._component.call(null, { ..._attrs, children: _children })); } protected _getDomNode() { diff --git a/djx/src/main/ts/tsx/HtmlRendition.ts b/djx/src/main/ts/tsx/HtmlRendition.ts --- a/djx/src/main/ts/tsx/HtmlRendition.ts +++ b/djx/src/main/ts/tsx/HtmlRendition.ts @@ -1,11 +1,14 @@ -import dom = require("dojo/dom-construct"); +import djDom = require("dojo/dom-construct"); +import djAttr = require("dojo/dom-attr"); import { argumentNotEmptyString } from "@implab/core-amd/safe"; import { RenditionBase } from "./RenditionBase"; +import { placeAt } from "./traits"; +import { getItemDom, refHook } from "./render"; -export class HtmlRendition extends RenditionBase { +export class HtmlRendition extends RenditionBase { elementType: string; - _element: HTMLElement | undefined; + _element: Element | undefined; constructor(elementType: string) { argumentNotEmptyString(elementType, "elementType"); @@ -14,16 +17,27 @@ export class HtmlRendition extends Rendi this.elementType = elementType; } - _addChild(child: any): void { + _addChild(child: unknown): void { if (!this._element) throw new Error("The HTML element isn't created"); - dom.place(this.getItemDom(child), this._element); + placeAt(getItemDom(child), this._element); } - _create(attrs: object, children: any[]) { - this._element = dom.create(this.elementType, attrs); + _create({ xmlns, ref, ...attrs }: { xmlns?: string, ref?: JSX.Ref }, children: unknown[]) { + + if (xmlns) { + this._element = document.createElementNS(xmlns, this.elementType); + djAttr.set(this._element, attrs); + } else { + this._element = djDom.create(this.elementType, attrs); + } children.forEach(v => this._addChild(v)); + + const element = this._element; + + if (ref) + refHook(element, ref); } _getDomNode() { diff --git a/djx/src/main/ts/tsx/RenditionBase.ts b/djx/src/main/ts/tsx/RenditionBase.ts --- a/djx/src/main/ts/tsx/RenditionBase.ts +++ b/djx/src/main/ts/tsx/RenditionBase.ts @@ -1,9 +1,4 @@ -import { isNull, mixin } from "@implab/core-amd/safe"; -import { isPlainObject, isNode, isRendition, DojoNodePosition, Rendition, isInPage, isWidget, isDocumentFragmentNode, startupWidgets } from "./traits"; - -import dom = require("dojo/dom-construct"); -import registry = require("dijit/registry"); - +import { isPlainObject, DojoNodePosition, Rendition, isDocumentFragmentNode, placeAt, collectNodes, isMounted, startupWidgets } from "./traits"; export abstract class RenditionBase implements Rendition { private _attrs = {}; @@ -16,12 +11,12 @@ export abstract class RenditionBase{value}} ) return; if (isPlainObject(v)) { - mixin(this._attrs, v); + this._attrs = {... this._attrs, ...v}; } else if (v instanceof Array) { v.forEach(x => this.visitNext(x)); } else { @@ -29,31 +24,6 @@ export abstract class RenditionBase { - const items = []; - for (let i = 0, n = collection.length; i < n; i++) { - items.push(collection[i]); - } - return items; - }; + const startupPending = isDocumentFragmentNode(domNode) ? collectNodes(domNode.childNodes) : [domNode]; - const startup = (node: Node) => { - if (node.parentNode) { - const parentWidget = registry.getEnclosingWidget(node.parentNode); - if (parentWidget && parentWidget._started) - return startupWidgets(node); - } - if (isInPage(node)) - startupWidgets(node); - }; + placeAt(domNode, refNode, position); - const startupPending = isDocumentFragmentNode(domNode) ? collect(domNode.children) : [domNode]; - - dom.place(domNode, refNode, position); - - startupPending.forEach(startup); + if (isMounted(startupPending[0])) + startupPending.forEach(n => startupWidgets(n)); } - protected abstract _create(attrs: object, children: any[]): void; + protected abstract _create(attrs: object, children: unknown[]): void; protected abstract _getDomNode(): TNode; } diff --git a/djx/src/main/ts/tsx/Scope.ts b/djx/src/main/ts/tsx/Scope.ts --- a/djx/src/main/ts/tsx/Scope.ts +++ b/djx/src/main/ts/tsx/Scope.ts @@ -1,8 +1,9 @@ import { IDestroyable, IRemovable } from "@implab/core-amd/interfaces"; import { isDestroyable, isRemovable } from "@implab/core-amd/safe"; +import { isUnsubsribable, Unsubscribable } from "../observable"; export interface IScope { - own(target: (() => void) | IDestroyable | IRemovable): void; + own(target: (() => void) | IDestroyable | IRemovable | Unsubscribable): void; } export class Scope implements IDestroyable, IScope { @@ -10,13 +11,15 @@ export class Scope implements IDestroyab static readonly dummy: IScope = { own() { } }; - own(target: (() => void) | IDestroyable | IRemovable) { + own(target: (() => void) | IDestroyable | IRemovable | Unsubscribable) { if (target instanceof Function) { this._cleanup.push(target); } else if (isDestroyable(target)) { this._cleanup.push(() => target.destroy()); } else if (isRemovable(target)) { this._cleanup.push(() => target.remove()); + } else if (isUnsubsribable(target)) { + this._cleanup.push(() => target.unsubscribe()); } } diff --git a/djx/src/main/ts/tsx/WatchRendition.ts b/djx/src/main/ts/tsx/WatchRendition.ts --- a/djx/src/main/ts/tsx/WatchRendition.ts +++ b/djx/src/main/ts/tsx/WatchRendition.ts @@ -1,51 +1,90 @@ import { id as mid } from "module"; import { TraceSource } from "@implab/core-amd/log/TraceSource"; import { argumentNotNull } from "@implab/core-amd/safe"; -import { place } from "dojo/dom-construct"; -import { getScope, render } from "./Renderer"; +import { getScope, render } from "./render"; import { RenditionBase } from "./RenditionBase"; import { Scope } from "./Scope"; -import { locateNode } from "./traits"; +import { Subscribable } from "../observable"; +import { Cancellation } from "@implab/core-amd/Cancellation"; +import { collectNodes, destroy, isDocumentFragmentNode, isMounted, placeAt, startupWidgets } from "./traits"; const trace = TraceSource.get(mid); export class WatchRendition extends RenditionBase { - private readonly _factory: (arg: T) => any; + private readonly _component: (arg: T) => unknown; - private _node: Node; + private readonly _node: Node; private readonly _scope = new Scope(); - constructor(component: (arg: T) => any, subject: any) { + private readonly _subject: Subscribable; + + private _renderJob?: { value: T }; + + private _ct = Cancellation.none; + + constructor(component: (arg: T) => unknown, subject: Subscribable) { super(); argumentNotNull(component, "component"); - this._factory = component; + this._component = component; + + this._subject = subject; + + this._node = document.createComment("[Watch]"); + } - this._node = document.createComment("WatchRendition placeholder"); + protected _create() { + const scope = getScope(); + scope.own(() => { + this._scope.destroy(); + destroy(this._node); + }); + scope.own(this._subject.subscribe({ next: this._onValue })); + this._ct = new Cancellation(cancel => scope.own(cancel)); } - protected _create(attrs: object, children: any[]) { - const _attrs: any = attrs || {}; - const _children = children.map(x => this.getItemDom(x)); - this._node = this.getItemDom( - this._factory.call(null, { ..._attrs, children: _children }) + private _onValue = (value: T) => { + if (!this._renderJob) { + // schedule a new job + this._renderJob = { value }; + this._render().catch(e => trace.error(e)); + } else { + // update existing job + this._renderJob = { value }; + } + } + + private async _render() { + // fork + await Promise.resolve(); + // don't render destroyed rendition + if (this._ct.isRequested()) + return; + + // remove all previous content + this._scope.clean(); + + // render the new node + const node = render( + this._renderJob ? this._component(this._renderJob.value) : undefined, + this._scope ); - const scope = getScope(); - scope.own(this._scope); + // get actual content + const pending = isDocumentFragmentNode(node) ? + collectNodes(node.childNodes) : + [node]; - // если отрендерили текст? или DocumentFragment - } + placeAt(node, this._node, "after"); - private async _render(value: T) { - const [refNode, position] = locateNode(this._node); - this._scope.clean(); + if (isMounted(this._node)) + pending.forEach(n => startupWidgets(n)); - this._node = await render(() => this._factory(value), this._scope); + if (pending.length) + this._scope.own(() => pending.forEach(destroy)); - if (refNode) - place(this._node, refNode, position); + this._renderJob = undefined; } protected _getDomNode() { diff --git a/djx/src/main/ts/tsx/WidgetRendition.ts b/djx/src/main/ts/tsx/WidgetRendition.ts --- a/djx/src/main/ts/tsx/WidgetRendition.ts +++ b/djx/src/main/ts/tsx/WidgetRendition.ts @@ -1,9 +1,9 @@ -import dom = require("dojo/dom-construct"); import { argumentNotNull } from "@implab/core-amd/safe"; import { RenditionBase } from "./RenditionBase"; -import { DojoNodePosition, isElementNode, isInPage, isWidget } from "./traits"; +import { DojoNodePosition, isElementNode, isInPage, isWidget, placeAt } from "./traits"; import registry = require("dijit/registry"); import ContentPane = require("dijit/layout/ContentPane"); +import { getItemDom, refHook } from "./render"; // tslint:disable-next-line: class-name export interface _Widget { @@ -14,10 +14,10 @@ export interface _Widget { placeAt?(refNode: string | Node, position?: DojoNodePosition): void; startup?(): void; - addChild?(widget: any, index?: number): void; + addChild?(widget: unknown, index?: number): void; } -export type _WidgetCtor = new (attrs: any, srcNode?: string | Node) => _Widget; +export type _WidgetCtor = new (attrs: {}, srcNode?: string | Node) => _Widget; export class WidgetRendition extends RenditionBase { readonly widgetClass: _WidgetCtor; @@ -31,7 +31,7 @@ export class WidgetRendition extends Ren this.widgetClass = widgetClass; } - _addChild(child: any): void { + _addChild(child: unknown): void { const instance = this._getInstance(); if (instance.addChild) { @@ -41,7 +41,7 @@ export class WidgetRendition extends Ren } else if (isWidget(child)) { instance.addChild(child); } else { - const childDom = this.getItemDom(child); + const childDom = getItemDom(child); const w = isElementNode(childDom) ? registry.byNode(childDom) : undefined; if (w) { @@ -51,7 +51,7 @@ export class WidgetRendition extends Ren throw new Error("Failed to add DOM content. The widget doesn't have a containerNode"); // the current widget isn't started, it's children shouldn't start too - dom.place(this.getItemDom(child), instance.containerNode); + placeAt(getItemDom(child), instance.containerNode, "last"); } } } else { @@ -59,20 +59,20 @@ export class WidgetRendition extends Ren throw new Error("The widget doesn't have neither addChild nor containerNode"); // the current widget isn't started, it's children shouldn't start too - dom.place(this.getItemDom(child), instance.containerNode); + placeAt(getItemDom(child), instance.containerNode, "last"); } } - protected _create(attrs: any, children: any[]) { + protected _create({ref, ...attrs}: {ref?: JSX.Ref<_Widget>}, children: unknown[]) { if (this.widgetClass.prototype instanceof ContentPane) { // a special case for the ContentPane this is for - // the compatibility with this heavy widget, all + // compatibility with that heavy widget, all // regular containers could be easily manipulated // through `containerNode` property or `addChild` method. // render children to the DocumentFragment const content = document.createDocumentFragment(); - children.forEach(child => content.appendChild(this.getItemDom(child))); + children.forEach(child => content.appendChild(getItemDom(child))); // set the content property to the parameters of the widget const _attrs = { ...attrs, content }; @@ -82,6 +82,8 @@ export class WidgetRendition extends Ren children.forEach(x => this._addChild(x)); } + if (ref) + refHook(this._instance, ref); } private _getInstance() { diff --git a/djx/src/main/ts/tsx/Renderer.ts b/djx/src/main/ts/tsx/render.ts rename from djx/src/main/ts/tsx/Renderer.ts rename to djx/src/main/ts/tsx/render.ts --- a/djx/src/main/ts/tsx/Renderer.ts +++ b/djx/src/main/ts/tsx/render.ts @@ -1,26 +1,112 @@ -import { Scope } from "./Scope"; -import { destroy, Rendition } from "./traits"; +import { TraceSource } from "@implab/core-amd/log/TraceSource"; +import { isPromise } from "@implab/core-amd/safe"; +import { id as mid } from "module"; +import { IScope, Scope } from "./Scope"; +import { isNode, isRendition, isWidget } from "./traits"; + +const trace = TraceSource.get(mid); -let _scope = Scope.dummy; +interface Context { + scope: IScope; -const beginRender = async () => { + hooks?: (() => void)[]; +} + +let _context: Context = { + scope: Scope.dummy } -const endRender = () => { +const guard = (cb: () => unknown) => { + try { + const result = cb() + if (isPromise(result)) { + const warn = (ret: unknown) => trace.error("The callback {0} competed asynchronously. result = {1}", cb, ret); + result.then(warn, warn); + } + } catch (e) { + trace.error(e); + } +} + +export const beginRender = (scope: IScope = getScope()) => { + const prev = _context; + _context = { + scope, + hooks: [] + }; + return endRender(prev); +} + +/** + * Completes render operation + */ +const endRender = (prev: Context) => () => { + const { hooks } = _context; + if (hooks) + hooks.forEach(guard); + + _context = prev; } -export const getScope = () => _scope; +export const renderHook = (hook: () => void) => { + const { hooks } = _context; + if (hooks) + hooks.push(hook); + else + guard(hook); +} -export const render = async (rendition: () => Rendition, scope = Scope.dummy) => { - await beginRender(); - const prev = _scope; - _scope = scope; +export const refHook = (value: T, ref: JSX.Ref) => { + const { hooks, scope } = _context; + if (hooks) + hooks.push(() => ref(value)); + else + guard(() => ref(value)); + + scope.own(() => ref(undefined)); +} + +/** Returns the current scope */ +export const getScope = () => _context.scope; + +/** Schedules the rendition to be rendered to the DOM Node + * @param rendition The rendition to be rendered + * @param scope The scope + */ +export const render = (rendition: unknown, scope = Scope.dummy) => { + const complete = beginRender(scope); try { - const node = rendition().getDomNode(); - scope.own(() => destroy(node)); - return node; + return getItemDom(rendition); } finally { - _scope = prev; - endRender(); + complete(); } } + +/** Renders DOM element for different types of the argument. */ +export const getItemDom = (v: unknown) => { + if (typeof v === "string" || typeof v === "number" || v instanceof RegExp || v instanceof Date) { + // primitive types converted to the text nodes + return document.createTextNode(v.toString()); + } else if (isNode(v)) { + // nodes are kept as is + return v; + } else if (isRendition(v)) { + // renditions are instantiated + return v.getDomNode(); + } else if (isWidget(v)) { + // widgets are converted to it's markup + return v.domNode; + } else if (typeof v === "boolean" || v === null || v === undefined) { + // null | undefined | boolean are removed + return document.createDocumentFragment(); + } else if (v instanceof Array) { + // arrays will be translated to document fragments + const fragment = document.createDocumentFragment(); + v.map(item => getItemDom(item)) + .forEach(node => fragment.appendChild(node)); + return fragment; + } else { + // bug: explicit error otherwise + throw new Error("Invalid parameter: " + v); + } +} diff --git a/djx/src/main/ts/tsx/traits.ts b/djx/src/main/ts/tsx/traits.ts --- a/djx/src/main/ts/tsx/traits.ts +++ b/djx/src/main/ts/tsx/traits.ts @@ -2,13 +2,15 @@ import { IDestroyable } from "@implab/co import { isDestroyable } from "@implab/core-amd/safe"; import _WidgetBase = require("dijit/_WidgetBase"); import registry = require("dijit/registry"); -import dom = require("dojo/dom-construct"); -type _WidgetBaseConstructor = typeof _WidgetBase; +interface _WidgetBaseConstructor { + new (params?: Partial<_WidgetBase & A>, srcNodeRef?: dojo.NodeOrString): _WidgetBase & dojo._base.DeclareCreatedObject; + prototype: _WidgetBase; +} export type DojoNodePosition = "first" | "after" | "before" | "last" | "replace" | "only" | number; -export type DojoNodeLocation = [Node | null, DojoNodePosition]; +export type DojoNodeLocation = [Node, DojoNodePosition]; export interface Rendition { getDomNode(): TNode; @@ -25,52 +27,32 @@ export interface IRecursivelyDestroyable destroyRecursive(): void; } -export function isNode(el: any): el is Node { - return el && el.nodeName && el.nodeType; -} +export const isNode = (el: unknown): el is Node => !!(el && (el as Node).nodeName && (el as Node).nodeType); -export function isElementNode(el: any): el is Element { - return isNode(el) && el.nodeType === 1; -} +export const isElementNode = (el: unknown): el is Element => isNode(el) && el.nodeType === 1; -export function isTextNode(el: any): el is Text { - return isNode(el) && el.nodeType === 3; -} +export const isTextNode = (el: unknown): el is Text => isNode(el) && el.nodeType === 3; -export function isProcessingInstructionNode(el: any): el is ProcessingInstruction { - return isNode(el) && el.nodeType === 7; -} +export const isProcessingInstructionNode = (el: unknown): el is ProcessingInstruction => isNode(el) && el.nodeType === 7; -export function isCommentNode(el: any): el is Comment { - return isNode(el) && el.nodeType === 8; -} +export const isCommentNode = (el: unknown): el is Comment => isNode(el) && el.nodeType === 8; -export function isDocumentNode(el: any): el is Document { - return isNode(el) && el.nodeType === 9; -} +export const isDocumentNode = (el: unknown): el is Document => isNode(el) && el.nodeType === 9; -export function isDocumentTypeNode(el: any): el is DocumentType { - return isNode(el) && el.nodeType === 10; -} +export const isDocumentTypeNode = (el: unknown): el is DocumentType => isNode(el) && el.nodeType === 10; -export function isDocumentFragmentNode(el: any): el is DocumentFragment { - return isNode(el) && el.nodeType === 11; -} +export const isDocumentFragmentNode = (el: any): el is DocumentFragment => isNode(el) && el.nodeType === 11; -export function isWidget(v: any): v is _WidgetBase { - return v && "domNode" in v; -} +export const isWidget = (v: unknown): v is _WidgetBase => !!(v && "domNode" in (v as _WidgetBase)); -export function isRendition(v: any): v is Rendition { - return v && typeof v.getDomElement === "function"; -} +export const isRendition = (v: unknown): v is Rendition => !!(v && typeof (v as Rendition).getDomNode === "function"); /** * @deprecated use isRendition */ export const isBuildContext = isRendition; -export function isPlainObject(v: object) { +export const isPlainObject = (v: object) => { if (typeof v !== "object") return false; @@ -78,23 +60,21 @@ export function isPlainObject(v: object) return !vp || vp === Object.prototype; } -export function isWidgetConstructor(v: any): v is _WidgetBaseConstructor { - return typeof v === "function" && v.prototype && ( +export const isWidgetConstructor = (v: unknown): v is _WidgetBaseConstructor => + typeof v === "function" && v.prototype && ( "domNode" in v.prototype || "buildRendering" in v.prototype ); -} + /** Tests whether the specified node is placed in visible dom. * @param {Node} node The node to test */ -export function isInPage(node: Node) { - return (node === document.body) ? false : document.body.contains(node); -} +export const isInPage = (node: Node) => node === document.body ? false : document.body.contains(node); -export function isRecursivelyDestroyable(target: any): target is IRecursivelyDestroyable { - return target && typeof target.destroyRecursive === "function"; -} +export const isRecursivelyDestroyable = (target: unknown): target is IRecursivelyDestroyable => + !!(target && typeof (target as IRecursivelyDestroyable).destroyRecursive === "function"); + /** Destroys DOM Node with all contained widgets. @@ -103,7 +83,7 @@ export function isRecursivelyDestroyable * * @param target DOM Node or widget to destroy */ -export function destroy(target: Node | IDestroyable | IRecursivelyDestroyable) { +export const destroy = (target: Node | IDestroyable | IRecursivelyDestroyable) => { if (isRecursivelyDestroyable(target)) { target.destroyRecursive(); } else if (isDestroyable(target)) { @@ -113,21 +93,28 @@ export function destroy(target: Node | I const w = registry.byNode(target); if (w) { w.destroyRecursive(); + return; } else { - registry.findWidgets(target).forEach(destroy); - dom.destroy(target); + emptyNode(target); } } + const parent = target.parentNode; + if (parent) + parent.removeChild(target); + } } /** Empties a content of the specified node and destroys all contained widgets. * - * @param target DOM node to . + * @param target DOM node to empty. */ -export function emptyNode(target: Node) { +export const emptyNode = (target: Node) => { registry.findWidgets(target).forEach(destroy); - dom.empty(target); + + for (let c; c = target.lastChild;) { // intentional assignment + target.removeChild(c); + } } /** This function starts all widgets inside the DOM node if the target is a node @@ -136,7 +123,7 @@ export function emptyNode(target: Node) * * @param target DOM node to find and start widgets or the widget itself. */ -export function startupWidgets(target: Node | _WidgetBase, skipNode?: Node) { +export const startupWidgets = (target: Node | _WidgetBase, skipNode?: Node) => { if (isNode(target)) { if (isElementNode(target)) { const w = registry.byNode(target); @@ -153,9 +140,75 @@ export function startupWidgets(target: N } } -export function locateNode(node: Node): DojoNodeLocation { - const next = node.nextSibling; - return next ? - [next, "before"] : - [node.parentNode, "last"]; -} \ No newline at end of file +/** Places the specified DOM node at the specified location. + * + * @param node The node which should be placed + * @param refNodeOrId The reference node where the created + * DOM should be placed. + * @param position Optional parameter, specifies the + * position relative to refNode. Default is "last" (i.e. last child). + */ +export const placeAt = (node: Node, refNodeOrId: string | Node, position: DojoNodePosition = "last") => { + const ref = typeof refNodeOrId == "string" ? document.getElementById(refNodeOrId) : refNodeOrId; + if (!ref) + return; + + const parent = ref.parentNode; + + if (typeof position == "number") { + if (ref.childNodes.length <= position) { + ref.appendChild(node); + } else { + ref.insertBefore(node, ref.childNodes[position]); + } + } else { + switch (position) { + case "before": + parent && parent.insertBefore(node, ref); + break; + case "after": + parent && parent.insertBefore(node, ref.nextSibling); + break; + case "first": + ref.insertBefore(node, ref.firstChild); + break; + case "last": + ref.appendChild(node); + break; + case "only": + emptyNode(ref); + ref.appendChild(node); + break; + case "replace": + if (parent) + parent.replaceChild(node, ref); + destroy(ref); + break; + } + } +} + +/** Collects nodes from collection to an array. + * + * @param collection The collection of nodes. + * @returns The array of nodes. + */ +export const collectNodes = (collection: NodeListOf) => { + const items = []; + for (let i = 0, n = collection.length; i < n; i++) { + items.push(collection[i]); + } + return items; +}; + + +export const isMounted = (node: Node) => { + if (node.parentNode) { + const parentWidget = registry.getEnclosingWidget(node.parentNode); + if (parentWidget && parentWidget._started) + return true; + } + if (isInPage(node)) + return true; + return false; +}; \ No newline at end of file diff --git a/djx/src/main/typings/css.d.ts b/djx/src/main/typings/css-plugin.d.ts rename from djx/src/main/typings/css.d.ts rename to djx/src/main/typings/css-plugin.d.ts diff --git a/djx/src/main/typings/index.d.ts b/djx/src/main/typings/index.d.ts --- a/djx/src/main/typings/index.d.ts +++ b/djx/src/main/typings/index.d.ts @@ -1,8 +1,10 @@ -/// +/// declare namespace JSX { - interface DjxIntrinsicAttributes { + type Ref = ((value: T | undefined) => void); + + interface DjxIntrinsicAttributes { /** alias for className */ class: string; @@ -14,6 +16,8 @@ declare namespace JSX { /** specifies handlers map for the events */ "data-dojo-attach-event": string; + ref: Ref; + /** @deprecated */ [attr: string]: any; } @@ -56,7 +60,7 @@ declare namespace JSX { type LaxElement = Pick> & - DjxIntrinsicAttributes; + DjxIntrinsicAttributes; type LaxIntrinsicElementsMap = { [tag in keyof HTMLElementTagNameMap]: LaxElement @@ -65,4 +69,13 @@ declare namespace JSX { type IntrinsicElements = { [tag in keyof LaxIntrinsicElementsMap]: RecursivePartial; } + + interface ElementChildrenAttribute { + children: {}; + } + + interface IntrinsicClassAttributes { + ref?: (value: T) => void; + children?: unknown; + } } diff --git a/djx/src/test/ts/DeclareTests.ts b/djx/src/test/ts/DeclareTests.ts deleted file mode 100644 --- a/djx/src/test/ts/DeclareTests.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Baz } from "./mock/Baz"; - -// tslint:disable-next-line: no-console -console.log("Declare tests"); - -const baz = new Baz(); - -const data: string[] = []; -baz.writeHello(data); - -// tslint:disable-next-line: no-console -console.log(data.join("\n")); diff --git a/djx/src/test/ts/Tap.ts b/djx/src/test/ts/Tap.ts deleted file mode 100644 --- a/djx/src/test/ts/Tap.ts +++ /dev/null @@ -1,148 +0,0 @@ -import { stringify } from "yaml"; - -export interface TapWriter { - version(): void; - plan(n: number): void; - fail(e: any): void; - ok(msg: string): void; - skip(msg: string): void; - bailOut(msg: string): void; - comment(msg: string): void; - yaml(data: any): void; - end(): void; -} - -enum TapState { - Init, - VersionWritten, - Ready, - ReadyWithoutPlan, - End -} - -export abstract class AbstractTapWriter implements TapWriter { - private _state = TapState.Init; - private _version = 13; - private _testIndex = 1; - - private _moveVersion() { - switch (this._state) { - case TapState.Init: - this._state = TapState.VersionWritten; - break; - default: - throw new Error("Invalid operation"); - } - - } - - private _movePlan() { - switch (this._state) { - case TapState.Init: - case TapState.VersionWritten: - this._state = TapState.Ready; - break; - case TapState.ReadyWithoutPlan: - this._state = TapState.End; - break; - default: - throw new Error("Invalid operation"); - } - } - - private _moveTestResult() { - switch (this._state) { - case TapState.Init: - case TapState.VersionWritten: - this._state = TapState.ReadyWithoutPlan; - break; - case TapState.Ready: - case TapState.ReadyWithoutPlan: - break; - default: - throw new Error("Invalid operation"); - } - } - - private _moveEnd() { - switch (this._state) { - case TapState.End: - throw new Error("Invalid operation"); - default: - this._state = TapState.End; - } - } - - private _moveDiag() { - switch (this._state) { - case TapState.Init: - case TapState.VersionWritten: - this._state = TapState.ReadyWithoutPlan; - break; - case TapState.Ready: - case TapState.ReadyWithoutPlan: - break; - default: - throw new Error("Invalid operation"); - } - } - - version() { - this._moveVersion(); - - this._writeLine(`TAP version ${this._version}`); - } - - plan(n: number) { - this._movePlan(); - - this._writeLine(`1..${n}`); - } - - fail(e: any) { - this._moveTestResult(); - - this._writeText(`not ok ${this._testIndex} ${e}`); - this._testIndex++; - } - - ok(msg: string) { - this._moveTestResult(); - - this._writeText(`ok ${this._testIndex} ${msg}`); - this._testIndex++; - } - skip(msg: string) { - this._moveTestResult(); - - this._writeText(`ok ${this._testIndex} # SKIPPED: ${msg}`); - this._testIndex++; - } - bailOut(msg: string) { - this._moveEnd(); - - this._writeText(`Bail out! ${msg}`); - } - comment(msg: string) { - this._moveDiag(); - - this._writeText(`# ${msg}`); - } - yaml(data: any) { - this._moveDiag(); - - this._writeLine(" ---"); - stringify(data).split("\r\n?").forEach(line => this._writeLine(" " + line)); - this._writeLine(" ..."); - } - end() { - this._moveEnd(); - } - - private _writeText(text: string) { - text.split("\r\n?").forEach((line, i) => this._writeLine(i ? "# " + line : line)); - } - - abstract _writeLine(text: string): void; - -} diff --git a/djx/src/test/ts/TestTraits.ts b/djx/src/test/ts/TestTraits.ts deleted file mode 100644 --- a/djx/src/test/ts/TestTraits.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { IObservable, ICancellation, IDestroyable } from "@implab/core-amd/interfaces"; -import { Cancellation } from "@implab/core-amd/Cancellation"; -import { TraceEvent, LogLevel, WarnLevel, DebugLevel, TraceSource } from "@implab/core-amd/log/TraceSource"; -import { argumentNotNull, destroy } from "@implab/core-amd/safe"; -import { TapWriter } from "./Tap"; - - - -export class TapeWriter implements IDestroyable { - - private readonly _t: TapWriter; - - private readonly _subscriptions = new Array(); - private _destroyed = false; - - constructor(t: TapWriter) { - argumentNotNull(t, "test"); - this._t = t; - } - - writeEvents(source: IObservable, ct: ICancellation = Cancellation.none) { - if (!this._destroyed) { - const subscription = source.on(this.writeEvent.bind(this)); - if (ct.isSupported()) { - ct.register(subscription.destroy.bind(subscription)); - } - this._subscriptions.push(subscription); - } - } - - writeEvent(next: TraceEvent) { - if (next.level >= DebugLevel) { - this._t.comment(`DEBUG ${next.source.id} ${next}`); - } else if (next.level >= LogLevel) { - this._t.comment(`LOG ${next.source.id} ${next}`); - } else if (next.level >= WarnLevel) { - this._t.comment(`WARN ${next.source.id} ${next}`); - } else { - this._t.comment(`ERROR ${next.source.id} ${next}`); - } - } - - destroy() { - if (this._destroyed) - return; - this._destroyed = true; - this._subscriptions.forEach(destroy); - } -} - -type TestCallback = (ok: (msg: string) => void, fail: (msg: string) => void, trace: TraceSource) => void; -type AsyncTestCallback = (trace: TraceSource) => PromiseLike; - -export function test(name: string, cb: TestCallback | AsyncTestCallback) { - -} - -export function run() { - -} diff --git a/djx/src/test/ts/TextTapWriter.ts b/djx/src/test/ts/TextTapWriter.ts deleted file mode 100644 --- a/djx/src/test/ts/TextTapWriter.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { AbstractTapWriter } from "./Tap"; -import { TextWriter } from "@implab/core-amd/interfaces"; - -export class TextTapWriter extends AbstractTapWriter { - - private readonly _writer: TextWriter; - - constructor(writer: TextWriter) { - super(); - - this._writer = writer; - } - - _writeLine(text: string) { - this._writer.writeLine(text); - } - -} \ No newline at end of file diff --git a/djx/src/test/ts/declare-tests.ts b/djx/src/test/ts/declare-tests.ts new file mode 100644 --- /dev/null +++ b/djx/src/test/ts/declare-tests.ts @@ -0,0 +1,13 @@ +import * as t from "tap"; +import { Baz } from "./mock/Baz"; + +t.comment("Declare tests"); + +const baz = new Baz(); + +const data: string[] = []; +baz.writeHello(data); +t.pass("Test complete"); + +// tslint:disable-next-line: no-console +t.comment(data.join("\n")); diff --git a/djx/src/test/ts/dummy.ts b/djx/src/test/ts/dummy.ts deleted file mode 100644 --- a/djx/src/test/ts/dummy.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { test } from "./TestTraits"; -import { delay } from "@implab/core-amd/safe"; -import { assert } from "chai"; - -test("simple", (ok, fail, log) => { - setTimeout(() => { - // end should be called after the last assertion - ok("async assert"); - }, 100); -}); - -test("simple", async (log, fail) => { - await delay(0); - - assert.ok(true); // everything is fine -}); diff --git a/djx/src/test/ts/i18nTests.ts b/djx/src/test/ts/i18nTests.ts deleted file mode 100644 diff --git a/djx/src/test/ts/observable-tests.ts b/djx/src/test/ts/observable-tests.ts new file mode 100644 --- /dev/null +++ b/djx/src/test/ts/observable-tests.ts @@ -0,0 +1,52 @@ +import { observe } from "./observable"; +import * as t from "tap"; + +const subj1 = observe(({ next, complete }) => { + next(1); + complete(); + next(2); +}); + +const consumer1 = { + sum: 0, + next(v: number) { + this.sum += v; + } +} + +subj1.subscribe(consumer1); +t.equal(consumer1.sum, 1, "Should get only one value"); + +subj1.subscribe(consumer1); +t.equal(consumer1.sum, 2, "Should get the value again"); + +const consumer2 = { + value: 0, + completed: false, + next(v: number) { this.value = v; }, + complete() { this.completed = true; } +}; + +let maps = 0; + +subj1 + .map(v => { + t.comment("map1: " + v * 2); + maps++; + return v * 2; + }) + .map (v => { + t.comment("map2: " + v * 2); + maps++; + return v * 2; + }) + .map(v => { + t.comment("map3: " + v * 2); + maps++; + return v * 2 + }) + .subscribe(consumer2); + +t.equal(consumer2.value, 8, "Should map"); +t.equal(maps, 3, "The map chain should not be executed after completion"); +t.ok(consumer2.completed, "The completion signal should pass through"); \ No newline at end of file diff --git a/djx/src/test/ts/plan.ts b/djx/src/test/ts/plan.ts --- a/djx/src/test/ts/plan.ts +++ b/djx/src/test/ts/plan.ts @@ -1,1 +1,2 @@ -import "./DeclareTests"; \ No newline at end of file +import "./declare-tests"; +import "./observable-tests"; \ No newline at end of file diff --git a/djx/src/test/ts/view/MyWidget.tsx b/djx/src/test/ts/view/MyWidget.tsx --- a/djx/src/test/ts/view/MyWidget.tsx +++ b/djx/src/test/ts/view/MyWidget.tsx @@ -30,10 +30,10 @@ export class MyWidget extends djbase(Djx counter = 0; render() { - const Frame = (props: any) =>
{props.children}
; + const Frame = ({children, ref}: {ref: JSX.Ref, children: any[]}) =>
{children}
; return
this._onSubmit(e)} tabIndex={3} style={{ alignContent: "center", border: "1px solid" }} >

- + {}}> this._onIncClick(e)}>[+] this._onDecClick()}>[-] diff --git a/gradle.properties b/gradle.properties new file mode 100644 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,1 @@ +symbols=local \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 5c2d1cf016b3885f6930543d57b744ea8c220a1a..f3d88b1c2faf2fc91d853cd5d4242b5547257070 GIT binary patch literal 58695 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 iFMgMEN?b63o6}tDB3q$_CYr2 + exec { + commandLine "npm", "install", f, "--save-dev" + } + } + } +} + +clean { + doFirst { + delete "$buildDir/bundle" + } +} + + +task processResourcesBundle(type: Copy) { + from "src/bundle" + into layout.buildDirectory.dir("bundle") +} + +task copyModules(type: Copy) { + dependsOn npmInstall + into layout.buildDirectory.dir("bundle/js"); + + def pack = { String jsmod -> + into(jsmod) { + from npm.module(jsmod) + } + } + + + pack("@implab/djx") + pack("@implab/core-amd") + pack("dojo") + pack("dijit") + into("rxjs") { + from(npm.module("rxjs/dist/bundles")) + } + from npm.module("requirejs/require.js") +} + +task copyApp(type: Copy) { + dependsOn assemble + from typescript.assemblyDir + into layout.buildDirectory.dir("bundle/js/app") +} + +task bundle { + dependsOn copyModules, processResourcesBundle, copyApp +} + +task up(type: Exec) { + dependsOn bundle + commandLine "podman", "run", "--rm", "-d", + "--name", container, + "-p", "2078:80", + "-v", "$buildDir/bundle:/srv/www/htdocs", + "registry.implab.org/implab/apache2:latest" +} + +task stop(type: Exec) { + commandLine "podman", "stop", container +} \ No newline at end of file diff --git a/playground/package-lock.json b/playground/package-lock.json new file mode 100644 --- /dev/null +++ b/playground/package-lock.json @@ -0,0 +1,170 @@ +{ + "name": "@implab/djx-playground", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "@implab/djx-playground", + "dependencies": { + "dijit": "1.17.3", + "dojo": "1.17.3", + "requirejs": "2.3.6", + "rxjs": "7.5.6" + }, + "devDependencies": { + "@implab/core-amd": "1.4.6", + "@implab/djx": "file:../djx/build/npm/package", + "@implab/dojo-typings": "1.0.2", + "@types/requirejs": "2.1.34", + "typescript": "4.8.2" + } + }, + "../djx/build/npm/package": { + "name": "@implab/djx", + "dev": true, + "license": "BSD-2-Clause", + "peerDependencies": { + "@implab/core-amd": "^1.4.0", + "dojo": "^1.10.0" + } + }, + "node_modules/@implab/core-amd": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/@implab/core-amd/-/core-amd-1.4.6.tgz", + "integrity": "sha512-I1RwUAxeiodePpiBzveoHaehMSAyk7NFPPPEvDqfphHBC8yXoXWAaUrp7EcOKEzjXAs7lJQVhNpmjCjIqoj6BQ==", + "dev": true, + "peerDependencies": { + "dojo": "^1.10.0" + } + }, + "node_modules/@implab/djx": { + "resolved": "../djx/build/npm/package", + "link": true + }, + "node_modules/@implab/dojo-typings": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@implab/dojo-typings/-/dojo-typings-1.0.2.tgz", + "integrity": "sha512-/lbcMCHdRoHJLKFcT8xdk1KbGazSlb1pGSDJ406io7iMenPm/XbJYcUti+VzXnn71zOJ8aYpGT12T5L0rfOZNA==", + "dev": true + }, + "node_modules/@types/requirejs": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/@types/requirejs/-/requirejs-2.1.34.tgz", + "integrity": "sha512-iQLGNE1DyIRYih60B47l/hI5X7J0wAnnRBL6Yn85GUYQg8Fm3wl8kvT6NRwncKroUOSx7/lbAagIFNV7y02DiQ==", + "dev": true + }, + "node_modules/dijit": { + "version": "1.17.3", + "resolved": "https://registry.npmjs.org/dijit/-/dijit-1.17.3.tgz", + "integrity": "sha512-QS+1bNhPT+BF9E+iomQSi5qI+o3oUNSx1r5TF8WlGH4LybGZP+IIGJBOO5/41YduBPljVXhY7vaPsgrycxC6UQ==", + "dependencies": { + "dojo": "1.17.3" + } + }, + "node_modules/dojo": { + "version": "1.17.3", + "resolved": "https://registry.npmjs.org/dojo/-/dojo-1.17.3.tgz", + "integrity": "sha512-iWDx1oSfCEDnIrs8cMW7Zh9Fbjgxu8iRagFz+Qi2eya3MXIAxFXKhv2A7dpi+bfpMpFozLwcsLV8URLw6BsHsA==" + }, + "node_modules/requirejs": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz", + "integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==", + "bin": { + "r_js": "bin/r.js", + "r.js": "bin/r.js" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/rxjs": { + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz", + "integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "node_modules/typescript": { + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz", + "integrity": "sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + } + }, + "dependencies": { + "@implab/core-amd": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/@implab/core-amd/-/core-amd-1.4.6.tgz", + "integrity": "sha512-I1RwUAxeiodePpiBzveoHaehMSAyk7NFPPPEvDqfphHBC8yXoXWAaUrp7EcOKEzjXAs7lJQVhNpmjCjIqoj6BQ==", + "dev": true, + "requires": {} + }, + "@implab/djx": { + "version": "file:../djx/build/npm/package", + "requires": {} + }, + "@implab/dojo-typings": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@implab/dojo-typings/-/dojo-typings-1.0.2.tgz", + "integrity": "sha512-/lbcMCHdRoHJLKFcT8xdk1KbGazSlb1pGSDJ406io7iMenPm/XbJYcUti+VzXnn71zOJ8aYpGT12T5L0rfOZNA==", + "dev": true + }, + "@types/requirejs": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/@types/requirejs/-/requirejs-2.1.34.tgz", + "integrity": "sha512-iQLGNE1DyIRYih60B47l/hI5X7J0wAnnRBL6Yn85GUYQg8Fm3wl8kvT6NRwncKroUOSx7/lbAagIFNV7y02DiQ==", + "dev": true + }, + "dijit": { + "version": "1.17.3", + "resolved": "https://registry.npmjs.org/dijit/-/dijit-1.17.3.tgz", + "integrity": "sha512-QS+1bNhPT+BF9E+iomQSi5qI+o3oUNSx1r5TF8WlGH4LybGZP+IIGJBOO5/41YduBPljVXhY7vaPsgrycxC6UQ==", + "requires": { + "dojo": "1.17.3" + } + }, + "dojo": { + "version": "1.17.3", + "resolved": "https://registry.npmjs.org/dojo/-/dojo-1.17.3.tgz", + "integrity": "sha512-iWDx1oSfCEDnIrs8cMW7Zh9Fbjgxu8iRagFz+Qi2eya3MXIAxFXKhv2A7dpi+bfpMpFozLwcsLV8URLw6BsHsA==" + }, + "requirejs": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz", + "integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==" + }, + "rxjs": { + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz", + "integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==", + "requires": { + "tslib": "^2.1.0" + } + }, + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "typescript": { + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz", + "integrity": "sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==", + "dev": true + } + } +} diff --git a/playground/package.json b/playground/package.json new file mode 100644 --- /dev/null +++ b/playground/package.json @@ -0,0 +1,17 @@ +{ + "name": "@implab/djx-playground", + "private": true, + "dependencies": { + "dijit": "1.17.3", + "dojo": "1.17.3", + "requirejs": "2.3.6", + "rxjs": "7.5.6" + }, + "devDependencies": { + "@implab/core-amd": "1.4.6", + "@implab/djx": "file:../djx/build/npm/package", + "@implab/dojo-typings": "1.0.2", + "@types/requirejs": "2.1.34", + "typescript": "4.8.2" + } +} diff --git a/playground/src/bundle/config.js b/playground/src/bundle/config.js new file mode 100644 --- /dev/null +++ b/playground/src/bundle/config.js @@ -0,0 +1,16 @@ +requirejs.config({ + baseUrl: "js", + packages: [ + "app", + "@implab/djx", + "@implab/core-amd", + "dojo", + "dijit", + { + name: "rxjs", + location: "rxjs", + main: "rxjs.umd.min" + } + ], + deps: ["app"] +}); diff --git a/playground/src/bundle/index.html b/playground/src/bundle/index.html new file mode 100644 --- /dev/null +++ b/playground/src/bundle/index.html @@ -0,0 +1,13 @@ + + + + + + Djx playground + + + + + + + \ No newline at end of file diff --git a/playground/src/main/resources/css/ProgressBar.css b/playground/src/main/resources/css/ProgressBar.css new file mode 100644 --- /dev/null +++ b/playground/src/main/resources/css/ProgressBar.css @@ -0,0 +1,39 @@ +.progress-bar * { + transition: all 0.5s; +} + +.progress-bar { + + transition: all 0.5s; + height: 1em; + line-height: 0; + font-size: 10px; + white-space: nowrap; +} + +.progress-track { + background-color: #888; + height: 0.2em; + box-shadow: 0 0 0.5em 0 #0004; + width: 70%; + display: inline-block; + vertical-align: middle; +} + +.progress-indicator { + width: 30%; + background-color: #0ae; + height: 100%; + display: inline-block; + vertical-align: middle; + box-shadow: 0 0.6em 1em -0.4em #000; +} + +.progress-bar:hover .progress-indicator { + box-shadow: 0 1em 2em -0.4em #000; +} + +.progress-bar:hover .progress-track { + background-color: #0ae; + box-shadow: 0 0 0.5em 0 #0ae; +} \ No newline at end of file diff --git a/playground/src/main/ts/MainWidget.tsx b/playground/src/main/ts/MainWidget.tsx new file mode 100644 --- /dev/null +++ b/playground/src/main/ts/MainWidget.tsx @@ -0,0 +1,82 @@ +import { djbase, djclass } from "@implab/djx/declare"; +import { DjxWidgetBase } from "@implab/djx/tsx/DjxWidgetBase"; +import { createElement, watch, prop, attach, all, bind, toggleClass } from "@implab/djx/tsx"; +import ProgressBar from "./ProgressBar"; +import Button = require("dijit/form/Button"); +import { interval } from "rxjs"; + +@djclass +export default class MainWidget extends djbase(DjxWidgetBase) { + + titleNode?: HTMLHeadingElement; + + progressBar?: ProgressBar; + + count = 0; + + showCounter = false; + + counterNode?: HTMLInputElement; + + paused = false; + + render() { + const Counter = ({ children }: { children: unknown[] }) => Counter: {children}; + + return
+

Hi!

+ +
+ {watch(prop(this, "showCounter"), flag => flag && + [ + x*10) + .map(String) + ), + attach(this, "counterNode") + )} /> ms, + " | ", + , + " | ", +
+ +
; + } + + postCreate(): void { + super.postCreate(); + + const h = setInterval( + () => { + this.set("count", this.count + 1); + }, + 10 + ); + this.own({ + destroy: () => { + clearInterval(h); + } + }); + } + + private _onPauseClick = () => { + this.set("paused", !this.paused); + } + + private _onToggleCounterClick = () => { + this.set("showCounter", !this.showCounter); + } +} diff --git a/playground/src/main/ts/ProgressBar.tsx b/playground/src/main/ts/ProgressBar.tsx new file mode 100644 --- /dev/null +++ b/playground/src/main/ts/ProgressBar.tsx @@ -0,0 +1,19 @@ +import { djbase, djclass } from "@implab/djx/declare"; +import { createElement } from "@implab/djx/tsx"; +import { DjxWidgetBase } from "@implab/djx/tsx/DjxWidgetBase"; +import "@implab/djx/css!./css/ProgressBar.css"; + +@djclass +export default class ProgressBar extends djbase(DjxWidgetBase) { + + constructor(opts?: Partial & ThisType, refNode?: Node | string) { + super(opts, refNode); + } + render() { + return
+
+
+
; + } + +} \ No newline at end of file diff --git a/playground/src/main/ts/main.ts b/playground/src/main/ts/main.ts new file mode 100644 --- /dev/null +++ b/playground/src/main/ts/main.ts @@ -0,0 +1,7 @@ +import MainWidget from "./MainWidget"; +import "@implab/djx/css!dojo/resources/dojo.css" +import "@implab/djx/css!dijit/themes/dijit.css" +import "@implab/djx/css!dijit/themes/tundra/tundra.css" + +const w = new MainWidget(); +w.placeAt(document.body); \ No newline at end of file diff --git a/playground/src/test/ts/index.ts b/playground/src/test/ts/index.ts new file mode 100644 diff --git a/playground/src/tsconfig.json b/playground/src/tsconfig.json new file mode 100644 --- /dev/null +++ b/playground/src/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "moduleResolution": "node", + "experimentalDecorators": true, + "module": "AMD", + "jsx": "react", + "jsxFactory": "createElement", + "strict": true, + "types": [ + "requirejs", + "@implab/djx", + "@implab/dojo-typings" + ], + "skipLibCheck": true + } +} \ No newline at end of file diff --git a/settings.gradle b/settings.gradle --- a/settings.gradle +++ b/settings.gradle @@ -14,4 +14,5 @@ rootProject.name = 'implabjs-djx' -include 'djx' \ No newline at end of file +include 'djx' +include 'playground' \ No newline at end of file