diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6bfb9ec110d474690758750f1675d023b6d64415..3d3640a64dd29e734f4da59f024c0af48d4f00c8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -75,12 +75,12 @@ lint: - if [ -n "$(npm --silent run format && git --no-pager diff --name-only)" ]; then git --no-pager diff && false; fi test:node-16-linux: extends: .npm - script: npm run coverage - coverage: '/^All files *[|] *([0-9.]+) *[|]/' - <<: *save_report_artifacts test:node-18-linux: extends: .npm image: node:18-$LINUX_DISTRO + script: npm run coverage --test-reporter=dot + coverage: '/^All files *[|] *([0-9.]+) *[|]/' + <<: *save_report_artifacts test:windows: extends: .npm tags: [saas-windows-medium-amd64] @@ -89,6 +89,8 @@ test:windows: before_script: - *platform_info - npm ci --quiet + # overwrite script since Windows does not support variable references in run script + script: npm run test-windows-ci release: stage: deploy interruptible: false diff --git a/.mocharc.js b/.mocharc.js deleted file mode 100644 index b4f66f212dc90bb24c8dd870131f2c4491031aa4..0000000000000000000000000000000000000000 --- a/.mocharc.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict' - -module.exports = require('@antora/collector-test-harness/config') diff --git a/package-lock.json b/package-lock.json index 96f41696f1f291cf440be98cd7b31eeb173fea8e..88bc43c9d8e1aa3160e5062c41cb2cf9a99e6838 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,27 +13,12 @@ "devDependencies": { "eslint": "~8.27", "eslint-config-standard": "~17.0", - "mocha": "~10.1", - "nyc": "~15.1", "prettier-eslint": "~15.0" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@antora/collector-extension": { "resolved": "packages/collector-extension", "link": true @@ -115,385 +100,6 @@ "node": ">=10.17.0" } }, - "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz", - "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz", - "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helpers": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/template": "^7.24.7", - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "node_modules/@babel/generator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", - "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.7", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz", - "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "browserslist": "^4.22.2", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", - "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", - "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", - "dev": true, - "dependencies": { - "@babel/template": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", - "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", - "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz", - "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", - "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", - "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", - "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", - "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz", - "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==", - "dev": true, - "dependencies": { - "@babel/template": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", - "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/template": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", - "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", - "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.7", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-hoist-variables": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7", - "debug": "^4.3.1", - "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.24.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", - "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@eslint/eslintrc": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", @@ -552,162 +158,6 @@ "deprecated": "Use @eslint/object-schema instead", "dev": true }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -921,19 +371,6 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -950,15 +387,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/ansi-regex": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", @@ -983,37 +411,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "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": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -1036,19 +433,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-events": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/array-events/-/array-events-0.2.0.tgz", - "integrity": "sha512-Js6+JM/MxB72WeODWcUOOD/BWRqx6QTff8FWvweERQ0MdzViScUJV4XwRFnXvyvbfhuwWNrwhid7IJe2ux3r4Q==", - "dev": true, - "dependencies": { - "async-arrays": "*", - "extended-emitter": "*" - }, - "engines": { - "node": "*" - } - }, "node_modules/array-includes": { "version": "3.1.8", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", @@ -1161,27 +545,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/async-arrays": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/async-arrays/-/async-arrays-2.0.0.tgz", - "integrity": "sha512-lMm6njQEX7gHbdX/b+PGBDXD/Vwg40BKSatlOaWNxrW/O5wYzARmoh+50h58s3hsyzGPU5+xYndwtc+m91yLiw==", - "dev": true, - "dependencies": { - "sift": "*" - }, - "engines": { - "node": "*" - } - }, "node_modules/async-lock": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.4.1.tgz", @@ -1251,30 +614,6 @@ } ] }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bit-mask": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bit-mask/-/bit-mask-1.0.2.tgz", - "integrity": "sha512-UGtq08LSiazxL4zVmBzrhdCWnT4RWx3JhhD/3crhfv8xxjnVHxf/WoVjEstjSUaZeZRP7kZrWNqup1VvUClCaQ==", - "dev": true, - "dependencies": { - "array-events": "^0.2.0" - }, - "engines": { - "node": "*" - } - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1296,44 +635,6 @@ "node": ">=8" } }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "node_modules/browserslist": { - "version": "4.23.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", - "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001629", - "electron-to-chromium": "^1.4.796", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.16" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, "node_modules/buffer": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", @@ -1392,21 +693,6 @@ "node": ">=4" } }, - "node_modules/caching-transform": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", - "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", - "dev": true, - "dependencies": { - "hasha": "^5.0.0", - "make-dir": "^3.0.0", - "package-hash": "^4.0.0", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/call-bind": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", @@ -1427,12 +713,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/call-me-maybe": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", - "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", - "dev": true - }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -1442,69 +722,6 @@ "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.30001640", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001640.tgz", - "integrity": "sha512-lA4VMpW0PSUrFnkmVuEKBUovSWKhj7puyCg8StBChgu298N1AtuF1sKWEvfDuimSEDbhlb/KqPKC3fs1HbuQUA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chai": { - "version": "4.3.10", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", - "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", - "dev": true, - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.0.8" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chai-fs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chai-fs/-/chai-fs-2.0.0.tgz", - "integrity": "sha512-PGfINFH/7XrQBnbp5/MnbFtzBL1//erKs+uoUdyo7KnW0mUX13L6bTO3Jm8OIexSVSh0Y+aaFhhbxyDtb679DA==", - "dev": true, - "dependencies": { - "bit-mask": "^1.0.1", - "readdir-enhanced": "^1.4.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "chai": ">= 1.6.1 < 5" - } - }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -1521,82 +738,11 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", - "dev": true, - "dependencies": { - "get-func-name": "^2.0.2" - }, - "engines": { - "node": "*" - } - }, - "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/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/clean-git-ref": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/clean-git-ref/-/clean-git-ref-2.0.1.tgz", "integrity": "sha512-bLSptAy2P0s6hU4PzuIMKmMJJSE6gLXGH1cntDu7bWJUksvuM+7ReOK61mozULErYvP6a15rnYl0zFDef+pyPw==" }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "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/clone": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", @@ -1645,24 +791,12 @@ "node": ">=4.0.0" } }, - "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": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, "node_modules/crc-32": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", @@ -1768,15 +902,6 @@ } } }, - "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/decompress-response": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", @@ -1791,39 +916,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/deep-eql": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", - "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", - "dev": true, - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "node_modules/default-require-extensions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", - "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", - "dev": true, - "dependencies": { - "strip-bom": "^4.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", @@ -1860,15 +958,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/diff3": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/diff3/-/diff3-0.0.3.tgz", @@ -1886,15 +975,6 @@ "node": ">=8" } }, - "node_modules/dirty-chai": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/dirty-chai/-/dirty-chai-2.0.1.tgz", - "integrity": "sha512-ys79pWKvDMowIDEPC6Fig8d5THiC0DJ2gmTeGzVAoEH18J8OzLud0Jh7I9IWg3NSk8x2UocznUuFmfHCXYZx9w==", - "dev": true, - "peerDependencies": { - "chai": ">=2.2.1 <5" - } - }, "node_modules/dlv": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", @@ -1909,21 +989,9 @@ "dependencies": { "esutils": "^2.0.2" }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.818", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.818.tgz", - "integrity": "sha512-eGvIk2V0dGImV9gWLq8fDfTTsCAeMDwZqEPMr+jMInxZdnp9Us8UpovYpRCf9NQ7VOFgrN2doNSgvISbsbNpxA==", - "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 + "engines": { + "node": ">=6.0.0" + } }, "node_modules/end-of-stream": { "version": "1.4.4", @@ -2074,27 +1142,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "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/es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", - "dev": true - }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -2467,19 +1514,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/esquery": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", @@ -2540,18 +1574,6 @@ "node": ">=0.8.x" } }, - "node_modules/extended-emitter": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/extended-emitter/-/extended-emitter-1.6.0.tgz", - "integrity": "sha512-TNF4xMKL9aKYTR2cTNkKYMUnKzzjfV5Nl6TX45smJ/796CmaFt+KCyidgGdod0Kgj5VSL+ctNIGVf+i1l3e+UA==", - "dev": true, - "dependencies": { - "sift": "*" - }, - "engines": { - "node": "*" - } - }, "node_modules/fast-copy": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.2.tgz", @@ -2654,23 +1676,6 @@ "node": ">=8" } }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -2687,15 +1692,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "bin": { - "flat": "cli.js" - } - }, "node_modules/flat-cache": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", @@ -2726,59 +1722,12 @@ "is-callable": "^1.1.3" } }, - "node_modules/foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/fromentries": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -2818,33 +1767,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "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-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/get-intrinsic": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", @@ -2865,15 +1787,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "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/get-symbol-description": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", @@ -2925,12 +1838,6 @@ "node": ">=10.13.0" } }, - "node_modules/glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==", - "dev": true - }, "node_modules/globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", @@ -2996,12 +1903,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, "node_modules/grapheme-splitter": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", @@ -3103,31 +2004,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hasha": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", - "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", - "dev": true, - "dependencies": { - "is-stream": "^2.0.0", - "type-fest": "^0.8.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/hasha/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -3141,15 +2017,6 @@ "node": ">= 0.4" } }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, "node_modules/help-me": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz", @@ -3165,12 +2032,6 @@ "node": ">=14" } }, - "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/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -3294,18 +2155,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "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-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", @@ -3392,15 +2241,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -3458,15 +2298,6 @@ "node": ">=8" } }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -3500,18 +2331,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "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-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", @@ -3560,24 +2379,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -3591,15 +2392,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", @@ -3609,153 +2401,32 @@ }, "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/isomorphic-git": { - "version": "1.25.10", - "resolved": "https://registry.npmjs.org/isomorphic-git/-/isomorphic-git-1.25.10.tgz", - "integrity": "sha512-IxGiaKBwAdcgBXwIcxJU6rHLk+NrzYaaPKXXQffcA0GW3IUrQXdUPDXDo+hkGVcYruuz/7JlGBiuaeTCgIgivQ==", - "dependencies": { - "async-lock": "^1.4.1", - "clean-git-ref": "^2.0.1", - "crc-32": "^1.2.0", - "diff3": "0.0.3", - "ignore": "^5.1.4", - "minimisted": "^2.0.0", - "pako": "^1.0.10", - "pify": "^4.0.1", - "readable-stream": "^3.4.0", - "sha.js": "^2.4.9", - "simple-get": "^4.0.1" - }, - "bin": { - "isogit": "cli.cjs" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "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-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-report/node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/istanbul-lib-report/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true }, - "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, + "node_modules/isomorphic-git": { + "version": "1.25.10", + "resolved": "https://registry.npmjs.org/isomorphic-git/-/isomorphic-git-1.25.10.tgz", + "integrity": "sha512-IxGiaKBwAdcgBXwIcxJU6rHLk+NrzYaaPKXXQffcA0GW3IUrQXdUPDXDo+hkGVcYruuz/7JlGBiuaeTCgIgivQ==", "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" + "async-lock": "^1.4.1", + "clean-git-ref": "^2.0.1", + "crc-32": "^1.2.0", + "diff3": "0.0.3", + "ignore": "^5.1.4", + "minimisted": "^2.0.0", + "pako": "^1.0.10", + "pify": "^4.0.1", + "readable-stream": "^3.4.0", + "sha.js": "^2.4.9", + "simple-get": "^4.0.1" }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" + "bin": { + "isogit": "cli.cjs" }, "engines": { - "node": ">=8" + "node": ">=12" } }, "node_modules/joycon": { @@ -3777,12 +2448,6 @@ "url": "https://opencollective.com/js-sdsl" } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -3794,18 +2459,6 @@ "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-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -3824,18 +2477,6 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -3879,34 +2520,12 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "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/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/loglevel": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.1.tgz", @@ -3994,39 +2613,6 @@ "node": ">=0.8.0" } }, - "node_modules/loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", - "dev": true, - "dependencies": { - "get-func-name": "^2.0.1" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "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/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -4086,111 +2672,6 @@ "minimist": "^1.2.5" } }, - "node_modules/mocha": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz", - "integrity": "sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==", - "dev": true, - "dependencies": { - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" - }, - "engines": { - "node": ">= 14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/mocha/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/mocha/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/mocha/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -4206,18 +2687,6 @@ "progress": "^2.0.0" } }, - "node_modules/nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -4234,201 +2703,6 @@ "through": "^2.3.8" } }, - "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.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", - "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/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/nyc/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/nyc/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/nyc/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/object-inspect": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", @@ -4574,53 +2848,17 @@ }, "node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/package-hash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", - "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.15", - "hasha": "^5.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/pako": { @@ -4683,21 +2921,6 @@ "node": ">=8" } }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", - "dev": true - }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -4812,70 +3035,6 @@ "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==", "dev": true }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/possible-typed-array-names": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", @@ -4981,18 +3140,6 @@ "node": ">= 0.6.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/process-warning": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", @@ -5058,15 +3205,6 @@ "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", "dev": true }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -5080,29 +3218,6 @@ "node": ">= 6" } }, - "node_modules/readdir-enhanced": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/readdir-enhanced/-/readdir-enhanced-1.5.2.tgz", - "integrity": "sha512-oncAoS9LLjy/+DeZfSAdZBI/iFJGcPCOp44RPFI6FIMHuxt5CC5P0cUZ9mET+EZB9ONhcEvAids/lVRkj0sTHw==", - "dev": true, - "dependencies": { - "call-me-maybe": "^1.0.1", - "es6-promise": "^4.1.0", - "glob-to-regexp": "^0.3.0" - } - }, - "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/real-require": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", @@ -5143,18 +3258,6 @@ "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/release-zalgo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", - "dev": true, - "dependencies": { - "es6-error": "^4.0.1" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", @@ -5170,21 +3273,6 @@ "node": ">= 10" } }, - "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/require-relative": { "version": "0.8.7", "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", @@ -5341,25 +3429,11 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "peer": true, "bin": { "semver": "bin/semver.js" } }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -5452,18 +3526,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/sift": { - "version": "17.1.3", - "resolved": "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz", - "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==", - "dev": true - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, "node_modules/simple-concat": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", @@ -5525,32 +3587,6 @@ "atomic-sleep": "^1.0.0" } }, - "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/spawn-wrap": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", - "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", - "dev": true, - "dependencies": { - "foreground-child": "^2.0.0", - "is-windows": "^1.0.2", - "make-dir": "^3.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "which": "^2.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/split2": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", @@ -5560,12 +3596,6 @@ "node": ">= 10.x" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, "node_modules/streamx": { "version": "2.18.0", "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.18.0.tgz", @@ -5588,20 +3618,6 @@ "safe-buffer": "~5.2.0" } }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/string.prototype.trim": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", @@ -5675,15 +3691,6 @@ "node": ">=8" } }, - "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.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -5730,20 +3737,6 @@ "streamx": "^2.12.5" } }, - "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-decoder": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.0.tgz", @@ -5774,15 +3767,6 @@ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, - "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", @@ -5863,15 +3847,6 @@ "node": ">= 0.8.0" } }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -5961,15 +3936,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "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.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", @@ -5999,36 +3965,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/update-browserslist-db": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -6043,15 +3979,6 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, - "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/vinyl": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz", @@ -6136,12 +4063,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/which-module": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", - "dev": true - }, "node_modules/which-typed-array": { "version": "1.1.15", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", @@ -6171,46 +4092,11 @@ "node": ">=0.10.0" } }, - "node_modules/workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true - }, - "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/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, "node_modules/xdg-basedir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", @@ -6219,87 +4105,6 @@ "node": ">=4" } }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yargs-unparser/node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -6335,9 +4140,6 @@ "version": "1.0.0-beta.2", "devDependencies": { "@antora/logger": "~3.1", - "chai": "~4.3", - "chai-fs": "~2.0", - "dirty-chai": "~2.0", "node-git-server": "~1.0" }, "engines": { diff --git a/package.json b/package.json index ca1b8d40fe1a27151ce05094500ca095e4a430a0..679b3017f005afb8013b18807ca7b8d613f82056 100644 --- a/package.json +++ b/package.json @@ -10,11 +10,13 @@ }, "scripts": { "build": "npm test && npm run lint", - "coverage": "nyc _mocha", + "coverage": "npx -y nyc node -r ./packages/collector-test-harness/lib/coverage-config.js --test-reporter ${npm_config_test_reporter:-spec} --test-reporter-destination stdout --test-reporter junit --test-reporter-destination reports/tests-xunit.xml --test packages/${npm_config_package:-*}/test/*-test.js", "format": "node npm/format.js packages/${npm_config_package},npm", "lint": "eslint \"{docs,npm}/**/*.js\" \"packages/${npm_config_package:-*}/{lib,test}/**/*.js\"", "postrelease": "node npm/postrelease.js", - "test": "_mocha", + "test": "node ${npm_config_test_options:-} --test packages/${npm_config_package:-*}/test/*-test.js", + "test-only": "node --test-only packages/${npm_config_package:-*}/test/*-test.js", + "test-windows-ci": "node --test-reporter dot --test-reporter-destination stdout --test packages/${npm_config_package:-*}/test/*-test.js", "tidy": "npm run lint && npm run format", "version": "node npm/version.js" }, @@ -24,8 +26,6 @@ "devDependencies": { "eslint": "~8.27", "eslint-config-standard": "~17.0", - "mocha": "~10.1", - "nyc": "~15.1", "prettier-eslint": "~15.0" }, "nyc": { diff --git a/packages/collector-extension/test/collector-extension-test.js b/packages/collector-extension/test/collector-extension-test.js index a927555205cb6f9764ddce74958d3f8d60a3a9e3..f79fc8996bf0a89c9bc51822230e7f0d98633b48 100644 --- a/packages/collector-extension/test/collector-extension-test.js +++ b/packages/collector-extension/test/collector-extension-test.js @@ -2,11 +2,18 @@ 'use strict' const { + after, + afterEach, + assert, + assertx, + before, + beforeEach, captureStderr, captureStdout, closeServer, - expect, + describe, heredoc, + it, startGitServer, trapAsyncError, updateYamlFile, @@ -27,59 +34,59 @@ const CACHE_DIR = ospath.join(WORK_DIR, 'cache') const REPOS_DIR = ospath.join(WORK_DIR, 'repos') describe('collector extension', () => { - let gitServer - let gitServerPort - let messages - - const cleanWorkDir = async (opts = {}) => { - await fsp.rm(WORK_DIR, { recursive: true, force: true }) - if (opts.create) await fsp.mkdir(WORK_DIR, { recursive: true }) - } - - const getCollectorCacheDir = () => { - return ospath.join(CACHE_DIR, 'collector') - } - - const getCollectorWorktree = (origin) => { - let folderName - if (origin.worktree === undefined) { - folderName = ospath.basename(origin.gitdir, '.git') - } else { - const url = origin.url.toLowerCase() - folderName = `${url.slice(url.lastIndexOf('/') + 1)}-${createHash('sha1').update(url).digest('hex')}` - } - return ospath.join(getCollectorCacheDir(), folderName) - } - - before(async () => { - await cleanWorkDir({ create: true }) - ;[gitServer, gitServerPort] = await startGitServer(REPOS_DIR) - }) - - after(async () => { - await closeServer(gitServer.server) - await fsp.rm(WORK_DIR, { recursive: true, force: true }) - }) - - beforeEach(async () => { - messages = [] - }) - - afterEach(async () => { - await cleanWorkDir() - }) - describe('bootstrap', () => { it('should be able to require extension', () => { const exports = require('@antora/collector-extension') - expect(exports).to.be.instanceOf(Object) - expect(exports.register).to.be.instanceOf(Function) + assert(exports instanceof Object) + assert(exports.register instanceof Function) }) }) describe('integration', () => { const ext = require('@antora/collector-extension') + let gitServer + let gitServerPort + let messages + + const cleanWorkDir = async (opts = {}) => { + await fsp.rm(WORK_DIR, { recursive: true, force: true }) + if (opts.create) await fsp.mkdir(WORK_DIR, { recursive: true }) + } + + const getCollectorCacheDir = () => { + return ospath.join(CACHE_DIR, 'collector') + } + + const getCollectorWorktree = (origin) => { + let folderName + if (origin.worktree === undefined) { + folderName = ospath.basename(origin.gitdir, '.git') + } else { + const url = origin.url.toLowerCase() + folderName = `${url.slice(url.lastIndexOf('/') + 1)}-${createHash('sha1').update(url).digest('hex')}` + } + return ospath.join(getCollectorCacheDir(), folderName) + } + + before(async () => { + await cleanWorkDir({ create: true }) + ;[gitServer, gitServerPort] = await startGitServer(REPOS_DIR) + }) + + after(async () => { + await closeServer(gitServer.server) + await fsp.rm(WORK_DIR, { recursive: true, force: true }) + }) + + beforeEach(async () => { + messages = [] + }) + + afterEach(async () => { + await cleanWorkDir() + }) + const createGeneratorContext = () => ({ require: () => git, once (eventName, fn) { @@ -174,15 +181,15 @@ describe('collector extension', () => { await runScenario({ repoName: 'test-at-root', before: async (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) + assert.equal(contentAggregate.length, 1) const bucket = contentAggregate[0] - expect(bucket.files).to.be.empty() + assertx.empty(bucket.files) const worktree = getCollectorWorktree(bucket.origins[0]) await fsp.mkdir(ospath.dirname(worktree), { recursive: true }) await fsp.writeFile(worktree, Buffer.alloc(0)) }, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.be.empty() + assertx.empty(contentAggregate[0].files) }, }) }) @@ -196,11 +203,11 @@ describe('collector extension', () => { repoName: 'test-at-root', collectorConfig, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].files).to.be.empty() + assert.equal(contentAggregate.length, 1) + assertx.empty(contentAggregate[0].files) }, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.be.empty() + assertx.empty(contentAggregate[0].files) }, }) }) @@ -214,11 +221,11 @@ describe('collector extension', () => { repoName: 'test-at-root', collectorConfig, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].files).to.be.empty() + assert.equal(contentAggregate.length, 1) + assertx.empty(contentAggregate[0].files) }, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.be.empty() + assertx.empty(contentAggregate[0].files) }, }) }) @@ -232,12 +239,12 @@ describe('collector extension', () => { repoName: 'test-at-root', collectorConfig, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].files).to.be.empty() + assert.equal(contentAggregate.length, 1) + assertx.empty(contentAggregate[0].files) }, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.have.lengthOf(1) - expect(contentAggregate[0].files[0].path).to.equal('modules/ROOT/pages/index.adoc') + assert.equal(contentAggregate[0].files.length, 1) + assert.equal(contentAggregate[0].files[0].path, 'modules/ROOT/pages/index.adoc') }, }) }) @@ -253,17 +260,17 @@ describe('collector extension', () => { repoName: 'test-at-root', collectorConfig, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].files).to.be.empty() + assert.equal(contentAggregate.length, 1) + assertx.empty(contentAggregate[0].files) }, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.have.lengthOf(1) + assert.equal(contentAggregate[0].files.length, 1) collectorWorktree = contentAggregate[0].files[0].src.origin.collectorWorktree - expect(collectorWorktree).to.be.a.directory() - expect(ospath.basename(collectorWorktree)).to.include('@main') + assertx.directory(collectorWorktree) + assert(ospath.basename(collectorWorktree).includes('@main')) }, }) - expect(collectorWorktree).to.be.a.directory() + assertx.directory(collectorWorktree) await fsp.rm(collectorWorktree, { recursive: true }) }) @@ -278,17 +285,17 @@ describe('collector extension', () => { repoName: 'test-at-root', collectorConfig, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].files).to.be.empty() + assert.equal(contentAggregate.length, 1) + assertx.empty(contentAggregate[0].files) }, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.have.lengthOf(1) + assert.equal(contentAggregate[0].files.length, 1) collectorWorktree = contentAggregate[0].files[0].src.origin.collectorWorktree - expect(collectorWorktree).to.be.a.directory() - expect(ospath.basename(collectorWorktree)).to.include('@main') + assertx.directory(collectorWorktree) + assert(ospath.basename(collectorWorktree).includes('@main')) }, }) - expect(collectorWorktree).to.not.be.a.path() + assert(!fs.existsSync(collectorWorktree)) }) it('should keep temporary worktree until specified event when specified on collector config', async () => { @@ -302,17 +309,17 @@ describe('collector extension', () => { repoName: 'test-at-root', collectorConfig, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].files).to.be.empty() + assert.equal(contentAggregate.length, 1) + assertx.empty(contentAggregate[0].files) }, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.have.lengthOf(1) + assert.equal(contentAggregate[0].files.length, 1) collectorWorktree = contentAggregate[0].files[0].src.origin.collectorWorktree - expect(collectorWorktree).to.be.a.directory() - expect(ospath.basename(collectorWorktree)).to.include('@main') + assertx.directory(collectorWorktree) + assert(ospath.basename(collectorWorktree).includes('@main')) }, }) - expect(collectorWorktree).to.not.be.a.path() + assert(!fs.existsSync(collectorWorktree)) }) it('should populate properties of file collected from temporary worktree', async () => { @@ -324,17 +331,17 @@ describe('collector extension', () => { repoName: 'test-at-root', collectorConfig, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].files).to.be.empty() + assert.equal(contentAggregate.length, 1) + assertx.empty(contentAggregate[0].files) }, after: (contentAggregate) => { const bucket = contentAggregate[0] const files = bucket.files const expectedScanned = 'build/modules/ROOT/pages/index.adoc' const expectedRealpath = ospath.join(getCollectorWorktree(bucket.origins[0]), expectedScanned) - expect(files).to.have.lengthOf(1) - expect(files[0]).to.have.property('stat') - expect(files[0].src).to.eql({ + assert.equal(files.length, 1) + assert('stat' in files[0]) + const expectedSrc = { path: 'modules/ROOT/pages/index.adoc', basename: 'index.adoc', stem: 'index', @@ -343,7 +350,8 @@ describe('collector extension', () => { realpath: expectedRealpath, scanned: expectedScanned, origin: contentAggregate[0].origins[0], - }) + } + assertx.deepEqualSlice(files[0].src, expectedSrc) }, }) }) @@ -362,9 +370,9 @@ describe('collector extension', () => { const files = bucket.files const expectedScanned = 'build/docs/modules/ROOT/pages/index.adoc' const expectedRealpath = ospath.join(getCollectorWorktree(bucket.origins[0]), expectedScanned) - expect(files).to.have.lengthOf(1) - expect(files[0].path).to.equal('modules/ROOT/pages/index.adoc') - expect(files[0].src).to.eql({ + assert.equal(files.length, 1) + assert.equal(files[0].path, 'modules/ROOT/pages/index.adoc') + const expectedSrc = { path: 'modules/ROOT/pages/index.adoc', basename: 'index.adoc', stem: 'index', @@ -373,7 +381,8 @@ describe('collector extension', () => { realpath: expectedRealpath, scanned: expectedScanned, origin: contentAggregate[0].origins[0], - }) + } + assertx.deepEqualSlice(files[0].src, expectedSrc) }, }) }) @@ -389,16 +398,16 @@ describe('collector extension', () => { collectorConfig, local: true, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].files).to.be.empty() + assert.equal(contentAggregate.length, 1) + assertx.empty(contentAggregate[0].files) }, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.have.lengthOf(1) + assert.equal(contentAggregate[0].files.length, 1) const expectedScanned = 'build/modules/ROOT/pages/index.adoc' const expectedAbspath = ospath.join(contentAggregate[0].origins[0].worktree, expectedScanned) const collectedFile = contentAggregate[0].files[0] - expect(collectedFile).to.have.property('stat') - expect(collectedFile.src).to.eql({ + assert('stat' in collectedFile) + const expectedSrc = { path: 'modules/ROOT/pages/index.adoc', basename: 'index.adoc', stem: 'index', @@ -406,8 +415,9 @@ describe('collector extension', () => { abspath: expectedAbspath, scanned: expectedScanned, origin: contentAggregate[0].origins[0], - }) - expect(collectedFile.src.origin.collectorWorktree).to.equal(collectedFile.src.origin.worktree) + } + assertx.deepEqualSlice(collectedFile.src, expectedSrc) + assert.equal(collectedFile.src.origin.collectorWorktree, collectedFile.src.origin.worktree) }, }) }) @@ -423,15 +433,15 @@ describe('collector extension', () => { collectorConfig, local: true, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].files).to.be.empty() + assert.equal(contentAggregate.length, 1) + assertx.empty(contentAggregate[0].files) }, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.have.lengthOf(1) + assert.equal(contentAggregate[0].files.length, 1) const expectedScanned = 'build/modules/ROOT/pages/index.adoc' const localAbspath = ospath.join(contentAggregate[0].origins[0].worktree, expectedScanned) - expect(contentAggregate[0].files[0]).to.have.property('stat') - expect(contentAggregate[0].files[0].src).to.include({ + assert('stat' in contentAggregate[0].files[0]) + const expectedSrc = { path: 'modules/ROOT/pages/index.adoc', basename: 'index.adoc', stem: 'index', @@ -439,8 +449,9 @@ describe('collector extension', () => { abspath: expectedScanned, scanned: expectedScanned, origin: contentAggregate[0].origins[0], - }) - expect(contentAggregate[0].files[0].src.abspath).to.not.equal(localAbspath) + } + assertx.deepEqualSlice(contentAggregate[0].files[0].src, expectedSrc) + assert.notEqual(contentAggregate[0].files[0].src.abspath, localAbspath) }, }) }) @@ -456,15 +467,15 @@ describe('collector extension', () => { collectorConfig, local: true, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].files).to.be.empty() + assert.equal(contentAggregate.length, 1) + assertx.empty(contentAggregate[0].files) }, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.have.lengthOf(1) + assert.equal(contentAggregate[0].files.length, 1) const expectedScanned = 'build/modules/ROOT/pages/index.adoc' const localAbspath = ospath.join(contentAggregate[0].origins[0].worktree, expectedScanned) - expect(contentAggregate[0].files[0]).to.have.property('stat') - expect(contentAggregate[0].files[0].src).to.include({ + assert('stat' in contentAggregate[0].files[0]) + const expectedSrc = { path: 'modules/ROOT/pages/index.adoc', basename: 'index.adoc', stem: 'index', @@ -472,8 +483,9 @@ describe('collector extension', () => { abspath: expectedScanned, scanned: expectedScanned, origin: contentAggregate[0].origins[0], - }) - expect(contentAggregate[0].files[0].src.abspath).to.not.equal(localAbspath) + } + assertx.deepEqualSlice(contentAggregate[0].files[0].src, expectedSrc) + assert.notEqual(contentAggregate[0].files[0].src.abspath, localAbspath) }, }) }) @@ -489,15 +501,15 @@ describe('collector extension', () => { collectorConfig, local: true, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].files).to.be.empty() + assert.equal(contentAggregate.length, 1) + assertx.empty(contentAggregate[0].files) }, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.have.lengthOf(1) + assert.equal(contentAggregate[0].files.length, 1) const expectedScanned = 'build/modules/ROOT/pages/index.adoc' const localAbspath = ospath.join(contentAggregate[0].origins[0].worktree, expectedScanned) - expect(contentAggregate[0].files[0]).to.have.property('stat') - expect(contentAggregate[0].files[0].src).to.include({ + assert('stat' in contentAggregate[0].files[0]) + const expectedSrc = { path: 'modules/ROOT/pages/index.adoc', basename: 'index.adoc', stem: 'index', @@ -505,8 +517,9 @@ describe('collector extension', () => { abspath: expectedScanned, scanned: expectedScanned, origin: contentAggregate[0].origins[0], - }) - expect(contentAggregate[0].files[0].src.abspath).to.not.equal(localAbspath) + } + assertx.deepEqualSlice(contentAggregate[0].files[0].src, expectedSrc) + assert.notEqual(contentAggregate[0].files[0].src.abspath, localAbspath) }, }) }) @@ -522,15 +535,15 @@ describe('collector extension', () => { collectorConfig, local: true, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].files).to.be.empty() + assert.equal(contentAggregate.length, 1) + assertx.empty(contentAggregate[0].files) }, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.have.lengthOf(1) + assert.equal(contentAggregate[0].files.length, 1) const expectedScanned = 'build/modules/ROOT/pages/index.adoc' const localAbspath = ospath.join(contentAggregate[0].origins[0].worktree, expectedScanned) - expect(contentAggregate[0].files[0]).to.have.property('stat') - expect(contentAggregate[0].files[0].src).to.include({ + assert('stat' in contentAggregate[0].files[0]) + const expectedSrc = { path: 'modules/ROOT/pages/index.adoc', basename: 'index.adoc', stem: 'index', @@ -538,8 +551,9 @@ describe('collector extension', () => { abspath: expectedScanned, scanned: expectedScanned, origin: contentAggregate[0].origins[0], - }) - expect(contentAggregate[0].files[0].src.abspath).to.not.equal(localAbspath) + } + assertx.deepEqualSlice(contentAggregate[0].files[0].src, expectedSrc) + assert.notEqual(contentAggregate[0].files[0].src.abspath, localAbspath) }, }) }) @@ -553,20 +567,20 @@ describe('collector extension', () => { repoName: 'test-at-root', collectorConfig, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) + assert.equal(contentAggregate.length, 1) const bucket = contentAggregate[0] - expect(bucket.version).to.equal('main') - expect(bucket.files).to.be.empty() + assert.equal(bucket.version, 'main') + assertx.empty(bucket.files) }, after: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) + assert.equal(contentAggregate.length, 1) const bucket = contentAggregate[0] - expect(bucket.version).to.equal('1.0.0') - expect(bucket.title).to.equal('Test') - expect(bucket.files).to.be.empty() - expect(bucket).to.have.nested.property('asciidoc.attributes.url-api', 'https://api.example.org') + assert.equal(bucket.version, '1.0.0') + assert.equal(bucket.title, 'Test') + assertx.empty(bucket.files) + assert.equal(bucket.asciidoc.attributes['url-api'], 'https://api.example.org') const expectedScriptDirname = getCollectorWorktree(bucket.origins[0]) - expect(bucket.asciidoc.attributes['script-dirname']).to.equal(expectedScriptDirname) + assert.equal(bucket.asciidoc.attributes['script-dirname'], expectedScriptDirname) }, }) }) @@ -580,18 +594,18 @@ describe('collector extension', () => { repoName: 'test-at-root-prerelease', collectorConfig, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) + assert.equal(contentAggregate.length, 1) const bucket = contentAggregate[0] - expect(bucket.version).to.equal('') - expect(bucket.prerelease).to.be.true() - expect(bucket.files).to.be.empty() + assert.equal(bucket.version, '') + assert.equal(bucket.prerelease, true) + assertx.empty(bucket.files) }, after: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) + assert.equal(contentAggregate.length, 1) const bucket = contentAggregate[0] - expect(bucket.version).to.equal('1.0.0') - expect(bucket.prerelease).to.be.undefined() - expect(bucket.files).to.be.empty() + assert.equal(bucket.version, '1.0.0') + assert.equal(bucket.prerelease, undefined) + assertx.empty(bucket.files) }, }) }) @@ -606,19 +620,19 @@ describe('collector extension', () => { repoName: 'test-at-root', collectorConfig, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) + assert.equal(contentAggregate.length, 1) const bucketBefore = contentAggregate[0] - expect(bucketBefore.files).to.be.empty() + assertx.empty(bucketBefore.files) bucketIdentityBefore = { name: bucketBefore.name, version: bucketBefore.version } }, after: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) + assert.equal(contentAggregate.length, 1) const bucketAfter = contentAggregate[0] - expect(bucketAfter.name).to.equal('new-name') - expect(bucketAfter.version).to.equal('1.0') - expect(bucketAfter.origins[0].descriptor.name).to.equal(bucketIdentityBefore.name) - expect(bucketAfter.origins[0].descriptor.version).to.equal(bucketIdentityBefore.version) - expect(bucketAfter.files).to.be.empty() + assert.equal(bucketAfter.name, 'new-name') + assert.equal(bucketAfter.version, '1.0') + assert.equal(bucketAfter.origins[0].descriptor.name, bucketIdentityBefore.name) + assert.equal(bucketAfter.origins[0].descriptor.version, bucketIdentityBefore.version) + assertx.empty(bucketAfter.files) }, }) }) @@ -633,18 +647,18 @@ describe('collector extension', () => { repoName: 'test-at-root', collectorConfig, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) + assert.equal(contentAggregate.length, 1) const bucketBefore = contentAggregate[0] - expect(bucketBefore.files).to.be.empty() + assertx.empty(bucketBefore.files) bucketIdentityBefore = { name: bucketBefore.name, version: bucketBefore.version } }, after: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) + assert.equal(contentAggregate.length, 1) const bucketAfter = contentAggregate[0] - expect(bucketAfter.name).to.equal(bucketIdentityBefore.name) - expect(bucketAfter.version).to.equal(bucketIdentityBefore.version) - expect(bucketAfter).to.have.nested.property('asciidoc.attributes.url-api', 'https://api.example.org') - expect(bucketAfter.files).to.be.empty() + assert.equal(bucketAfter.name, bucketIdentityBefore.name) + assert.equal(bucketAfter.version, bucketIdentityBefore.version) + assert.equal(bucketAfter.asciidoc.attributes['url-api'], 'https://api.example.org') + assertx.empty(bucketAfter.files) }, }) }) @@ -659,22 +673,22 @@ describe('collector extension', () => { repoName: 'test-replace', collectorConfig, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].files).to.have.lengthOf(1) - expect(contentAggregate[0].files[0].contents.toString()).to.include('= Stub Start Page') + assert.equal(contentAggregate.length, 1) + assert.equal(contentAggregate[0].files.length, 1) + assert(contentAggregate[0].files[0].contents.includes('= Stub Start Page')) originalStat = contentAggregate[0].files[0].stat }, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.have.lengthOf(1) + assert.equal(contentAggregate[0].files.length, 1) const expectedContents = heredoc` = Real Start Page This is the real deal. ` - expect(contentAggregate[0].files[0].contents.toString()).to.equal(expectedContents + '\n') - expect(contentAggregate[0].files[0].stat).to.not.equal(originalStat) - expect(contentAggregate[0].files[0].stat.size).to.not.equal(originalStat.size) - expect(contentAggregate[0].files[0].src).to.not.have.property('scanned') + assert.equal(contentAggregate[0].files[0].contents.toString(), expectedContents + '\n') + assert.notEqual(contentAggregate[0].files[0].stat, originalStat) + assert.notEqual(contentAggregate[0].files[0].stat.size, originalStat.size) + assert(!('scanned' in contentAggregate[0].files[0].src)) }, }) }) @@ -689,12 +703,12 @@ describe('collector extension', () => { startPath: 'docs', collectorConfig, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].files).to.be.empty() + assert.equal(contentAggregate.length, 1) + assertx.empty(contentAggregate[0].files) }, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.have.lengthOf(1) - expect(contentAggregate[0].files[0].path).to.equal('modules/ROOT/pages/index.adoc') + assert.equal(contentAggregate[0].files.length, 1) + assert.equal(contentAggregate[0].files[0].path, 'modules/ROOT/pages/index.adoc') }, }) }) @@ -709,12 +723,12 @@ describe('collector extension', () => { startPath: 'docs', collectorConfig, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].files).to.be.empty() + assert.equal(contentAggregate.length, 1) + assertx.empty(contentAggregate[0].files) }, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.have.lengthOf(1) - expect(contentAggregate[0].files[0].path).to.equal('modules/ROOT/pages/index.adoc') + assert.equal(contentAggregate[0].files.length, 1) + assert.equal(contentAggregate[0].files[0].path, 'modules/ROOT/pages/index.adoc') }, }) }) @@ -728,8 +742,8 @@ describe('collector extension', () => { repoName: 'test-at-root', collectorConfig, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.have.lengthOf(1) - expect(contentAggregate[0].files[0].path).to.equal('modules/ROOT/pages/index.adoc') + assert.equal(contentAggregate[0].files.length, 1) + assert.equal(contentAggregate[0].files[0].path, 'modules/ROOT/pages/index.adoc') }, }) }) @@ -743,8 +757,8 @@ describe('collector extension', () => { repoName: 'test-at-root', collectorConfig, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.have.lengthOf(1) - expect(contentAggregate[0].files[0].path).to.equal('modules/ROOT/pages/index.adoc') + assert.equal(contentAggregate[0].files.length, 1) + assert.equal(contentAggregate[0].files[0].path, 'modules/ROOT/pages/index.adoc') }, }) }) @@ -758,8 +772,8 @@ describe('collector extension', () => { repoName: 'test-at-root', collectorConfig, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.have.lengthOf(1) - expect(contentAggregate[0].files[0].path).to.equal('modules/ROOT/pages/index.adoc') + assert.equal(contentAggregate[0].files.length, 1) + assert.equal(contentAggregate[0].files[0].path, 'modules/ROOT/pages/index.adoc') }, }) }) @@ -774,8 +788,8 @@ describe('collector extension', () => { startPath: 'docs', collectorConfig, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.have.lengthOf(1) - expect(contentAggregate[0].files[0].path).to.equal('modules/ROOT/pages/index.adoc') + assert.equal(contentAggregate[0].files.length, 1) + assert.equal(contentAggregate[0].files[0].path, 'modules/ROOT/pages/index.adoc') }, }) }) @@ -789,8 +803,8 @@ describe('collector extension', () => { repoName: 'test-at-root', collectorConfig, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.have.lengthOf(1) - expect(contentAggregate[0].files[0].path).to.equal('modules/ROOT/pages/index.adoc') + assert.equal(contentAggregate[0].files.length, 1) + assert.equal(contentAggregate[0].files[0].path, 'modules/ROOT/pages/index.adoc') }, }) }) @@ -801,10 +815,10 @@ describe('collector extension', () => { repoName: 'test-batch-script', startPath: 'docs', after: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) + assert.equal(contentAggregate.length, 1) const bucket = contentAggregate[0] - expect(bucket.name).to.equal('test') - expect(bucket.version).to.equal('1.0') + assert.equal(bucket.name, 'test') + assert.equal(bucket.version, '1.0') }, }) }) @@ -820,8 +834,8 @@ describe('collector extension', () => { startPath: 'docs', collectorConfig, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.have.lengthOf(1) - expect(contentAggregate[0].files[0].path).to.equal('modules/ROOT/pages/index.adoc') + assert.equal(contentAggregate[0].files.length, 1) + assert.equal(contentAggregate[0].files[0].path, 'modules/ROOT/pages/index.adoc') }, }) }) @@ -834,11 +848,11 @@ describe('collector extension', () => { repoName: 'test-at-root', collectorConfig, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].files).to.be.empty() + assert.equal(contentAggregate.length, 1) + assertx.empty(contentAggregate[0].files) }, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.be.empty() + assertx.empty(contentAggregate[0].files) }, }) }) @@ -852,11 +866,11 @@ describe('collector extension', () => { repoName: 'test-at-root', collectorConfig, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].files).to.be.empty() + assert.equal(contentAggregate.length, 1) + assertx.empty(contentAggregate[0].files) }, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.be.empty() + assertx.empty(contentAggregate[0].files) }, }) }) @@ -870,12 +884,12 @@ describe('collector extension', () => { startPath: 'docs', collectorConfig, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].files).to.be.empty() + assert.equal(contentAggregate.length, 1) + assertx.empty(contentAggregate[0].files) }, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.have.lengthOf(1) - expect(contentAggregate[0].files[0].path).to.equal('modules/ROOT/pages/outside-start-path.adoc') + assert.equal(contentAggregate[0].files.length, 1) + assert.equal(contentAggregate[0].files[0].path, 'modules/ROOT/pages/outside-start-path.adoc') }, }) }) @@ -890,11 +904,11 @@ describe('collector extension', () => { collectorConfig, local: true, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].files).to.be.empty() + assert.equal(contentAggregate.length, 1) + assertx.empty(contentAggregate[0].files) }, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.be.empty() + assertx.empty(contentAggregate[0].files) }, }) }) @@ -909,12 +923,12 @@ describe('collector extension', () => { collectorConfig, local: true, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].files).to.be.empty() + assert.equal(contentAggregate.length, 1) + assertx.empty(contentAggregate[0].files) }, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.have.lengthOf(1) - expect(contentAggregate[0].files[0].path).to.equal('modules/ROOT/pages/outside-start-path.adoc') + assert.equal(contentAggregate[0].files.length, 1) + assert.equal(contentAggregate[0].files[0].path, 'modules/ROOT/pages/outside-start-path.adoc') }, }) }) @@ -928,12 +942,12 @@ describe('collector extension', () => { startPath: 'docs', collectorConfig, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].files).to.be.empty() + assert.equal(contentAggregate.length, 1) + assertx.empty(contentAggregate[0].files) }, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.have.lengthOf(1) - expect(contentAggregate[0].files[0].path).to.equal('modules/extend/examples/extended-pdf-converter.rb') + assert.equal(contentAggregate[0].files.length, 1) + assert.equal(contentAggregate[0].files[0].path, 'modules/extend/examples/extended-pdf-converter.rb') }, }) }) @@ -947,12 +961,12 @@ describe('collector extension', () => { startPath: 'docs', collectorConfig, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].files).to.be.empty() + assert.equal(contentAggregate.length, 1) + assertx.empty(contentAggregate[0].files) }, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.have.lengthOf(1) - expect(contentAggregate[0].files[0].path).to.equal('modules/extend/examples/extended-pdf-converter.rb') + assert.equal(contentAggregate[0].files.length, 1) + assert.equal(contentAggregate[0].files[0].path, 'modules/extend/examples/extended-pdf-converter.rb') }, }) }) @@ -966,15 +980,15 @@ describe('collector extension', () => { startPath: 'docs', collectorConfig, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].files).to.be.empty() + assert.equal(contentAggregate.length, 1) + assertx.empty(contentAggregate[0].files) }, after: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(2) - expect(contentAggregate[1].files).to.have.lengthOf(1) - expect(contentAggregate[1].name).to.equal('shared') - expect(contentAggregate[1].version).to.equal('') - expect(contentAggregate[1].files[0].path).to.equal('modules/ROOT/examples/extended-pdf-converter.rb') + assert.equal(contentAggregate.length, 2) + assert.equal(contentAggregate[1].files.length, 1) + assert.equal(contentAggregate[1].name, 'shared') + assert.equal(contentAggregate[1].version, '') + assert.equal(contentAggregate[1].files[0].path, 'modules/ROOT/examples/extended-pdf-converter.rb') }, }) }) @@ -988,10 +1002,10 @@ describe('collector extension', () => { repoName: 'test-at-root', collectorConfig, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) + assert.equal(contentAggregate.length, 1) const bucket = contentAggregate[0] - expect(bucket.version).to.equal('main') - expect(bucket.files).to.be.empty() + assert.equal(bucket.version, 'main') + assertx.empty(bucket.files) contentAggregate.push({ name: 'test', version: '1.0.0', @@ -1000,12 +1014,12 @@ describe('collector extension', () => { }) }, after: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(2) + assert.equal(contentAggregate.length, 2) const bucket = contentAggregate[1] - expect(bucket.files).to.have.lengthOf(1) - expect(bucket.name).to.equal('test') - expect(bucket.version).to.equal('1.0.0') - expect(bucket.files[0].path).to.equal('modules/more/pages/index.adoc') + assert.equal(bucket.files.length, 1) + assert.equal(bucket.name, 'test') + assert.equal(bucket.version, '1.0.0') + assert.equal(bucket.files[0].path, 'modules/more/pages/index.adoc') }, }) }) @@ -1019,18 +1033,18 @@ describe('collector extension', () => { repoName: 'test-at-root', collectorConfig, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) + assert.equal(contentAggregate.length, 1) const bucket = contentAggregate[0] - expect(bucket.version).to.equal('main') - expect(bucket.files).to.be.empty() + assert.equal(bucket.version, 'main') + assertx.empty(bucket.files) }, after: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(2) + assert.equal(contentAggregate.length, 2) const bucket = contentAggregate[1] - expect(bucket.files).to.have.lengthOf(1) - expect(bucket.name).to.equal('test') - expect(bucket.version).to.equal('1.0.0') - expect(bucket.files[0].path).to.equal('modules/more/pages/index.adoc') + assert.equal(bucket.files.length, 1) + assert.equal(bucket.name, 'test') + assert.equal(bucket.version, '1.0.0') + assert.equal(bucket.files[0].path, 'modules/more/pages/index.adoc') }, }) }) @@ -1044,18 +1058,18 @@ describe('collector extension', () => { repoName: 'test-at-root', collectorConfig, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) + assert.equal(contentAggregate.length, 1) const bucket = contentAggregate[0] - expect(bucket.version).to.equal('main') - expect(bucket.files).to.be.empty() + assert.equal(bucket.version, 'main') + assertx.empty(bucket.files) }, after: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) + assert.equal(contentAggregate.length, 1) const bucket = contentAggregate[0] - expect(bucket.files).to.have.lengthOf(1) - expect(bucket.name).to.equal('test') - expect(bucket.version).to.equal('1.0.0') - expect(bucket.files[0].path).to.equal('modules/more/pages/index.adoc') + assert.equal(bucket.files.length, 1) + assert.equal(bucket.name, 'test') + assert.equal(bucket.version, '1.0.0') + assert.equal(bucket.files[0].path, 'modules/more/pages/index.adoc') }, }) }) @@ -1070,12 +1084,12 @@ describe('collector extension', () => { startPath: 'docs', collectorConfig, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].files).to.be.empty() + assert.equal(contentAggregate.length, 1) + assertx.empty(contentAggregate[0].files) }, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.have.lengthOf(2) - expect(contentAggregate[0].files.map((it) => it.path)).to.have.members([ + assert.equal(contentAggregate[0].files.length, 2) + assert.deepEqual(contentAggregate[0].files.map((it) => it.path).sort(), [ 'modules/ROOT/pages/index.adoc', 'modules/ROOT/pages/outside-start-path.adoc', ]) @@ -1092,16 +1106,14 @@ describe('collector extension', () => { repoName: 'test-at-root', collectorConfig, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].files).to.be.empty() + assert.equal(contentAggregate.length, 1) + assertx.empty(contentAggregate[0].files) }, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.have.lengthOf(20) - expect(contentAggregate[0].files.map((it) => it.path)).to.include.members([ - 'modules/ROOT/pages/01.adoc', - 'modules/ROOT/pages/10.adoc', - 'modules/ROOT/pages/20.adoc', - ]) + assert.equal(contentAggregate[0].files.length, 20) + const expected = [] + for (let i = 1; i <= 20; i++) expected.push(`modules/ROOT/pages/${i < 10 ? '0' : ''}${i}.adoc`) + assert.deepEqual(contentAggregate[0].files.map((it) => it.path).sort(), expected) }, }) }) @@ -1121,23 +1133,25 @@ describe('collector extension', () => { repoName: 'test-at-root', collectorConfig, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].version).to.eql('main') - expect(contentAggregate[0].files).to.be.empty() + assert.equal(contentAggregate.length, 1) + assert.equal(contentAggregate[0].version, 'main') + assertx.empty(contentAggregate[0].files) }, after: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) + assert.equal(contentAggregate.length, 1) const bucket = contentAggregate[0] - expect(bucket.version).to.equal('1.0.0') - expect(bucket.files).to.have.lengthOf(3) - expect(bucket.files.map((it) => it.path)).to.have.members([ + assert.equal(bucket.version, '1.0.0') + assert.equal(bucket.files.length, 3) + assert.deepEqual(bucket.files.map((it) => it.path).sort(), [ + 'modules/ROOT/examples/ack.rb', 'modules/ROOT/pages/index.adoc', 'modules/ROOT/partials/summary.adoc', - 'modules/ROOT/examples/ack.rb', ]) - expect( - contentAggregate[0].files.find((it) => it.path === 'modules/ROOT/pages/index.adoc').contents.toString() - ).to.include('= The Start Page') + assert( + contentAggregate[0].files + .find((it) => it.path === 'modules/ROOT/pages/index.adoc') + .contents.includes('= The Start Page') + ) }, }) }) @@ -1159,23 +1173,25 @@ describe('collector extension', () => { repoName: 'test-at-root', collectorConfig, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].version).to.eql('main') - expect(contentAggregate[0].files).to.be.empty() + assert.equal(contentAggregate.length, 1) + assert.equal(contentAggregate[0].version, 'main') + assertx.empty(contentAggregate[0].files) }, after: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) + assert.equal(contentAggregate.length, 1) const bucket = contentAggregate[0] - expect(bucket.version).to.equal('1.0.0') - expect(bucket.files).to.have.lengthOf(3) - expect(bucket.files.map((it) => it.path)).to.have.members([ + assert.equal(bucket.version, '1.0.0') + assert.equal(bucket.files.length, 3) + assert.deepEqual(bucket.files.map((it) => it.path).sort(), [ + 'modules/ROOT/examples/ack.rb', 'modules/ROOT/pages/index.adoc', 'modules/ROOT/partials/summary.adoc', - 'modules/ROOT/examples/ack.rb', ]) - expect( - contentAggregate[0].files.find((it) => it.path === 'modules/ROOT/pages/index.adoc').contents.toString() - ).to.include('= Start Page') + assert( + contentAggregate[0].files + .find((it) => it.path === 'modules/ROOT/pages/index.adoc') + .contents.includes('= Start Page') + ) }, }) }) @@ -1198,19 +1214,21 @@ describe('collector extension', () => { repoName: 'test-at-root', collectorConfig, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].version).to.eql('main') - expect(contentAggregate[0].files).to.be.empty() + assert.equal(contentAggregate.length, 1) + assert.equal(contentAggregate[0].version, 'main') + assertx.empty(contentAggregate[0].files) }, after: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) + assert.equal(contentAggregate.length, 1) const bucket = contentAggregate[0] - expect(bucket.version).to.equal('1.0.0') - expect(bucket.files).to.have.lengthOf(1) - expect(bucket.files.map((it) => it.path)).to.have.members(['modules/ROOT/pages/index.adoc']) - expect( - contentAggregate[0].files.find((it) => it.path === 'modules/ROOT/pages/index.adoc').contents.toString() - ).to.include('= Start Page') + assert.equal(bucket.version, '1.0.0') + assert.equal(bucket.files.length, 1) + assert.deepEqual(bucket.files.map((it) => it.path).sort(), ['modules/ROOT/pages/index.adoc']) + assert( + contentAggregate[0].files + .find((it) => it.path === 'modules/ROOT/pages/index.adoc') + .contents.includes('= Start Page') + ) }, }) }) @@ -1230,15 +1248,15 @@ describe('collector extension', () => { repoName: 'test-at-root', collectorConfig, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].files).to.be.empty() + assert.equal(contentAggregate.length, 1) + assertx.empty(contentAggregate[0].files) }, after: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) + assert.equal(contentAggregate.length, 1) const bucket = contentAggregate[0] - expect(bucket.version).to.equal('1.0.0') - expect(bucket.files).to.have.lengthOf(1) - expect(bucket.files.map((it) => it.path)).to.have.members(['modules/ROOT/pages/index.adoc']) + assert.equal(bucket.version, '1.0.0') + assert.equal(bucket.files.length, 1) + assert.deepEqual(bucket.files.map((it) => it.path).sort(), ['modules/ROOT/pages/index.adoc']) }, }) }) @@ -1252,13 +1270,13 @@ describe('collector extension', () => { repoName: 'test-at-root', collectorConfig, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].files).to.be.empty() + assert.equal(contentAggregate.length, 1) + assertx.empty(contentAggregate[0].files) }, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.have.lengthOf(2) - const paths = contentAggregate[0].files.map((it) => it.path) - expect(paths).to.have.members(['modules/ROOT/pages/index.adoc', 'modules/ROOT/partials/summary.adoc']) + assert.equal(contentAggregate[0].files.length, 2) + const paths = contentAggregate[0].files.map((it) => it.path).sort() + assert.deepEqual(paths, ['modules/ROOT/pages/index.adoc', 'modules/ROOT/partials/summary.adoc']) }, }) }) @@ -1272,13 +1290,13 @@ describe('collector extension', () => { repoName: 'test-at-root', collectorConfig, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].files).to.be.empty() + assert.equal(contentAggregate.length, 1) + assertx.empty(contentAggregate[0].files) }, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.have.lengthOf(2) - const paths = contentAggregate[0].files.map((it) => it.path) - expect(paths).to.have.members(['modules/ROOT/pages/index.adoc', 'modules/ROOT/examples/ack.rb']) + assert.equal(contentAggregate[0].files.length, 2) + const paths = contentAggregate[0].files.map((it) => it.path).sort() + assert.deepEqual(paths, ['modules/ROOT/examples/ack.rb', 'modules/ROOT/pages/index.adoc']) }, }) }) @@ -1317,10 +1335,10 @@ describe('collector extension', () => { before: (contentAggregate, playbook) => { playbook.site = { title: 'My Site', url: 'https://docs.example.org' } Object.freeze(playbook) - expect(contentAggregate).to.have.lengthOf(1) + assert.equal(contentAggregate.length, 1) }, after: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) + assert.equal(contentAggregate.length, 1) const bucket = contentAggregate[0] const expectedWorktree = getCollectorWorktree(bucket.origins[0]) const expectedContents = heredoc` @@ -1331,9 +1349,9 @@ describe('collector extension', () => { site url:: https://docs.example.org env in playbook:: false ` - expect(bucket.files).to.have.lengthOf(1) - expect(bucket.files[0].path).to.equal('modules/ROOT/pages/index.adoc') - expect(bucket.files[0].contents.toString()).to.include(expectedContents) + assert.equal(bucket.files.length, 1) + assert.equal(bucket.files[0].path, 'modules/ROOT/pages/index.adoc') + assert(bucket.files[0].contents.includes(expectedContents)) }, }) }) @@ -1357,15 +1375,15 @@ describe('collector extension', () => { collectorConfig, before: (contentAggregate, playbook) => { playbook.site = { title: 'My Site' } - expect(contentAggregate).to.have.lengthOf(1) + assert.equal(contentAggregate.length, 1) }, after: (contentAggregate) => { const expectedContents = '{"ENV_VALUE_AS_STRING":"99.9"}' - expect(contentAggregate).to.have.lengthOf(1) + assert.equal(contentAggregate.length, 1) const bucket = contentAggregate[0] - expect(bucket.files).to.have.lengthOf(1) - expect(bucket.files[0].path).to.equal('modules/ROOT/pages/index.adoc') - expect(bucket.files[0].contents.toString()).to.include(expectedContents) + assert.equal(bucket.files.length, 1) + assert.equal(bucket.files[0].path, 'modules/ROOT/pages/index.adoc') + assert(bucket.files[0].contents.includes(expectedContents)) }, }) }) @@ -1385,14 +1403,14 @@ describe('collector extension', () => { repoName: 'test-at-root', collectorConfig, before: (contentAggregate, playbook) => { - expect(contentAggregate).to.have.lengthOf(1) + assert.equal(contentAggregate.length, 1) }, after: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) + assert.equal(contentAggregate.length, 1) const bucket = contentAggregate[0] - expect(bucket.files).to.have.lengthOf(1) - expect(bucket.files[0].path).to.equal('modules/ROOT/pages/index.adoc') - expect(bucket.files[0].contents.toString()).to.equal('= Refname\n\nmain') + assert.equal(bucket.files.length, 1) + assert.equal(bucket.files[0].path, 'modules/ROOT/pages/index.adoc') + assert.equal(bucket.files[0].contents.toString(), '= Refname\n\nmain') }, }) }) @@ -1410,11 +1428,11 @@ describe('collector extension', () => { collectorConfig, before: (contentAggregate, playbook) => { playbook.env = Object.assign({}, playbook.env, { NUM_FILES: '5' }) - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].files).to.be.empty() + assert.equal(contentAggregate.length, 1) + assertx.empty(contentAggregate[0].files) }, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.have.lengthOf(5) + assert.equal(contentAggregate[0].files.length, 5) }, }) }) @@ -1432,11 +1450,11 @@ describe('collector extension', () => { repoName: 'test-at-root', collectorConfig, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].files).to.be.empty() + assert.equal(contentAggregate.length, 1) + assertx.empty(contentAggregate[0].files) }, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.have.lengthOf(5) + assert.equal(contentAggregate[0].files.length, 5) }, }) }) @@ -1455,11 +1473,11 @@ describe('collector extension', () => { repoName: 'test-at-root', collectorConfig, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].files).to.be.empty() + assert.equal(contentAggregate.length, 1) + assertx.empty(contentAggregate[0].files) }, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.have.lengthOf(5) + assert.equal(contentAggregate[0].files.length, 5) }, }) }) @@ -1473,8 +1491,8 @@ describe('collector extension', () => { repoName: 'test-at-root', collectorConfig, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.have.lengthOf(1) - expect(contentAggregate[0].files[0].path).to.equal('modules/ROOT/pages/index.adoc') + assert.equal(contentAggregate[0].files.length, 1) + assert.equal(contentAggregate[0].files[0].path, 'modules/ROOT/pages/index.adoc') }, }) }) @@ -1491,11 +1509,11 @@ describe('collector extension', () => { repoName: 'test-at-root', collectorConfig, before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].files).to.be.empty() + assert.equal(contentAggregate.length, 1) + assertx.empty(contentAggregate[0].files) }, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.have.lengthOf(1) + assert.equal(contentAggregate[0].files.length, 1) }, }) } finally { @@ -1506,7 +1524,9 @@ describe('collector extension', () => { it('should create dedicated cache folder for collector under Antora cache dir', async () => { await fsp.mkdir(CACHE_DIR, { recursive: true }) await fsp.writeFile(getCollectorCacheDir(), Buffer.alloc(0)) - expect(await trapAsyncError(() => runScenario({ repoName: 'test-at-root' }))).to.throw('file already exists') + assert.throws(await trapAsyncError(() => runScenario({ repoName: 'test-at-root' })), { + message: /file already exists/, + }) }) it('should create cache folder under user cache if cache dir is not specified', async () => { @@ -1521,15 +1541,16 @@ describe('collector extension', () => { delete playbook.runtime.cacheDir }, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.have.lengthOf(1) - expect(contentAggregate[0].files[0].src.realpath.startsWith(getUserCacheDir('antora-test'))).to.be.true() + assert.equal(contentAggregate[0].files.length, 1) + assert(contentAggregate[0].files[0].src.realpath.startsWith(getUserCacheDir('antora-test'))) }, }) }) it('should empty dedicated cache dir for collector after run', async () => { await runScenario({ repoName: 'test-at-root' }) - expect(getCollectorCacheDir()).to.be.a.directory().and.empty() + assertx.directory(getCollectorCacheDir()) + assertx.empty(fs.readdirSync(getCollectorCacheDir())) }) it('should reuse worktree without cleaning if no clean step is specified', async () => { @@ -1542,19 +1563,19 @@ describe('collector extension', () => { local: true, collectorConfig, before: async (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].files).to.be.empty() + assert.equal(contentAggregate.length, 1) + assertx.empty(contentAggregate[0].files) const worktree = contentAggregate[0].origins[0].worktree const untrackedPagePath = ospath.join(worktree, 'build/modules/ROOT/pages/untracked.adoc') await fsp.mkdir(ospath.dirname(untrackedPagePath), { recursive: true }) await fsp.writeFile(untrackedPagePath, '= Untracked', 'utf8') }, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.have.lengthOf(2) + assert.equal(contentAggregate[0].files.length, 2) const worktree = contentAggregate[0].origins[0].worktree - expect(ospath.join(worktree, 'build')).to.be.a.directory() - expect(ospath.join(worktree, 'build/modules/ROOT/pages/index.adoc')).to.be.a.file() - expect(ospath.join(worktree, 'build/modules/ROOT/pages/untracked.adoc')).to.be.a.file() + assertx.directory(ospath.join(worktree, 'build')) + assertx.file(ospath.join(worktree, 'build/modules/ROOT/pages/index.adoc')) + assertx.file(ospath.join(worktree, 'build/modules/ROOT/pages/untracked.adoc')) }, }) }) @@ -1569,15 +1590,15 @@ describe('collector extension', () => { local: true, collectorConfig, before: async (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].files).to.be.empty() + assert.equal(contentAggregate.length, 1) + assertx.empty(contentAggregate[0].files) const worktree = contentAggregate[0].origins[0].worktree const residualPagePath = ospath.join(worktree, 'build/modules/ROOT/pages/residual-page.adoc') await fsp.mkdir(ospath.dirname(residualPagePath), { recursive: true }) await fsp.writeFile(residualPagePath, '= Residual Page', 'utf8') }, after: (contentAggregate) => { - expect(contentAggregate[0].files.map((it) => it.path)).to.not.include('modules/ROOT/pages/residual-page.adoc') + assert(!contentAggregate[0].files.map((it) => it.path).includes('modules/ROOT/pages/residual-page.adoc')) }, }) }) @@ -1599,8 +1620,8 @@ describe('collector extension', () => { getCollectorWorktree(bucket.origins[0]), 'build/modules/ROOT/pages/index.adoc' ) - expect(bucket.files).to.have.lengthOf(1) - expect(bucket.files[0].src.realpath).to.equal(expectedRealpath) + assert.equal(bucket.files.length, 1) + assert.equal(bucket.files[0].src.realpath, expectedRealpath) }, }) }) @@ -1617,18 +1638,18 @@ describe('collector extension', () => { local: true, branches: ['v1.0.x', 'v2.0.x'], before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(2) + assert.equal(contentAggregate.length, 2) }, after: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(2) + assert.equal(contentAggregate.length, 2) contentAggregate.forEach((bucket) => { - expect(bucket.origins[0].refname).to.be.oneOf(['v1.0.x', 'v2.0.x']) + assert(['v1.0.x', 'v2.0.x'].includes(bucket.origins[0].refname)) const expectedRealpath = ospath.join( getCollectorWorktree(bucket.origins[0]), 'build/modules/ROOT/pages/index.adoc' ) - expect(bucket.files).to.have.lengthOf(1) - expect(bucket.files[0].src.realpath).to.equal(expectedRealpath) + assert.equal(bucket.files.length, 1) + assert.equal(bucket.files[0].src.realpath, expectedRealpath) }) }, }) @@ -1644,15 +1665,15 @@ describe('collector extension', () => { collectorConfig, branches: ['docs/release-line/1.0'], before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].version).to.equal('docs-release-line-1.0') + assert.equal(contentAggregate.length, 1) + assert.equal(contentAggregate[0].version, 'docs-release-line-1.0') }, after: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) + assert.equal(contentAggregate.length, 1) const bucket = contentAggregate[0] - expect(bucket.version).to.equal('1.0') - expect(bucket.origins[0].refname).to.equal('docs/release-line/1.0') - expect(bucket.files).to.be.empty() + assert.equal(bucket.version, '1.0') + assert.equal(bucket.origins[0].refname, 'docs/release-line/1.0') + assertx.empty(bucket.files) }, }) }) @@ -1668,19 +1689,19 @@ describe('collector extension', () => { branches: [], tags: ['v1.0.1'], before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].origins[0].refname).to.equal('v1.0.1') + assert.equal(contentAggregate.length, 1) + assert.equal(contentAggregate[0].origins[0].refname, 'v1.0.1') }, after: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) + assert.equal(contentAggregate.length, 1) const bucket = contentAggregate[0] - expect(bucket.version).to.equal('1.0.1') + assert.equal(bucket.version, '1.0.1') const expectedRealpath = ospath.join( getCollectorWorktree(bucket.origins[0]), 'build/modules/ROOT/pages/v1.0.1-release.adoc' ) - expect(bucket.files).to.have.lengthOf(1) - expect(bucket.files[0].src.realpath).to.equal(expectedRealpath) + assert.equal(bucket.files.length, 1) + assert.equal(bucket.files[0].src.realpath, expectedRealpath) }, }) }) @@ -1696,17 +1717,17 @@ describe('collector extension', () => { branches: ['v1.0.x'], tags: ['v1.0.1'], before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(2) - expect(contentAggregate.map((it) => it.origins[0].refname)).to.have.members(['v1.0.1', 'v1.0.x']) + assert.equal(contentAggregate.length, 2) + assert.deepEqual(contentAggregate.map((it) => it.origins[0].refname).sort(), ['v1.0.1', 'v1.0.x']) }, after: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(2) + assert.equal(contentAggregate.length, 2) const branchBucket = contentAggregate.find((it) => it.origins[0].reftype === 'branch') - expect(branchBucket.version).to.equal('1.0') - expect(branchBucket.prerelease).to.be.true() + assert.equal(branchBucket.version, '1.0') + assert.equal(branchBucket.prerelease, true) const tagBucket = contentAggregate.find((it) => it.origins[0].reftype === 'tag') - expect(tagBucket.version).to.equal('1.0.1') - expect(tagBucket.prerelease).to.be.false() + assert.equal(tagBucket.version, '1.0.1') + assert.equal(tagBucket.prerelease, false) }, }) }) @@ -1724,12 +1745,12 @@ describe('collector extension', () => { local: true, branches: ['v1.0.x'], before: async (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) + assert.equal(contentAggregate.length, 1) expectedIndex = await fsp.readFile(ospath.join(contentAggregate[0].origins[0].gitdir, 'index'), 'utf8') }, after: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) - expect(ospath.join(contentAggregate[0].origins[0].gitdir, 'index')).to.have.contents(expectedIndex) + assert.equal(contentAggregate.length, 1) + assertx.contents(ospath.join(contentAggregate[0].origins[0].gitdir, 'index'), expectedIndex) }, }) }) @@ -1744,19 +1765,19 @@ describe('collector extension', () => { collectorConfig, branches: ['v1.0.x'], before: async (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) + assert.equal(contentAggregate.length, 1) const bucket = contentAggregate[0] - expect(bucket).to.have.property('version', 'v1.0.x') - expect(bucket.files).to.be.empty() + assert.equal(bucket.version, 'v1.0.x') + assertx.empty(bucket.files) const worktree = getCollectorWorktree(bucket.origins[0]) await fsp.mkdir(worktree, { recursive: true }) await fsp.writeFile(ospath.join(worktree, '.git'), 'nuke me') }, after: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) + assert.equal(contentAggregate.length, 1) const bucket = contentAggregate[0] - expect(bucket).to.have.property('version', '1.0.0') - expect(bucket.files).to.be.empty() + assert.equal(bucket.version, '1.0.0') + assertx.empty(bucket.files) }, }) }) @@ -1771,10 +1792,10 @@ describe('collector extension', () => { collectorConfig, branches: ['v1.0.x'], after: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) + assert.equal(contentAggregate.length, 1) const bucket = contentAggregate[0] - expect(bucket.files).to.have.lengthOf(1) - expect(ospath.basename(bucket.files[0].path)).to.equal('does-not-exist.adoc') + assert.equal(bucket.files.length, 1) + assert.equal(ospath.basename(bucket.files[0].path), 'does-not-exist.adoc') }, }) }) @@ -1789,20 +1810,20 @@ describe('collector extension', () => { collectorConfig, branches: ['v1.0.x', 'v2.0.x'], before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(2) + assert.equal(contentAggregate.length, 2) const [bucket1, bucket2] = contentAggregate - expect(bucket1).to.have.property('version', 'v1.0.x') - expect(bucket2).to.have.property('version', 'v2.0.x') + assert.equal(bucket1.version, 'v1.0.x') + assert.equal(bucket2.version, 'v2.0.x') }, after: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(2) + assert.equal(contentAggregate.length, 2) const [bucket1, bucket2] = contentAggregate - expect(bucket1).to.have.property('version', '1.0') - expect(bucket1.files).to.have.lengthOf(1) - expect(bucket1.files[0].path).to.equal('modules/ROOT/pages/v1.0.x-release.adoc') - expect(bucket2).to.have.property('version', '2.0') - expect(bucket2.files).to.have.lengthOf(1) - expect(bucket2.files[0].path).to.equal('modules/ROOT/pages/v2.0.x-release.adoc') + assert.equal(bucket1.version, '1.0') + assert.equal(bucket1.files.length, 1) + assert.equal(bucket1.files[0].path, 'modules/ROOT/pages/v1.0.x-release.adoc') + assert.equal(bucket2.version, '2.0') + assert.equal(bucket2.files.length, 1) + assert.equal(bucket2.files[0].path, 'modules/ROOT/pages/v2.0.x-release.adoc') }, }) }) @@ -1817,14 +1838,14 @@ describe('collector extension', () => { collectorConfig, branches: ['v1.0.x', 'v2.0.x'], after: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(2) + assert.equal(contentAggregate.length, 2) const [bucket1, bucket2] = contentAggregate - expect(bucket1.files).to.have.lengthOf(3) - expect(bucket1.files.filter((it) => it.path.endsWith('/Hello.java'))).to.have.lengthOf(2) - expect(bucket1.files.filter((it) => it.path.endsWith('/dirty-worktree.adoc'))).to.be.empty() - expect(bucket2.files).to.have.lengthOf(3) - expect(bucket2.files.filter((it) => it.path.endsWith('/Hello.java'))).to.have.lengthOf(2) - expect(bucket2.files.filter((it) => it.path.endsWith('/dirty-worktree.adoc'))).to.be.empty() + assert.equal(bucket1.files.length, 3) + assert.equal(bucket1.files.filter((it) => it.path.endsWith('/Hello.java')).length, 2) + assertx.empty(bucket1.files.filter((it) => it.path.endsWith('/dirty-worktree.adoc'))) + assert.equal(bucket2.files.length, 3) + assert.equal(bucket2.files.filter((it) => it.path.endsWith('/Hello.java')).length, 2) + assertx.empty(bucket2.files.filter((it) => it.path.endsWith('/dirty-worktree.adoc'))) }, }) }) @@ -1839,14 +1860,14 @@ describe('collector extension', () => { collectorConfig, branches: ['v1.0.x', 'v2.0.x'], after: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(2) + assert.equal(contentAggregate.length, 2) const [bucket1, bucket2] = contentAggregate - expect(bucket1).to.have.property('version', '1.0') - expect(bucket1.files).to.have.lengthOf(1) - expect(bucket1.files[0].path).to.equal('modules/ROOT/pages/v1.0.x-release.adoc') - expect(bucket2).to.have.property('version', '2.0') - expect(bucket2.files).to.have.lengthOf(1) - expect(bucket2.files[0].path).to.equal('modules/ROOT/pages/v2.0.x-release.adoc') + assert.equal(bucket1.version, '1.0') + assert.equal(bucket1.files.length, 1) + assert.equal(bucket1.files[0].path, 'modules/ROOT/pages/v1.0.x-release.adoc') + assert.equal(bucket2.version, '2.0') + assert.equal(bucket2.files.length, 1) + assert.equal(bucket2.files[0].path, 'modules/ROOT/pages/v2.0.x-release.adoc') }, }) }) @@ -1863,11 +1884,11 @@ describe('collector extension', () => { repoName: 'test-at-root', collectorConfig, after: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) + assert.equal(contentAggregate.length, 1) const bucket = contentAggregate[0] - expect(bucket.files).to.have.lengthOf(1) - expect(bucket.files[0].path).to.equal('modules/ROOT/pages/home.adoc') - expect(bucket.files[0].contents.toString()).to.equal('false') + assert.equal(bucket.files.length, 1) + assert.equal(bucket.files[0].path, 'modules/ROOT/pages/home.adoc') + assert.equal(bucket.files[0].contents.toString(), 'false') }, }) }) @@ -1889,11 +1910,11 @@ describe('collector extension', () => { repoName: 'test-at-root', collectorConfig, after: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) + assert.equal(contentAggregate.length, 1) const bucket = contentAggregate[0] - expect(bucket.files).to.have.lengthOf(1) - expect(bucket.files[0].path).to.equal('modules/ROOT/pages/home.adoc') - expect(bucket.files[0].contents.toString()).to.equal('false') + assert.equal(bucket.files.length, 1) + assert.equal(bucket.files[0].path, 'modules/ROOT/pages/home.adoc') + assert.equal(bucket.files[0].contents.toString(), 'false') }, }) }) @@ -1909,14 +1930,14 @@ describe('collector extension', () => { }, }) ) - expect(stdout).to.equal('start\nall done!\n') + assert.equal(stdout, 'start\nall done!\n') }) // TODO: perhaps direct these messages to the log? it('should always direct stderr output of command to stderr', async () => { const collectorConfig = { run: { command: '$NODE .gen-error-output.js' } } const stderr = await captureStderr(() => runScenario({ repoName: 'test-at-root', collectorConfig })) - expect(stderr).to.equal('there were some issues\n') + assert.equal(stderr, 'there were some issues\n') }) it('should escape quoted string inside quoted string in command', async () => { @@ -1930,13 +1951,13 @@ describe('collector extension', () => { }, }) ) - expect(stdout).to.equal('start\nall done!\n') + assert.equal(stdout, 'start\nall done!\n') }) it('should not send output from command to stdout by default if quiet is set', async () => { const collectorConfig = { run: { command: '$NODE .gen-output.js' } } const stdout = await captureStdout(() => runScenario({ repoName: 'test-at-root', collectorConfig })) - expect(stdout).to.be.empty() + assertx.empty(stdout) }) it('should throw error if command is not found', async () => { @@ -1944,10 +1965,10 @@ describe('collector extension', () => { const expectedMessage = '(@antora/collector-extension): Command not found: no-such-command in ' + `http://localhost:${gitServerPort}/test-at-root/.git (branch: main)` - expect(await trapAsyncError(() => runScenario({ repoName: 'test-at-root', collectorConfig }))).to.throw( - Error, - expectedMessage - ) + assert.throws(await trapAsyncError(() => runScenario({ repoName: 'test-at-root', collectorConfig })), { + name: Error.name, + message: expectedMessage, + }) }) it('should throw error if local command is not found', async () => { @@ -1955,10 +1976,10 @@ describe('collector extension', () => { const expectedMessage = `(@antora/collector-extension): Command not found: .${ospath.sep}no-such-command in ` + `http://localhost:${gitServerPort}/test-at-root/.git (branch: main)` - expect(await trapAsyncError(() => runScenario({ repoName: 'test-at-root', collectorConfig }))).to.throw( - Error, - expectedMessage - ) + assert.throws(await trapAsyncError(() => runScenario({ repoName: 'test-at-root', collectorConfig })), { + name: Error.name, + message: expectedMessage, + }) }) it('should throw error if command is not found for origin with start path', async () => { @@ -1966,9 +1987,13 @@ describe('collector extension', () => { const expectedMessage = '(@antora/collector-extension): Command not found: no-such-command in ' + `http://localhost:${gitServerPort}/test-at-start-path/.git (branch: main | start path: docs)` - expect( - await trapAsyncError(() => runScenario({ repoName: 'test-at-start-path', collectorConfig, startPath: 'docs' })) - ).to.throw(Error, expectedMessage) + assert.throws( + await trapAsyncError(() => runScenario({ repoName: 'test-at-start-path', collectorConfig, startPath: 'docs' })), + { + name: Error.name, + message: expectedMessage, + } + ) }) it('should throw error if command is not found when using local worktree', async () => { @@ -1976,61 +2001,79 @@ describe('collector extension', () => { const expectedMessage = '(@antora/collector-extension): Command not found: no-such-command in ' + `${ospath.join(REPOS_DIR, 'test-at-root')} (branch: main )` - expect( - await trapAsyncError(() => runScenario({ repoName: 'test-at-root', collectorConfig, local: true })) - ).to.throw(Error, expectedMessage) + assert.throws( + await trapAsyncError(() => runScenario({ repoName: 'test-at-root', collectorConfig, local: true })), + { + name: Error.name, + message: expectedMessage, + } + ) }) - // also verifies that node command is replaced with process.execPath + // also verifies that node base call is replaced with process.execPath it('should throw error if command fails to complete successfully', async () => { const collectorConfig = { run: { command: '$NODE .gen-failure.js' } } const expectedMessage = '(@antora/collector-extension): Command failed with exit code 1: ' + (windows ? '' : `${process.execPath} .gen-failure.js in `) - expect(await trapAsyncError(() => runScenario({ repoName: 'test-at-root', collectorConfig }))).to.throw( - Error, - expectedMessage - ) + assert.throws(await trapAsyncError(() => runScenario({ repoName: 'test-at-root', collectorConfig })), (err) => { + assert(err instanceof Error) + assert.equal(err.name, Error.name) + assert(err.message.startsWith(expectedMessage)) + return true + }) }) it('should ignore error if command fails when on_failure is ignore', async () => { const collectorConfig = { run: { command: 'no-such-command', on_failure: 'ignore' } } - expect(await trapAsyncError(() => runScenario({ repoName: 'test-at-root', collectorConfig }))).to.not.throw() + assert.doesNotThrow(await trapAsyncError(() => runScenario({ repoName: 'test-at-root', collectorConfig }))) }) it('should log error if command fails when on_failure is log', async () => { const collectorConfig = { run: { command: 'no-such-command', on_failure: 'log' } } const expectedMessage = `Command not found: no-such-command in http://localhost:${gitServerPort}/test-at-root/.git (branch: main)` - expect(await trapAsyncError(() => runScenario({ repoName: 'test-at-root', collectorConfig }))).to.not.throw() - expect(messages).to.have.lengthOf(1) + assert.doesNotThrow(await trapAsyncError(() => runScenario({ repoName: 'test-at-root', collectorConfig }))) + assert.equal(messages.length, 1) const message = messages[0] - expect(message).to.contain({ name: '@antora/collector-extension', level: 'error', msg: undefined }) + const expectedMessageObj = { + name: '@antora/collector-extension', + level: 'error', + msg: undefined, + } + assertx.deepEqualSlice(message, expectedMessageObj) const err = message.err - expect(err).to.be.instanceOf(Error) - expect(err.message).to.include(expectedMessage) + assert(err instanceof Error) + assert.equal(err.name, Error.name) + assert(err.message.includes(expectedMessage)) }) it('should log at specified level if command fails when on_failure is log.warn', async () => { const collectorConfig = { run: { command: 'no-such-command', on_failure: 'log.warn' } } const expectedMessage = `Command not found: no-such-command in http://localhost:${gitServerPort}/test-at-root/.git (branch: main)` - expect(await trapAsyncError(() => runScenario({ repoName: 'test-at-root', collectorConfig }))).to.not.throw() - expect(messages).to.have.lengthOf(1) + assert.doesNotThrow(await trapAsyncError(() => runScenario({ repoName: 'test-at-root', collectorConfig }))) + assert.equal(messages.length, 1) const message = messages[0] - expect(message).to.contain({ name: '@antora/collector-extension', level: 'warn', msg: undefined }) + const expectedMessageObj = { + name: '@antora/collector-extension', + level: 'warn', + msg: undefined, + } + assertx.deepEqualSlice(message, expectedMessageObj) const err = message.err - expect(err).to.be.instanceOf(Error) - expect(err.message).to.include(expectedMessage) + assert(err instanceof Error) + assert.equal(err.name, Error.name) + assert(err.message.includes(expectedMessage)) }) it('should not run collector if no origins are found on content aggregate', async () => { await runScenario({ repoName: 'test-at-root', before: (contentAggregate) => { - expect(contentAggregate).to.have.lengthOf(1) + assert.equal(contentAggregate.length, 1) delete contentAggregate[0].origins }, after: (contentAggregate) => { - expect(contentAggregate[0].files).to.be.empty() + assertx.empty(contentAggregate[0].files) }, }) }) @@ -2068,8 +2111,8 @@ describe('collector extension', () => { const generatorContext = createGeneratorContext() ext.register.call(generatorContext, { config: {} }) await generatorContext.contentAggregated({ playbook, contentAggregate }) - expect(contentAggregate).to.have.lengthOf(1) - expect(contentAggregate[0].files.map((it) => it.path)).to.have.members([ + assert.equal(contentAggregate.length, 1) + assert.deepEqual(contentAggregate[0].files.map((it) => it.path).sort(), [ 'modules/ROOT/pages/index.adoc', 'modules/more/pages/index.adoc', ]) diff --git a/packages/collector-extension/test/parse-command-test.js b/packages/collector-extension/test/parse-command-test.js index 62fa4e18d92e0252cab911f087fe17f3ea70b276..5a44fc382a868c4ffdcb0efbb0b2591906927f29 100644 --- a/packages/collector-extension/test/parse-command-test.js +++ b/packages/collector-extension/test/parse-command-test.js @@ -1,7 +1,7 @@ /* eslint-env mocha */ 'use strict' -const { expect } = require('@antora/collector-test-harness') +const { assert, describe, it } = require('@antora/collector-test-harness') const parseCommand = require('#parse-command') describe('parseCommand', () => { @@ -10,35 +10,35 @@ describe('parseCommand', () => { const command = 'ls' const expected = ['ls'] const actual = parseCommand(command) - expect(actual).to.eql(expected) + assert.deepEqual(actual, expected) }) it('should parse command with single argument', () => { const command = 'antora antora-playbook.yml' const expected = ['antora', 'antora-playbook.yml'] const actual = parseCommand(command) - expect(actual).to.eql(expected) + assert.deepEqual(actual, expected) }) it('should parse command with multiple arguments', () => { const command = 'npx antora antora-playbook.yml' const expected = ['npx', 'antora', 'antora-playbook.yml'] const actual = parseCommand(command) - expect(actual).to.eql(expected) + assert.deepEqual(actual, expected) }) it('should ignore extra spaces around arguments', () => { const command = 'npx antora antora-playbook.yml ' const expected = ['npx', 'antora', 'antora-playbook.yml'] const actual = parseCommand(command) - expect(actual).to.eql(expected) + assert.deepEqual(actual, expected) }) it('should parse command with multiple arguments', () => { const command = 'npx antora antora-playbook.yml' const expected = ['npx', 'antora', 'antora-playbook.yml'] const actual = parseCommand(command) - expect(actual).to.eql(expected) + assert.deepEqual(actual, expected) }) }) @@ -47,77 +47,77 @@ describe('parseCommand', () => { const command = 'echo "foo bar"' const expected = ['echo', 'foo bar'] const actual = parseCommand(command) - expect(actual).to.eql(expected) + assert.deepEqual(actual, expected) }) it('should preserve repeating spaces in double-quoted argument', () => { const command = 'echo "left right"' const expected = ['echo', 'left right'] const actual = parseCommand(command) - expect(actual).to.eql(expected) + assert.deepEqual(actual, expected) }) it('should parse command with single-quoted argument', () => { const command = "echo 'foo bar'" const expected = ['echo', 'foo bar'] const actual = parseCommand(command) - expect(actual).to.eql(expected) + assert.deepEqual(actual, expected) }) it('should preserve repeating spaces in single-quoted argument', () => { const command = "echo 'left right'" const expected = ['echo', 'left right'] const actual = parseCommand(command) - expect(actual).to.eql(expected) + assert.deepEqual(actual, expected) }) it('should parse command with double-quoted argument that contains single quote', () => { const command = 'echo "let\'s go!"' const expected = ['echo', "let's go!"] const actual = parseCommand(command) - expect(actual).to.eql(expected) + assert.deepEqual(actual, expected) }) it('should parse command with single-quoted argument that contains double quotes', () => { const command = 'echo \'"quoted"\'' const expected = ['echo', '"quoted"'] const actual = parseCommand(command) - expect(actual).to.eql(expected) + assert.deepEqual(actual, expected) }) it('should allow double-quoted string to include double quote by escaping it', () => { const command = 'echo "use \\" to quote"' const expected = ['echo', 'use " to quote'] const actual = parseCommand(command) - expect(actual).to.eql(expected) + assert.deepEqual(actual, expected) }) it('should allow single-quoted string to include single quote by escaping it', () => { const command = "echo 'use \\' to quote'" const expected = ['echo', "use ' to quote"] const actual = parseCommand(command) - expect(actual).to.eql(expected) + assert.deepEqual(actual, expected) }) it('should preserve empty value enclosed in double quotes', () => { const command = 'echo "" indented' const expected = ['echo', '', 'indented'] const actual = parseCommand(command) - expect(actual).to.eql(expected) + assert.deepEqual(actual, expected) }) it('should preserve empty value enclosed in single quotes', () => { const command = "echo '' indented" const expected = ['echo', '', 'indented'] const actual = parseCommand(command) - expect(actual).to.eql(expected) + assert.deepEqual(actual, expected) }) it('should ignore extra spaces between arguments when one of the arguments is quoted', () => { const command = 'npx antora "my playbook.yml" ' const expected = ['npx', 'antora', 'my playbook.yml'] const actual = parseCommand(command) - expect(actual).to.eql(expected) + assert.deepEqual(actual, expected) }) }) @@ -126,14 +126,14 @@ describe('parseCommand', () => { const command = 'antora --title "My Site" antora-playbook.yml' const expected = ['antora', '--title', '"My Site"', 'antora-playbook.yml'] const actual = parseCommand(command, { preserveQuotes: true }) - expect(actual).to.eql(expected) + assert.deepEqual(actual, expected) }) it('should preserve quotes around single-quoted argument', () => { const command = "antora --title 'My Site' antora-playbook.yml" const expected = ['antora', '--title', "'My Site'", 'antora-playbook.yml'] const actual = parseCommand(command, { preserveQuotes: true }) - expect(actual).to.eql(expected) + assert.deepEqual(actual, expected) }) }) }) diff --git a/packages/collector-test-harness/lib/config.js b/packages/collector-test-harness/lib/config.js deleted file mode 100644 index 9e1d2697d42314dccfd82fc71ebf95ec0764c56c..0000000000000000000000000000000000000000 --- a/packages/collector-test-harness/lib/config.js +++ /dev/null @@ -1,41 +0,0 @@ -'use strict' - -const config = { - checkLeaks: true, - globals: ['__coverage__'], // we know __coverage__ is global, so no need to check - mochaGlobalTeardown () { - if (!this.failures) logCoverageReportPath() - }, - require: __filename, - spec: resolveSpec(), - timeout: 10 * 60 * 1000, -} - -if (process.env.npm_config_watch) config.watch = true -if (process.env.CI) { - Object.assign(config, { - forbidOnly: true, - reporter: '@antora/collector-test-harness/mocha-ci-reporter', - 'reporter-option': ['output=reports/tests-xunit.xml'], - }) -} - -function logCoverageReportPath () { - if (!process.env.NYC_PROCESS_ID) return - const { CI_PROJECT_PATH, CI_JOB_ID } = process.env - const coverageReportRelpath = 'reports/lcov-report/index.html' - const coverageReportURL = CI_JOB_ID - ? `https://gitlab.com/${CI_PROJECT_PATH}/-/jobs/${CI_JOB_ID}/artifacts/file/${coverageReportRelpath}` - : require('node:url').pathToFileURL(coverageReportRelpath) - console.log(`Coverage report: ${coverageReportURL}`) -} - -function resolveSpec () { - const spec = process.argv[2] - if (spec && !spec.startsWith('-')) return spec - return process.env.npm_package_json === require('node:path').join(process.env.npm_config_local_prefix, 'package.json') - ? `packages/${process.env.npm_config_package || '*'}/test/**/*-test.js` - : 'test/**/*-test.js' -} - -module.exports = config diff --git a/packages/collector-test-harness/lib/coverage-config.js b/packages/collector-test-harness/lib/coverage-config.js new file mode 100644 index 0000000000000000000000000000000000000000..ddecb96da20876379a9849e872ee1211c49c711a --- /dev/null +++ b/packages/collector-test-harness/lib/coverage-config.js @@ -0,0 +1,21 @@ +'use strict' + +const fs = require('node:fs') +const url = require('node:url') + +fs.mkdirSync('reports', { recursive: true }) + +process.on('exit', () => { + if (process.exitCode) return + logCoverageReportPath() +}) + +function logCoverageReportPath () { + const coverageReportRelpath = 'reports/lcov-report/index.html' + if (!(process.env.NODE_V8_COVERAGE && fs.existsSync(coverageReportRelpath))) return + const { CI_PROJECT_PATH, CI_JOB_ID } = process.env + const coverageReportURL = CI_JOB_ID + ? `https://gitlab.com/${CI_PROJECT_PATH}/-/jobs/${CI_JOB_ID}/artifacts/file/${coverageReportRelpath}` + : url.pathToFileURL(coverageReportRelpath) + console.log(`Coverage report: ${coverageReportURL}`) +} diff --git a/packages/collector-test-harness/lib/index.js b/packages/collector-test-harness/lib/index.js index 455d5aca6dc99051573686c589cd66417802c26c..07f4b00c711dd8f472bdbbf42b1460316a209867 100644 --- a/packages/collector-test-harness/lib/index.js +++ b/packages/collector-test-harness/lib/index.js @@ -3,14 +3,11 @@ process.env.NODE_ENV = 'test' -const chai = require('chai') -chai.use(require('chai-fs')) -// dirty-chai must be loaded after the other plugins -// see https://github.com/prodatakey/dirty-chai#plugin-assertions -chai.use(require('dirty-chai')) -const expect = chai.expect +const assert = require('node:assert/strict') +const { describe, before, beforeEach, after, afterEach, it } = require('node:test') const { configureLogger } = require('@antora/logger') +const fs = require('node:fs') const fsp = require('node:fs/promises') const { Git: GitServer } = require('node-git-server') const { once } = require('node:events') @@ -18,16 +15,53 @@ const yaml = require('js-yaml') beforeEach(() => configureLogger({ level: 'silent' })) -async function captureStdStream (stream, fn) { - const streamWrite = stream.write - try { - const data = [] - stream.write = (buffer) => data.push(buffer) - await fn() - return data.join('') - } finally { - stream.write = streamWrite - } +const assertx = { + contents: (actual, expected, msg) => { + assertx.file(actual) + assert.equal(fs.readFileSync(actual, 'utf8'), expected, msg) + }, + deepEqualSlice: (actual, expected, msg) => + assert.deepEqual(sliceObject(actual, ...Object.keys(expected)), expected, msg), + directory: (actual) => { + let stat + try { + stat = fs.statSync(actual) + } catch { + stat = { isDirectory: () => false } + } + assert(stat.isDirectory(), `Expected value to be a directory: ${actual}`) + }, + empty: (actual) => assert.equal(actual.length, 0, 'Expected value to be empty'), + file: (actual) => { + let stat + try { + stat = fs.statSync(actual) + } catch { + stat = { isFile: () => false } + } + assert(stat.isFile(), `Expected value to be a file: ${actual}`) + }, +} + +// NOTE must use setImmediate to flush any queued operations that will write to stream +// see https://nodejs.org/api/test.html#extraneous-asynchronous-activity +function captureStdStream (stream, fn) { + return new Promise((resolve, reject) => { + // TODO could write this without async flag + setImmediate(async () => { + const streamWrite = stream.write + try { + const data = [] + stream.write = (buffer) => data.push(buffer) + await fn() + resolve(data.join('')) + } catch (err) { + reject(err) + } finally { + stream.write = streamWrite + } + }) + }) } const captureStderr = captureStdStream.bind(null, process.stderr) @@ -51,10 +85,10 @@ function heredoc (literals, ...values) { return (indentSize ? lines.map((l) => (l.startsWith(' ') ? l.slice(indentSize) : l)) : lines).join('') } -async function updateYamlFile (filepath, data) { - const parsed = yaml.load(await fsp.readFile(filepath), { schema: yaml.CORE_SCHEMA }) - Object.assign(parsed, data) - await fsp.writeFile(filepath, yaml.dump(parsed, { noArrayIndent: true }), 'utf8') +function sliceObject (obj, ...keys) { + const result = {} + for (const k of keys) result[k] = obj[k] + return result } function startGitServer (dir) { @@ -75,12 +109,25 @@ function trapAsyncError (fn) { ) } +async function updateYamlFile (filepath, data) { + const parsed = yaml.load(await fsp.readFile(filepath), { schema: yaml.CORE_SCHEMA }) + Object.assign(parsed, data) + await fsp.writeFile(filepath, yaml.dump(parsed, { noArrayIndent: true }), 'utf8') +} + module.exports = { + after, + afterEach, + assert, + assertx, + before, + beforeEach, captureStderr, captureStdout, closeServer, - expect, + describe, heredoc, + it, updateYamlFile, startGitServer, trapAsyncError, diff --git a/packages/collector-test-harness/lib/mocha-ci-reporter.js b/packages/collector-test-harness/lib/mocha-ci-reporter.js deleted file mode 100644 index c8bcf5825c13807ad27b38745c7abe3452f45560..0000000000000000000000000000000000000000 --- a/packages/collector-test-harness/lib/mocha-ci-reporter.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict' - -const { Base, Dot, XUnit } = require('mocha').reporters - -// A Mocha reporter that combines the dot and xunit reporters. -class CI extends Base { - constructor (runner, options) { - super(runner, options) - new Dot(runner, options) // eslint-disable-line no-new - new XUnit(runner, options) // eslint-disable-line no-new - } -} - -module.exports = CI diff --git a/packages/collector-test-harness/package.json b/packages/collector-test-harness/package.json index 86c3bb920143695252fb7e77add5505018b1f4a4..9c1c6a50b7e759eaf9ab6b5c433d6ea5b79336a1 100644 --- a/packages/collector-test-harness/package.json +++ b/packages/collector-test-harness/package.json @@ -3,17 +3,12 @@ "name": "@antora/collector-test-harness", "version": "1.0.0-beta.2", "exports": { - ".": "./lib/index.js", - "./config": "./lib/config.js", - "./mocha-ci-reporter": "./lib/mocha-ci-reporter.js" + ".": "./lib/index.js" }, "engines": { "node": ">=16.0.0" }, "devDependencies": { - "chai": "~4.3", - "chai-fs": "~2.0", - "dirty-chai": "~2.0", "node-git-server": "~1.0", "@antora/logger": "~3.1" }