From 3ba5f08e951edfbf297423e236c86f75fb68134b Mon Sep 17 00:00:00 2001 From: OsamaRab3 Date: Wed, 19 Nov 2025 18:17:42 +0200 Subject: [PATCH 01/11] init setup to remove yeoman and use oclif --- .gitignore | 1 + bin/dev.cmd | 3 + bin/dev.js | 5 + bin/run.cmd | 3 + bin/run.js | 5 + eslint.config.mjs | 9 + package-lock.json | 796 +++++++++++++++++++++++++++++----------------- package.json | 22 +- tsconfig.json | 8 +- 9 files changed, 560 insertions(+), 292 deletions(-) create mode 100644 bin/dev.cmd create mode 100755 bin/dev.js create mode 100644 bin/run.cmd create mode 100755 bin/run.js create mode 100644 eslint.config.mjs diff --git a/.gitignore b/.gitignore index de87b68f7..ce754d06f 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ node_modules .vscode samples/invalid-fablo-config.json .DS_Store +dist diff --git a/bin/dev.cmd b/bin/dev.cmd new file mode 100644 index 000000000..cec553be4 --- /dev/null +++ b/bin/dev.cmd @@ -0,0 +1,3 @@ +@echo off + +node --loader ts-node/esm --no-warnings=ExperimentalWarning "%~dp0\dev" %* diff --git a/bin/dev.js b/bin/dev.js new file mode 100755 index 000000000..a937e0c6a --- /dev/null +++ b/bin/dev.js @@ -0,0 +1,5 @@ +#!/usr/bin/env -S node --loader ts-node/esm --disable-warning=ExperimentalWarning + +import {execute} from '@oclif/core' + +await execute({development: true, dir: import.meta.url}) diff --git a/bin/run.cmd b/bin/run.cmd new file mode 100644 index 000000000..968fc3075 --- /dev/null +++ b/bin/run.cmd @@ -0,0 +1,3 @@ +@echo off + +node "%~dp0\run" %* diff --git a/bin/run.js b/bin/run.js new file mode 100755 index 000000000..dd50271f4 --- /dev/null +++ b/bin/run.js @@ -0,0 +1,5 @@ +#!/usr/bin/env node + +import {execute} from '@oclif/core' + +await execute({dir: import.meta.url}) diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 000000000..06a09c270 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,9 @@ +import {includeIgnoreFile} from '@eslint/compat' +import oclif from 'eslint-config-oclif' +import prettier from 'eslint-config-prettier' +import path from 'node:path' +import {fileURLToPath} from 'node:url' + +const gitignorePath = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '.gitignore') + +export default [includeIgnoreFile(gitignorePath), ...oclif, prettier] diff --git a/package-lock.json b/package-lock.json index 85a413d6e..0429d4d0f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,19 +9,27 @@ "version": "2.4.2", "license": "Apache-2.0", "dependencies": { + "@oclif/core": "^4.8.0", "chalk": "^4.1.0", + "fs-extra": "^11.3.2", "got": "^11.8.5", "js-yaml": "^4.1.0", "jsonschema": "^1.2.6", "lodash": "^4.17.21", + "shx": "^0.4.0", "winston": "^2.4.7", "yeoman-generator": "^5.10.0" }, + "bin": { + "ffablo": "bin/run.js" + }, "devDependencies": { + "@types/fs-extra": "^11.0.4", "@types/jest": "^27.0.1", "@types/jest-json-schema": "^2.1.3", "@types/js-yaml": "^4.0.1", "@types/lodash": "^4.14.168", + "@types/node": "^18.19.130", "@types/node-fetch": "^2.5.10", "@types/yeoman-generator": "^5.2.14", "@typescript-eslint/eslint-plugin": "^4.22.0", @@ -86,6 +94,7 @@ "integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", @@ -792,7 +801,6 @@ "integrity": "sha512-Oau4yL24d2B5IL4ma4UpbQigkVhzPDXLoqy1ggK4gnHg/stmkffJE4oOXHXF3uz0UEpywG68KcyXsyYpA1Re/Q==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "chardet": "^2.1.0", "iconv-lite": "^0.6.3" @@ -904,8 +912,7 @@ "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", "devOptional": true, - "license": "ISC", - "peer": true + "license": "ISC" }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", @@ -1372,7 +1379,6 @@ "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" @@ -1437,7 +1443,6 @@ "integrity": "sha512-yMRgZVDpwWjplorzt9SFSaakWx6QIK248Nw4ZFgkrAy/GvJaFRaSZzE6nD7JBK5r8g/+PTxFq5Wj/sfciE7x+A==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/installed-package-contents": "^1.0.7", @@ -1485,7 +1490,6 @@ "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "@gar/promisify": "^1.0.1", "semver": "^7.3.5" @@ -1497,7 +1501,6 @@ "integrity": "sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "@npmcli/promise-spawn": "^1.3.2", "lru-cache": "^6.0.0", @@ -1515,7 +1518,6 @@ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "yallist": "^4.0.0" }, @@ -1528,8 +1530,7 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "devOptional": true, - "license": "ISC", - "peer": true + "license": "ISC" }, "node_modules/@npmcli/installed-package-contents": { "version": "1.0.7", @@ -1537,7 +1538,6 @@ "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "npm-bundled": "^1.1.1", "npm-normalize-package-bin": "^1.0.1" @@ -1555,7 +1555,6 @@ "integrity": "sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "@npmcli/name-from-folder": "^1.0.1", "glob": "^8.0.1", @@ -1572,7 +1571,6 @@ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "balanced-match": "^1.0.0" } @@ -1584,7 +1582,6 @@ "deprecated": "Glob versions prior to v9 are no longer supported", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1605,7 +1602,6 @@ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -1619,7 +1615,6 @@ "integrity": "sha512-VVW+JhWCKRwCTE+0xvD6p3uV4WpqocNYYtzyvenqL/u1Q3Xx6fGTJ+6UoIoii07fbuEO9U3IIyuGY0CYHDv1sg==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "cacache": "^15.0.5", "json-parse-even-better-errors": "^2.3.1", @@ -1637,7 +1632,6 @@ "deprecated": "This functionality has been moved to @npmcli/fs", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "mkdirp": "^1.0.4", "rimraf": "^3.0.2" @@ -1651,16 +1645,14 @@ "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz", "integrity": "sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==", "devOptional": true, - "license": "ISC", - "peer": true + "license": "ISC" }, "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==", "devOptional": true, - "license": "ISC", - "peer": true + "license": "ISC" }, "node_modules/@npmcli/package-json": { "version": "1.0.1", @@ -1668,7 +1660,6 @@ "integrity": "sha512-y6jnu76E9C23osz8gEMBayZmaZ69vFOIk8vR1FJL/wbEJ54+9aVG9rLTjQKSXfgYZEr50nw1txBBFfBZZe+bYg==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "json-parse-even-better-errors": "^2.3.1" } @@ -1679,7 +1670,6 @@ "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "infer-owner": "^1.0.4" } @@ -1690,7 +1680,6 @@ "integrity": "sha512-fSan/Pu11xS/TdaTpTB0MRn9guwGU8dye+x56mEVgBEd/QsybBbYcAL0phPXi8SGWFEChkQd6M9qL4y6VOpFig==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "@npmcli/node-gyp": "^1.0.2", "@npmcli/promise-spawn": "^1.3.2", @@ -1698,6 +1687,106 @@ "read-package-json-fast": "^2.0.1" } }, + "node_modules/@oclif/core": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.8.0.tgz", + "integrity": "sha512-jteNUQKgJHLHFbbz806aGZqf+RJJ7t4gwF4MYa8fCwCxQ8/klJNWc0MvaJiBebk7Mc+J39mdlsB4XraaCKznFw==", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.3.2", + "ansis": "^3.17.0", + "clean-stack": "^3.0.1", + "cli-spinners": "^2.9.2", + "debug": "^4.4.3", + "ejs": "^3.1.10", + "get-package-type": "^0.1.0", + "indent-string": "^4.0.0", + "is-wsl": "^2.2.0", + "lilconfig": "^3.1.3", + "minimatch": "^9.0.5", + "semver": "^7.7.3", + "string-width": "^4.2.3", + "supports-color": "^8", + "tinyglobby": "^0.2.14", + "widest-line": "^3.1.0", + "wordwrap": "^1.0.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@oclif/core/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@oclif/core/node_modules/clean-stack": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz", + "integrity": "sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@oclif/core/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@oclif/core/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/@oclif/core/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/@octokit/auth-token": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", @@ -1712,6 +1801,7 @@ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz", "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==", "license": "MIT", + "peer": true, "dependencies": { "@octokit/auth-token": "^2.4.4", "@octokit/graphql": "^4.5.8", @@ -2251,7 +2341,6 @@ "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "devOptional": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 6" } @@ -2389,7 +2478,6 @@ "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -2401,7 +2489,6 @@ "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/eslint": "*", "@types/estree": "*" @@ -2412,8 +2499,7 @@ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@types/expect": { "version": "1.20.4", @@ -2422,6 +2508,17 @@ "devOptional": true, "license": "MIT" }, + "node_modules/@types/fs-extra": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz", + "integrity": "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/jsonfile": "*", + "@types/node": "*" + } + }, "node_modules/@types/graceful-fs": { "version": "4.1.9", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", @@ -2536,6 +2633,16 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/jsonfile": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.4.tgz", + "integrity": "sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/keyv": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", @@ -2592,12 +2699,12 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.0.tgz", - "integrity": "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==", + "version": "18.19.130", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.130.tgz", + "integrity": "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==", "license": "MIT", "dependencies": { - "undici-types": "~7.10.0" + "undici-types": "~5.26.4" } }, "node_modules/@types/node-fetch": { @@ -2778,6 +2885,7 @@ "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "4.33.0", "@typescript-eslint/types": "4.33.0", @@ -2884,7 +2992,6 @@ "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.13.2", "@webassemblyjs/helper-wasm-bytecode": "1.13.2" @@ -2895,24 +3002,21 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.13.2", @@ -2920,7 +3024,6 @@ "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.13.2", "@webassemblyjs/helper-api-error": "1.13.2", @@ -2932,8 +3035,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.14.1", @@ -2941,7 +3043,6 @@ "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -2955,7 +3056,6 @@ "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } @@ -2966,7 +3066,6 @@ "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", "dev": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "@xtuc/long": "4.2.2" } @@ -2976,8 +3075,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.14.1", @@ -2985,7 +3083,6 @@ "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -3003,7 +3100,6 @@ "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-wasm-bytecode": "1.13.2", @@ -3018,7 +3114,6 @@ "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -3032,7 +3127,6 @@ "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-api-error": "1.13.2", @@ -3048,7 +3142,6 @@ "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.14.1", "@xtuc/long": "4.2.2" @@ -3059,16 +3152,14 @@ "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true, - "license": "BSD-3-Clause", - "peer": true + "license": "BSD-3-Clause" }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true, - "license": "Apache-2.0", - "peer": true + "license": "Apache-2.0" }, "node_modules/abbrev": { "version": "1.1.1", @@ -3082,7 +3173,6 @@ "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "event-target-shim": "^5.0.0" }, @@ -3096,6 +3186,7 @@ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -3245,7 +3336,6 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "devOptional": true, "license": "MIT", "dependencies": { "type-fest": "^0.21.3" @@ -3281,6 +3371,15 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/ansis": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/ansis/-/ansis-3.17.0.tgz", + "integrity": "sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==", + "license": "ISC", + "engines": { + "node": ">=14" + } + }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -3315,7 +3414,6 @@ "deprecated": "This package is no longer supported.", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" @@ -3330,7 +3428,6 @@ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -3346,7 +3443,6 @@ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "safe-buffer": "~5.2.0" } @@ -3370,7 +3466,6 @@ "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", "dev": true, "license": "Apache-2.0", - "peer": true, "engines": { "node": ">= 0.4" } @@ -3439,7 +3534,6 @@ "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -3521,7 +3615,6 @@ "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -3569,8 +3662,7 @@ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", "devOptional": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/ast-module-types": { "version": "3.0.0", @@ -3587,8 +3679,7 @@ "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/astral-regex": { "version": "2.0.0", @@ -3645,7 +3736,6 @@ "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==", "dev": true, "license": "MPL-2.0", - "peer": true, "engines": { "node": ">=4" } @@ -3656,7 +3746,6 @@ "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", "dev": true, "license": "Apache-2.0", - "peer": true, "engines": { "node": ">= 0.4" } @@ -3836,7 +3925,6 @@ "integrity": "sha512-zKdnMPWEdh4F5INR07/eBrodC7QrF5JKvqskjz/ZZRXg5YSAZIbn8zGhbhUrElzHBZ2fvEQdOU59RHcTG3GiwA==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "cmd-shim": "^5.0.0", "mkdirp-infer-owner": "^2.0.0", @@ -3855,7 +3943,6 @@ "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", "devOptional": true, "license": "ISC", - "peer": true, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } @@ -3951,6 +4038,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001735", "electron-to-chromium": "^1.5.204", @@ -4024,8 +4112,7 @@ "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", "devOptional": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/cacache": { "version": "15.3.0", @@ -4033,7 +4120,6 @@ "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "@npmcli/fs": "^1.0.0", "@npmcli/move-file": "^1.0.1", @@ -4064,7 +4150,6 @@ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "yallist": "^4.0.0" }, @@ -4077,8 +4162,7 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "devOptional": true, - "license": "ISC", - "peer": true + "license": "ISC" }, "node_modules/cacheable-lookup": { "version": "5.0.4", @@ -4244,8 +4328,7 @@ "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.0.tgz", "integrity": "sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==", "devOptional": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/chownr": { "version": "2.0.0", @@ -4262,7 +4345,6 @@ "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=6.0" } @@ -4316,7 +4398,6 @@ "version": "2.9.2", "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "devOptional": true, "license": "MIT", "engines": { "node": ">=6" @@ -4330,7 +4411,6 @@ "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.11.tgz", "integrity": "sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==", "devOptional": true, - "peer": true, "dependencies": { "colors": "1.0.3" }, @@ -4384,7 +4464,6 @@ "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", "devOptional": true, "license": "MIT", - "peer": true, "engines": { "node": ">=0.8" } @@ -4395,7 +4474,6 @@ "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", "devOptional": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 0.10" } @@ -4417,8 +4495,7 @@ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==", "devOptional": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/cloneable-readable": { "version": "1.1.3", @@ -4426,7 +4503,6 @@ "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "inherits": "^2.0.1", "process-nextick-args": "^2.0.0", @@ -4438,8 +4514,7 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "devOptional": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/cloneable-readable/node_modules/readable-stream": { "version": "2.3.8", @@ -4447,7 +4522,6 @@ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -4463,8 +4537,7 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "devOptional": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/cloneable-readable/node_modules/string_decoder": { "version": "1.1.1", @@ -4472,7 +4545,6 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "safe-buffer": "~5.1.0" } @@ -4483,7 +4555,6 @@ "integrity": "sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "mkdirp-infer-owner": "^2.0.0" }, @@ -4573,8 +4644,7 @@ "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", "devOptional": true, - "license": "ISC", - "peer": true + "license": "ISC" }, "node_modules/commondir": { "version": "1.0.1", @@ -4691,8 +4761,7 @@ "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true, - "license": "BSD-2-Clause", - "peer": true + "license": "BSD-2-Clause" }, "node_modules/dargs": { "version": "7.0.0", @@ -4763,15 +4832,14 @@ "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", "devOptional": true, "license": "MIT", - "peer": true, "engines": { "node": "*" } }, "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -4792,7 +4860,6 @@ "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", "devOptional": true, "license": "MIT", - "peer": true, "engines": { "node": "*" } @@ -5189,7 +5256,6 @@ "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "asap": "^2.0.0", "wrappy": "1" @@ -5493,8 +5559,7 @@ "version": "10.4.0", "resolved": "https://registry.npmjs.org/error/-/error-10.4.0.tgz", "integrity": "sha512-YxIFEJuhgcICugOUvRx5th0UM+ActZ9sjY0QJmeVwsQdvosZ7kYzc9QqS0Da3R5iUmgU5meGIxh0xBeZpMVeLw==", - "devOptional": true, - "peer": true + "devOptional": true }, "node_modules/error-ex": { "version": "1.3.2", @@ -5600,7 +5665,6 @@ "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", @@ -5628,8 +5692,7 @@ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/es-object-atoms": { "version": "1.1.1", @@ -5705,7 +5768,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "devOptional": true, "license": "MIT", "engines": { "node": ">=10" @@ -5743,6 +5805,7 @@ "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "7.12.11", "@eslint/eslintrc": "^0.4.3", @@ -5926,6 +5989,7 @@ "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", @@ -6060,7 +6124,6 @@ "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", @@ -6108,7 +6171,6 @@ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "esutils": "^2.0.2" }, @@ -6122,7 +6184,6 @@ "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -6141,7 +6202,6 @@ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", - "peer": true, "bin": { "semver": "bin/semver.js" } @@ -6350,7 +6410,6 @@ "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", "devOptional": true, "license": "MIT", - "peer": true, "engines": { "node": ">=6" } @@ -6360,8 +6419,7 @@ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "devOptional": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/events": { "version": "3.3.0", @@ -6369,7 +6427,6 @@ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "devOptional": true, "license": "MIT", - "peer": true, "engines": { "node": ">=0.8.x" } @@ -6778,7 +6835,6 @@ "integrity": "sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==", "devOptional": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "micromatch": "^4.0.2", "pkg-dir": "^4.2.0" @@ -6790,7 +6846,6 @@ "integrity": "sha512-X8Z+b/0L4lToKYq+lwnKqi9X/Zek0NibLpsJgVsSxpoYq7JtiCtRb5HqKVEjEw/qAb/4AKKRLOwwKHlWNpm2Eg==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "readable-stream": "^2.0.2" }, @@ -6803,8 +6858,7 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "devOptional": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/first-chunk-stream/node_modules/readable-stream": { "version": "2.3.8", @@ -6812,7 +6866,6 @@ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -6828,8 +6881,7 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "devOptional": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/first-chunk-stream/node_modules/string_decoder": { "version": "1.1.1", @@ -6837,7 +6889,6 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "safe-buffer": "~5.1.0" } @@ -6933,6 +6984,20 @@ "node": ">= 6" } }, + "node_modules/fs-extra": { + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", + "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, "node_modules/fs-minipass": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", @@ -7020,7 +7085,6 @@ "deprecated": "This package is no longer supported.", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.2", @@ -7106,7 +7170,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=8.0.0" @@ -7209,8 +7272,7 @@ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true, - "license": "BSD-2-Clause", - "peer": true + "license": "BSD-2-Clause" }, "node_modules/globals": { "version": "13.24.0", @@ -7366,7 +7428,6 @@ "integrity": "sha512-c5NDCWO0XiXuJAhOegMiNotkDmgORN+VNo3+YHMhWpoWG/u2+8im8byqsOe3/myI9YcC//plRdqGa2AE3Qsdjw==", "devOptional": true, "license": "MIT", - "peer": true, "engines": { "node": ">=8.0.0" } @@ -7497,7 +7558,6 @@ "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -7511,7 +7571,6 @@ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "yallist": "^4.0.0" }, @@ -7524,8 +7583,7 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "devOptional": true, - "license": "ISC", - "peer": true + "license": "ISC" }, "node_modules/html-escaper": { "version": "2.0.2", @@ -7546,7 +7604,6 @@ "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "@tootallnate/once": "1", "agent-base": "6", @@ -7649,7 +7706,6 @@ "integrity": "sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "minimatch": "^3.0.4" }, @@ -7755,7 +7811,6 @@ "integrity": "sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "@inquirer/external-editor": "^1.0.0", "ansi-escapes": "^4.2.1", @@ -7783,7 +7838,6 @@ "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", "devOptional": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "tslib": "^2.1.0" } @@ -7793,8 +7847,7 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "devOptional": true, - "license": "0BSD", - "peer": true + "license": "0BSD" }, "node_modules/internal-slot": { "version": "1.1.0", @@ -7969,6 +8022,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -8182,7 +8250,6 @@ "integrity": "sha512-Cv4OpPTHAK9kHYzkzCrof3VJh7H/PrG2MBUMvvJebaaUMbqhm0YAtXnvh0I3Hnj2tMZWwrRROWLSgfJrKqWmlQ==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "scoped-regex": "^2.0.0" }, @@ -8307,8 +8374,7 @@ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", "devOptional": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/is-weakmap": { "version": "2.0.2", @@ -8356,8 +8422,20 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/isarray": { - "version": "0.0.1", + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", "dev": true, @@ -8465,7 +8543,6 @@ "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "define-data-property": "^1.1.4", "es-object-atoms": "^1.0.0", @@ -8516,6 +8593,7 @@ "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", @@ -9662,7 +9740,6 @@ "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", "devOptional": true, "license": "ISC", - "peer": true, "funding": { "url": "https://github.com/sponsors/isaacs" } @@ -9687,6 +9764,18 @@ "dev": true, "license": "MIT" }, + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", @@ -9711,7 +9800,6 @@ "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", @@ -9727,16 +9815,14 @@ "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-5.2.0.tgz", "integrity": "sha512-6ufhP9SHjb7jibNFrNxyFZ6od3g+An6Ai9mhGRvcYe8UJlH0prseN64M+6ZBBUoKYHZsitDP42gAJ8+eVWr3lw==", "devOptional": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "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==", "devOptional": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/just-extend": { "version": "4.2.1", @@ -9769,8 +9855,7 @@ "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", "dev": true, - "license": "CC0-1.0", - "peer": true + "license": "CC0-1.0" }, "node_modules/language-tags": { "version": "1.0.9", @@ -9778,7 +9863,6 @@ "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "language-subtag-registry": "^0.3.20" }, @@ -9810,6 +9894,18 @@ "node": ">= 0.8.0" } }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -9822,7 +9918,6 @@ "integrity": "sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "graceful-fs": "^4.1.5", "js-yaml": "^3.13.0", @@ -9839,7 +9934,6 @@ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "sprintf-js": "~1.0.2" } @@ -9850,7 +9944,6 @@ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -9865,7 +9958,6 @@ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "devOptional": true, "license": "MIT", - "peer": true, "engines": { "node": ">=6" } @@ -9876,7 +9968,6 @@ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "devOptional": true, "license": "MIT", - "peer": true, "engines": { "node": ">=4" } @@ -9887,7 +9978,6 @@ "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=6.11.5" } @@ -9962,7 +10052,6 @@ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, @@ -10083,7 +10172,6 @@ "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "agentkeepalive": "^4.1.3", "cacache": "^15.2.0", @@ -10112,7 +10200,6 @@ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "yallist": "^4.0.0" }, @@ -10125,8 +10212,7 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "devOptional": true, - "license": "ISC", - "peer": true + "license": "ISC" }, "node_modules/makeerror": { "version": "1.0.12", @@ -10154,7 +10240,6 @@ "integrity": "sha512-GftCCBs6EN8sz3BoWO1bCj8t7YBtT713d8bUgbhg9Iel5kFSqnSvCK06TYIDJAtJ51cSiWkM/YemlT0dfoFycw==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "@types/node": "^15.6.2", "@types/vinyl": "^2.0.4", @@ -10235,8 +10320,7 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.9.tgz", "integrity": "sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==", "devOptional": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/merge-stream": { "version": "2.0.0", @@ -10358,7 +10442,6 @@ "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "minipass": "^3.1.0", "minipass-sized": "^1.0.3", @@ -10460,7 +10543,6 @@ "integrity": "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "chownr": "^2.0.0", "infer-owner": "^1.0.4", @@ -10588,6 +10670,12 @@ "dev": true, "license": "MIT" }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "license": "MIT" + }, "node_modules/nise": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/nise/-/nise-4.1.0.tgz", @@ -10648,7 +10736,6 @@ "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "env-paths": "^2.2.0", "glob": "^7.1.4", @@ -10675,7 +10762,6 @@ "deprecated": "This package is no longer supported.", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" @@ -10691,7 +10777,6 @@ "deprecated": "This package is no longer supported.", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.3", @@ -10713,7 +10798,6 @@ "deprecated": "This package is no longer supported.", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "are-we-there-yet": "^3.0.0", "console-control-strings": "^1.1.0", @@ -10730,7 +10814,6 @@ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -10746,7 +10829,6 @@ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "safe-buffer": "~5.2.0" } @@ -10795,7 +10877,6 @@ "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "abbrev": "1" }, @@ -10860,7 +10941,6 @@ "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "npm-normalize-package-bin": "^1.0.1" } @@ -10871,7 +10951,6 @@ "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", "devOptional": true, "license": "BSD-2-Clause", - "peer": true, "dependencies": { "semver": "^7.1.1" }, @@ -10884,8 +10963,7 @@ "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==", "devOptional": true, - "license": "ISC", - "peer": true + "license": "ISC" }, "node_modules/npm-package-arg": { "version": "8.1.5", @@ -10893,7 +10971,6 @@ "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "hosted-git-info": "^4.0.1", "semver": "^7.3.4", @@ -10909,7 +10986,6 @@ "integrity": "sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "glob": "^7.1.6", "ignore-walk": "^4.0.1", @@ -10929,7 +11005,6 @@ "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "npm-install-checks": "^4.0.0", "npm-normalize-package-bin": "^1.0.1", @@ -10943,7 +11018,6 @@ "integrity": "sha512-Df5QT3RaJnXYuOwtXBXS9BWs+tHH2olvkCLh6jcR/b/u3DvPMlp3J0TvvYwplPKxHMOwfg287PYih9QqaVFoKA==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "make-fetch-happen": "^10.0.1", "minipass": "^3.1.6", @@ -10962,7 +11036,6 @@ "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "@gar/promisify": "^1.1.3", "semver": "^7.3.5" @@ -10978,7 +11051,6 @@ "deprecated": "This functionality has been moved to @npmcli/fs", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "mkdirp": "^1.0.4", "rimraf": "^3.0.2" @@ -10993,7 +11065,6 @@ "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "devOptional": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 10" } @@ -11004,7 +11075,6 @@ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "balanced-match": "^1.0.0" } @@ -11015,7 +11085,6 @@ "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "@npmcli/fs": "^2.1.0", "@npmcli/move-file": "^2.0.0", @@ -11047,7 +11116,6 @@ "deprecated": "Glob versions prior to v9 are no longer supported", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -11068,7 +11136,6 @@ "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "@tootallnate/once": "2", "agent-base": "6", @@ -11084,7 +11151,6 @@ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "devOptional": true, "license": "ISC", - "peer": true, "engines": { "node": ">=12" } @@ -11095,7 +11161,6 @@ "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "agentkeepalive": "^4.2.1", "cacache": "^16.1.0", @@ -11124,7 +11189,6 @@ "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "minipass": "^3.1.6", "minipass-sized": "^1.0.3", @@ -11143,7 +11207,6 @@ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -11157,7 +11220,6 @@ "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "agent-base": "^6.0.2", "debug": "^4.3.3", @@ -11173,7 +11235,6 @@ "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "minipass": "^3.1.1" }, @@ -11187,7 +11248,6 @@ "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "unique-slug": "^3.0.0" }, @@ -11201,7 +11261,6 @@ "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "imurmurhash": "^0.1.4" }, @@ -11228,7 +11287,6 @@ "deprecated": "This package is no longer supported.", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "are-we-there-yet": "^2.0.0", "console-control-strings": "^1.1.0", @@ -11242,7 +11300,6 @@ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "devOptional": true, "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -11467,9 +11524,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "devOptional": true, "license": "MIT", - "peer": true, "engines": { "node": ">=4" } @@ -11538,7 +11593,6 @@ "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "eventemitter3": "^4.0.4", "p-timeout": "^3.2.0" @@ -11556,7 +11610,6 @@ "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "p-finally": "^1.0.0" }, @@ -11570,7 +11623,6 @@ "integrity": "sha512-UJKdSzgd3KOnXXAtqN5+/eeHcvTn1hBkesEmElVgvO/NAYcxAvmjzIGmnNd3Tb/gRAvMBdNRFD4qAWdHxY6QXg==", "devOptional": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "debug": "^4.3.2", "p-queue": "^6.6.2" @@ -11600,7 +11652,6 @@ "integrity": "sha512-CdYEl03JDrRO3x18uHjBYA9TyoW8gy+ThVcypcDkxPtKlw76e4ejhYB6i9lJ+/cebbjpqPW/CijjqxwDTts8Ow==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "@npmcli/git": "^2.1.0", "@npmcli/installed-package-contents": "^1.0.6", @@ -11648,7 +11699,6 @@ "integrity": "sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "json-parse-even-better-errors": "^2.3.1", "just-diff": "^5.0.1", @@ -11793,7 +11843,6 @@ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "devOptional": true, "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -11963,7 +12012,6 @@ "integrity": "sha512-lEHd+yEm22jXdCphDrkvIJQU66EuLojPPtvZkpKIkiD+l0DMThF/niqZKJSoU8Vl7iuvtmzyMhir9LdVy5WMnA==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "find-up": "^5.0.0", "find-yarn-workspace-root2": "1.2.16", @@ -11980,7 +12028,6 @@ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -11998,7 +12045,6 @@ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "p-locate": "^5.0.0" }, @@ -12015,7 +12061,6 @@ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "p-limit": "^3.0.2" }, @@ -12042,6 +12087,7 @@ "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, "license": "MIT", + "peer": true, "bin": { "prettier": "bin-prettier.js" }, @@ -12071,7 +12117,6 @@ "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", "devOptional": true, "license": "MIT", - "peer": true, "engines": { "node": ">=6" }, @@ -12128,8 +12173,7 @@ "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-1.0.0.tgz", "integrity": "sha512-aCk8AO51s+4JyuYGg3Q/a6gnrlDO09NpVWePtjp7xwphcoQ04x5WAfCyugcsbLooWcMJ87CLkD4+604IckEdhg==", "devOptional": true, - "license": "ISC", - "peer": true + "license": "ISC" }, "node_modules/process": { "version": "0.11.10", @@ -12137,7 +12181,6 @@ "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "devOptional": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 0.6.0" } @@ -12165,7 +12208,6 @@ "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", "devOptional": true, "license": "ISC", - "peer": true, "funding": { "url": "https://github.com/sponsors/isaacs" } @@ -12176,7 +12218,6 @@ "integrity": "sha512-1vTUnfI2hzui8AEIixbdAJlFY4LFDXqQswy/2eOlThAscXCY4It8FdVuI0fMJGAB2aWGbdQf/gv0skKYXmdrHA==", "devOptional": true, "license": "ISC", - "peer": true, "funding": { "url": "https://github.com/sponsors/isaacs" } @@ -12220,7 +12261,6 @@ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -12232,8 +12272,7 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/pump": { "version": "3.0.3", @@ -12310,7 +12349,6 @@ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "safe-buffer": "^5.1.0" } @@ -12354,7 +12392,6 @@ "integrity": "sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g==", "devOptional": true, "license": "ISC", - "peer": true, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } @@ -12388,7 +12425,6 @@ "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "json-parse-even-better-errors": "^2.3.0", "npm-normalize-package-bin": "^1.0.1" @@ -12574,7 +12610,6 @@ "deprecated": "This functionality has been moved to @npmcli/fs", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "debuglog": "^1.0.1", "dezalgo": "^1.0.0", @@ -12655,8 +12690,7 @@ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", "devOptional": true, - "license": "ISC", - "peer": true + "license": "ISC" }, "node_modules/replace-ext": { "version": "1.0.1", @@ -12664,7 +12698,6 @@ "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", "devOptional": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 0.10" } @@ -13027,7 +13060,6 @@ "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", @@ -13066,7 +13098,6 @@ "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -13079,8 +13110,7 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/scoped-regex": { "version": "2.1.0", @@ -13088,15 +13118,14 @@ "integrity": "sha512-g3WxHrqSWCZHGHlSrF51VXFdjImhwvH8ZO/pryFH56Qi0cDsZfylQa/t0jCzVQFNbNvM00HfHjkDPEuarKDSWQ==", "devOptional": true, "license": "MIT", - "peer": true, "engines": { "node": ">=8" } }, "node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -13111,7 +13140,6 @@ "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, "license": "BSD-3-Clause", - "peer": true, "dependencies": { "randombytes": "^2.1.0" } @@ -13209,6 +13237,158 @@ "node": ">=4" } }, + "node_modules/shx": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/shx/-/shx-0.4.0.tgz", + "integrity": "sha512-Z0KixSIlGPpijKgcH6oCMCbltPImvaKy0sGH8AkLRXw1KyzpKtaCTizP2xen+hNDqVF4xxgvA0KXSb9o4Q6hnA==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.8", + "shelljs": "^0.9.2" + }, + "bin": { + "shx": "lib/cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/shx/node_modules/cross-spawn": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/shx/node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/shx/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/shx/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shx/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "license": "MIT", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/shx/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/shx/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/shx/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shx/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shx/node_modules/shelljs": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.9.2.tgz", + "integrity": "sha512-S3I64fEiKgTZzKCC46zT/Ib9meqofLrQVbpSswtjFfAVDW+AZ54WTnAM/3/yENoxz/V1Cy6u3kiiEbQ4DNphvw==", + "license": "BSD-3-Clause", + "dependencies": { + "execa": "^1.0.0", + "fast-glob": "^3.3.2", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/shx/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, "node_modules/side-channel": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", @@ -13688,7 +13868,6 @@ "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "agent-base": "^6.0.2", "debug": "^4.3.3", @@ -13789,7 +13968,6 @@ "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "minipass": "^3.1.1" }, @@ -13911,7 +14089,6 @@ "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -13927,7 +14104,6 @@ "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", @@ -13956,7 +14132,6 @@ "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "define-properties": "^1.1.3", "es-abstract": "^1.17.5" @@ -14077,7 +14252,6 @@ "integrity": "sha512-1sUIL1jck0T1mhOLP2c696BIznzT525Lkub+n4jjMHjhjhoAQA6Ye659DxdlZBr0aLDMQoTxKIpnlqxgtwjsuQ==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "is-utf8": "^0.2.1" }, @@ -14091,7 +14265,6 @@ "integrity": "sha512-yH0+mD8oahBZWnY43vxs4pSinn8SMKAdml/EOGBewoe1Y0Eitd0h2Mg3ZRiXruUW6L4P+lvZiEgbh0NgUGia1w==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "first-chunk-stream": "^2.0.0", "strip-bom": "^2.0.0" @@ -14106,7 +14279,6 @@ "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "is-utf8": "^0.2.0" }, @@ -14114,6 +14286,15 @@ "node": ">=0.10.0" } }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -14296,7 +14477,6 @@ "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==", "dev": true, "license": "BSD-2-Clause", - "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.14.0", @@ -14316,7 +14496,6 @@ "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", @@ -14352,7 +14531,6 @@ "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -14368,7 +14546,6 @@ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -14385,7 +14562,6 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -14398,8 +14574,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/terser/node_modules/source-map-support": { "version": "0.5.21", @@ -14407,7 +14582,6 @@ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -14504,6 +14678,52 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -14547,8 +14767,7 @@ "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-1.0.4.tgz", "integrity": "sha512-whw60l7r+8ZU8Tu/Uc2yxtc4ZTZbR/PF3u1IPNKGQ6p8EICLb3Z2lAgoqw9bqYd8IkgnsaOcLzYHFckjqNsf0g==", "devOptional": true, - "license": "ISC", - "peer": true + "license": "ISC" }, "node_modules/ts-jest": { "version": "29.4.1", @@ -14653,6 +14872,7 @@ "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "arg": "^4.1.0", "create-require": "^1.1.0", @@ -15055,7 +15275,6 @@ "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "devOptional": true, "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" @@ -15148,6 +15367,7 @@ "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -15190,9 +15410,9 @@ } }, "node_modules/undici-types": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz", - "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==", + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "license": "MIT" }, "node_modules/uniq": { @@ -15208,7 +15428,6 @@ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "unique-slug": "^2.0.0" } @@ -15219,7 +15438,6 @@ "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "imurmurhash": "^0.1.4" } @@ -15230,6 +15448,15 @@ "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", "license": "ISC" }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/untildify": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", @@ -15325,7 +15552,6 @@ "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", "devOptional": true, "license": "ISC", - "peer": true, "dependencies": { "builtins": "^1.0.3" } @@ -15336,7 +15562,6 @@ "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "clone": "^2.1.1", "clone-buffer": "^1.0.0", @@ -15355,7 +15580,6 @@ "integrity": "sha512-BoJDj+ca3D9xOuPEM6RWVtWQtvEPQiQYn82LvdxhLWplfQsBzBqtgK0yhCP0s1BNTi6dH9BO+dzybvyQIacifg==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "graceful-fs": "^4.1.2", "pify": "^2.3.0", @@ -15414,8 +15638,7 @@ "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz", "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==", "devOptional": true, - "license": "ISC", - "peer": true + "license": "ISC" }, "node_modules/walkdir": { "version": "0.4.1", @@ -15443,7 +15666,6 @@ "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -15474,7 +15696,6 @@ "integrity": "sha512-7b0dTKR3Ed//AD/6kkx/o7duS8H3f1a4w3BYpIriX4BzIhjkn4teo05cptsxvLesHFKK5KObnadmCHBwGc+51A==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", @@ -15524,7 +15745,6 @@ "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=10.13.0" } @@ -15549,7 +15769,6 @@ "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=10.13.0" }, @@ -15662,7 +15881,6 @@ "integrity": "sha512-MOiaDbA5ZZgUjkeMWM5EkJp4loW5ZRoa5bc3/aeMox/PJelMhE6t7S/mLuiY43DBupyxH+S0U1bTui9kWUlmsw==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "load-yaml-file": "^0.2.0", "path-exists": "^4.0.0" @@ -15702,6 +15920,18 @@ "string-width": "^1.0.2 || 2 || 3 || 4" } }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "license": "MIT", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/winston": { "version": "2.4.7", "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.7.tgz", @@ -15742,7 +15972,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true, "license": "MIT" }, "node_modules/wrap-ansi": { @@ -15751,7 +15980,6 @@ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -15871,7 +16099,6 @@ "integrity": "sha512-/+ODrTUHtlDPRH9qIC0JREH8+7nsRcjDl3Bxn2Xo/rvAaVvixH5275jHwg0C85g4QsF4P6M2ojfScPPAl+pLAg==", "devOptional": true, "license": "BSD-2-Clause", - "peer": true, "dependencies": { "@npmcli/arborist": "^4.0.4", "are-we-there-yet": "^2.0.0", @@ -15938,7 +16165,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -15950,7 +16176,6 @@ "integrity": "sha512-pRxBna3MJe6HKnBGsDyMv8ETbptw3axEdYHoqNh7gu5oDcew8fs0xnivZGm06Ogk8zGAJ9VX+OPEr2GXEQK4dg==", "devOptional": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 10" } @@ -15961,7 +16186,6 @@ "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "devOptional": true, "license": "BSD-3-Clause", - "peer": true, "engines": { "node": ">=0.3.1" } @@ -15972,7 +16196,6 @@ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -15990,7 +16213,6 @@ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "p-locate": "^5.0.0" }, @@ -16007,7 +16229,6 @@ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "p-limit": "^3.0.2" }, @@ -16024,7 +16245,6 @@ "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", @@ -16042,7 +16262,6 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "devOptional": true, "license": "MIT", - "peer": true, "engines": { "node": ">=8" } @@ -16053,7 +16272,6 @@ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "safe-buffer": "~5.2.0" } diff --git a/package.json b/package.json index b46d0890d..27c8515fd 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "type": "git", "url": "git+https://github.com/hyperledger-labs/fablo.git" }, + "keywords": [ "hyperledger fabric", "blockchain", @@ -21,8 +22,13 @@ "homepage": "https://github.com/hyperledger-labs/fablo#readme", "scripts": { "clean": "rimraf generators", - "build": "tsc", + "build": "shx rm -rf dist && tsc -b", + "postpack": "shx rm -f oclif.manifest.json", + "posttest": "npm run lint", + "prepack": "oclif manifest && oclif readme", + "test": "mocha --forbid-only \"test/**/*.test.ts\"", "build:dist": "npm run clean && tsc -p tsconfig-dist.json && npm run copydeps", + "version": "oclif readme && git add README.md", "copydeps": "copyfiles --all --up 1 'src/*/templates/**' generators", "lint": "eslint --fix src e2e && madge --circular --warning src e2e && ejslint src", "test:unit": "jest src", @@ -30,19 +36,24 @@ "test:e2e-update": "./fablo-build.sh && jest e2e --runInBand --updateSnapshot && ./lint.sh" }, "dependencies": { + "@oclif/core": "^4.8.0", "chalk": "^4.1.0", + "fs-extra": "^11.3.2", "got": "^11.8.5", "js-yaml": "^4.1.0", "jsonschema": "^1.2.6", "lodash": "^4.17.21", + "shx": "^0.4.0", "winston": "^2.4.7", "yeoman-generator": "^5.10.0" }, "devDependencies": { + "@types/fs-extra": "^11.0.4", "@types/jest": "^27.0.1", "@types/jest-json-schema": "^2.1.3", "@types/js-yaml": "^4.0.1", "@types/lodash": "^4.14.168", + "@types/node": "^18.19.130", "@types/node-fetch": "^2.5.10", "@types/yeoman-generator": "^5.2.14", "@typescript-eslint/eslint-plugin": "^4.22.0", @@ -66,5 +77,14 @@ "ts-node": "^9.1.1", "typescript": "^4.2.4", "yeoman-test": "^5.1.0" + }, + "bin": { + "ffablo": "./bin/run.js" + }, + "oclif": { + "bin": "ffablo", + "commands": "./dist/src/commands", + "dirname": "ffablo", + "topicSeparator": " " } } diff --git a/tsconfig.json b/tsconfig.json index 169b046ec..ecbe5fe8a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,8 +1,9 @@ { "$schema": "https://json.schemastore.org/tsconfig", "compilerOptions": { - "noEmit": true, + // "noEmit": true, "rootDir": "./", + "outDir": "./dist", "target": "es2019", "module": "commonjs", "sourceMap": true, @@ -16,9 +17,12 @@ "skipLibCheck": true }, "include": [ - "src", + "src/**/*", "e2e" ], + "ts-node": { + "esm": true + }, "exclude": [ "node_modules", "generators" From 0fcee4da25b7bcfd114a6d8af631d704b770aea6 Mon Sep 17 00:00:00 2001 From: OsamaRab3 Date: Wed, 19 Nov 2025 18:18:28 +0200 Subject: [PATCH 02/11] intial fablo up --- src/commands/up/index.ts | 55 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 src/commands/up/index.ts diff --git a/src/commands/up/index.ts b/src/commands/up/index.ts new file mode 100644 index 000000000..d925e5054 --- /dev/null +++ b/src/commands/up/index.ts @@ -0,0 +1,55 @@ +import { Command, Flags } from '@oclif/core'; +import { spawn } from 'child_process'; +import * as path from "path"; + + +export default class Up extends Command { + static override description = 'The up command creates the initial configuration and starts the Hyperledger Fabric network on Docker.' + + static flags = { + config: Flags.string({ + char: 'c', + description: 'Path to fablo config file (JSON or YAML)', + required: false, + default: 'fablo-config.json', + }) + } + + async run(): Promise { + const { flags } = await this.parse(Up) + + const shPath = path.resolve(__dirname, '../../../../fablo.sh') + const args = ['up'] + if (flags.config) args.push(flags.config) + + this.log(`Starting network with: ${shPath} ${args.join(' ')}\n`) + const child = spawn(shPath, args, { + stdio: ['inherit', 'pipe', 'pipe'], + shell: process.platform === 'win32' ? 'bash.exe' : true, + }) + + child.stdout?.on('data', (data) => { + process.stdout.write(data.toString()) + }) + child.stderr?.on('data', (data) => { + process.stderr.write(data.toString()) + }) + + child.on('close', (code) => { + if (code === 0) { + this.log('\nNetwork started successfully!') + } else { + this.error(`\nFablo up failed with exit code: ${code}`) + } + }) + + process.on('SIGINT', () => { + child.kill('SIGINT') + process.exit() + }) + } + + + + +} From 075eb6373af80c285ba4af9bbef4f7df87b98d09 Mon Sep 17 00:00:00 2001 From: OsamaRab3 Date: Wed, 19 Nov 2025 18:18:59 +0200 Subject: [PATCH 03/11] inital fablo stop --- src/commands/stop/index.ts | 44 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/commands/stop/index.ts diff --git a/src/commands/stop/index.ts b/src/commands/stop/index.ts new file mode 100644 index 000000000..f7d7505d7 --- /dev/null +++ b/src/commands/stop/index.ts @@ -0,0 +1,44 @@ +import { Command } from '@oclif/core'; +import { spawn } from 'child_process'; +import * as path from "path"; + + +export default class Stop extends Command { + static override description = 'Stop the Hyperledger Fabric network for configuration in the current directory.'; + + async run(): Promise { + + const shPath = path.resolve(__dirname, '../../../../fablo.sh') + const args = ['stop'] + + this.log(`Starting network with: ${shPath} ${args.join(' ')}\n`) + const child = spawn(shPath, args, { + stdio: ['inherit', 'pipe', 'pipe'], + shell: process.platform === 'win32' ? 'bash.exe' : true, + }) + + child.stdout?.on('data', (data) => { + process.stdout.write(data.toString()) + }) + child.stderr?.on('data', (data) => { + process.stderr.write(data.toString()) + }) + + child.on('close', (code) => { + if (code === 0) { + this.log('\nNetwork Stop successfully!') + } else { + this.error(`\nFablo Stop failed with exit code: ${code}`) + } + }) + + process.on('SIGINT', () => { + child.kill('SIGINT') + process.exit() + }) + } + + + + +} From e400cd9c0498f8d4962a94146eb4def1cd8c521f Mon Sep 17 00:00:00 2001 From: OsamaRab3 Date: Wed, 19 Nov 2025 18:19:44 +0200 Subject: [PATCH 04/11] inital fablo down --- src/commands/down/index.ts | 44 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/commands/down/index.ts diff --git a/src/commands/down/index.ts b/src/commands/down/index.ts new file mode 100644 index 000000000..c234678cd --- /dev/null +++ b/src/commands/down/index.ts @@ -0,0 +1,44 @@ +import { Command } from '@oclif/core'; +import {spawn} from 'child_process'; +import * as path from "path"; + + +export default class Down extends Command { + static override description = 'Downs the Hyperledger Fabric network for configuration in the current directory.'; + + async run(): Promise { + + const shPath = path.resolve(__dirname, '../../../../fablo.sh') + const args = ['down'] + + this.log(`Starting network with: ${shPath} ${args.join(' ')}\n`) + const child = spawn(shPath, args, { + stdio: ['inherit', 'pipe', 'pipe'], + shell: process.platform === 'win32' ? 'bash.exe' : true, + }) + + child.stdout?.on('data', (data) => { + process.stdout.write(data.toString()) + }) + child.stderr?.on('data', (data) => { + process.stderr.write(data.toString()) + }) + + child.on('close', (code) => { + if (code === 0) { + this.log('\nNetwork Down successfully!') + } else { + this.error(`\nFablo down failed with exit code: ${code}`) + } + }) + + process.on('SIGINT', () => { + child.kill('SIGINT') + process.exit() + }) + } + + + + +} From fddd5d4bb0b20402ff645823375f86c9e5404271 Mon Sep 17 00:00:00 2001 From: OsamaRab3 Date: Wed, 19 Nov 2025 18:20:16 +0200 Subject: [PATCH 05/11] fablo splash --- src/commands/index.ts | 1 + src/fablolog.ts | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 src/commands/index.ts create mode 100644 src/fablolog.ts diff --git a/src/commands/index.ts b/src/commands/index.ts new file mode 100644 index 000000000..e32b0b2e5 --- /dev/null +++ b/src/commands/index.ts @@ -0,0 +1 @@ +export {run} from '@oclif/core' diff --git a/src/fablolog.ts b/src/fablolog.ts new file mode 100644 index 000000000..75ce8f928 --- /dev/null +++ b/src/fablolog.ts @@ -0,0 +1,25 @@ +export function printSplash() { + const darkGray = '\x1b[90m'; + const end = '\x1b[0m'; + console.log(""); + const monthDay = new Date().getMonth() * 100 + new Date().getDate(); + if (monthDay > 1215) { + console.log("┌────── * ┌─────. ╷ .────."); + console.log("│ _/_\\_ │ │ │ ╱ ╲ "); + console.log("├───── _/___\\_ ├─────: │ │ │"); + console.log("│ _/_____\\_ │ │ │ ╲ ╱ "); + console.log(`╵ |_| └─────' └────── '────' v${process.env.FABLO_VERSION || ''}`.padEnd(80)); + } else { + console.log("┌────── .─. ┌─────. ╷ .────."); + console.log("│ / \\ │ │ │ ╱ ╲ "); + console.log("├───── / \\ ├─────: │ │ │"); + console.log("│ /───────\\ │ │ │ ╲ ╱ "); + console.log(`╵ / \\ └─────' └────── '────' v${process.env.FABLO_VERSION || ''}`.padEnd(80)); + } + console.log(`${darkGray}┌┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┐`); + console.log("│ https://fablo.io | created at SoftwareMill | backed by Hyperledger Foundation│"); + console.log(`└┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┘${end}`); +} + + + From d7b3fd29596ee82f62467b4233040578ed2f7a34 Mon Sep 17 00:00:00 2001 From: OsamaRab3 Date: Wed, 19 Nov 2025 18:21:48 +0200 Subject: [PATCH 06/11] inital fablo prune --- src/commands/prune/index.ts | 44 +++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/commands/prune/index.ts diff --git a/src/commands/prune/index.ts b/src/commands/prune/index.ts new file mode 100644 index 000000000..b0543bb25 --- /dev/null +++ b/src/commands/prune/index.ts @@ -0,0 +1,44 @@ +import { Command } from '@oclif/core'; +import {spawn} from 'child_process'; +import * as path from "path"; + + +export default class Prune extends Command { + static override description = 'Prune the network and removes all generated files'; + + async run(): Promise { + + const shPath = path.resolve(__dirname, '../../../../fablo.sh') + const args = ['prune'] + + this.log(`Starting network with: ${shPath} ${args.join(' ')}\n`) + const child = spawn(shPath, args, { + stdio: ['inherit', 'pipe', 'pipe'], + shell: process.platform === 'win32' ? 'bash.exe' : true, + }) + + child.stdout?.on('data', (data) => { + process.stdout.write(data.toString()) + }) + child.stderr?.on('data', (data) => { + process.stderr.write(data.toString()) + }) + + child.on('close', (code) => { + if (code === 0) { + this.log('\nNetwork Prune successfully!') + } else { + this.error(`\nFablo Prune failed with exit code: ${code}`) + } + }) + + process.on('SIGINT', () => { + child.kill('SIGINT') + process.exit() + }) + } + + + + +} From c718efec9fe8671060c84443637933ed682d70cb Mon Sep 17 00:00:00 2001 From: OsamaRab3 Date: Wed, 19 Nov 2025 18:22:47 +0200 Subject: [PATCH 07/11] inital fablo recreate --- src/commands/recreate/index.ts | 54 ++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/commands/recreate/index.ts diff --git a/src/commands/recreate/index.ts b/src/commands/recreate/index.ts new file mode 100644 index 000000000..ccb98aeac --- /dev/null +++ b/src/commands/recreate/index.ts @@ -0,0 +1,54 @@ +import { Command, Flags } from '@oclif/core'; +import {spawn} from 'child_process'; +import * as path from "path"; + + +export default class Recreate extends Command { + static override description = "Prunes and ups the network. Default config file path is '\$(pwd)/fablo-config.json' or '\$(pwd)/fablo-config.yaml'" + static flags = { + config: Flags.string({ + char: 'c', + description: 'Path to fablo config file (JSON or YAML)', + required: false, + default: 'fablo-config.json', + }) + } + + async run(): Promise { + const { flags } = await this.parse(Recreate) + + const shPath = path.resolve(__dirname, '../../../../fablo.sh') + const args = ['recreate'] + if (flags.config) args.push(flags.config) + + this.log(`Starting network with: ${shPath} ${args.join(' ')}\n`) + const child = spawn(shPath, args, { + stdio: ['inherit', 'pipe', 'pipe'], + shell: process.platform === 'win32' ? 'bash.exe' : true, + }) + + child.stdout?.on('data', (data) => { + process.stdout.write(data.toString()) + }) + child.stderr?.on('data', (data) => { + process.stderr.write(data.toString()) + }) + + child.on('close', (code) => { + if (code === 0) { + this.log('\nNetwork recreate successfully!') + } else { + this.error(`\nFablo recreate failed with exit code: ${code}`) + } + }) + + process.on('SIGINT', () => { + child.kill('SIGINT') + process.exit() + }) + } + + + + +} From 9cf9b46002243009227581cf61916110191dea8b Mon Sep 17 00:00:00 2001 From: OsamaRab3 Date: Wed, 19 Nov 2025 18:23:46 +0200 Subject: [PATCH 08/11] inital fablo start --- src/commands/start/index.ts | 41 +++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/commands/start/index.ts diff --git a/src/commands/start/index.ts b/src/commands/start/index.ts new file mode 100644 index 000000000..7e7eab8da --- /dev/null +++ b/src/commands/start/index.ts @@ -0,0 +1,41 @@ +import { Command } from '@oclif/core'; +import {spawn} from 'child_process'; +import * as path from "path"; + + +export default class Start extends Command { + static override description = 'Start the Hyperledger Fabric network for configuration in the current directory.'; + + async run(): Promise { + + const shPath = path.resolve(__dirname, '../../../../fablo.sh') + const args = ['start'] + + this.log(`Starting network with: ${shPath} ${args.join(' ')}\n`) + const child = spawn(shPath, args, { + stdio: ['inherit', 'pipe', 'pipe'], + shell: process.platform === 'win32' ? 'bash.exe' : true, + }) + + child.stdout?.on('data', (data) => { + process.stdout.write(data.toString()) + }) + child.stderr?.on('data', (data) => { + process.stderr.write(data.toString()) + }) + + child.on('close', (code) => { + if (code === 0) { + this.log('\nNetwork Start successfully!') + } else { + this.error(`\nFablo Start failed with exit code: ${code}`) + } + }) + + process.on('SIGINT', () => { + child.kill('SIGINT') + process.exit() + }) + } + +} From 6bc7987ba34a89b74ddeb2fdede74e4ae516960a Mon Sep 17 00:00:00 2001 From: OsamaRab3 Date: Wed, 19 Nov 2025 18:32:20 +0200 Subject: [PATCH 09/11] inital fablo init --- src/commands/init/index.ts | 193 +++++++++++++++++++++++++++++++++++++ 1 file changed, 193 insertions(+) create mode 100644 src/commands/init/index.ts diff --git a/src/commands/init/index.ts b/src/commands/init/index.ts new file mode 100644 index 000000000..e945381f4 --- /dev/null +++ b/src/commands/init/index.ts @@ -0,0 +1,193 @@ +import { Args, Command } from '@oclif/core' +import * as chalk from "chalk"; +import { GlobalJson, FabloConfigJson, ChaincodeJson } from "../../types/FabloConfigJson"; +import * as path from 'path'; +import * as fs from 'fs-extra'; +import { version } from "../../../package.json"; +import { printSplash } from '../../fablolog'; + +function getDefaultFabloConfig(): FabloConfigJson { + return { + $schema: `https://github.com/hyperledger-labs/fablo/releases/download/${version}/schema.json`, + global: { + fabricVersion: "3.1.0", + tls: true, + peerDevMode: false, + }, + orgs: [ + { + organization: { + name: "Orderer", + domain: "orderer.example.com", + mspName: "OrdererMSP", + }, + ca: { + prefix: "ca", + db: "sqlite", + }, + orderers: [ + { + groupName: "group1", + type: "BFT", + instances: 2, + prefix: "orderer", + }, + ], + }, + { + organization: { + name: "Org1", + domain: "org1.example.com", + mspName: "Org1MSP", + }, + ca: { + prefix: "ca", + db: "sqlite", + }, + orderers: [], + peer: { + instances: 2, + db: "LevelDb", + prefix: "peer", + }, + }, + ], + channels: [ + { + name: "my-channel1", + orgs: [ + { + name: "Org1", + peers: ["peer0", "peer1"], + }, + ], + }, + ], + chaincodes: [], + hooks: {}, + }; +} + +export default class Init extends Command { + static override description = + "Creates simple Fablo config in current directory with optional Node.js, chaincode, REST API and dev mode"; + + static args = { + feat: Args.string({ + description: 'feature node,dev,ccass,gateway,rest', + multiple: true + }) + } + async copySampleConfig(): Promise { + let fabloConfigJson = getDefaultFabloConfig(); + const { args } = await this.parse(Init); + + + const features: string[] = Array.isArray(args.feat) ? args.feat : args.feat ? [args.feat] : []; + + const flags: Record = features.reduce>((acc, v) => { + acc[v] = true; + return acc; + }, {}); + + if (flags.ccaas) { + if (flags.dev || flags.node) { + this.log(chalk.red("Error: --ccaas flag cannot be used together with --dev or --node flags")); + process.exit(1); + } + this.log("Creating sample CCAAS chaincode"); + printSplash(); + + const chaincodeConfig: ChaincodeJson = { + name: "chaincode1", + version: "0.0.1", + channel: "my-channel1", + lang: "ccaas", + image: "ghcr.io/fablo-io/fablo-sample-kv-node-chaincode:2.2.0", + privateData: [], + }; + fabloConfigJson = { + ...fabloConfigJson, + chaincodes: [...fabloConfigJson.chaincodes, chaincodeConfig], + }; + } + if (flags.node) { + console.log("Creating sample Node.js chaincode"); + printSplash(); + const source = path.join(__dirname, '../../../../samples/chaincodes/chaincode-kv-node'); + const destination = path.join(process.cwd(), 'chaincodes'); + fs.copySync(source, destination); + + // fs.copySync(source, path.join(process.cwd(), 'chaincodes')); + fs.writeFileSync(path.join(process.cwd(), 'samples/chaincodes/chaincode-kv-node/.nvmrc'), '12'); + + // force build on Node 12, since dev deps (@theledger/fabric-mock-stub) may not work on 16 + // fs.write(destination("chaincodes/chaincode-kv-node/.nvmrc"), "12"); + + const chaincodeConfig: ChaincodeJson = flags.dev + ? { + name: "chaincode1", + version: "0.0.1", + channel: "my-channel1", + lang: "ccaas", + image: "hyperledger/fabric-nodeenv:${FABRIC_NODEENV_VERSION:-2.5}", + chaincodeMountPath: "$CHAINCODES_BASE_DIR/chaincodes/chaincode-kv-node", + chaincodeStartCommand: "npm run start:watch:ccaas", + privateData: [], + } + : { + name: "chaincode1", + version: "0.0.1", + channel: "my-channel1", + lang: "node", + directory: "./chaincodes/chaincode-kv-node", + privateData: [], + }; + + const postGenerateHook = flags.dev ? { postGenerate: "npm i --prefix ./chaincodes/chaincode-kv-node" } : {}; + + fabloConfigJson = { + ...fabloConfigJson, + chaincodes: [...fabloConfigJson.chaincodes, chaincodeConfig], + hooks: { ...fabloConfigJson.hooks, ...postGenerateHook }, + }; + } + + if (flags.gateway) { + console.log("Creating sample Node.js gateway"); + printSplash(); + const src = path.join(__dirname, '../../../../samples/gateway'); + const dest = path.join(process.cwd(), 'gateway'); + fs.copySync(src, dest); + this.log('✔ Gateway generated successfully!'); + } + + if (flags.rest) { + const orgs = fabloConfigJson.orgs.map((org) => ({ ...org, tools: { fabloRest: true } })); + fabloConfigJson = { ...fabloConfigJson, orgs }; + } + + const engine = flags.kubernetes || flags.k8s ? "kubernetes" : "docker"; + + const global: GlobalJson = { + ...fabloConfigJson.global, + engine, + }; + fabloConfigJson = { ...fabloConfigJson, global }; + const rootPath = process.cwd(); + const outputFile = path.join(rootPath, 'fablo-config.json'); + // fs.write(this.destinationPath("fablo-config.json"), JSON.stringify(fabloConfigJson, undefined, 2)); + fs.writeFileSync(outputFile, JSON.stringify(fabloConfigJson, null, 2)); + + this.log("==========================================================="); + this.log(chalk.bold("Sample config file created! :)")); + this.log("You can start your network with 'fablo up' command"); + this.log("==========================================================="); + + } + + public async run(): Promise { + + await this.copySampleConfig(); + } +} From f267fb4122d2f5afec66722a850c10c6e18f5b67 Mon Sep 17 00:00:00 2001 From: OsamaRab3 Date: Thu, 20 Nov 2025 13:04:36 +0200 Subject: [PATCH 10/11] inital fablo export-topology Signed-off-by: OsamaRab3 --- .../export-topology/generateMermaidDiagram.ts | 104 ++++++++++++++++++ src/commands/export-topology/index.ts | 63 +++++++++++ 2 files changed, 167 insertions(+) create mode 100644 src/commands/export-topology/generateMermaidDiagram.ts create mode 100644 src/commands/export-topology/index.ts diff --git a/src/commands/export-topology/generateMermaidDiagram.ts b/src/commands/export-topology/generateMermaidDiagram.ts new file mode 100644 index 000000000..76c124c4d --- /dev/null +++ b/src/commands/export-topology/generateMermaidDiagram.ts @@ -0,0 +1,104 @@ +import { FabloConfigExtended, OrdererGroup } from "../../types/FabloConfigExtended"; + +const safeId = (id: string): string => id.replace(/[^a-zA-Z0-9_]/g, "_"); +const ordererGroupId = (g: OrdererGroup): string => safeId(`ord_group_${g.name}_${g.orderers?.[0].address}`); +const channelId = (channelName: string): string => safeId(`channel_${channelName}`); +const chaincodeId = (ccName: string): string => safeId(`chaincode_${ccName}`); + +export function generateMermaidDiagram(config: FabloConfigExtended): string { + const lines: string[] = ["graph LR"]; + lines.push(""); + lines.push("classDef subgraph_padding fill:none,stroke:none"); + + // Add organization subgraphs with orderer groups, CA, and peers + config.orgs?.forEach((org) => { + const orgId = safeId(org.domain); + lines.push(`\n subgraph ${orgId} [Organization: ${org.name}
${org.domain}]`); + const orgPaddingId = `${orgId}_padding`; + lines.push(` subgraph ${orgPaddingId} [ ]`); + lines.push(" direction RL"); + + // Orderer groups (nested inside org) + org.ordererGroups?.forEach((group) => { + if (group.orderers && group.orderers.length > 0) { + const consensusLabel = group.consensus ? group.consensus : ""; + const groupId = ordererGroupId(group); + lines.push(` subgraph ${groupId} [Orderer Group: ${group.name}
${consensusLabel}]`); + const groupPaddingId = `${groupId}_padding`; + lines.push(` subgraph ${groupPaddingId} [ ]`); + lines.push(" direction RL"); + group.orderers.forEach((orderer) => { + lines.push(` ${safeId(orderer.address)}[${orderer.address}]`); + }); + lines.push(` end`); + lines.push(` class ${groupPaddingId} subgraph_padding`); + lines.push(" end"); + } + }); + + // CA (at same level as orderer groups) + if (org.ca) { + const caAddress = org.ca.address; + const caLabel = org.ca.db ? `${caAddress}
${org.ca.db}` : `${caAddress}`; + lines.push(` ${safeId(caAddress)}([${caLabel}])`); + } + + // Peers (at same level as orderer groups) + org.peers?.forEach((peer) => { + const peerLabel = `${peer.address}
${peer.db.type}`; + lines.push(` ${safeId(peer.address)}[${peerLabel}]`); + }); + + lines.push(" end"); + lines.push(` class ${orgPaddingId} subgraph_padding`); + lines.push(" end"); + }); + + // Add channel subgraphs with chaincodes + config.channels?.forEach((channel) => { + const chId = channelId(channel.name); + lines.push(`\n subgraph ${chId} [Channel: ${channel.name}]`); + const chPaddingId = `${chId}_padding`; + lines.push(` subgraph ${chPaddingId} [ ]`); + + // Add chaincodes for this channel (using cylinder shape) + const channelChaincodes = config.chaincodes?.filter((cc) => cc.channel?.name === channel.name) ?? []; + channelChaincodes.forEach((cc) => { + lines.push(` ${chaincodeId(cc.name)}[[Chaincode: ${cc.name}]]`); + }); + + // Add dummy invisible node for empty channels to ensure visibility + if (channelChaincodes.length === 0) { + const emptyNodeId = `${chId}_empty`; + lines.push(` ${emptyNodeId}[" "]`); + lines.push(` style ${emptyNodeId} fill:#ffffff00,stroke:#ffffff00`); + } + + lines.push(" end"); + lines.push(` class ${chPaddingId} subgraph_padding`); + lines.push(" end"); + }); + + // Add connections + lines.push("\n %% Connections"); + + // Connect peers to channels + config.channels?.forEach((channel) => { + const channelIdStr = channelId(channel.name); + + channel.orgs?.forEach((orgOnChannel) => { + orgOnChannel.peers?.forEach((peer) => { + lines.push(` ${safeId(peer.address)} --> ${channelIdStr}`); + }); + }); + }); + + // Connect channels to orderer groups (reversed direction) + config.channels?.forEach((channel) => { + const channelIdStr = channelId(channel.name); + const ogId = ordererGroupId(channel.ordererGroup); + lines.push(` ${channelIdStr} --> ${ogId}`); + }); + + return lines.join("\n"); +} diff --git a/src/commands/export-topology/index.ts b/src/commands/export-topology/index.ts new file mode 100644 index 000000000..2588e9f7a --- /dev/null +++ b/src/commands/export-topology/index.ts @@ -0,0 +1,63 @@ +import { Args, Command } from '@oclif/core' +import parseFabloConfig from "../../utils/parseFabloConfig"; +import extendConfig from "../extend-config/extendConfig"; +import { generateMermaidDiagram } from "./generateMermaidDiagram"; +import { FabloConfigExtended } from "../../types/FabloConfigExtended"; +import * as fs from "fs"; +import * as path from "path"; + +export default class ExportTopology extends Command { + static override description = 'export-network-topology ' + private fabloConfigPath: string = ""; + private outputFile: string = ""; + + static override args = { + config: Args.string({ description: "Fablo config file path", + required: false, + default: 'fablo-config.json' + }), + output: Args.string({ description: "Output Mermaid file path", + required: false, + default: 'network-topology.mmd' + }), + + } + async writing(): Promise { + try { + if (!fs.existsSync(this.fabloConfigPath)) { + throw new Error(`Configuration file not found: ${this.fabloConfigPath}`); + } + + const configContent = fs.readFileSync(this.fabloConfigPath, 'utf-8'); + if (!configContent) { + throw new Error(`Failed to read configuration file: ${this.fabloConfigPath}`); + } + + const json = parseFabloConfig(configContent); + const configExtended: FabloConfigExtended = extendConfig(json); + const mermaidDiagram = generateMermaidDiagram(configExtended); + const outputDir = path.dirname(this.outputFile); + if (!fs.existsSync(outputDir)) { + fs.mkdirSync(outputDir, { recursive: true }); + } + fs.writeFileSync(this.outputFile, mermaidDiagram); + this.log(`✅ Network topology exported to ${this.outputFile}`); + + } catch (error: unknown) { + const errorMessage = error instanceof Error ? error.message : "An unknown error occurred"; + this.log(`❌ Error: ${errorMessage}`); + throw error; + } + } + + public async run(): Promise { + const { args } = await this.parse(ExportTopology) + const arg0 = args.config!; + const arg1 = args.output!; + + this.fabloConfigPath = path.isAbsolute(arg0) ? arg0 : path.resolve(process.cwd(), arg0); + this.outputFile = path.isAbsolute(arg1) ? arg1 : path.resolve(process.cwd(), arg1); + + await this.writing(); + } +} From 4ac1d9b59119065603be4880fa7e2ff8ab2a3d8e Mon Sep 17 00:00:00 2001 From: OsamaRab3 Date: Thu, 20 Nov 2025 13:14:07 +0200 Subject: [PATCH 11/11] inital extend-config Signed-off-by: OsamaRab3 --- src/{ => commands}/extend-config/defaults.ts | 2 +- .../extend-config/extendChaincodesConfig.ts | 6 +-- .../extend-config/extendChannelsConfig.ts | 4 +- .../extend-config/extendConfig.ts | 4 +- .../extend-config/extendGlobal.ts | 29 ++++++++------- .../extend-config/extendHooksConfig.ts | 4 +- .../extend-config/extendOrgsConfig.ts | 6 +-- src/commands/extend-config/index.ts | 37 +++++++++++++++++++ .../extend-config/mergeOrdererGroups.ts | 2 +- src/extend-config/index.ts | 30 --------------- 10 files changed, 67 insertions(+), 57 deletions(-) rename src/{ => commands}/extend-config/defaults.ts (89%) rename src/{ => commands}/extend-config/extendChaincodesConfig.ts (96%) rename src/{ => commands}/extend-config/extendChannelsConfig.ts (91%) rename src/{ => commands}/extend-config/extendConfig.ts (90%) rename src/{ => commands}/extend-config/extendGlobal.ts (77%) rename src/{ => commands}/extend-config/extendHooksConfig.ts (74%) rename src/{ => commands}/extend-config/extendOrgsConfig.ts (98%) create mode 100644 src/commands/extend-config/index.ts rename src/{ => commands}/extend-config/mergeOrdererGroups.ts (91%) delete mode 100644 src/extend-config/index.ts diff --git a/src/extend-config/defaults.ts b/src/commands/extend-config/defaults.ts similarity index 89% rename from src/extend-config/defaults.ts rename to src/commands/extend-config/defaults.ts index 1496013f5..f1d79c835 100644 --- a/src/extend-config/defaults.ts +++ b/src/commands/extend-config/defaults.ts @@ -1,4 +1,4 @@ -import { Capabilities, OrdererGroup, OrgConfig } from "../types/FabloConfigExtended"; +import { Capabilities, OrdererGroup, OrgConfig } from "../../types/FabloConfigExtended"; export default { global: { diff --git a/src/extend-config/extendChaincodesConfig.ts b/src/commands/extend-config/extendChaincodesConfig.ts similarity index 96% rename from src/extend-config/extendChaincodesConfig.ts rename to src/commands/extend-config/extendChaincodesConfig.ts index 5fb421a88..167b80121 100644 --- a/src/extend-config/extendChaincodesConfig.ts +++ b/src/commands/extend-config/extendChaincodesConfig.ts @@ -1,7 +1,7 @@ -import { ChaincodeJson } from "../types/FabloConfigJson"; -import { ChaincodeConfig, ChannelConfig, Global, PrivateCollectionConfig } from "../types/FabloConfigExtended"; +import { ChaincodeJson } from "../../types/FabloConfigJson"; +import { ChaincodeConfig, ChannelConfig, Global, PrivateCollectionConfig } from "../../types/FabloConfigExtended"; import defaults from "./defaults"; -import { version } from "../repositoryUtils"; +import { version } from "../../repositoryUtils"; const createPrivateCollectionConfig = ( fabricVersion: string, diff --git a/src/extend-config/extendChannelsConfig.ts b/src/commands/extend-config/extendChannelsConfig.ts similarity index 91% rename from src/extend-config/extendChannelsConfig.ts rename to src/commands/extend-config/extendChannelsConfig.ts index b5711b58a..a8a2e4a5c 100644 --- a/src/extend-config/extendChannelsConfig.ts +++ b/src/commands/extend-config/extendChannelsConfig.ts @@ -1,5 +1,5 @@ -import { ChannelConfig, OrdererGroup, OrgConfig } from "../types/FabloConfigExtended"; -import { ChannelJson } from "../types/FabloConfigJson"; +import { ChannelConfig, OrdererGroup, OrgConfig } from "../../types/FabloConfigExtended"; +import { ChannelJson } from "../../types/FabloConfigJson"; import * as _ from "lodash"; import defaults from "./defaults"; diff --git a/src/extend-config/extendConfig.ts b/src/commands/extend-config/extendConfig.ts similarity index 90% rename from src/extend-config/extendConfig.ts rename to src/commands/extend-config/extendConfig.ts index 207784fbe..1ddad6044 100644 --- a/src/extend-config/extendConfig.ts +++ b/src/commands/extend-config/extendConfig.ts @@ -1,5 +1,5 @@ -import { FabloConfigJson } from "../types/FabloConfigJson"; -import { FabloConfigExtended } from "../types/FabloConfigExtended"; +import { FabloConfigJson } from "../../types/FabloConfigJson"; +import { FabloConfigExtended } from "../../types/FabloConfigExtended"; import { extendOrgsConfig } from "./extendOrgsConfig"; import extendGlobal from "./extendGlobal"; import extendChannelsConfig from "./extendChannelsConfig"; diff --git a/src/extend-config/extendGlobal.ts b/src/commands/extend-config/extendGlobal.ts similarity index 77% rename from src/extend-config/extendGlobal.ts rename to src/commands/extend-config/extendGlobal.ts index 7496bd175..c9552e3e1 100644 --- a/src/extend-config/extendGlobal.ts +++ b/src/commands/extend-config/extendGlobal.ts @@ -1,7 +1,7 @@ // Used https://github.com/hyperledger/fabric/blob/v1.4.8/sampleconfig/configtx.yaml for values -import { Capabilities, FabricVersions, Global } from "../types/FabloConfigExtended"; -import { version } from "../repositoryUtils"; -import { GlobalJson } from "../types/FabloConfigJson"; +import { Capabilities, FabricVersions, Global } from "../../types/FabloConfigExtended"; +import { version } from "../../repositoryUtils"; +import { GlobalJson } from "../../types/FabloConfigJson"; import defaults from "./defaults"; const getNetworkCapabilities = (fabricVersion: string): Capabilities => { @@ -38,16 +38,16 @@ const getVersions = (fabricVersion: string): FabricVersions => { }; }; -const getEnvVarOrThrow = (name: string): string => { - const value = process.env[name]; - if (!value || !value.length) throw new Error(`Missing environment variable ${name}`); - return value; -}; +// const getEnvVarOrThrow = (name: string): string => { +// const value = process.env[name]; +// if (!value || !value.length) throw new Error(`Missing environment variable ${name}`); +// return value; +// }; -const getPathsFromEnv = () => ({ - fabloConfig: getEnvVarOrThrow("FABLO_CONFIG"), - chaincodesBaseDir: getEnvVarOrThrow("CHAINCODES_BASE_DIR"), -}); +// const getPathsFromEnv = () => ({ +// fabloConfig: getEnvVarOrThrow("FABLO_CONFIG"), +// chaincodesBaseDir: getEnvVarOrThrow("CHAINCODES_BASE_DIR"), +// }); const extendGlobal = (globalJson: GlobalJson): Global => { const engine = globalJson.engine ?? "docker"; @@ -66,7 +66,10 @@ const extendGlobal = (globalJson: GlobalJson): Global => { ...globalJson, ...getVersions(globalJson.fabricVersion), engine, - paths: getPathsFromEnv(), + paths: { + fabloConfig:"fablo-config.json", + chaincodesBaseDir:"./chaincodes", + }, monitoring, capabilities: getNetworkCapabilities(globalJson.fabricVersion), tools: { ...explorer }, diff --git a/src/extend-config/extendHooksConfig.ts b/src/commands/extend-config/extendHooksConfig.ts similarity index 74% rename from src/extend-config/extendHooksConfig.ts rename to src/commands/extend-config/extendHooksConfig.ts index 71f741017..d850504de 100644 --- a/src/extend-config/extendHooksConfig.ts +++ b/src/commands/extend-config/extendHooksConfig.ts @@ -1,5 +1,5 @@ -import { HooksJson } from "../types/FabloConfigJson"; -import { HooksConfig } from "../types/FabloConfigExtended"; +import { HooksJson } from "../../types/FabloConfigJson"; +import { HooksConfig } from "../../types/FabloConfigExtended"; const extendHooksConfig = (hooksJson: HooksJson | undefined): HooksConfig => { const postGenerate = typeof hooksJson?.postGenerate === "string" ? hooksJson.postGenerate : ""; diff --git a/src/extend-config/extendOrgsConfig.ts b/src/commands/extend-config/extendOrgsConfig.ts similarity index 98% rename from src/extend-config/extendOrgsConfig.ts rename to src/commands/extend-config/extendOrgsConfig.ts index c2661f20e..afc1c0a18 100644 --- a/src/extend-config/extendOrgsConfig.ts +++ b/src/commands/extend-config/extendOrgsConfig.ts @@ -1,5 +1,5 @@ import defaults from "./defaults"; -import { CAJson, OrdererJson, OrgJson, PeerJson } from "../types/FabloConfigJson"; +import { CAJson, OrdererJson, OrgJson, PeerJson } from "../../types/FabloConfigJson"; import { CAConfig, ExplorerConfig, @@ -11,8 +11,8 @@ import { OrgConfig, PeerConfig, PeerDbConfig, -} from "../types/FabloConfigExtended"; -import { version } from "../repositoryUtils"; +} from "../../types/FabloConfigExtended"; +import { version } from "../../repositoryUtils"; import _ = require("lodash"); const extendCaConfig = ( diff --git a/src/commands/extend-config/index.ts b/src/commands/extend-config/index.ts new file mode 100644 index 000000000..07c3a5215 --- /dev/null +++ b/src/commands/extend-config/index.ts @@ -0,0 +1,37 @@ +import { Args, Command } from "@oclif/core"; +import * as fs from "fs-extra"; +import * as path from "path"; + +import parseFabloConfig from "../../utils/parseFabloConfig"; +import extendConfig from "./extendConfig"; +import { getNetworkCapabilities } from "./extendGlobal"; + + + +export default class ExtendConfig extends Command { + static override description = "Reads a Fablo config file, extends it, and prints the result"; + + static override args = { + config: Args.string({ + default: "../../network/fablo-config.json", + description: "Fablo config file path", + required: false, + }), + }; + async writing (args: { config?: string }): Promise { + const configPath = args?.config ?? "../../network/fablo-config.json"; + const fabloConfigPath = path.isAbsolute(configPath) ? configPath : path.join(process.cwd(), configPath); + const json = parseFabloConfig(fs.readFileSync(fabloConfigPath).toString()); + const configExtended = extendConfig(json); + this.log(JSON.stringify(configExtended, undefined, 2)); + } + public async run(): Promise { + const { args } = await this.parse(ExtendConfig); + await this.writing(args); + + } + +} + +export { extendConfig, getNetworkCapabilities }; + diff --git a/src/extend-config/mergeOrdererGroups.ts b/src/commands/extend-config/mergeOrdererGroups.ts similarity index 91% rename from src/extend-config/mergeOrdererGroups.ts rename to src/commands/extend-config/mergeOrdererGroups.ts index 289ad231e..5751625cd 100644 --- a/src/extend-config/mergeOrdererGroups.ts +++ b/src/commands/extend-config/mergeOrdererGroups.ts @@ -1,4 +1,4 @@ -import { OrdererConfig, OrdererGroup, OrgConfig } from "../types/FabloConfigExtended"; +import { OrdererConfig, OrdererGroup, OrgConfig } from "../../types/FabloConfigExtended"; import * as _ from "lodash"; export const mergeOrdererGroups = (orgs: OrgConfig[]): OrdererGroup[] => { diff --git a/src/extend-config/index.ts b/src/extend-config/index.ts deleted file mode 100644 index 6c9b92758..000000000 --- a/src/extend-config/index.ts +++ /dev/null @@ -1,30 +0,0 @@ -import * as Generator from "yeoman-generator"; -import parseFabloConfig from "../utils/parseFabloConfig"; -import extendConfig from "./extendConfig"; -import { getNetworkCapabilities } from "./extendGlobal"; - -const ValidateGeneratorPath = require.resolve("../validate"); - -class ExtendConfigGenerator extends Generator { - constructor(args: string[], opts: Generator.GeneratorOptions) { - super(args, opts); - this.argument("fabloConfig", { - type: String, - optional: true, - description: "Fablo config file path", - default: "../../network/fablo-config.json", - }); - - this.composeWith(ValidateGeneratorPath, { arguments: [this.options.fabloConfig] }); - } - - async writing(): Promise { - const fabloConfigPath = `${this.env.cwd}/${this.options.fabloConfig}`; - const json = parseFabloConfig(this.fs.read(fabloConfigPath)); - const configExtended = extendConfig(json); - console.log(JSON.stringify(configExtended, undefined, 2)); - } -} - -export { extendConfig, getNetworkCapabilities }; -export default ExtendConfigGenerator;