diff --git a/NOTICE-3RD-PARTY-CONTENT.md b/NOTICE-3RD-PARTY-CONTENT.md index 182901a6..6b034dab 100644 --- a/NOTICE-3RD-PARTY-CONTENT.md +++ b/NOTICE-3RD-PARTY-CONTENT.md @@ -13,7 +13,6 @@ |@types/decompress|4.2.7|MIT| |@types/fs-extra|11.0.4|MIT| |@types/mocha|10.0.6|MIT| -|@types/mock-fs|4.13.4|MIT| |@types/node|18.19.22|MIT| |@typescript-eslint/eslint-plugin|7.1.1|MIT| |@typescript-eslint/parser|7.1.1|unknown| @@ -23,7 +22,6 @@ |eslint|8.57.0|ISC
MIT| |inquirer|8.2.6|MIT| |mocha|10.3.0|ISC
MIT| -|mock-fs|5.2.0|MIT| |node-pty|1.0.0|MIT| |nyc|15.1.0|ISC
MIT| |oclif|3.17.2|MIT| diff --git a/package-lock.json b/package-lock.json index 30ec6caf..24d32d28 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,7 +30,6 @@ "@types/decompress": "4.2.7", "@types/fs-extra": "11.0.4", "@types/mocha": "10.0.6", - "@types/mock-fs": "4.13.4", "@types/node": "18.19.22", "@typescript-eslint/eslint-plugin": "7.1.1", "@typescript-eslint/parser": "7.1.1", @@ -38,7 +37,6 @@ "chai": "4.4.1", "eslint": "8.57.0", "mocha": "10.3.0", - "mock-fs": "5.2.0", "nyc": "15.1.0", "oclif": "3.17.2", "pkg": "5.8.1", @@ -671,7 +669,8 @@ "node_modules/@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", @@ -732,6 +731,7 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -748,6 +748,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, "engines": { "node": ">=12" }, @@ -759,6 +760,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, "engines": { "node": ">=12" }, @@ -769,12 +771,14 @@ "node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -791,6 +795,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, "dependencies": { "ansi-regex": "^6.0.1" }, @@ -805,6 +810,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -820,7 +826,8 @@ "node_modules/@isaacs/string-locale-compare": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", - "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==" + "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", + "dev": true }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", @@ -1003,6 +1010,7 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-4.3.1.tgz", "integrity": "sha512-yMRgZVDpwWjplorzt9SFSaakWx6QIK248Nw4ZFgkrAy/GvJaFRaSZzE6nD7JBK5r8g/+PTxFq5Wj/sfciE7x+A==", + "dev": true, "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/installed-package-contents": "^1.0.7", @@ -1048,6 +1056,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, "bin": { "mkdirp": "bin/cmd.js" }, @@ -1059,6 +1068,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "dev": true, "dependencies": { "@gar/promisify": "^1.0.1", "semver": "^7.3.5" @@ -1068,6 +1078,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz", "integrity": "sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==", + "dev": true, "dependencies": { "@npmcli/promise-spawn": "^1.3.2", "lru-cache": "^6.0.0", @@ -1083,6 +1094,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -1094,6 +1106,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, "bin": { "mkdirp": "bin/cmd.js" }, @@ -1104,12 +1117,14 @@ "node_modules/@npmcli/git/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/@npmcli/installed-package-contents": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", + "dev": true, "dependencies": { "npm-bundled": "^1.1.1", "npm-normalize-package-bin": "^1.0.1" @@ -1125,6 +1140,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz", "integrity": "sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg==", + "dev": true, "dependencies": { "@npmcli/name-from-folder": "^1.0.1", "glob": "^8.0.1", @@ -1139,6 +1155,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1157,6 +1174,7 @@ "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -1168,6 +1186,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-2.0.0.tgz", "integrity": "sha512-VVW+JhWCKRwCTE+0xvD6p3uV4WpqocNYYtzyvenqL/u1Q3Xx6fGTJ+6UoIoii07fbuEO9U3IIyuGY0CYHDv1sg==", + "dev": true, "dependencies": { "cacache": "^15.0.5", "json-parse-even-better-errors": "^2.3.1", @@ -1183,6 +1202,7 @@ "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", "deprecated": "This functionality has been moved to @npmcli/fs", + "dev": true, "dependencies": { "mkdirp": "^1.0.4", "rimraf": "^3.0.2" @@ -1195,6 +1215,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, "bin": { "mkdirp": "bin/cmd.js" }, @@ -1205,17 +1226,20 @@ "node_modules/@npmcli/name-from-folder": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz", - "integrity": "sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==" + "integrity": "sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==", + "dev": true }, "node_modules/@npmcli/node-gyp": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz", - "integrity": "sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==" + "integrity": "sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==", + "dev": true }, "node_modules/@npmcli/package-json": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-1.0.1.tgz", "integrity": "sha512-y6jnu76E9C23osz8gEMBayZmaZ69vFOIk8vR1FJL/wbEJ54+9aVG9rLTjQKSXfgYZEr50nw1txBBFfBZZe+bYg==", + "dev": true, "dependencies": { "json-parse-even-better-errors": "^2.3.1" } @@ -1224,6 +1248,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", + "dev": true, "dependencies": { "infer-owner": "^1.0.4" } @@ -1232,6 +1257,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-2.0.0.tgz", "integrity": "sha512-fSan/Pu11xS/TdaTpTB0MRn9guwGU8dye+x56mEVgBEd/QsybBbYcAL0phPXi8SGWFEChkQd6M9qL4y6VOpFig==", + "dev": true, "dependencies": { "@npmcli/node-gyp": "^1.0.2", "@npmcli/promise-spawn": "^1.3.2", @@ -1489,6 +1515,7 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, "optional": true, "engines": { "node": ">=14" @@ -1498,6 +1525,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.1.0.tgz", "integrity": "sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog==", + "dev": true, "dependencies": { "@sigstore/protobuf-specs": "^0.2.0" }, @@ -1509,6 +1537,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz", "integrity": "sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A==", + "dev": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -1517,6 +1546,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-1.0.0.tgz", "integrity": "sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA==", + "dev": true, "dependencies": { "@sigstore/bundle": "^1.1.0", "@sigstore/protobuf-specs": "^0.2.0", @@ -1530,6 +1560,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "dev": true, "dependencies": { "semver": "^7.3.5" }, @@ -1541,6 +1572,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, "engines": { "node": ">= 10" } @@ -1549,6 +1581,7 @@ "version": "17.1.4", "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", + "dev": true, "dependencies": { "@npmcli/fs": "^3.1.0", "fs-minipass": "^3.0.0", @@ -1571,6 +1604,7 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, "engines": { "node": ">=16 || 14 >=14.17" } @@ -1579,6 +1613,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -1594,6 +1629,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, "dependencies": { "minipass": "^7.0.3" }, @@ -1605,6 +1641,7 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, "engines": { "node": ">=16 || 14 >=14.17" } @@ -1613,6 +1650,7 @@ "version": "10.3.10", "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.3.5", @@ -1634,6 +1672,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, "dependencies": { "@tootallnate/once": "2", "agent-base": "6", @@ -1647,6 +1686,7 @@ "version": "7.18.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, "engines": { "node": ">=12" } @@ -1655,6 +1695,7 @@ "version": "11.1.1", "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, "dependencies": { "agentkeepalive": "^4.2.1", "cacache": "^17.0.0", @@ -1680,6 +1721,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -1688,6 +1730,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", + "dev": true, "dependencies": { "minipass": "^7.0.3", "minipass-sized": "^1.0.3", @@ -1704,6 +1747,7 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, "engines": { "node": ">=16 || 14 >=14.17" } @@ -1712,6 +1756,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, "dependencies": { "aggregate-error": "^3.0.0" }, @@ -1726,6 +1771,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, "engines": { "node": ">=14" }, @@ -1737,6 +1783,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, "dependencies": { "agent-base": "^6.0.2", "debug": "^4.3.3", @@ -1750,6 +1797,7 @@ "version": "10.0.5", "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", + "dev": true, "dependencies": { "minipass": "^7.0.3" }, @@ -1761,6 +1809,7 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, "engines": { "node": ">=16 || 14 >=14.17" } @@ -1769,6 +1818,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, "dependencies": { "unique-slug": "^4.0.0" }, @@ -1780,6 +1830,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, "dependencies": { "imurmurhash": "^0.1.4" }, @@ -1791,6 +1842,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.3.tgz", "integrity": "sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg==", + "dev": true, "dependencies": { "@sigstore/protobuf-specs": "^0.2.0", "tuf-js": "^1.1.7" @@ -1871,6 +1923,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, "engines": { "node": ">= 6" } @@ -1899,6 +1952,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", + "dev": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -1907,6 +1961,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", + "dev": true, "dependencies": { "@tufjs/canonical-json": "1.0.0", "minimatch": "^9.0.0" @@ -2023,15 +2078,6 @@ "integrity": "sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==", "dev": true }, - "node_modules/@types/mock-fs": { - "version": "4.13.4", - "resolved": "https://registry.npmjs.org/@types/mock-fs/-/mock-fs-4.13.4.tgz", - "integrity": "sha512-mXmM0o6lULPI8z3XNnQCpL0BGxPwx1Ul1wXYEPBGl4efShyxW2Rln0JOPEWGyZaYZMM6OVXM/15zUuFMY52ljg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/node": { "version": "18.19.22", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.22.tgz", @@ -2294,7 +2340,8 @@ "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true }, "node_modules/abort-controller": { "version": "3.0.0", @@ -2340,6 +2387,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, "dependencies": { "debug": "4" }, @@ -2351,6 +2399,7 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "dev": true, "dependencies": { "humanize-ms": "^1.2.1" }, @@ -2362,6 +2411,7 @@ "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" @@ -2374,6 +2424,7 @@ "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" } @@ -2472,7 +2523,8 @@ "node_modules/aproba": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true }, "node_modules/archiver": { "version": "5.3.2", @@ -2546,12 +2598,14 @@ "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==" + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "dev": true }, "node_modules/are-we-there-yet": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "dev": true, "dependencies": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" @@ -2730,6 +2784,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-3.0.3.tgz", "integrity": "sha512-zKdnMPWEdh4F5INR07/eBrodC7QrF5JKvqskjz/ZZRXg5YSAZIbn8zGhbhUrElzHBZ2fvEQdOU59RHcTG3GiwA==", + "dev": true, "dependencies": { "cmd-shim": "^5.0.0", "mkdirp-infer-owner": "^2.0.0", @@ -2746,6 +2801,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", + "dev": true, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } @@ -2754,6 +2810,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" @@ -2923,6 +2980,7 @@ "version": "15.3.0", "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dev": true, "dependencies": { "@npmcli/fs": "^1.0.0", "@npmcli/move-file": "^1.0.1", @@ -2951,6 +3009,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, "engines": { "node": ">=10" } @@ -2959,6 +3018,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -2970,6 +3030,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, "bin": { "mkdirp": "bin/cmd.js" }, @@ -2981,6 +3042,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, "dependencies": { "aggregate-error": "^3.0.0" }, @@ -2994,7 +3056,8 @@ "node_modules/cacache/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/cacheable-lookup": { "version": "5.0.4", @@ -3410,6 +3473,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-5.0.0.tgz", "integrity": "sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==", + "dev": true, "dependencies": { "mkdirp-infer-owner": "^2.0.0" }, @@ -3437,6 +3501,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, "bin": { "color-support": "bin.js" } @@ -3458,7 +3523,8 @@ "node_modules/common-ancestor-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", - "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==" + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", + "dev": true }, "node_modules/commondir": { "version": "1.0.1", @@ -3557,7 +3623,8 @@ "node_modules/console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true }, "node_modules/content-type": { "version": "1.0.5", @@ -3676,6 +3743,7 @@ "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, "engines": { "node": "*" } @@ -3949,7 +4017,8 @@ "node_modules/delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true }, "node_modules/deprecation": { "version": "2.3.1", @@ -3970,6 +4039,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, "dependencies": { "asap": "^2.0.0", "wrappy": "1" @@ -4010,7 +4080,8 @@ "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true }, "node_modules/ejs": { "version": "3.1.9", @@ -4041,6 +4112,7 @@ "version": "0.1.13", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, "optional": true, "dependencies": { "iconv-lite": "^0.6.2" @@ -4050,6 +4122,7 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -4070,6 +4143,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, "engines": { "node": ">=6" } @@ -4077,7 +4151,8 @@ "node_modules/err-code": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true }, "node_modules/errno": { "version": "0.1.8", @@ -4857,6 +4932,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, "dependencies": { "minipass": "^3.0.0" }, @@ -4869,20 +4945,6 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, - "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", @@ -4895,6 +4957,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "dev": true, "dependencies": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.2", @@ -5228,7 +5291,8 @@ "node_modules/has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true }, "node_modules/hasha": { "version": "5.2.2", @@ -5291,6 +5355,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -5302,6 +5367,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -5312,7 +5378,8 @@ "node_modules/hosted-git-info/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/html-escaper": { "version": "2.0.2", @@ -5323,7 +5390,8 @@ "node_modules/http-cache-semantics": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true }, "node_modules/http-call": { "version": "5.3.0", @@ -5356,6 +5424,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, "dependencies": { "@tootallnate/once": "1", "agent-base": "6", @@ -5382,6 +5451,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, "dependencies": { "agent-base": "6", "debug": "4" @@ -5403,6 +5473,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, "dependencies": { "ms": "^2.0.0" } @@ -5443,6 +5514,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-4.0.1.tgz", "integrity": "sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw==", + "dev": true, "dependencies": { "minimatch": "^3.0.4" }, @@ -5454,6 +5526,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5463,6 +5536,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -5490,6 +5564,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, "engines": { "node": ">=0.8.19" } @@ -5505,7 +5580,8 @@ "node_modules/infer-owner": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true }, "node_modules/inflight": { "version": "1.0.6", @@ -5524,7 +5600,8 @@ "node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true }, "node_modules/inquirer": { "version": "8.2.6", @@ -5592,6 +5669,7 @@ "version": "9.0.5", "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dev": true, "dependencies": { "jsbn": "1.1.0", "sprintf-js": "^1.1.3" @@ -5603,7 +5681,8 @@ "node_modules/ip-address/node_modules/sprintf-js": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true }, "node_modules/is-arguments": { "version": "1.1.1", @@ -5728,7 +5807,8 @@ "node_modules/is-lambda": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true }, "node_modules/is-natural-number": { "version": "4.0.1", @@ -5816,7 +5896,8 @@ "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true }, "node_modules/is-unicode-supported": { "version": "0.1.0", @@ -6011,6 +6092,7 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -6091,7 +6173,8 @@ "node_modules/jsbn": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true }, "node_modules/jsesc": { "version": "2.5.2", @@ -6119,7 +6202,8 @@ "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true }, "node_modules/json-schema-traverse": { "version": "0.4.1", @@ -6137,6 +6221,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", + "dev": true, "funding": { "url": "https://github.com/sponsors/isaacs" } @@ -6172,6 +6257,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, "engines": [ "node >= 0.2.0" ] @@ -6187,12 +6273,14 @@ "node_modules/just-diff": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-5.2.0.tgz", - "integrity": "sha512-6ufhP9SHjb7jibNFrNxyFZ6od3g+An6Ai9mhGRvcYe8UJlH0prseN64M+6ZBBUoKYHZsitDP42gAJ8+eVWr3lw==" + "integrity": "sha512-6ufhP9SHjb7jibNFrNxyFZ6od3g+An6Ai9mhGRvcYe8UJlH0prseN64M+6ZBBUoKYHZsitDP42gAJ8+eVWr3lw==", + "dev": true }, "node_modules/just-diff-apply": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.5.0.tgz", - "integrity": "sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==" + "integrity": "sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==", + "dev": true }, "node_modules/just-extend": { "version": "6.2.0", @@ -6488,6 +6576,7 @@ "version": "9.1.0", "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dev": true, "dependencies": { "agentkeepalive": "^4.1.3", "cacache": "^15.2.0", @@ -6514,6 +6603,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -6524,7 +6614,8 @@ "node_modules/make-fetch-happen/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/maximatch": { "version": "0.1.0", @@ -6695,6 +6786,7 @@ "version": "9.0.3", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -6717,6 +6809,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -6728,6 +6821,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, "dependencies": { "minipass": "^3.0.0" }, @@ -6739,6 +6833,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "dev": true, "dependencies": { "minipass": "^3.1.0", "minipass-sized": "^1.0.3", @@ -6755,6 +6850,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, "dependencies": { "minipass": "^3.0.0" }, @@ -6766,6 +6862,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, "dependencies": { "jsonparse": "^1.3.1", "minipass": "^3.0.0" @@ -6775,6 +6872,7 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, "dependencies": { "minipass": "^3.0.0" }, @@ -6786,6 +6884,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, "dependencies": { "minipass": "^3.0.0" }, @@ -6796,12 +6895,14 @@ "node_modules/minipass/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/minizlib": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" @@ -6813,7 +6914,8 @@ "node_modules/minizlib/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/mkdirp": { "version": "0.5.6", @@ -6836,6 +6938,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", "integrity": "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==", + "dev": true, "dependencies": { "chownr": "^2.0.0", "infer-owner": "^1.0.4", @@ -6849,6 +6952,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, "engines": { "node": ">=10" } @@ -6857,6 +6961,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, "bin": { "mkdirp": "bin/cmd.js" }, @@ -6954,15 +7059,6 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, - "node_modules/mock-fs": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-5.2.0.tgz", - "integrity": "sha512-2dF2R6YMSZbpip1V1WHKGLNjr/k48uQClqMVb5H3MOvwc9qhYis3/IWbj02qIg/Y8MDXKFF4c5v0rxx2o6xTZw==", - "dev": true, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/mock-stdin": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/mock-stdin/-/mock-stdin-1.0.0.tgz", @@ -7091,6 +7187,7 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, "engines": { "node": ">= 0.6" } @@ -7167,6 +7264,7 @@ "version": "8.4.1", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "dev": true, "dependencies": { "env-paths": "^2.2.0", "glob": "^7.1.4", @@ -7190,6 +7288,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dev": true, "dependencies": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" @@ -7202,6 +7301,7 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dev": true, "dependencies": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.3", @@ -7220,6 +7320,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dev": true, "dependencies": { "are-we-there-yet": "^3.0.0", "console-control-strings": "^1.1.0", @@ -7261,6 +7362,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, "dependencies": { "abbrev": "1" }, @@ -7463,6 +7565,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "dev": true, "dependencies": { "npm-normalize-package-bin": "^1.0.1" } @@ -7471,6 +7574,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", + "dev": true, "dependencies": { "semver": "^7.1.1" }, @@ -7481,12 +7585,14 @@ "node_modules/npm-normalize-package-bin": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true }, "node_modules/npm-package-arg": { "version": "8.1.5", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", + "dev": true, "dependencies": { "hosted-git-info": "^4.0.1", "semver": "^7.3.4", @@ -7499,12 +7605,14 @@ "node_modules/npm-package-arg/node_modules/builtins": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==" + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", + "dev": true }, "node_modules/npm-package-arg/node_modules/validate-npm-package-name": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", + "dev": true, "dependencies": { "builtins": "^1.0.3" } @@ -7513,6 +7621,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-3.0.0.tgz", "integrity": "sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ==", + "dev": true, "dependencies": { "glob": "^7.1.6", "ignore-walk": "^4.0.1", @@ -7530,6 +7639,7 @@ "version": "6.1.1", "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", + "dev": true, "dependencies": { "npm-install-checks": "^4.0.0", "npm-normalize-package-bin": "^1.0.1", @@ -7541,6 +7651,7 @@ "version": "12.0.2", "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-12.0.2.tgz", "integrity": "sha512-Df5QT3RaJnXYuOwtXBXS9BWs+tHH2olvkCLh6jcR/b/u3DvPMlp3J0TvvYwplPKxHMOwfg287PYih9QqaVFoKA==", + "dev": true, "dependencies": { "make-fetch-happen": "^10.0.1", "minipass": "^3.1.6", @@ -7557,6 +7668,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "dev": true, "dependencies": { "@gar/promisify": "^1.1.3", "semver": "^7.3.5" @@ -7570,6 +7682,7 @@ "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", "deprecated": "This functionality has been moved to @npmcli/fs", + "dev": true, "dependencies": { "mkdirp": "^1.0.4", "rimraf": "^3.0.2" @@ -7582,6 +7695,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, "engines": { "node": ">= 10" } @@ -7590,6 +7704,7 @@ "version": "16.1.3", "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "dev": true, "dependencies": { "@npmcli/fs": "^2.1.0", "@npmcli/move-file": "^2.0.0", @@ -7618,6 +7733,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, "engines": { "node": ">=10" } @@ -7626,6 +7742,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -7644,6 +7761,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, "dependencies": { "@tootallnate/once": "2", "agent-base": "6", @@ -7657,6 +7775,7 @@ "version": "7.18.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, "engines": { "node": ">=12" } @@ -7665,6 +7784,7 @@ "version": "10.2.1", "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", + "dev": true, "dependencies": { "agentkeepalive": "^4.2.1", "cacache": "^16.1.0", @@ -7691,6 +7811,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", + "dev": true, "dependencies": { "minipass": "^3.1.6", "minipass-sized": "^1.0.3", @@ -7707,6 +7828,7 @@ "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -7718,6 +7840,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, "bin": { "mkdirp": "bin/cmd.js" }, @@ -7729,6 +7852,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, "dependencies": { "aggregate-error": "^3.0.0" }, @@ -7743,6 +7867,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, "dependencies": { "agent-base": "^6.0.2", "debug": "^4.3.3", @@ -7756,6 +7881,7 @@ "version": "9.0.1", "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, "dependencies": { "minipass": "^3.1.1" }, @@ -7767,6 +7893,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "dev": true, "dependencies": { "unique-slug": "^3.0.0" }, @@ -7778,6 +7905,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "dev": true, "dependencies": { "imurmurhash": "^0.1.4" }, @@ -10515,6 +10643,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "dev": true, "dependencies": { "are-we-there-yet": "^2.0.0", "console-control-strings": "^1.1.0", @@ -10899,6 +11028,7 @@ "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" }, @@ -10975,6 +11105,7 @@ "version": "12.0.3", "resolved": "https://registry.npmjs.org/pacote/-/pacote-12.0.3.tgz", "integrity": "sha512-CdYEl03JDrRO3x18uHjBYA9TyoW8gy+ThVcypcDkxPtKlw76e4ejhYB6i9lJ+/cebbjpqPW/CijjqxwDTts8Ow==", + "dev": true, "dependencies": { "@npmcli/git": "^2.1.0", "@npmcli/installed-package-contents": "^1.0.6", @@ -11007,6 +11138,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, "engines": { "node": ">=10" } @@ -11015,6 +11147,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, "bin": { "mkdirp": "bin/cmd.js" }, @@ -11038,6 +11171,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz", "integrity": "sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA==", + "dev": true, "dependencies": { "json-parse-even-better-errors": "^2.3.1", "just-diff": "^5.0.1", @@ -11102,6 +11236,7 @@ "version": "1.10.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dev": true, "dependencies": { "lru-cache": "^9.1.1 || ^10.0.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -11117,6 +11252,7 @@ "version": "10.2.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "dev": true, "engines": { "node": "14 || >=16.14" } @@ -11125,6 +11261,7 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, "engines": { "node": ">=16 || 14 >=14.17" } @@ -11550,7 +11687,8 @@ "node_modules/proc-log": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-1.0.0.tgz", - "integrity": "sha512-aCk8AO51s+4JyuYGg3Q/a6gnrlDO09NpVWePtjp7xwphcoQ04x5WAfCyugcsbLooWcMJ87CLkD4+604IckEdhg==" + "integrity": "sha512-aCk8AO51s+4JyuYGg3Q/a6gnrlDO09NpVWePtjp7xwphcoQ04x5WAfCyugcsbLooWcMJ87CLkD4+604IckEdhg==", + "dev": true }, "node_modules/process": { "version": "0.11.10", @@ -11599,6 +11737,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", + "dev": true, "funding": { "url": "https://github.com/sponsors/isaacs" } @@ -11607,6 +11746,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.2.tgz", "integrity": "sha512-1vTUnfI2hzui8AEIixbdAJlFY4LFDXqQswy/2eOlThAscXCY4It8FdVuI0fMJGAB2aWGbdQf/gv0skKYXmdrHA==", + "dev": true, "funding": { "url": "https://github.com/sponsors/isaacs" } @@ -11614,12 +11754,14 @@ "node_modules/promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true }, "node_modules/promise-retry": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" @@ -11632,6 +11774,7 @@ "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, "engines": { "node": ">= 4" } @@ -11747,6 +11890,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.1.tgz", "integrity": "sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g==", + "dev": true, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } @@ -11770,6 +11914,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", + "dev": true, "dependencies": { "json-parse-even-better-errors": "^2.3.0", "npm-normalize-package-bin": "^1.0.1" @@ -12077,6 +12222,7 @@ "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", "deprecated": "This functionality has been moved to @npmcli/fs", + "dev": true, "dependencies": { "debuglog": "^1.0.1", "dezalgo": "^1.0.0", @@ -12275,6 +12421,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -12416,7 +12563,8 @@ "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==" + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true }, "node_modules/set-function-length": { "version": "1.2.2", @@ -12504,6 +12652,7 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.9.0.tgz", "integrity": "sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A==", + "dev": true, "dependencies": { "@sigstore/bundle": "^1.1.0", "@sigstore/protobuf-specs": "^0.2.0", @@ -12522,6 +12671,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "dev": true, "dependencies": { "semver": "^7.3.5" }, @@ -12533,6 +12683,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, "engines": { "node": ">= 10" } @@ -12541,6 +12692,7 @@ "version": "17.1.4", "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", + "dev": true, "dependencies": { "@npmcli/fs": "^3.1.0", "fs-minipass": "^3.0.0", @@ -12563,6 +12715,7 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, "engines": { "node": ">=16 || 14 >=14.17" } @@ -12571,6 +12724,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -12586,6 +12740,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, "dependencies": { "minipass": "^7.0.3" }, @@ -12597,6 +12752,7 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, "engines": { "node": ">=16 || 14 >=14.17" } @@ -12605,6 +12761,7 @@ "version": "10.3.10", "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.3.5", @@ -12626,6 +12783,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, "dependencies": { "@tootallnate/once": "2", "agent-base": "6", @@ -12639,6 +12797,7 @@ "version": "7.18.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, "engines": { "node": ">=12" } @@ -12647,6 +12806,7 @@ "version": "11.1.1", "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, "dependencies": { "agentkeepalive": "^4.2.1", "cacache": "^17.0.0", @@ -12672,6 +12832,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -12680,6 +12841,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", + "dev": true, "dependencies": { "minipass": "^7.0.3", "minipass-sized": "^1.0.3", @@ -12696,6 +12858,7 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, "engines": { "node": ">=16 || 14 >=14.17" } @@ -12704,6 +12867,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, "dependencies": { "aggregate-error": "^3.0.0" }, @@ -12718,6 +12882,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, "engines": { "node": ">=14" }, @@ -12729,6 +12894,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, "dependencies": { "agent-base": "^6.0.2", "debug": "^4.3.3", @@ -12742,6 +12908,7 @@ "version": "10.0.5", "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", + "dev": true, "dependencies": { "minipass": "^7.0.3" }, @@ -12753,6 +12920,7 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, "engines": { "node": ">=16 || 14 >=14.17" } @@ -12761,6 +12929,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, "dependencies": { "unique-slug": "^4.0.0" }, @@ -12772,6 +12941,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, "dependencies": { "imurmurhash": "^0.1.4" }, @@ -12906,6 +13076,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" @@ -12915,6 +13086,7 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.1.tgz", "integrity": "sha512-B6w7tkwNid7ToxjZ08rQMT8M9BJAf8DKx8Ft4NivzH0zBUfd6jldGcisJn/RLgxcX3FPNDdNQCUEMMT79b+oCQ==", + "dev": true, "dependencies": { "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" @@ -12928,6 +13100,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "dev": true, "dependencies": { "agent-base": "^6.0.2", "debug": "^4.3.3", @@ -13049,6 +13222,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, "dependencies": { "minipass": "^3.1.1" }, @@ -13134,6 +13308,7 @@ "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", @@ -13159,6 +13334,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -13292,6 +13468,7 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", + "dev": true, "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -13336,6 +13513,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, "engines": { "node": ">=10" } @@ -13344,6 +13522,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -13352,6 +13531,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, "bin": { "mkdirp": "bin/cmd.js" }, @@ -13362,7 +13542,8 @@ "node_modules/tar/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/test-exclude": { "version": "6.0.0", @@ -13403,7 +13584,8 @@ "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true }, "node_modules/textextensions": { "version": "5.16.0", @@ -13476,7 +13658,8 @@ "node_modules/treeverse": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-1.0.4.tgz", - "integrity": "sha512-whw60l7r+8ZU8Tu/Uc2yxtc4ZTZbR/PF3u1IPNKGQ6p8EICLb3Z2lAgoqw9bqYd8IkgnsaOcLzYHFckjqNsf0g==" + "integrity": "sha512-whw60l7r+8ZU8Tu/Uc2yxtc4ZTZbR/PF3u1IPNKGQ6p8EICLb3Z2lAgoqw9bqYd8IkgnsaOcLzYHFckjqNsf0g==", + "dev": true }, "node_modules/ts-api-utils": { "version": "1.3.0", @@ -13549,6 +13732,7 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", + "dev": true, "dependencies": { "@tufjs/models": "1.0.4", "debug": "^4.3.4", @@ -13562,6 +13746,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "dev": true, "dependencies": { "semver": "^7.3.5" }, @@ -13573,6 +13758,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, "engines": { "node": ">= 10" } @@ -13581,6 +13767,7 @@ "version": "17.1.4", "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", + "dev": true, "dependencies": { "@npmcli/fs": "^3.1.0", "fs-minipass": "^3.0.0", @@ -13603,6 +13790,7 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, "engines": { "node": ">=16 || 14 >=14.17" } @@ -13611,6 +13799,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -13626,6 +13815,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, "dependencies": { "minipass": "^7.0.3" }, @@ -13637,6 +13827,7 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, "engines": { "node": ">=16 || 14 >=14.17" } @@ -13645,6 +13836,7 @@ "version": "10.3.10", "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.3.5", @@ -13666,6 +13858,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, "dependencies": { "@tootallnate/once": "2", "agent-base": "6", @@ -13679,6 +13872,7 @@ "version": "7.18.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, "engines": { "node": ">=12" } @@ -13687,6 +13881,7 @@ "version": "11.1.1", "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, "dependencies": { "agentkeepalive": "^4.2.1", "cacache": "^17.0.0", @@ -13712,6 +13907,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -13720,6 +13916,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", + "dev": true, "dependencies": { "minipass": "^7.0.3", "minipass-sized": "^1.0.3", @@ -13736,6 +13933,7 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, "engines": { "node": ">=16 || 14 >=14.17" } @@ -13744,6 +13942,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, "dependencies": { "aggregate-error": "^3.0.0" }, @@ -13758,6 +13957,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, "engines": { "node": ">=14" }, @@ -13769,6 +13969,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, "dependencies": { "agent-base": "^6.0.2", "debug": "^4.3.3", @@ -13782,6 +13983,7 @@ "version": "10.0.5", "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", + "dev": true, "dependencies": { "minipass": "^7.0.3" }, @@ -13793,6 +13995,7 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, "engines": { "node": ">=16 || 14 >=14.17" } @@ -13801,6 +14004,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, "dependencies": { "unique-slug": "^4.0.0" }, @@ -13812,6 +14016,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, "dependencies": { "imurmurhash": "^0.1.4" }, @@ -13866,6 +14071,7 @@ "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" } @@ -13923,6 +14129,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, "dependencies": { "unique-slug": "^2.0.0" } @@ -13931,6 +14138,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, "dependencies": { "imurmurhash": "^0.1.4" } @@ -14112,7 +14320,8 @@ "node_modules/walk-up-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz", - "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==" + "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==", + "dev": true }, "node_modules/wcwidth": { "version": "1.0.1", @@ -14194,6 +14403,7 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, "dependencies": { "string-width": "^1.0.2 || 2 || 3 || 4" } @@ -14241,6 +14451,7 @@ "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", @@ -14262,6 +14473,7 @@ "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", diff --git a/package.json b/package.json index 631090ed..48ae5383 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,6 @@ "@types/decompress": "4.2.7", "@types/fs-extra": "11.0.4", "@types/mocha": "10.0.6", - "@types/mock-fs": "4.13.4", "@types/node": "18.19.22", "@typescript-eslint/eslint-plugin": "7.1.1", "@typescript-eslint/parser": "7.1.1", @@ -43,7 +42,6 @@ "chai": "4.4.1", "eslint": "8.57.0", "mocha": "10.3.0", - "mock-fs": "5.2.0", "nyc": "15.1.0", "oclif": "3.17.2", "pkg": "5.8.1", diff --git a/src/commands/create/index.ts b/src/commands/create/index.ts index ceb9f81d..79192ab8 100644 --- a/src/commands/create/index.ts +++ b/src/commands/create/index.ts @@ -14,25 +14,15 @@ import { Command, Flags } from '@oclif/core'; import { ProjectConfig } from '../../modules/project-config'; -import { packageDownloader } from '../../modules/package-downloader'; // eslint-disable-next-line @typescript-eslint/naming-convention import Exec from '../exec'; // eslint-disable-next-line @typescript-eslint/naming-convention import Init from '../init'; // eslint-disable-next-line @typescript-eslint/naming-convention import Sync from '../sync'; -import { - PackageIndex, - CoreComponent, - ExtensionComponent, - CoreOptions, - DescribedId, - Parameter, - PackageAttributes, -} from '../../modules/package-index'; +import { PackageIndex, CoreComponent, ExtensionComponent, CoreOptions, DescribedId, Parameter } from '../../modules/package-index'; import { AppManifest, AppManifestInterfaceAttributes } from '../../modules/app-manifest'; import { InteractiveMode } from '../../modules/create-interactive'; -import { PackageConfig } from '../../modules/package'; // inquirer >= v9 is an ESM package. // We are not using ESM in our CLI, diff --git a/src/modules/app-manifest.ts b/src/modules/app-manifest.ts index 79b3b9eb..8b583970 100644 --- a/src/modules/app-manifest.ts +++ b/src/modules/app-manifest.ts @@ -12,11 +12,9 @@ // // SPDX-License-Identifier: Apache-2.0 -import { existsSync, readFileSync } from 'fs'; import { resolve } from 'path'; import { cwd } from 'process'; -import { DEFAULT_BUFFER_ENCODING } from './constants'; -import { outputFileSync } from 'fs-extra'; +import { CliFileSystem } from '../utils/fs-bridge'; export const DEFAULT_APP_MANIFEST_PATH = './app/AppManifest.json'; export const APP_MANIFEST_PATH_VARIABLE = 'appManifestPath'; @@ -95,12 +93,12 @@ export class AppManifest implements AppManifestAttributes { * @throws {Error} Throws an error if there is an issue reading the AppManifest file. */ static read(appManifestPath: string = APP_MANIFEST_PATH): AppManifest | undefined { - if (!existsSync(appManifestPath)) { + if (!CliFileSystem.existsSync(appManifestPath)) { console.info('*** Info ***: No AppManifest found'); return undefined; } try { - const file = readFileSync(appManifestPath, DEFAULT_BUFFER_ENCODING); + const file = CliFileSystem.readFileSync(appManifestPath); const manifest = JSON.parse(file); if (Array.isArray(manifest)) { // for backwards compatibility, use the first entry from the array @@ -114,6 +112,6 @@ export class AppManifest implements AppManifestAttributes { } write() { - outputFileSync(DEFAULT_APP_MANIFEST_PATH, JSON.stringify(this, null, 4)); + CliFileSystem.outputFileSync(DEFAULT_APP_MANIFEST_PATH, JSON.stringify(this, null, 4)); } } diff --git a/src/modules/package-downloader.ts b/src/modules/package-downloader.ts index ed09ee82..2e9f6170 100644 --- a/src/modules/package-downloader.ts +++ b/src/modules/package-downloader.ts @@ -12,11 +12,11 @@ // // SPDX-License-Identifier: Apache-2.0 -import { existsSync } from 'fs-extra'; import { posix as pathPosix } from 'path'; import { CheckRepoActions, SimpleGit, simpleGit } from 'simple-git'; import { PackageConfig } from './package'; import { getLatestVersion } from './semver'; +import { CliFileSystem } from '../utils/fs-bridge'; export class PackageDownloader { packageConfig: PackageConfig; @@ -62,7 +62,7 @@ export class PackageDownloader { checkRepoAction = CheckRepoActions.IS_REPO_ROOT; } - if (!existsSync(packageDir)) { + if (!CliFileSystem.existsSync(packageDir)) { await this.cloneRepository(packageDir, cloneOpts); } diff --git a/src/modules/package-index.ts b/src/modules/package-index.ts index b6190b33..68471438 100644 --- a/src/modules/package-index.ts +++ b/src/modules/package-index.ts @@ -12,8 +12,7 @@ // // SPDX-License-Identifier: Apache-2.0 -import { readFileSync } from 'fs-extra'; -import { DEFAULT_BUFFER_ENCODING } from './constants'; +import { CliFileSystem } from '../utils/fs-bridge'; /** * Additional argument for exposed interface @@ -148,7 +147,7 @@ export class PackageIndex { */ static read(path: string = './package-index.json'): PackageIndex { try { - const packageIndexFile = readFileSync(path, DEFAULT_BUFFER_ENCODING); + const packageIndexFile = CliFileSystem.readFileSync(path); const packageIndex: PackageAttributes[] = JSON.parse(packageIndexFile); return new PackageIndex(packageIndex); } catch (error) { diff --git a/src/modules/package.ts b/src/modules/package.ts index dd372e8b..86729967 100644 --- a/src/modules/package.ts +++ b/src/modules/package.ts @@ -12,12 +12,11 @@ // // SPDX-License-Identifier: Apache-2.0 -import { existsSync, readFileSync } from 'fs-extra'; import { homedir } from 'os'; import { join } from 'path'; import { ComponentManifest } from './component'; -import { DEFAULT_BUFFER_ENCODING } from './constants'; import { packageDownloader } from './package-downloader'; +import { CliFileSystem } from '../utils/fs-bridge'; export const MANIFEST_FILE_NAME = 'manifest.json'; @@ -116,7 +115,7 @@ export class PackageConfig { } isPackageInstalled(): boolean { - if (!existsSync(this.getPackageDirectoryWithVersion())) { + if (!CliFileSystem.existsSync(this.getPackageDirectoryWithVersion())) { return false; } return true; @@ -125,7 +124,7 @@ export class PackageConfig { readPackageManifest(): PackageManifest { try { const path = this.getManifestFilePath(); - const config: PackageManifest = deserializePackageJSON(readFileSync(path, DEFAULT_BUFFER_ENCODING)); + const config: PackageManifest = deserializePackageJSON(CliFileSystem.readFileSync(path)); return config; } catch (error) { console.log(`Cannot find package ${this.getPackageName()}:${this.version}. Please upgrade or init first!`); diff --git a/src/modules/project-cache.ts b/src/modules/project-cache.ts index eed254f5..73edcab0 100644 --- a/src/modules/project-cache.ts +++ b/src/modules/project-cache.ts @@ -13,11 +13,11 @@ // SPDX-License-Identifier: Apache-2.0 import { createHash } from 'node:crypto'; -import { existsSync, mkdirSync, PathLike, readFileSync, writeFileSync } from 'node:fs'; +import { PathLike } from 'node:fs'; import { join, parse } from 'node:path'; -import { DEFAULT_BUFFER_ENCODING } from './constants'; import { mapReplacer } from './helpers'; import { getVelocitasRoot } from './package'; +import { CliFileSystem } from '../utils/fs-bridge'; const FILE_NAME = 'cache.json'; @@ -47,7 +47,7 @@ export class ProjectCache { static read(path: string = join(ProjectCache.getCacheDir(), FILE_NAME)): ProjectCache { const cache = new ProjectCache(); try { - const data: any = JSON.parse(readFileSync(path, DEFAULT_BUFFER_ENCODING)); + const data: any = JSON.parse(CliFileSystem.readFileSync(path)); cache._data = new Map(Object.entries(data)); } catch (e: any) { if (e.code !== 'ENOENT') { @@ -64,9 +64,9 @@ export class ProjectCache { write(path: string = join(ProjectCache.getCacheDir(), FILE_NAME)) { const parsedPath = parse(path); - if (!existsSync(parsedPath.base)) { - mkdirSync(parsedPath.dir, { recursive: true }); + if (!CliFileSystem.existsSync(parsedPath.base)) { + CliFileSystem.mkdirSync(parsedPath.dir); } - writeFileSync(path, JSON.stringify(this._data, mapReplacer)); + CliFileSystem.writeFileSync(path, JSON.stringify(this._data, mapReplacer)); } } diff --git a/src/modules/project-config.ts b/src/modules/project-config.ts index 5ade6073..9b561e24 100644 --- a/src/modules/project-config.ts +++ b/src/modules/project-config.ts @@ -12,10 +12,9 @@ // // SPDX-License-Identifier: Apache-2.0 -import { existsSync, PathLike, readFileSync, writeFileSync } from 'fs'; +import { PathLike } from 'node:fs'; import { resolve } from 'path'; import { cwd } from 'process'; -import { DEFAULT_BUFFER_ENCODING } from './constants'; import { mapReplacer } from './helpers'; import { PackageConfig } from './package'; import { getLatestVersion } from './semver'; @@ -23,6 +22,7 @@ import { PackageIndex } from './package-index'; import { DEFAULT_APP_MANIFEST_PATH } from './app-manifest'; import { ComponentConfig, ComponentContext } from './component'; import { VariableCollection } from './variables'; +import { CliFileSystem } from '../utils/fs-bridge'; export const DEFAULT_CONFIG_FILE_NAME = '.velocitas.json'; export const DEFAULT_CONFIG_FILE_PATH = resolve(cwd(), DEFAULT_CONFIG_FILE_NAME); @@ -66,9 +66,8 @@ export class ProjectConfig { static read(cliVersion: string, path: PathLike = DEFAULT_CONFIG_FILE_PATH): ProjectConfig { let config: ProjectConfig; - try { - config = new ProjectConfig(cliVersion, JSON.parse(readFileSync(path, DEFAULT_BUFFER_ENCODING))); + config = new ProjectConfig(cliVersion, JSON.parse(CliFileSystem.readFileSync(path as string))); } catch (error) { throw new Error(`Error in parsing ${DEFAULT_CONFIG_FILE_NAME}: ${(error as Error).message}`); } @@ -94,7 +93,7 @@ export class ProjectConfig { return config; } - static isAvailable = (path: PathLike = DEFAULT_CONFIG_FILE_PATH) => existsSync(path); + static isAvailable = (path: PathLike = DEFAULT_CONFIG_FILE_PATH) => CliFileSystem.existsSync(path); static async create(usedComponents: Set, packageIndex: PackageIndex, cliVersion: string) { const projectConfig = new ProjectConfig(`v${cliVersion}`); @@ -140,7 +139,7 @@ export class ProjectConfig { cliVersion: this.cliVersion, }; const configString = `${JSON.stringify(projectConfigOptions, mapReplacer, 4)}\n`; - writeFileSync(path, configString, DEFAULT_BUFFER_ENCODING); + CliFileSystem.writeFileSync(path, configString); } /** diff --git a/src/modules/setup.ts b/src/modules/setup.ts index 804b8ac5..908da282 100644 --- a/src/modules/setup.ts +++ b/src/modules/setup.ts @@ -12,7 +12,7 @@ // // SPDX-License-Identifier: Apache-2.0 -import { existsSync, Stats } from 'fs'; +import { Stats } from 'node:fs'; import { Transform } from 'node:stream'; import path, { join } from 'path'; import { cwd } from 'process'; @@ -21,6 +21,7 @@ import { TransformCallback, TransformOptions } from 'stream'; import { PackageConfig } from './package'; import { VariableCollection } from './variables'; import { ComponentManifest } from './component'; +import { CliFileSystem } from '../utils/fs-bridge'; const SUPPORTED_TEXT_FILES_ARRAY = ['.md', '.yaml', '.yml', '.txt', '.json', '.sh', '.html', '.htm', '.xml', '.tpl']; @@ -91,7 +92,7 @@ export function installComponent(packageConfig: PackageConfig, component: Compon const sourceFileOrDir = join(packageConfig.getPackageDirectory(), packageConfig.version, src); const destFileOrDir = join(cwd(), dst); try { - if (existsSync(sourceFileOrDir)) { + if (CliFileSystem.existsSync(sourceFileOrDir)) { copy(sourceFileOrDir, destFileOrDir, { dot: true, overwrite: true, diff --git a/src/modules/variables.ts b/src/modules/variables.ts index c4d9e6bd..e4f860d5 100644 --- a/src/modules/variables.ts +++ b/src/modules/variables.ts @@ -12,11 +12,11 @@ // // SPDX-License-Identifier: Apache-2.0 -import { realpathSync } from 'node:fs'; import { cwd } from 'node:process'; import { ComponentContext } from './component'; import { mapReplacer } from './helpers'; import { ProjectCache } from './project-cache'; +import { CliFileSystem } from '../utils/fs-bridge'; export enum ScopeIdentifier { package = 'package', @@ -263,7 +263,7 @@ export function createEnvVars(packagePath: string, variables: VariableCollection const envVars = Object.assign({}, process.env, { VELOCITAS_WORKSPACE_DIR: cwd(), VELOCITAS_CACHE_DATA: JSON.stringify(projectCache.raw(), mapReplacer), - VELOCITAS_CACHE_DIR: ProjectCache.getCacheDir(realpathSync(process.cwd())), + VELOCITAS_CACHE_DIR: ProjectCache.getCacheDir(CliFileSystem.realpathSync(process.cwd())), VELOCITAS_PACKAGE_DIR: packagePath, }); diff --git a/src/utils/fs-bridge.ts b/src/utils/fs-bridge.ts new file mode 100644 index 00000000..9cfdeec2 --- /dev/null +++ b/src/utils/fs-bridge.ts @@ -0,0 +1,253 @@ +// Copyright (c) 2024 Contributors to the Eclipse Foundation +// +// This program and the accompanying materials are made available under the +// terms of the Apache License, Version 2.0 which is available at +// https://www.apache.org/licenses/LICENSE-2.0. +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. +// +// SPDX-License-Identifier: Apache-2.0 + +import * as fs from 'node:fs'; +import * as fse from 'fs-extra'; +import { DEFAULT_BUFFER_ENCODING } from '../modules/constants'; +import { join } from 'path'; +import { cwd } from 'node:process'; + +/** + * Interface representing needed file system methods. + */ +interface IFileSystem { + /** + * Synchronously reads the entire contents of a file. + * @param path A path to a file or a file descriptor. + * @returns The contents of the file. + */ + readFileSync(path: fs.PathOrFileDescriptor): string; + + /** + * Tests whether or not the given path exists by checking with the file system. + * @param path A path to a file or directory. + * @returns `true` if the path exists, `false` otherwise. + */ + existsSync(path: fs.PathLike): boolean; + + /** + * Synchronously creates a directory. + * @param path A path to the directory to create. + * @returns `undefined` if the directory was created successfully, otherwise an error. + */ + mkdirSync(path: fs.PathLike): string | undefined; + + /** + * Synchronously writes data to a file, replacing the file if it already exists. + * @param path A path to the file to write to. + * @param data The data to write to the file. + */ + writeFileSync(path: fs.PathOrFileDescriptor, data: string | NodeJS.ArrayBufferView): void; + + /** + * Synchronously writes data to a file, creating any directories in the path if they don't exist. + * @param file A path to the file to write to. + * @param data The data to write to the file. + */ + outputFileSync(file: string, data: string | NodeJS.ArrayBufferView): void; + + /** + * Returns the canonicalized absolute pathname of the specified path. + * @param path A path to a file or directory. + * @returns The absolute path. + */ + realpathSync(path: fs.PathLike): string; +} + +/** + * Interface representing needed file system methods exclusively for tests. + */ +interface IFileSystemTests { + /** + * Asynchronously creates a directory. + * @param path A path to the directory to create. + * @returns `undefined` if the directory was created successfully, otherwise an error. + */ + promisesMkdir(path: string): Promise; + + /** + * Asynchronously writes data to a file, replacing the file if it already exists. + * @param path A path to the file to write to. + * @param data The data to write to the file. + */ + promisesWriteFile(path: string, data: any): Promise; +} + +/** + * Represents an implementation for the real file system. + */ +class RealFileSystem implements IFileSystem { + readFileSync(path: fs.PathOrFileDescriptor): string { + return fs.readFileSync(path, DEFAULT_BUFFER_ENCODING); + } + + existsSync(path: fs.PathLike): boolean { + return fs.existsSync(path); + } + + mkdirSync(path: fs.PathLike): string | undefined { + return fs.mkdirSync(path, { recursive: true }); + } + + writeFileSync(path: fs.PathOrFileDescriptor, data: string | NodeJS.ArrayBufferView): void { + fs.writeFileSync(path, data, { encoding: DEFAULT_BUFFER_ENCODING }); + } + + outputFileSync(file: string, data: string | NodeJS.ArrayBufferView): void { + fse.outputFileSync(file, data); + } + + realpathSync(path: fs.PathLike): string { + return fs.realpathSync(path); + } +} + +export type MockFileSystemObj = Record; + +/** + * Represents an implementation for a mocked file system. + */ +export class MockFileSystem implements IFileSystem, IFileSystemTests { + private _fileSystemObj: MockFileSystemObj; + + constructor(fileSystemObj: MockFileSystemObj) { + this._fileSystemObj = fileSystemObj; + } + + readFileSync(path: fs.PathOrFileDescriptor): string { + const filePath = path.toString().startsWith('./') ? join(cwd(), path.toString()) : path.toString(); + return this._fileSystemObj[filePath]; + } + + existsSync(path: fs.PathLike): boolean { + return Object.keys(this._fileSystemObj).some((key) => key.match(path.toString())); + } + + mkdirSync(path: fs.PathLike): string | undefined { + return (this._fileSystemObj[path.toString()] = ''); + } + + writeFileSync(path: fs.PathOrFileDescriptor, data: any): void { + this._fileSystemObj[path.toString()] = data; + } + + outputFileSync(path: string, data: any): void { + this._fileSystemObj[path.startsWith('./') ? join(cwd(), path) : path] = data; + } + + realpathSync(path: fs.PathLike): string { + return path.toString(); + } + + async promisesMkdir(path: string): Promise { + this._fileSystemObj[path] = ''; + } + + async promisesWriteFile(path: string, data: any): Promise { + return (this._fileSystemObj[path] = data); + } +} + +/** + * Class providing file system operations for usage within the CLI. + */ +export class CliFileSystem { + private static _impl: IFileSystem = new RealFileSystem(); + + static setImpl(impl: IFileSystem) { + this._impl = impl; + } + + private constructor() {} + + /** + * Synchronously reads the entire contents of a file. + * @param path A path to a file or a file descriptor. + * @returns The contents of the file. + */ + static readFileSync(path: fs.PathOrFileDescriptor): string { + return this._impl.readFileSync(path); + } + + /** + * Tests whether or not the given path exists by checking with the file system. + * @param path A path to a file or directory. + * @returns `true` if the path exists, `false` otherwise. + */ + static existsSync(path: fs.PathLike): boolean { + return this._impl.existsSync(path); + } + + /** + * Synchronously creates a directory. + * @param path A path to the directory to create. + * @returns `undefined` if the directory was created successfully, otherwise an error. + */ + static mkdirSync(path: fs.PathLike): string | undefined { + return this._impl.mkdirSync(path); + } + + /** + * Synchronously writes data to a file, replacing the file if it already exists. + * @param path A path to the file to write to. + * @param data The data to write to the file. + */ + static writeFileSync(path: fs.PathOrFileDescriptor, data: string | NodeJS.ArrayBufferView): void { + this._impl.writeFileSync(path, data); + } + + /** + * Synchronously writes data to a file, creating any directories in the path if they don't exist. + * @param file A path to the file to write to. + * @param data The data to write to the file. + */ + static outputFileSync(file: string, data: string | NodeJS.ArrayBufferView): void { + this._impl.outputFileSync(file, data); + } + + /** + * Returns the canonicalized absolute pathname of the specified path. + * @param path A path to a file or directory. + * @returns The absolute path. + */ + static realpathSync(path: fs.PathLike): string { + return this._impl.realpathSync(path); + } + + /** + * Asynchronously creates a directory. + * @param path A path to the directory to create. + * @returns `undefined` if the directory was created successfully, otherwise an error. + */ + static async promisesMkdir(path: string): Promise { + if ('promisesMkdir' in this._impl) { + return (this._impl as unknown as IFileSystemTests).promisesMkdir(path); + } else { + throw new Error('Method not implemented in the provided implementation.'); + } + } + + /** + * Asynchronously writes data to a file, replacing the file if it already exists. + * @param path A path to the file to write to. + * @param data The data to write to the file. + */ + static async promisesWriteFile(path: string, data: any): Promise { + if ('promisesWriteFile' in this._impl) { + return (this._impl as unknown as IFileSystemTests).promisesWriteFile(path, data); + } else { + throw new Error('Method not implemented in the provided implementation.'); + } + } +} diff --git a/test/commands/cache/cache.test.ts b/test/commands/cache/cache.test.ts index 8e7c4426..90a8d810 100644 --- a/test/commands/cache/cache.test.ts +++ b/test/commands/cache/cache.test.ts @@ -14,15 +14,12 @@ import { expect, test } from '@oclif/test'; import { getCacheData } from '../../helpers/cache'; -import { mockFolders, mockRestore } from '../../utils/mockfs'; +import { mockFolders } from '../../utils/mockfs'; describe('cache', () => { test.do(() => { - mockFolders({ velocitasConfig: true, mockCache: true }); + mockFolders({ velocitasConfig: true }); }) - .finally(() => { - mockRestore(); - }) .stdout() .command('cache get') .it('returns the entire cache content', (ctx) => { @@ -30,11 +27,8 @@ describe('cache', () => { }); test.do(() => { - mockFolders({ velocitasConfig: true, mockCache: true }); + mockFolders({ velocitasConfig: true }); }) - .finally(() => { - mockRestore(); - }) .stdout() .command(['cache get', 'myField']) .it('returns the value of a single cache key', (ctx) => { @@ -42,11 +36,8 @@ describe('cache', () => { }); test.do(() => { - mockFolders({ velocitasConfig: true, mockCache: true }); + mockFolders({ velocitasConfig: true }); }) - .finally(() => { - mockRestore(); - }) .stdout() .command(['cache set', 'foo', 'bar']) .it('sets a cache field', (ctx) => { @@ -54,11 +45,8 @@ describe('cache', () => { }); test.do(() => { - mockFolders({ velocitasConfig: true, mockCache: true }); + mockFolders({ velocitasConfig: true }); }) - .finally(() => { - mockRestore(); - }) .stdout() .command('cache clear') .it('clears all cache contents', (ctx) => { diff --git a/test/commands/create/create.test.ts b/test/commands/create/create.test.ts index 498ec5ab..23c9511d 100644 --- a/test/commands/create/create.test.ts +++ b/test/commands/create/create.test.ts @@ -14,7 +14,7 @@ import { expect, test } from '@oclif/test'; import { packageIndexMock, velocitasConfigMock } from '../../utils/mockConfig'; -import { mockFolders, mockRestore } from '../../utils/mockfs'; +import { mockFolders } from '../../utils/mockfs'; import * as gitModule from 'simple-git'; import * as exec from '../../../src/modules/exec'; import sinon from 'sinon'; @@ -22,6 +22,7 @@ import { simpleGitInstanceMock } from '../../helpers/simpleGit'; import { ProjectConfig } from '../../../src/modules/project-config'; import { AppManifest } from '../../../src/modules/app-manifest'; import { CoreComponent, ExtensionComponent } from '../../../src/modules/package-index'; + const inquirer = require('inquirer'); const TEST_APP_NAME = 'TestApp'; @@ -73,9 +74,6 @@ describe('create', () => { test.do(() => { mockFolders({ packageIndex: true, installedComponents: true }); }) - .finally(() => { - mockRestore(); - }) .stdout() .stub(gitModule, 'simpleGit', sinon.stub().returns(simpleGitInstanceMock())) .stub(exec, 'runExecSpec', () => {}) @@ -102,9 +100,6 @@ describe('create', () => { test.do(() => { mockFolders({ packageIndex: true }); }) - .finally(() => { - mockRestore(); - }) .stdout() .stub(gitModule, 'simpleGit', sinon.stub().returns(simpleGitInstanceMock())) .stub(exec, 'awaitSpawn', () => { @@ -117,9 +112,6 @@ describe('create', () => { test.do(() => { mockFolders(); }) - .finally(() => { - mockRestore(); - }) .stdout() .command(['create']) .catch(`No package-index.json found.`) @@ -128,9 +120,6 @@ describe('create', () => { test.do(() => { mockFolders({ packageIndex: true }); }) - .finally(() => { - mockRestore(); - }) .stdout() .command(['create', '-c', TEST_COMPONENT_CORE_ID]) .catch(`Missing required flag 'name'`) @@ -139,9 +128,6 @@ describe('create', () => { test.do(() => { mockFolders({ packageIndex: true }); }) - .finally(() => { - mockRestore(); - }) .stdout() .command(['create', '-n', TEST_APP_NAME]) .catch(`Missing required flag 'core'`) @@ -150,9 +136,6 @@ describe('create', () => { test.do(() => { mockFolders({ packageIndex: true, installedComponents: true }); }) - .finally(() => { - mockRestore(); - }) .stdout() .stub(gitModule, 'simpleGit', sinon.stub().returns(simpleGitInstanceMock())) .stub(exec, 'runExecSpec', () => {}) @@ -198,9 +181,6 @@ describe('create', () => { test.do(() => { mockFolders({ packageIndex: true, installedComponents: true }); }) - .finally(() => { - mockRestore(); - }) .stdout() .stub(gitModule, 'simpleGit', sinon.stub().returns(simpleGitInstanceMock())) .stub(exec, 'runExecSpec', () => {}) @@ -236,9 +216,6 @@ describe('create', () => { test.do(() => { mockFolders({ packageIndex: true }); }) - .finally(() => { - mockRestore(); - }) .stdout() .command(['create', '-n', 'test', '-e', 'example']) .catch(`Flags 'name' and 'example' are mutually exclusive!`) @@ -247,9 +224,6 @@ describe('create', () => { test.do(() => { mockFolders({ packageIndex: true, installedComponents: true }); }) - .finally(() => { - mockRestore(); - }) .stdout() .stub(gitModule, 'simpleGit', sinon.stub().returns(simpleGitInstanceMock())) .stub(exec, 'runExecSpec', () => {}) diff --git a/test/commands/exec/exec.test.ts b/test/commands/exec/exec.test.ts index 863b8d21..03f1fbd1 100644 --- a/test/commands/exec/exec.test.ts +++ b/test/commands/exec/exec.test.ts @@ -16,7 +16,8 @@ import { expect, test } from '@oclif/test'; import { IEvent, IPty } from 'node-pty'; import { setSpawnImplementation } from '../../../src/modules/exec'; import { runtimePackageManifestMock } from '../../utils/mockConfig'; -import { mockFolders, mockRestore } from '../../utils/mockfs'; +import * as exec from '../../../src/modules/exec'; +import { mockFolders } from '../../utils/mockfs'; type ExitType = { exitCode: number; @@ -68,9 +69,6 @@ describe('exec', () => { mockFolders({ velocitasConfig: true, installedComponents: true }); setSpawnImplementation((command: string, args: string | string[], options: any) => new StubPty()); }) - .finally(() => { - mockRestore(); - }) .stdout() .stderr() .command(['exec', `${runtimePackageManifestMock.components[0].id}`, `${runtimePackageManifestMock.components[0].programs[0].id}`]) @@ -82,9 +80,6 @@ describe('exec', () => { mockFolders({ velocitasConfig: true, installedComponents: true }); setSpawnImplementation((command: string, args: string | string[], options: any) => new StubPty()); }) - .finally(() => { - mockRestore(); - }) .stdout() .stderr() .command([ @@ -103,9 +98,6 @@ describe('exec', () => { mockFolders({ velocitasConfig: true, installedComponents: true }); setSpawnImplementation((command: string, args: string | string[], options: any) => new StubPty()); }) - .finally(() => { - mockRestore(); - }) .stdout() .stderr() .command(['exec', `${runtimePackageManifestMock.components[1].id}`, `${runtimePackageManifestMock.components[1].programs[0].id}`]) @@ -116,9 +108,7 @@ describe('exec', () => { test.do(() => { mockFolders({ velocitasConfig: true, installedComponents: true, appManifest: false }); }) - .finally(() => { - mockRestore(); - }) + .stub(exec, 'runExecSpec', () => {}) .stdout() .command(['exec', `${runtimePackageManifestMock.components[1].id}`, `${runtimePackageManifestMock.components[1].programs[0].id}`]) .it('should log warning when no AppManifest.json is found', (ctx) => { @@ -130,9 +120,6 @@ describe('exec', () => { mockFolders({ velocitasConfig: true, installedComponents: true }); setSpawnImplementation((command: string, args: string | string[], options: any) => new StubPty()); }) - .finally(() => { - mockRestore(); - }) .stdout() .command(['exec', `${runtimePackageManifestMock.components[0].id}`, 'unknown-script']) .catch(`No program found for item 'unknown-script' referenced in program list of '${runtimePackageManifestMock.components[0].id}'`) @@ -142,9 +129,6 @@ describe('exec', () => { mockFolders({ velocitasConfig: true, installedComponents: true }); setSpawnImplementation((command: string, args: string | string[], options: any) => new StubPty()); }) - .finally(() => { - mockRestore(); - }) .stdout() .command(['exec', `${runtimePackageManifestMock.components[1].id}`, 'unknown-script']) .catch(`No program found for item 'unknown-script' referenced in program list of '${runtimePackageManifestMock.components[1].id}'`) diff --git a/test/commands/init/init.test.ts b/test/commands/init/init.test.ts index 2ac47d62..04aa5e29 100644 --- a/test/commands/init/init.test.ts +++ b/test/commands/init/init.test.ts @@ -13,21 +13,18 @@ // SPDX-License-Identifier: Apache-2.0 import { expect, test } from '@oclif/test'; -import * as fs from 'fs'; import { velocitasConfigMock } from '../../utils/mockConfig'; -import { mockFolders, mockRestore, userHomeDir } from '../../utils/mockfs'; +import { mockFolders, userHomeDir } from '../../utils/mockfs'; import * as gitModule from 'simple-git'; import * as exec from '../../../src/modules/exec'; import sinon from 'sinon'; import { simpleGitInstanceMock } from '../../helpers/simpleGit'; +import { CliFileSystem } from '../../../src/utils/fs-bridge'; describe('init', () => { test.do(() => { mockFolders({ velocitasConfig: true }); }) - .finally(() => { - mockRestore(); - }) .stdout() .stub(gitModule, 'simpleGit', sinon.stub().returns(simpleGitInstanceMock())) .stub(exec, 'runExecSpec', () => {}) @@ -40,17 +37,24 @@ describe('init', () => { expect(ctx.stdout).to.contain( `... Downloading package: '${velocitasConfigMock.packages[1].repo}:${velocitasConfigMock.packages[1].version}'`, ); - expect(fs.existsSync(`${userHomeDir}/.velocitas/packages/${velocitasConfigMock.packages[0].repo}`)).to.be.true; - expect(fs.existsSync(`${userHomeDir}/.velocitas/packages/${velocitasConfigMock.packages[1].repo}`)).to.be.true; + expect( + CliFileSystem.existsSync( + `${userHomeDir}/.velocitas/packages/${velocitasConfigMock.packages[0].repo}/${velocitasConfigMock.packages[0].version}`, + ), + ).to.be.true; + expect( + CliFileSystem.existsSync( + `${userHomeDir}/.velocitas/packages/${velocitasConfigMock.packages[1].repo}/${velocitasConfigMock.packages[1].version}`, + ), + ).to.be.true; }); test.do(() => { mockFolders({ velocitasConfig: true, installedComponents: true }); }) - .finally(() => { - mockRestore(); - }) .stdout() + .stub(gitModule, 'simpleGit', sinon.stub().returns(simpleGitInstanceMock())) + .stub(exec, 'runExecSpec', () => {}) .command(['init', '-v']) .it('skips downloading because package is already installed', (ctx) => { console.error(ctx.stdout); @@ -61,18 +65,23 @@ describe('init', () => { expect(ctx.stdout).to.contain( `... '${velocitasConfigMock.packages[1].repo}:${velocitasConfigMock.packages[1].version}' already initialized.`, ); - expect(fs.existsSync(`${userHomeDir}/.velocitas/packages/${velocitasConfigMock.packages[0].repo}`)).to.be.true; - expect(fs.existsSync(`${userHomeDir}/.velocitas/packages/${velocitasConfigMock.packages[1].repo}`)).to.be.true; + expect( + CliFileSystem.existsSync( + `${userHomeDir}/.velocitas/packages/${velocitasConfigMock.packages[0].repo}/${velocitasConfigMock.packages[0].version}`, + ), + ).to.be.true; + expect( + CliFileSystem.existsSync( + `${userHomeDir}/.velocitas/packages/${velocitasConfigMock.packages[1].repo}/${velocitasConfigMock.packages[1].version}`, + ), + ).to.be.true; }); test.do(() => { mockFolders({ velocitasConfig: true, installedComponents: true, appManifest: false }); }) - .finally(() => { - mockRestore(); - }) .stdout() - .command(['init', '-v']) + .command(['init', '-v', '--no-hooks']) .it('should log warning when no AppManifest.json is found', (ctx) => { console.error(ctx.stdout); expect(ctx.stdout).to.contain('*** Info ***: No AppManifest found'); @@ -81,9 +90,6 @@ describe('init', () => { test.do(() => { mockFolders(); }) - .finally(() => { - mockRestore(); - }) .stdout() .command(['init']) .it('creates config file from default velocitas.json', (ctx) => { @@ -91,15 +97,12 @@ describe('init', () => { expect(ctx.stdout).to.contain( '... Directory is no velocitas project. Creating .velocitas.json at the root of your repository.', ); - expect(fs.existsSync(`${process.cwd()}/.velocitas.json`)).to.be.true; + expect(CliFileSystem.existsSync(`${process.cwd()}/.velocitas.json`)).to.be.true; }); test.do(() => { - mockFolders({ velocitasConfig: true }); + mockFolders({ velocitasConfig: true, installedComponents: true }); }) - .finally(() => { - mockRestore(); - }) .stdout() .stub(gitModule, 'simpleGit', sinon.stub().returns(simpleGitInstanceMock())) .stub(exec, 'runExecSpec', () => {}) diff --git a/test/commands/package/package.test.ts b/test/commands/package/package.test.ts index 6a438455..17c33233 100644 --- a/test/commands/package/package.test.ts +++ b/test/commands/package/package.test.ts @@ -14,15 +14,12 @@ import { expect, test } from '@oclif/test'; import { velocitasConfigMock } from '../../utils/mockConfig'; -import { mockFolders, mockRestore, userHomeDir } from '../../utils/mockfs'; +import { mockFolders, userHomeDir } from '../../utils/mockfs'; describe('package', () => { test.do(() => { mockFolders({ velocitasConfig: true, installedComponents: true }); }) - .finally(() => { - mockRestore(); - }) .stdout() .command(['package']) .it('prints information about all installed packages', (ctx) => { @@ -33,9 +30,6 @@ describe('package', () => { test.do(() => { mockFolders({ velocitasConfig: true, installedComponents: true }); }) - .finally(() => { - mockRestore(); - }) .stdout() .command(['package', '-p', `${velocitasConfigMock.packages[0].repo}`]) .it('prints the path of specified package', (ctx) => { @@ -47,9 +41,6 @@ describe('package', () => { test.do(() => { mockFolders({ velocitasConfig: true }); }) - .finally(() => { - mockRestore(); - }) .stdout() .command(['package']) .catch(`Cannot find package ${velocitasConfigMock.packages[0].repo}:${velocitasConfigMock.packages[0].version}`) @@ -58,9 +49,6 @@ describe('package', () => { test.do(() => { mockFolders({ velocitasConfig: true, installedComponents: true }); }) - .finally(() => { - mockRestore(); - }) .stdout() .command(['package', '-p']) .catch('Path can be only printed for a single package, please specify !') diff --git a/test/commands/sync/sync.test.ts b/test/commands/sync/sync.test.ts index 79700687..84be7cba 100644 --- a/test/commands/sync/sync.test.ts +++ b/test/commands/sync/sync.test.ts @@ -14,15 +14,12 @@ import { expect, test } from '@oclif/test'; import { runtimePackageManifestMock, setupPackageManifestMock } from '../../utils/mockConfig'; -import { mockFolders, mockRestore } from '../../utils/mockfs'; +import { mockFolders } from '../../utils/mockfs'; describe('sync', () => { test.do(() => { mockFolders({ velocitasConfig: true, installedComponents: true }); }) - .finally(() => { - mockRestore(); - }) .stdout() .command(['sync']) .it('syncing components into project directory', (ctx) => { diff --git a/test/commands/upgrade/upgrade.test.ts b/test/commands/upgrade/upgrade.test.ts index 02791702..549e26d7 100644 --- a/test/commands/upgrade/upgrade.test.ts +++ b/test/commands/upgrade/upgrade.test.ts @@ -14,14 +14,14 @@ import { ux } from '@oclif/core'; import { expect, test } from '@oclif/test'; -import * as fs from 'fs'; import * as packageModule from '../../../src/modules/package'; import { ProjectConfigOptions } from '../../../src/modules/project-config'; import { velocitasConfigMock } from '../../utils/mockConfig'; -import { mockFolders, mockRestore, userHomeDir } from '../../utils/mockfs'; +import { mockFolders, userHomeDir } from '../../utils/mockfs'; import * as gitModule from 'simple-git'; import sinon from 'sinon'; import { simpleGitInstanceMock } from '../../helpers/simpleGit'; +import { CliFileSystem } from '../../../src/utils/fs-bridge'; const mockedNewVersionTag = 'v2.0.0'; @@ -29,9 +29,6 @@ describe('upgrade', () => { test.do(() => { mockFolders({ velocitasConfig: true }); }) - .finally(() => { - mockRestore(); - }) .stdout() .stub(gitModule, 'simpleGit', sinon.stub().returns(simpleGitInstanceMock())) .command(['upgrade', '--dry-run']) @@ -48,9 +45,6 @@ describe('upgrade', () => { test.do(() => { mockFolders({ velocitasConfig: true, installedComponents: true }); }) - .finally(() => { - mockRestore(); - }) .stdout() .stub(gitModule, 'simpleGit', sinon.stub().returns(simpleGitInstanceMock())) .command(['upgrade', '--dry-run']) @@ -63,9 +57,6 @@ describe('upgrade', () => { test.do(() => { mockFolders({ velocitasConfig: true, installedComponents: true }); }) - .finally(() => { - mockRestore(); - }) .stdout() .stub(gitModule, 'simpleGit', sinon.stub().returns(simpleGitInstanceMock(mockedNewVersionTag))) .command(['upgrade', '--dry-run']) @@ -82,9 +73,6 @@ describe('upgrade', () => { test.do(() => { mockFolders({ velocitasConfig: true }); }) - .finally(() => { - mockRestore(); - }) .stdout() .stub(ux, 'prompt', () => 'y') .stub(gitModule, 'simpleGit', sinon.stub().returns(simpleGitInstanceMock())) @@ -97,16 +85,13 @@ describe('upgrade', () => { expect(ctx.stdout).to.contain( `... No installed sources for ${velocitasConfigMock.packages[1].repo}:${velocitasConfigMock.packages[1].version} found`, ); - expect(fs.existsSync(`${userHomeDir}/.velocitas/packages/${velocitasConfigMock.packages[0].repo}`)).to.be.true; - expect(fs.existsSync(`${userHomeDir}/.velocitas/packages/${velocitasConfigMock.packages[1].repo}`)).to.be.true; + expect(CliFileSystem.existsSync(`${userHomeDir}/.velocitas/packages/${velocitasConfigMock.packages[0].repo}`)).to.be.true; + expect(CliFileSystem.existsSync(`${userHomeDir}/.velocitas/packages/${velocitasConfigMock.packages[1].repo}`)).to.be.true; }); test.do(() => { mockFolders({ velocitasConfig: true }); }) - .finally(() => { - mockRestore(); - }) .stderr() .stdout() .stub(ux, 'prompt', () => 'y') @@ -126,9 +111,6 @@ describe('upgrade', () => { test.do(() => { mockFolders({ velocitasConfig: true }); }) - .finally(() => { - mockRestore(); - }) .stdout() .stub(ux, 'prompt', () => 'n') .stub(gitModule, 'simpleGit', sinon.stub().returns(simpleGitInstanceMock())) @@ -141,15 +123,17 @@ describe('upgrade', () => { expect(ctx.stdout).to.contain( `... No installed sources for ${velocitasConfigMock.packages[1].repo}:${velocitasConfigMock.packages[1].version} found`, ); - expect(fs.existsSync(`${userHomeDir}/.velocitas/packages/${velocitasConfigMock.packages[0].repo}/_cache`)).to.be.true; - expect(fs.existsSync(`${userHomeDir}/.velocitas/packages/${velocitasConfigMock.packages[1].repo}/_cache`)).to.be.true; + expect(CliFileSystem.existsSync(`${userHomeDir}/.velocitas/packages/${velocitasConfigMock.packages[0].repo}/_cache`)).to.be + .true; + expect(CliFileSystem.existsSync(`${userHomeDir}/.velocitas/packages/${velocitasConfigMock.packages[1].repo}/_cache`)).to.be + .true; expect( - fs.existsSync( + CliFileSystem.existsSync( `${userHomeDir}/.velocitas/packages/${velocitasConfigMock.packages[0].repo}/${velocitasConfigMock.packages[0].version}`, ), ).to.be.false; expect( - fs.existsSync( + CliFileSystem.existsSync( `${userHomeDir}/.velocitas/packages/${velocitasConfigMock.packages[1].repo}/${velocitasConfigMock.packages[1].version}`, ), ).to.be.false; @@ -158,9 +142,6 @@ describe('upgrade', () => { test.do(() => { mockFolders({ velocitasConfig: true, installedComponents: true }); }) - .finally(() => { - mockRestore(); - }) .stdout() .stub(gitModule, 'simpleGit', sinon.stub().returns(simpleGitInstanceMock())) .command(['upgrade']) @@ -173,9 +154,6 @@ describe('upgrade', () => { test.do(() => { mockFolders({ velocitasConfig: true, installedComponents: true }); }) - .finally(() => { - mockRestore(); - }) .stdout() .stub(ux, 'prompt', () => 'y') .stub(gitModule, 'simpleGit', sinon.stub().returns(simpleGitInstanceMock(mockedNewVersionTag))) @@ -188,11 +166,9 @@ describe('upgrade', () => { expect(ctx.stdout).to.contain( `... '${velocitasConfigMock.packages[1].repo}' is currently at ${velocitasConfigMock.packages[1].version}, can be updated to ${mockedNewVersionTag}`, ); - expect(fs.existsSync(`${userHomeDir}/.velocitas/packages/${velocitasConfigMock.packages[0].repo}`)).to.be.true; - expect(fs.existsSync(`${userHomeDir}/.velocitas/packages/${velocitasConfigMock.packages[1].repo}`)).to.be.true; - const newVelocitasConfig: ProjectConfigOptions = JSON.parse( - fs.readFileSync(`${process.cwd()}/.velocitas.json`, { encoding: 'utf8', flag: 'r' }), - ); + expect(CliFileSystem.existsSync(`${userHomeDir}/.velocitas/packages/${velocitasConfigMock.packages[0].repo}`)).to.be.true; + expect(CliFileSystem.existsSync(`${userHomeDir}/.velocitas/packages/${velocitasConfigMock.packages[1].repo}`)).to.be.true; + const newVelocitasConfig: ProjectConfigOptions = JSON.parse(CliFileSystem.readFileSync(`${process.cwd()}/.velocitas.json`)); expect(newVelocitasConfig.packages[0].version).to.be.equal(mockedNewVersionTag); expect(newVelocitasConfig.packages[1].version).to.be.equal(mockedNewVersionTag); }); @@ -200,9 +176,6 @@ describe('upgrade', () => { test.do(() => { mockFolders({ velocitasConfig: true, installedComponents: true }); }) - .finally(() => { - mockRestore(); - }) .stdout() .stub(ux, 'prompt', () => 'n') .stub(gitModule, 'simpleGit', sinon.stub().returns(simpleGitInstanceMock(mockedNewVersionTag))) @@ -215,7 +188,7 @@ describe('upgrade', () => { expect(ctx.stdout).to.contain( `... '${velocitasConfigMock.packages[1].repo}' is currently at ${velocitasConfigMock.packages[1].version}, can be updated to ${mockedNewVersionTag}`, ); - expect(fs.existsSync(`${userHomeDir}/.velocitas/packages/${velocitasConfigMock.packages[0].repo}`)).to.be.true; - expect(fs.existsSync(`${userHomeDir}/.velocitas/packages/${velocitasConfigMock.packages[1].repo}`)).to.be.true; + expect(CliFileSystem.existsSync(`${userHomeDir}/.velocitas/packages/${velocitasConfigMock.packages[0].repo}`)).to.be.true; + expect(CliFileSystem.existsSync(`${userHomeDir}/.velocitas/packages/${velocitasConfigMock.packages[1].repo}`)).to.be.true; }); }); diff --git a/test/helpers/cache.ts b/test/helpers/cache.ts index 3c14bfe1..ec5e2a4b 100644 --- a/test/helpers/cache.ts +++ b/test/helpers/cache.ts @@ -12,18 +12,17 @@ // // SPDX-License-Identifier: Apache-2.0 -import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs'; import { join } from 'node:path'; -import { DEFAULT_BUFFER_ENCODING } from '../../src/modules/constants'; import { ProjectCache } from '../../src/modules/project-cache'; +import { CliFileSystem } from '../../src/utils/fs-bridge'; export const getCacheData = () => { - return JSON.parse(readFileSync(`${ProjectCache.getCacheDir()}/cache.json`, DEFAULT_BUFFER_ENCODING)); + return JSON.parse(CliFileSystem.readFileSync(`${ProjectCache.getCacheDir()}/cache.json`)); }; export function writeCacheData(cacheData: any) { - if (!existsSync(ProjectCache.getCacheDir())) { - mkdirSync(ProjectCache.getCacheDir(), { recursive: true }); + if (!CliFileSystem.existsSync(ProjectCache.getCacheDir())) { + CliFileSystem.mkdirSync(ProjectCache.getCacheDir()); } - return writeFileSync(join(ProjectCache.getCacheDir(), 'cache.json'), JSON.stringify(cacheData), { encoding: DEFAULT_BUFFER_ENCODING }); + return CliFileSystem.writeFileSync(join(ProjectCache.getCacheDir(), 'cache.json'), JSON.stringify(cacheData)); } diff --git a/test/helpers/simpleGit.ts b/test/helpers/simpleGit.ts index b79d49d8..06c7d0cc 100644 --- a/test/helpers/simpleGit.ts +++ b/test/helpers/simpleGit.ts @@ -12,19 +12,19 @@ // // SPDX-License-Identifier: Apache-2.0 -import * as fs from 'fs'; import { corePackageManifestMock, runtimePackageManifestMock } from '../utils/mockConfig'; +import { CliFileSystem } from '../../src/utils/fs-bridge'; export const simpleGitInstanceMock = (mockedNewVersionTag?: string) => { return { clone: async (repoPath: string, localPath: string, options?: any) => { - await fs.promises.mkdir(localPath, { recursive: true }); - await fs.promises.writeFile(`${localPath}/.git`, 'This is a git repo'); + await CliFileSystem.promisesMkdir(localPath); + await CliFileSystem.promisesWriteFile(`${localPath}/.git`, 'This is a git repo'); if (repoPath.indexOf('package-main') !== -1) { - await fs.promises.writeFile(`${localPath}/manifest.json`, JSON.stringify(corePackageManifestMock)); + await CliFileSystem.promisesWriteFile(`${localPath}/manifest.json`, JSON.stringify(corePackageManifestMock)); } else { - await fs.promises.writeFile(`${localPath}/manifest.json`, JSON.stringify(runtimePackageManifestMock)); + await CliFileSystem.promisesWriteFile(`${localPath}/manifest.json`, JSON.stringify(runtimePackageManifestMock)); } }, checkIsRepo: () => { diff --git a/test/system-test/create.stest.ts b/test/system-test/create.stest.ts index cb6da851..7afac637 100644 --- a/test/system-test/create.stest.ts +++ b/test/system-test/create.stest.ts @@ -14,7 +14,8 @@ import { expect } from 'chai'; import { spawnSync } from 'child_process'; -import { existsSync, readFileSync, readdirSync, removeSync } from 'fs-extra'; +import { existsSync, readFileSync, readdirSync } from 'node:fs'; +import { removeSync } from 'fs-extra'; import path from 'path'; import { DEFAULT_BUFFER_ENCODING } from '../../src/modules/constants'; import { PackageConfig } from '../../src/modules/package'; diff --git a/test/system-test/exec.stest.ts b/test/system-test/exec.stest.ts index 27f8ab00..a4cf6423 100644 --- a/test/system-test/exec.stest.ts +++ b/test/system-test/exec.stest.ts @@ -14,11 +14,11 @@ import { expect } from 'chai'; import { spawn, spawnSync } from 'child_process'; +import { readFileSync } from 'node:fs'; import { copySync } from 'fs-extra'; // eslint-disable-next-line @typescript-eslint/naming-convention import YAML from 'yaml'; import { DEFAULT_BUFFER_ENCODING } from '../../src/modules/constants'; -import { readFileSync } from 'fs'; import { TEST_ROOT, VELOCITAS_HOME, VELOCITAS_PROCESS } from '../utils/systemTestConfig'; describe('CLI command', () => { @@ -47,7 +47,7 @@ describe('CLI command', () => { it('should pass environment variables to the spawned process', async () => { const result = spawnSync(VELOCITAS_PROCESS, ['exec', 'test-component', 'echo-env'], { encoding: DEFAULT_BUFFER_ENCODING }); - const expectedString = JSON.stringify(JSON.parse(readFileSync('./app/AppManifest.json', 'utf-8'))); + const expectedString = JSON.stringify(JSON.parse(readFileSync('./app/AppManifest.json', DEFAULT_BUFFER_ENCODING))); expect(result.stdout).to.contain('VELOCITAS_WORKSPACE_DIR='); expect(result.stdout).to.contain('VELOCITAS_CACHE_DATA='); expect(result.stdout).to.contain('VELOCITAS_CACHE_DIR='); diff --git a/test/system-test/init.stest.ts b/test/system-test/init.stest.ts index 2ae72df3..e411fc23 100644 --- a/test/system-test/init.stest.ts +++ b/test/system-test/init.stest.ts @@ -14,7 +14,8 @@ import { expect } from 'chai'; import { spawnSync } from 'child_process'; -import { copySync, removeSync, existsSync, readFileSync, readdirSync } from 'fs-extra'; +import { readFileSync, existsSync, readdirSync } from 'node:fs'; +import { removeSync, copySync } from 'fs-extra'; // eslint-disable-next-line @typescript-eslint/naming-convention import { DEFAULT_BUFFER_ENCODING } from '../../src/modules/constants'; import { TEST_ROOT, VELOCITAS_HOME, VELOCITAS_PROCESS } from '../utils/systemTestConfig'; @@ -42,7 +43,7 @@ describe('CLI command', () => { const initOutput = spawnSync(VELOCITAS_PROCESS, ['init'], { encoding: DEFAULT_BUFFER_ENCODING }); expect(initOutput.status).to.equal(0); - const packageIndex = JSON.parse(readFileSync('./.velocitas.json', 'utf8')); + const packageIndex = JSON.parse(readFileSync('./.velocitas.json', DEFAULT_BUFFER_ENCODING)); const projectConfig = ProjectConfig.read(packageIndex.cliVersion, './.velocitas.json'); expect(existsSync(join(ProjectCache.getCacheDir(), 'vehicle_model'))).to.be.true; @@ -58,7 +59,7 @@ describe('CLI command', () => { const initOutput = spawnSync(VELOCITAS_PROCESS, ['init'], { encoding: DEFAULT_BUFFER_ENCODING }); expect(initOutput.status).to.equal(0); - const packageIndex = JSON.parse(readFileSync('./.velocitas.json', 'utf8')); + const packageIndex = JSON.parse(readFileSync('./.velocitas.json', DEFAULT_BUFFER_ENCODING)); const projectConfig = ProjectConfig.read(packageIndex.cliVersion, './.velocitas.json'); expect(existsSync('./gen')).to.be.true; expect(isDirectoryEmpty('./gen')).to.be.false; diff --git a/test/unit/app-manifest.test.ts b/test/unit/app-manifest.test.ts index 439811a1..d7612cdf 100644 --- a/test/unit/app-manifest.test.ts +++ b/test/unit/app-manifest.test.ts @@ -13,18 +13,18 @@ // SPDX-License-Identifier: Apache-2.0 import 'mocha'; -import mockfs from 'mock-fs'; import { AppManifest } from '../../src/modules/app-manifest'; import { expect } from 'chai'; +import { CliFileSystem, MockFileSystem, MockFileSystemObj } from '../../src/utils/fs-bridge'; describe('app-manifest - module', () => { before(() => { - const mockfsConf: any = { + const mockFilesystem: MockFileSystemObj = { '/AppManifestInvalid.json': 'foo', '/AppManifestValid.json': '{ "name": "AppName", "manifestVersion": "v3" }', '/AppManifestArray.json': '[ { "name": "AppName", "manifestVersion": "v3" } ]', }; - mockfs(mockfsConf, { createCwd: false }); + CliFileSystem.setImpl(new MockFileSystem(mockFilesystem)); }); describe('AppManifest reading', () => { it('should silently continue if the file does not exist.', () => { @@ -49,7 +49,4 @@ describe('app-manifest - module', () => { expect(appManifest!['manifestVersion']).to.be.eq('v3'); }); }); - after(() => { - mockfs.restore(); - }); }); diff --git a/test/unit/package-index.test.ts b/test/unit/package-index.test.ts index ebe92964..f330cdd7 100644 --- a/test/unit/package-index.test.ts +++ b/test/unit/package-index.test.ts @@ -13,9 +13,10 @@ // SPDX-License-Identifier: Apache-2.0 import 'mocha'; -import mockfs from 'mock-fs'; import { CoreComponent, ExtensionComponent, PackageIndex, PackageAttributes, Parameter } from '../../src/modules/package-index'; import { expect } from 'chai'; +import { CliFileSystem, MockFileSystem, MockFileSystemObj } from '../../src/utils/fs-bridge'; +import { cwd } from 'node:process'; const validPackageIndexMock: PackageAttributes[] = [ { @@ -182,11 +183,14 @@ const EXPECTED_MANDATORY_EXTENSION_IDS: string[] = ['test-extension']; describe('package-index - module', () => { before(() => { - const mockfsConf: any = { - 'package-index.json': JSON.stringify(validPackageIndexMock), - 'invalidPackage-index.json': JSON.stringify(invalidPackageIndexMock), + const validPackageIndexPath = `${cwd()}/package-index.json`; + const invalidPackageIndexPath = `${cwd()}/invalidPackage-index.json`; + + const mockFilesystem: MockFileSystemObj = { + [validPackageIndexPath]: JSON.stringify(validPackageIndexMock), + [invalidPackageIndexPath]: JSON.stringify(invalidPackageIndexMock), }; - mockfs(mockfsConf, { createCwd: true }); + CliFileSystem.setImpl(new MockFileSystem(mockFilesystem)); }); describe('Package Index', () => { it('should be able to read the package-index.json on root path.', () => { @@ -231,7 +235,4 @@ describe('package-index - module', () => { expect(mandatoryExtensions).to.be.empty; }); }); - after(() => { - mockfs.restore(); - }); }); diff --git a/test/unit/package.test.ts b/test/unit/package.test.ts index cb4e5dc5..c0313439 100644 --- a/test/unit/package.test.ts +++ b/test/unit/package.test.ts @@ -13,24 +13,20 @@ // SPDX-License-Identifier: Apache-2.0 import 'mocha'; -import mockfs from 'mock-fs'; import { PackageConfig } from '../../src/modules/package'; import { expect } from 'chai'; +import { CliFileSystem, MockFileSystem, MockFileSystemObj } from '../../src/utils/fs-bridge'; describe('package - module', () => { let envCache: any; before(() => { envCache = process.env; - const mockfsConf: any = { - '/my/custom/path/.velocitas/packages': { - TestPackage: { - 'v1.2.3': { - 'manifest.json': '{}', - }, - }, - }, + const testpackage = '/my/custom/path/.velocitas/packages/TestPackage/v1.2.3/manifest.json'; + + let mockFilesystem: MockFileSystemObj = { + [testpackage]: '{}', }; - mockfs(mockfsConf, { createCwd: false }); + CliFileSystem.setImpl(new MockFileSystem(mockFilesystem)); }); describe('Package manifest', () => { it('should be loaded from VELOCITAS_HOME', () => { @@ -63,6 +59,5 @@ describe('package - module', () => { }); after(() => { process.env = envCache; - mockfs.restore(); }); }); diff --git a/test/unit/project-config.test.ts b/test/unit/project-config.test.ts index e6150b7e..0061ec33 100644 --- a/test/unit/project-config.test.ts +++ b/test/unit/project-config.test.ts @@ -13,22 +13,27 @@ // SPDX-License-Identifier: Apache-2.0 import 'mocha'; -import mockfs from 'mock-fs'; import { ProjectConfig } from '../../src/modules/project-config'; import { expect } from 'chai'; import { homedir } from 'node:os'; +import { cwd } from 'node:process'; +import { CliFileSystem, MockFileSystem, MockFileSystemObj } from '../../src/utils/fs-bridge'; describe('project-config - module', () => { before(() => { const packageManifestPath = `${homedir()}/.velocitas/packages/pkg1/v1.0.0/manifest.json`; - const mockfsConf: any = { - '/.velocitasInvalid.json': 'foo', - '/.velocitasValid.json': + const validProjectConfigPath = `${cwd()}/.velocitasValid.json`; + const validProjectConfigNoCompsPath = `${cwd()}/.velocitasValidNoComps.json`; + const invalidProjectConfigPath = `${cwd()}/.velocitasInvalid.json`; + + const mockFilesystem: MockFileSystemObj = { + [validProjectConfigPath]: '{ "packages": [{"repo":"pkg1", "version": "v1.0.0"}], "components": [{"id": "comp1"}], "variables": {} }', - '/.velocitasValidNoComps.json': '{ "packages": [{"repo":"pkg1", "version": "v1.0.0"}], "variables": {} }', + [validProjectConfigNoCompsPath]: '{ "packages": [{"repo":"pkg1", "version": "v1.0.0"}], "variables": {} }', + [invalidProjectConfigPath]: 'foo', + [packageManifestPath]: '{ "components": [{"id": "comp1"}, {"id": "comp2"}]}', }; - mockfsConf[packageManifestPath] = '{ "components": [{"id": "comp1"}, {"id": "comp2"}]}'; - mockfs(mockfsConf, { createCwd: false }); + CliFileSystem.setImpl(new MockFileSystem(mockFilesystem)); }); describe('.velocitas.json reading', () => { it('should return false when there is no .velocitas.json at the provided path.', () => { @@ -40,26 +45,23 @@ describe('project-config - module', () => { }); describe('.velocitas.json parsing', () => { it('should throw an error when .velocitas.json is invalid.', () => { - expect(ProjectConfig.read.bind(ProjectConfig.read, ...['v0.0.0', '/.velocitasInvalid.json'])).to.throw(); + expect(ProjectConfig.read.bind(ProjectConfig.read, ...['v0.0.0', './.velocitasInvalid.json'])).to.throw(); }); it('should read the ProjectConfig when .velocitas.json is valid.', () => { - expect(ProjectConfig.read.bind(ProjectConfig.read, ...['v0.0.0', '/.velocitasValid.json'])).to.not.throw(); + expect(ProjectConfig.read.bind(ProjectConfig.read, ...['v0.0.0', './.velocitasValid.json'])).to.not.throw(); }); }); describe('ProjectConfig components', () => { it('should only return referenced components', () => { - const projectConfig = ProjectConfig.read('v0.0.0', '/.velocitasValid.json'); + const projectConfig = ProjectConfig.read('v0.0.0', './.velocitasValid.json'); expect(projectConfig.getComponents()).to.have.length(1); expect(projectConfig.getComponents()[0].manifest.id).to.be.eq('comp1'); }); it('should only return all components, if no components are referenced', () => { - const projectConfig = ProjectConfig.read('v0.0.0', '/.velocitasValidNoComps.json'); + const projectConfig = ProjectConfig.read('v0.0.0', './.velocitasValidNoComps.json'); expect(projectConfig.getComponents()).to.have.length(2); expect(projectConfig.getComponents()[0].manifest.id).to.be.eq('comp1'); expect(projectConfig.getComponents()[1].manifest.id).to.be.eq('comp2'); }); }); - after(() => { - mockfs.restore(); - }); }); diff --git a/test/utils/mockfs.ts b/test/utils/mockfs.ts index c8107772..4099241d 100644 --- a/test/utils/mockfs.ts +++ b/test/utils/mockfs.ts @@ -12,9 +12,7 @@ // // SPDX-License-Identifier: Apache-2.0 -import mockfs from 'mock-fs'; import * as os from 'os'; -import * as path from 'path'; import { ProjectCache } from '../../src/modules/project-cache'; import { appManifestMock, @@ -25,58 +23,49 @@ import { setupPackageManifestMock, velocitasConfigMock, } from './mockConfig'; +import { cwd } from 'node:process'; +import { CliFileSystem, MockFileSystem, MockFileSystemObj } from '../../src/utils/fs-bridge'; export const userHomeDir = os.homedir(); const runtimePackagePath = `${userHomeDir}/.velocitas/packages/${velocitasConfigMock.packages[0].repo}/${velocitasConfigMock.packages[0].version}`; const setupPackagePath = `${userHomeDir}/.velocitas/packages/${velocitasConfigMock.packages[1].repo}/${velocitasConfigMock.packages[1].version}`; const corePackagePath = `${userHomeDir}/.velocitas/packages/${velocitasConfigMock.packages[2].repo}/${velocitasConfigMock.packages[2].version}`; +const velocitasConfig = `${cwd()}/.velocitas.json`; +const appManifestPath = `${cwd()}/app/AppManifest.json`; +const cacheConfig = `${ProjectCache.getCacheDir()}/cache.json`; +const packageIndex = `${cwd()}/package-index.json`; +const runtimePackagePathManifest = `${runtimePackagePath}/manifest.json`; +const setupPackagePathManifest = `${setupPackagePath}/manifest.json`; +const corePackagePathManifest = `${corePackagePath}/manifest.json`; + type MockConfig = { velocitasConfig?: boolean; installedComponents?: boolean; appManifest?: boolean; - mockCache?: boolean; packageIndex?: boolean; }; export const mockFolders = (mockConfig?: MockConfig) => { - const mockfsConf: any = { - 'package.json': mockfs.load(path.resolve(__dirname, '../../package.json')), - 'tsconfig.json': mockfs.load(path.resolve(__dirname, '../../tsconfig.json')), - src: mockfs.load(path.resolve(__dirname, '../../src')), - test: mockfs.load(path.resolve(__dirname, '../../test')), - node_modules: mockfs.load(path.resolve(__dirname, '../../node_modules')), - app: { - 'AppManifest.json': JSON.stringify(appManifestMock), - }, - }; - if (mockConfig && mockConfig.appManifest === false) { - delete mockfsConf.app; + let fileSystemObj: MockFileSystemObj = {}; + + if (mockConfig) { + fileSystemObj[cacheConfig] = JSON.stringify(mockCacheContent); } if (mockConfig && mockConfig.velocitasConfig) { - mockfsConf['.velocitas.json'] = JSON.stringify(velocitasConfigMock); + fileSystemObj[velocitasConfig] = JSON.stringify(velocitasConfigMock); } - if (mockConfig && mockConfig.installedComponents) { - mockfsConf[runtimePackagePath] = { - 'manifest.json': JSON.stringify(runtimePackageManifestMock), - src: {}, - }; - mockfsConf[setupPackagePath] = { - 'manifest.json': JSON.stringify(setupPackageManifestMock), - }; - mockfsConf[corePackagePath] = { - 'manifest.json': JSON.stringify(corePackageManifestMock), - }; + if (mockConfig && mockConfig.packageIndex) { + fileSystemObj[packageIndex] = JSON.stringify(packageIndexMock); } - if (mockConfig && mockConfig.mockCache) { - mockfsConf[ProjectCache.getCacheDir()] = { - 'cache.json': JSON.stringify(mockCacheContent), - }; + if (mockConfig && mockConfig.appManifest !== false) { + fileSystemObj[appManifestPath] = JSON.stringify(appManifestMock); } - if (mockConfig && mockConfig.packageIndex) { - mockfsConf['package-index.json'] = JSON.stringify(packageIndexMock); + if (mockConfig && mockConfig.installedComponents) { + fileSystemObj[runtimePackagePathManifest] = JSON.stringify(runtimePackageManifestMock); + fileSystemObj[setupPackagePathManifest] = JSON.stringify(setupPackageManifestMock); + fileSystemObj[corePackagePathManifest] = JSON.stringify(corePackageManifestMock); } - mockfs(mockfsConf, { createCwd: false }); -}; -export const mockRestore = () => mockfs.restore(); + CliFileSystem.setImpl(new MockFileSystem(fileSystemObj)); +}; diff --git a/test/utils/systemTestConfig.ts b/test/utils/systemTestConfig.ts index 915b58a3..80824c5d 100644 --- a/test/utils/systemTestConfig.ts +++ b/test/utils/systemTestConfig.ts @@ -13,7 +13,8 @@ // SPDX-License-Identifier: Apache-2.0 import { cwd } from 'process'; -import { readFileSync } from 'fs'; +import { readFileSync } from 'node:fs'; +import { DEFAULT_BUFFER_ENCODING } from '../../src/modules/constants'; import { homedir } from 'os'; import { resolve } from 'path'; @@ -22,4 +23,4 @@ export const TEST_ROOT = cwd(); export const VELOCITAS_HOME = `${homedir()}/.velocitas`; const packageIndexPath = resolve(__dirname, '../../testbench/test-create/vehicle-app-template/package-index.json'); -export const packageIndex = JSON.parse(readFileSync(packageIndexPath, 'utf8')); +export const packageIndex = JSON.parse(readFileSync(packageIndexPath, DEFAULT_BUFFER_ENCODING));