From 60ed5b07995812a8075fd41cc9c5098ed6a893c6 Mon Sep 17 00:00:00 2001 From: Max Reichmann Date: Tue, 19 Mar 2024 18:01:40 +0100 Subject: [PATCH 01/12] feat: Add detection for root files (e.g. ui5.yaml) - Add js-yaml npm library for YAML-parsing (https://www.npmjs.com/package/js-yaml) --- package-lock.json | 1067 +++++------------ package.json | 3 + src/linter/lintWorkspace.ts | 2 + src/linter/yaml/UI5YamlLinter.ts | 87 ++ src/linter/yaml/linter.ts | 29 + src/untyped.d.ts | 1 + src/utils/deprecatedLibs.ts | 22 + .../projects/com.ui5.troublesome.app/ui5.yaml | 11 + .../library.with.custom.paths/ui5.yaml | 1 + .../linter/rules/NoDeprecatedApi/ui5.yaml | 11 + .../xml/snapshots/transpiler.ts.snap | Bin 0 -> 5366 bytes test/lib/linter/UI5YamlLinter.ts | 52 + test/lib/linter/_linterHelper.ts | 5 +- .../rules/snapshots/NoDeprecatedApi.ts.md | 6 + .../rules/snapshots/NoDeprecatedApi.ts.snap | Bin 6655 -> 6669 bytes test/lib/linter/snapshots/linter.ts.md | 34 + test/lib/utils/deprecatedLibs.ts | 27 + 17 files changed, 583 insertions(+), 775 deletions(-) create mode 100644 src/linter/yaml/UI5YamlLinter.ts create mode 100644 src/linter/yaml/linter.ts create mode 100644 src/utils/deprecatedLibs.ts create mode 100644 test/fixtures/linter/projects/com.ui5.troublesome.app/ui5.yaml create mode 100644 test/fixtures/linter/rules/NoDeprecatedApi/ui5.yaml create mode 100644 test/lib/detectors/transpilers/xml/snapshots/transpiler.ts.snap create mode 100644 test/lib/linter/UI5YamlLinter.ts create mode 100644 test/lib/utils/deprecatedLibs.ts diff --git a/package-lock.json b/package-lock.json index 84f7e8445..2142389f6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,8 +16,10 @@ "@ui5/logger": "^3.0.0", "@ui5/project": "^3.9.1", "chalk": "^5.3.0", + "data-with-position": "^0.5.0", "figures": "^6.1.0", "he": "^1.2.0", + "js-yaml": "^4.1.0", "json-source-map": "^0.6.1", "sax-wasm": "^2.2.4", "typescript": "5.3.x", @@ -36,6 +38,7 @@ "@istanbuljs/nyc-config-typescript": "^1.0.2", "@stylistic/eslint-plugin": "^1.7.0", "@types/he": "^1.2.3", + "@types/js-yaml": "^4.0.9", "@types/node": "^20.12.7", "@types/sinon": "^17.0.3", "@types/update-notifier": "^6.0.8", @@ -807,294 +810,6 @@ "node": ">=12" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", - "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", - "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", - "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", - "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", - "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", - "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", - "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", - "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", - "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", - "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", - "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", - "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", - "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", - "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", - "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", - "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", - "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", - "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -1158,12 +873,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1189,18 +898,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -1317,6 +1014,27 @@ "node": ">=12" } }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@isaacs/string-locale-compare": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", @@ -1355,6 +1073,15 @@ "node": ">=8" } }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -1368,6 +1095,19 @@ "node": ">=8" } }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -2114,9 +1854,9 @@ } }, "node_modules/@npmcli/config": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/@npmcli/config/-/config-8.2.2.tgz", - "integrity": "sha512-VvMHPIzcsKHCaNh9h4kCbn7NyDtcNJFMOUZ8Wu9SWhds5Egr1gMGU2fv+M50P1V5iAUZWZcv2Iguo5HTckpzww==", + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@npmcli/config/-/config-8.2.1.tgz", + "integrity": "sha512-G4PknBr51bwCuY63wXSO8OakSoyHk11JYhxAZCayCAosJruX86lAstCfbr/2Fr+g6OqVz6PPfOVZ98bcoc+eQA==", "dependencies": { "@npmcli/map-workspaces": "^3.0.2", "ci-info": "^4.0.0", @@ -2201,9 +1941,9 @@ } }, "node_modules/@npmcli/map-workspaces": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-3.0.6.tgz", - "integrity": "sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-3.0.4.tgz", + "integrity": "sha512-Z0TbvXkRbacjFFLpVpV0e2mheCh+WzQpcqL+4xp49uNJOxOnIAPZyXtUxZ5Qn3QBTGKA11Exjd9a5411rBrhDg==", "dependencies": { "@npmcli/name-from-folder": "^2.0.0", "glob": "^10.2.2", @@ -3000,9 +2740,9 @@ } }, "node_modules/@types/eslint": { - "version": "8.56.9", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.9.tgz", - "integrity": "sha512-W4W3KcqzjJ0sHg2vAq9vfml6OhsJ53TcUjUqfzzZf/EChUtwspszj/S0pzMxnfRcO55/iGq47dscXw71Fxc4Zg==", + "version": "8.56.7", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.7.tgz", + "integrity": "sha512-SjDvI/x3zsZnOkYZ3lCt9lOZWZLB2jIlNKz+LBgCtDurK0JZcwucxYHn1w2BJkD34dgX9Tjnak0txtq4WTggEA==", "dev": true, "dependencies": { "@types/estree": "*", @@ -3034,6 +2774,12 @@ "@types/sizzle": "*" } }, + "node_modules/@types/js-yaml": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", + "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", + "dev": true + }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -3898,11 +3644,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@ui5/project/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, "node_modules/@ui5/project/node_modules/escape-string-regexp": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", @@ -3932,17 +3673,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ui5/project/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/@ui5/project/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -4127,51 +3857,6 @@ "string-width": "^4.1.0" } }, - "node_modules/ansi-align/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-align/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/ansi-align/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-align/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", @@ -4253,13 +3938,9 @@ } }, "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/array-differ": { "version": "3.0.0", @@ -4583,6 +4264,38 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/boxen/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/boxen/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -4640,9 +4353,9 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "node_modules/builtins": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz", - "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", "dependencies": { "semver": "^7.0.0" } @@ -5030,51 +4743,6 @@ "node": ">=4" } }, - "node_modules/cli-progress/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-progress/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/cli-progress/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-progress/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-progress/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/cli-truncate": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", @@ -5091,6 +4759,29 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/cli-truncate/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -5142,32 +4833,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/cliui/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -5481,24 +5146,6 @@ "typescript": ">=4" } }, - "node_modules/cosmiconfig/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/cosmiconfig/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -5599,6 +5246,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/data-with-position": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/data-with-position/-/data-with-position-0.5.0.tgz", + "integrity": "sha512-GhsgEIPWk7WCAisjwBkOjvPqpAlVUOSl1CTmy9KyhVMG1wxl29Zj5+J71WhQ/KgoJS/Psxq6Cnioz3xdBjeIWQ==", + "dependencies": { + "yaml-ast-parser": "^0.0.43" + } + }, "node_modules/date-time": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/date-time/-/date-time-3.1.0.tgz", @@ -5808,6 +5463,15 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/depcheck/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, "node_modules/depcheck/node_modules/camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", @@ -5865,19 +5529,17 @@ "node": ">=10" } }, - "node_modules/depcheck/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/depcheck/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/depcheck/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, "node_modules/depcheck/node_modules/minimatch": { @@ -5895,20 +5557,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/depcheck/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/depcheck/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -5938,6 +5586,15 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/depcheck/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/depcheck/node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", @@ -6108,9 +5765,9 @@ } }, "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/encoding": { "version": "0.1.13", @@ -6397,12 +6054,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "node_modules/eslint/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -6490,18 +6141,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -7067,35 +6706,6 @@ "node": ">=8" } }, - "node_modules/gauge/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/gauge/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/gauge/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/gauge/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -7504,15 +7114,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hasha/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -8297,13 +7898,11 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" @@ -8885,11 +8484,6 @@ "markdown-it": "*" } }, - "node_modules/markdown-it/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, "node_modules/markdown-it/node_modules/entities": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", @@ -9549,15 +9143,9 @@ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/node-gyp/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "engines": { + "node": ">=6" + } }, "node_modules/node-gyp/node_modules/fs-minipass": { "version": "2.1.0", @@ -9646,15 +9234,6 @@ "node": ">=8" } }, - "node_modules/node-gyp/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/node-gyp/node_modules/lru-cache": { "version": "7.18.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", @@ -9824,20 +9403,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/node-gyp/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/node-gyp/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -10345,12 +9910,6 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "dev": true }, - "node_modules/nyc/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, "node_modules/nyc/node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -10406,15 +9965,6 @@ "node": ">=8" } }, - "node_modules/nyc/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/nyc/node_modules/istanbul-lib-instrument": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", @@ -10532,20 +10082,6 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "node_modules/nyc/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/nyc/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -10791,9 +10327,9 @@ } }, "node_modules/pacote": { - "version": "17.0.7", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-17.0.7.tgz", - "integrity": "sha512-sgvnoUMlkv9xHwDUKjKQFXVyUi8dtJGKp3vg6sYy+TxbDic5RjZCHF3ygv0EJgNRZ2GfRONjlKPUfokJ9lDpwQ==", + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-17.0.6.tgz", + "integrity": "sha512-cJKrW21VRE8vVTRskJo78c/RCvwJCn1f4qgfxL4w77SOWrTCRcmfkYHlHtS0gqpgjv3zhXflRtgsrUCX5xwNnQ==", "dependencies": { "@npmcli/git": "^5.0.0", "@npmcli/installed-package-contents": "^2.0.1", @@ -10806,7 +10342,7 @@ "npm-packlist": "^8.0.0", "npm-pick-manifest": "^9.0.0", "npm-registry-fetch": "^16.0.0", - "proc-log": "^4.0.0", + "proc-log": "^3.0.0", "promise-retry": "^2.0.1", "read-package-json": "^7.0.0", "read-package-json-fast": "^3.0.0", @@ -10829,7 +10365,7 @@ "@npmcli/promise-spawn": "^7.0.0", "lru-cache": "^10.0.1", "npm-pick-manifest": "^9.0.0", - "proc-log": "^4.0.0", + "proc-log": "^3.0.0", "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", "semver": "^7.3.5", @@ -10849,7 +10385,7 @@ "hosted-git-info": "^7.0.0", "json-parse-even-better-errors": "^3.0.0", "normalize-package-data": "^6.0.0", - "proc-log": "^4.0.0", + "proc-log": "^3.0.0", "semver": "^7.5.3" }, "engines": { @@ -10993,14 +10529,6 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/pacote/node_modules/node-gyp/node_modules/proc-log": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", - "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/pacote/node_modules/normalize-package-data": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.0.tgz", @@ -11016,12 +10544,12 @@ } }, "node_modules/pacote/node_modules/npm-package-arg": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.2.tgz", - "integrity": "sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==", + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.1.tgz", + "integrity": "sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==", "dependencies": { "hosted-git-info": "^7.0.0", - "proc-log": "^4.0.0", + "proc-log": "^3.0.0", "semver": "^7.3.5", "validate-npm-package-name": "^5.0.0" }, @@ -11044,9 +10572,9 @@ } }, "node_modules/pacote/node_modules/npm-registry-fetch": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-16.2.1.tgz", - "integrity": "sha512-8l+7jxhim55S85fjiDGJ1rZXBWGtRLi1OSb4Z3BPLObPuIaeKRlPRiYMSHU4/81ck3t71Z+UwDDl47gcpmfQQA==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-16.2.0.tgz", + "integrity": "sha512-zVH+G0q1O2hqgQBUvQ2LWp6ujr6VJAeDnmWxqiMlCguvLexEzBnuQIwC70r04vcvCMAcYEIpA/rO9YyVi+fmJQ==", "dependencies": { "@npmcli/redact": "^1.1.0", "make-fetch-happen": "^13.0.0", @@ -11055,7 +10583,7 @@ "minipass-json-stream": "^1.0.1", "minizlib": "^2.1.2", "npm-package-arg": "^11.0.0", - "proc-log": "^4.0.0" + "proc-log": "^3.0.0" }, "engines": { "node": "^16.14.0 || >=18.0.0" @@ -11075,14 +10603,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pacote/node_modules/proc-log": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.0.0.tgz", - "integrity": "sha512-v1lzmYxGDs2+OZnmYtYZK3DG8zogt+CbQ+o/iqqtTfpyCmGWulCTEQu5GIbivf7OjgIkH2Nr8SH8UxAGugZNbg==", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/pacote/node_modules/which": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", @@ -11254,9 +10774,9 @@ } }, "node_modules/path-to-regexp": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.2.tgz", - "integrity": "sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", + "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==", "dev": true }, "node_modules/path-type": { @@ -12328,9 +11848,9 @@ } }, "node_modules/socks": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", - "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.1.tgz", + "integrity": "sha512-B6w7tkwNid7ToxjZ08rQMT8M9BJAf8DKx8Ft4NivzH0zBUfd6jldGcisJn/RLgxcX3FPNDdNQCUEMMT79b+oCQ==", "dependencies": { "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" @@ -12599,19 +12119,16 @@ } }, "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/string-width-cjs": { @@ -12636,11 +12153,6 @@ "node": ">=8" } }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -12660,6 +12172,33 @@ "node": ">=8" } }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-ansi": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", @@ -12741,6 +12280,28 @@ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, + "node_modules/supertap/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/supertap/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -13031,14 +12592,12 @@ } }, "node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/typedarray-to-buffer": { @@ -13416,62 +12975,33 @@ "string-width": "^1.0.2 || 2 || 3 || 4" } }, - "node_modules/wide-align/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/wide-align/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/wide-align/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/wide-align/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, + "node_modules/widest-line": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", + "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "string-width": "^5.0.1" }, "engines": { - "node": ">=8" - } - }, - "node_modules/wide-align/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" + "node": ">=12" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/widest-line": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", - "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", + "node_modules/widest-line/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/widest-line/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dependencies": { - "string-width": "^5.0.1" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { "node": ">=12" @@ -13556,32 +13086,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -13593,6 +13097,27 @@ "node": ">=8" } }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -13662,14 +13187,10 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } + "node_modules/yaml-ast-parser": { + "version": "0.0.43", + "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", + "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==" }, "node_modules/yargs": { "version": "17.7.2", diff --git a/package.json b/package.json index 5d0c86bfc..f25dd2da2 100644 --- a/package.json +++ b/package.json @@ -67,8 +67,10 @@ "@ui5/logger": "^3.0.0", "@ui5/project": "^3.9.1", "chalk": "^5.3.0", + "data-with-position": "^0.5.0", "figures": "^6.1.0", "he": "^1.2.0", + "js-yaml": "^4.1.0", "json-source-map": "^0.6.1", "sax-wasm": "^2.2.4", "typescript": "5.3.x", @@ -86,6 +88,7 @@ "@types/he": "^1.2.3", "@types/node": "^20.12.7", "@types/sinon": "^17.0.3", + "@types/js-yaml": "^4.0.9", "@types/update-notifier": "^6.0.8", "@types/yargs": "^17.0.32", "@types/yauzl-promise": "^4.0.0", diff --git a/src/linter/lintWorkspace.ts b/src/linter/lintWorkspace.ts index 61decabeb..868db2c53 100644 --- a/src/linter/lintWorkspace.ts +++ b/src/linter/lintWorkspace.ts @@ -2,6 +2,7 @@ import {AbstractAdapter} from "@ui5/fs"; import lintXml from "./xmlTemplate/linter.js"; import lintJson from "./manifestJson/linter.js"; import lintHtml from "./html/linter.js"; +import lintUI5Yaml from "./yaml/linter.js"; import {taskStart} from "../util/perf.js"; import TypeLinter from "./ui5Types/TypeLinter.js"; import LinterContext, {LintResult, LinterParameters, LinterOptions} from "./LinterContext.js"; @@ -20,6 +21,7 @@ export default async function lintWorkspace( lintXml(params), lintJson(params), lintHtml(params), + lintUI5Yaml(params), ]); const typeLinter = new TypeLinter(params); diff --git a/src/linter/yaml/UI5YamlLinter.ts b/src/linter/yaml/UI5YamlLinter.ts new file mode 100644 index 000000000..425a9efa2 --- /dev/null +++ b/src/linter/yaml/UI5YamlLinter.ts @@ -0,0 +1,87 @@ +import {LintMessageSeverity} from "../LinterContext.js"; +import LinterContext from "../LinterContext.js"; +import deprecatedLibraries from "../../utils/deprecatedLibs.js"; +import yaml from "js-yaml"; +import {DataWithPosition, fromYaml, getPosition} from "data-with-position"; + +// file content schema of 'UI5Yaml' with only relevant properties +interface UI5YamlContentSchema { // extend for further detections + framework: { + libraries: { + name: string; + }[]; + }; +} + +interface UI5YamlContentSchemaWithPosInfo extends DataWithPosition { + framework?: { + libraries?: { + name: string; + }[]; + }; + positionKey?: { + end: { + column: number; + line: number; + }; + start: { + column: number; + line: number; + }; + }; +} + +export default class UI5YamlLinter { + #content = ""; + #yamlContentWithPosInfo: UI5YamlContentSchemaWithPosInfo = {}; + #resourcePath = ""; + #context: LinterContext; + + constructor(content: string, resourcePath: string, context: LinterContext) { + this.#content = content; + this.#resourcePath = resourcePath; + this.#context = context; + } + + // eslint-disable-next-line @typescript-eslint/require-await + async lint() { + try { + const source: UI5YamlContentSchema = this.#parseUI5Yaml(this.#content); + this.#analyzeUI5Yaml(source); + } catch (err) { + const message = err instanceof Error ? err.message : String(err); + this.#context.addLintingMessage(this.#resourcePath, { + severity: LintMessageSeverity.Error, + message, + ruleId: "ui5-linter-parsing-error", + fatal: true, + }); + } + } + + #parseUI5Yaml(fileContent: string): UI5YamlContentSchema { + // Create JS object from YAML content with position information + this.#yamlContentWithPosInfo = fromYaml(fileContent) as UI5YamlContentSchemaWithPosInfo; + // Convert YAML content to JS object + return yaml.load(fileContent) as UI5YamlContentSchema; + } + + #analyzeUI5Yaml(ui5YamlObject: UI5YamlContentSchema) { + // Check for deprecated libraries + if (ui5YamlObject?.framework?.libraries?.length) { + ui5YamlObject.framework.libraries.forEach((lib, index: number) => { + if (deprecatedLibraries.includes(lib.name)) { + const positionInfo = getPosition(this.#yamlContentWithPosInfo.framework!.libraries![index]); + this.#context.addLintingMessage(this.#resourcePath, { + ruleId: "ui5-linter-no-deprecated-api", + severity: LintMessageSeverity.Error, + fatal: undefined, + line: positionInfo.start.line, + column: positionInfo.start.column, + message: `Use of deprecated library '${lib.name}'`, + }); + } + }); + } + } +} diff --git a/src/linter/yaml/linter.ts b/src/linter/yaml/linter.ts new file mode 100644 index 000000000..805bf839e --- /dev/null +++ b/src/linter/yaml/linter.ts @@ -0,0 +1,29 @@ +import {LinterParameters} from "../LinterContext.js"; +import UI5YamlLinter from "./UI5YamlLinter.js"; +import {Resource} from "@ui5/fs"; + +export default async function lintUI5Yaml({context}: LinterParameters) { + let ui5YamlResources: Resource[]; + const pathsToLint = context.getPathsToLint(); + const reader = context.getRootReader(); + if (pathsToLint?.length) { + ui5YamlResources = []; + await Promise.all(pathsToLint.map(async (resourcePath) => { + if (!resourcePath.endsWith(".yaml")) { + return; + } + const resource = await reader.byPath(resourcePath); + if (!resource) { + throw new Error(`Resource not found: ${resourcePath}`); + } + ui5YamlResources.push(resource); + })); + } else { + ui5YamlResources = await reader.byGlob("/{ui5.yaml,*-ui5.yaml,*.ui5.yaml,ui5-*.yaml}"); + } + + await Promise.all(ui5YamlResources.map(async (resource: Resource) => { + const linter = new UI5YamlLinter(resource.getPath(), await resource.getString(), context); + await linter.lint(); + })); +} diff --git a/src/untyped.d.ts b/src/untyped.d.ts index 0e47ce5ad..368abc82e 100644 --- a/src/untyped.d.ts +++ b/src/untyped.d.ts @@ -6,6 +6,7 @@ declare module "@ui5/project" { interface Project { getNamespace: () => ProjectNamespace; getReader: (options: import("@ui5/fs").ReaderOptions) => import("@ui5/fs").AbstractReader; + getRootReader: () => import("@ui5/fs").AbstractReader; getRootPath: () => string; getSourcePath: () => string; _testPath: string; // TODO UI5 Tooling: Expose API for optional test path diff --git a/src/utils/deprecatedLibs.ts b/src/utils/deprecatedLibs.ts new file mode 100644 index 000000000..3df8c10d8 --- /dev/null +++ b/src/utils/deprecatedLibs.ts @@ -0,0 +1,22 @@ +const deprecatedLibs: string[] = [ + "sap.ca.scfld.md", + "sap.ca.ui", + "sap.fe.common", // Internal, removed in 1.110 + "sap.fe.plugins", // Internal, removed in 1.102 + "sap.fe.semantics", // Internal, removed in 1.104 + "sap.landvisz", // Removed in 1.120 + "sap.makit", + "sap.me", + "sap.sac.grid", // Removed in 1.114 + "sap.ui.commons", + "sap.ui.suite", + "sap.ui.ux3", + "sap.ui.vtm", + "sap.uiext.inbox", + "sap.webanalytics.core", + "sap.zen.commons", + "sap.zen.crosstab", + "sap.zen.dsh", +]; + +export default deprecatedLibs; diff --git a/test/fixtures/linter/projects/com.ui5.troublesome.app/ui5.yaml b/test/fixtures/linter/projects/com.ui5.troublesome.app/ui5.yaml new file mode 100644 index 000000000..dd924281f --- /dev/null +++ b/test/fixtures/linter/projects/com.ui5.troublesome.app/ui5.yaml @@ -0,0 +1,11 @@ +specVersion: '3.0' +metadata: + name: com.ui5.troublesome.app +type: application +framework: + name: OpenUI5 + version: "1.121.0" + libraries: + - name: sap.m + - name: sap.ui.core + - name: sap.landvisz diff --git a/test/fixtures/linter/projects/library.with.custom.paths/ui5.yaml b/test/fixtures/linter/projects/library.with.custom.paths/ui5.yaml index ff8a65e6d..e092fab59 100644 --- a/test/fixtures/linter/projects/library.with.custom.paths/ui5.yaml +++ b/test/fixtures/linter/projects/library.with.custom.paths/ui5.yaml @@ -12,3 +12,4 @@ framework: version: "1.120.6" libraries: - name: sap.ui.core + - name: sap.landvisz diff --git a/test/fixtures/linter/rules/NoDeprecatedApi/ui5.yaml b/test/fixtures/linter/rules/NoDeprecatedApi/ui5.yaml new file mode 100644 index 000000000..dd924281f --- /dev/null +++ b/test/fixtures/linter/rules/NoDeprecatedApi/ui5.yaml @@ -0,0 +1,11 @@ +specVersion: '3.0' +metadata: + name: com.ui5.troublesome.app +type: application +framework: + name: OpenUI5 + version: "1.121.0" + libraries: + - name: sap.m + - name: sap.ui.core + - name: sap.landvisz diff --git a/test/lib/detectors/transpilers/xml/snapshots/transpiler.ts.snap b/test/lib/detectors/transpilers/xml/snapshots/transpiler.ts.snap new file mode 100644 index 0000000000000000000000000000000000000000..33cb3f6fcd6da4a9ce664d602461f0f2879a2658 GIT binary patch literal 5366 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 { + /* Mock resource content of ui5.yaml file, + (formatted as used in src/detectors/typeChecker/index.ts - #analyzeFiles()), + (contains relevant 'framework' property and 'libraries' sub-property), + (contains only deprecated libraries) */ + const resourceContent = +`specVersion: '3.0' +metadata: + name: ava-test-ui5yamllinter +type: application +framework: + name: OpenUI5 + version: "1.121.0" + libraries: + - name: sap.ca.scfld.md + - name: sap.ca.ui + - name: sap.fe.common`; + + const resourcePath = "/ui5.js"; // '.js' due to renaming in src/detectors/typeChecker/index.ts - #analyzeFiles() + const projectPath = "test.ui5yamllinter"; + const context = new LinterContext({rootDir: projectPath}); + + // Create UI5YamlLinter instance with resource content + const linter = new UI5YamlLinter(resourceContent, resourcePath, context); + // Run UI5YamlLinter report + await linter.lint(); + + const messages = context.getLintingMessages("/ui5.js"); + + // Test returned messages + t.is(messages.length, 3, "Detection of 3 deprecated libraries expected"); + + // Test each message + t.is(messages[0].ruleId, "ui5-linter-no-deprecated-api", `RuleId is correct`); + t.is(messages[0].message, `Use of deprecated library 'sap.ca.scfld.md'`, `Message is correct`); + t.is(messages[0].column, 7, `Column is correct`); + t.is(messages[0].line, 9, `Line is correct`); + + t.is(messages[1].ruleId, "ui5-linter-no-deprecated-api", `RuleId is correct`); + t.is(messages[1].message, `Use of deprecated library 'sap.ca.ui'`, `Message is correct`); + t.is(messages[1].column, 7, `Column is correct`); + t.is(messages[1].line, 10, `Line is correct`); + + t.is(messages[2].ruleId, "ui5-linter-no-deprecated-api", `RuleId is correct`); + t.is(messages[2].message, `Use of deprecated library 'sap.fe.common'`, `Message is correct`); + t.is(messages[2].column, 7, `Column is correct`); + t.is(messages[2].line, 11, `Line is correct`); +}); diff --git a/test/lib/linter/_linterHelper.ts b/test/lib/linter/_linterHelper.ts index 60d21dce0..9050b5385 100644 --- a/test/lib/linter/_linterHelper.ts +++ b/test/lib/linter/_linterHelper.ts @@ -70,8 +70,9 @@ export function createTestsForFixtures(fixturesPath: string) { if (!fileName.endsWith(".js") && !fileName.endsWith(".xml") && !fileName.endsWith(".json") && - !fileName.endsWith(".html")) { - // Ignore non-JavaScript, non-XML, non-JSON and non-HTML files + !fileName.endsWith(".html") && + !fileName.endsWith(".yaml")) { + // Ignore non-JavaScript, non-XML, non-JSON, non-HTML and non-YAML files continue; } let testName = fileName; diff --git a/test/lib/linter/rules/snapshots/NoDeprecatedApi.ts.md b/test/lib/linter/rules/snapshots/NoDeprecatedApi.ts.md index db9f30fc8..3e227b2f5 100644 --- a/test/lib/linter/rules/snapshots/NoDeprecatedApi.ts.md +++ b/test/lib/linter/rules/snapshots/NoDeprecatedApi.ts.md @@ -1222,3 +1222,9 @@ Generated by [AVA](https://avajs.dev). warningCount: 0, }, ] + +## General: ui5.yaml + +> Snapshot 1 + + [] diff --git a/test/lib/linter/rules/snapshots/NoDeprecatedApi.ts.snap b/test/lib/linter/rules/snapshots/NoDeprecatedApi.ts.snap index bcb2e27af4c4495381c90c4c75f4f7f6f43fd3a0..6a36cac2d6af9328bcae432b06021ce966346bb6 100644 GIT binary patch delta 6326 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 delta 6312 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 diff --git a/test/lib/linter/snapshots/linter.ts.md b/test/lib/linter/snapshots/linter.ts.md index d333f62e9..0e377b7b8 100644 --- a/test/lib/linter/snapshots/linter.ts.md +++ b/test/lib/linter/snapshots/linter.ts.md @@ -266,6 +266,23 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 [ + { + coverageInfo: [], + errorCount: 1, + fatalErrorCount: 0, + filePath: 'ui5.yaml', + messages: [ + { + column: 7, + fatal: undefined, + line: 11, + message: 'Use of deprecated library \'sap.landvisz\'', + ruleId: 'ui5-linter-no-deprecated-api', + severity: 2, + }, + ], + warningCount: 0, + }, { coverageInfo: [], errorCount: 0, @@ -990,6 +1007,23 @@ Generated by [AVA](https://avajs.dev). ], warningCount: 0, }, + { + coverageInfo: [], + errorCount: 1, + fatalErrorCount: 0, + filePath: 'ui5.yaml', + messages: [ + { + column: 7, + fatal: undefined, + line: 15, + message: 'Use of deprecated library \'sap.landvisz\'', + ruleId: 'ui5-linter-no-deprecated-api', + severity: 2, + }, + ], + warningCount: 0, + }, ] ## lint: All files of library with sap.f namespace diff --git a/test/lib/utils/deprecatedLibs.ts b/test/lib/utils/deprecatedLibs.ts new file mode 100644 index 000000000..036833577 --- /dev/null +++ b/test/lib/utils/deprecatedLibs.ts @@ -0,0 +1,27 @@ +import test from "ava"; +import deprecatedLibs from "../../../src/utils/deprecatedLibs.js"; + +test("Test Deprecated Libs constant", (t) => { + const expectedDeprecatedLibs: string[] = [ + "sap.ca.scfld.md", + "sap.ca.ui", + "sap.fe.common", // Internal, removed in 1.110 + "sap.fe.plugins", // Internal, removed in 1.102 + "sap.fe.semantics", // Internal, removed in 1.104 + "sap.landvisz", // Removed in 1.120 + "sap.makit", + "sap.me", + "sap.sac.grid", // Removed in 1.114 + "sap.ui.commons", + "sap.ui.suite", + "sap.ui.ux3", + "sap.ui.vtm", + "sap.uiext.inbox", + "sap.webanalytics.core", + "sap.zen.commons", + "sap.zen.crosstab", + "sap.zen.dsh", + ]; + t.deepEqual(deprecatedLibs, expectedDeprecatedLibs, + "Expected deprecated libraries list should match the actual list."); +}); From ecfc49e3fdffdba660831034049610d4fe43a61b Mon Sep 17 00:00:00 2001 From: Max Reichmann Date: Mon, 15 Apr 2024 11:43:47 +0200 Subject: [PATCH 02/12] test: Fix troublesome test for ui5.yaml --- src/linter/linter.ts | 2 ++ src/linter/yaml/UI5YamlLinter.ts | 2 +- test/lib/linter/UI5YamlLinter.ts | 2 +- .../rules/snapshots/NoDeprecatedApi.ts.md | 20 +++++++++++++++++- .../rules/snapshots/NoDeprecatedApi.ts.snap | Bin 6669 -> 6736 bytes 5 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/linter/linter.ts b/src/linter/linter.ts index 090d0c29d..87692b5de 100644 --- a/src/linter/linter.ts +++ b/src/linter/linter.ts @@ -231,6 +231,8 @@ function transformVirtualPathToFilePath( return path.join(srcFsBasePath, posixPath.relative(srcVirBasePath, virtualPath)); } else if (testFsBasePath && testVirBasePath && virtualPath.startsWith(testVirBasePath)) { return path.join(testFsBasePath, posixPath.relative(testVirBasePath, virtualPath)); + } else if (virtualPath.startsWith("/")) { + return posixPath.relative("/", virtualPath); } else { throw new Error( `Resource path ${virtualPath} is not located within the virtual source or test directories of the project`); diff --git a/src/linter/yaml/UI5YamlLinter.ts b/src/linter/yaml/UI5YamlLinter.ts index 425a9efa2..f74f794a1 100644 --- a/src/linter/yaml/UI5YamlLinter.ts +++ b/src/linter/yaml/UI5YamlLinter.ts @@ -37,7 +37,7 @@ export default class UI5YamlLinter { #resourcePath = ""; #context: LinterContext; - constructor(content: string, resourcePath: string, context: LinterContext) { + constructor(resourcePath: string, content: string, context: LinterContext) { this.#content = content; this.#resourcePath = resourcePath; this.#context = context; diff --git a/test/lib/linter/UI5YamlLinter.ts b/test/lib/linter/UI5YamlLinter.ts index 186b65396..c1888de89 100644 --- a/test/lib/linter/UI5YamlLinter.ts +++ b/test/lib/linter/UI5YamlLinter.ts @@ -25,7 +25,7 @@ framework: const context = new LinterContext({rootDir: projectPath}); // Create UI5YamlLinter instance with resource content - const linter = new UI5YamlLinter(resourceContent, resourcePath, context); + const linter = new UI5YamlLinter(resourcePath, resourceContent, context); // Run UI5YamlLinter report await linter.lint(); diff --git a/test/lib/linter/rules/snapshots/NoDeprecatedApi.ts.md b/test/lib/linter/rules/snapshots/NoDeprecatedApi.ts.md index 3e227b2f5..9880d65ff 100644 --- a/test/lib/linter/rules/snapshots/NoDeprecatedApi.ts.md +++ b/test/lib/linter/rules/snapshots/NoDeprecatedApi.ts.md @@ -1227,4 +1227,22 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 - [] + [ + { + coverageInfo: [], + errorCount: 1, + fatalErrorCount: 0, + filePath: 'ui5.yaml', + messages: [ + { + column: 7, + fatal: undefined, + line: 11, + message: 'Use of deprecated library \'sap.landvisz\'', + ruleId: 'ui5-linter-no-deprecated-api', + severity: 2, + }, + ], + warningCount: 0, + }, + ] diff --git a/test/lib/linter/rules/snapshots/NoDeprecatedApi.ts.snap b/test/lib/linter/rules/snapshots/NoDeprecatedApi.ts.snap index 6a36cac2d6af9328bcae432b06021ce966346bb6..1b59165a3fed7e39b22cf37a8483e0ac9ce4a3b8 100644 GIT binary patch literal 6736 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 Date: Mon, 15 Apr 2024 17:00:19 +0200 Subject: [PATCH 03/12] test(UI5YamlLinter): Replace outdated identifiers --- test/lib/linter/UI5YamlLinter.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/lib/linter/UI5YamlLinter.ts b/test/lib/linter/UI5YamlLinter.ts index c1888de89..9a54c8d94 100644 --- a/test/lib/linter/UI5YamlLinter.ts +++ b/test/lib/linter/UI5YamlLinter.ts @@ -4,7 +4,7 @@ import LinterContext from "../../../src/linter/LinterContext.js"; test("Test UI5YamlLinter report (parsing and analyzing)", async (t) => { /* Mock resource content of ui5.yaml file, - (formatted as used in src/detectors/typeChecker/index.ts - #analyzeFiles()), + (formatted as used in src/linter/yaml/linter.ts) (contains relevant 'framework' property and 'libraries' sub-property), (contains only deprecated libraries) */ const resourceContent = @@ -20,7 +20,7 @@ framework: - name: sap.ca.ui - name: sap.fe.common`; - const resourcePath = "/ui5.js"; // '.js' due to renaming in src/detectors/typeChecker/index.ts - #analyzeFiles() + const resourcePath = "/ui5.yaml"; const projectPath = "test.ui5yamllinter"; const context = new LinterContext({rootDir: projectPath}); @@ -29,7 +29,7 @@ framework: // Run UI5YamlLinter report await linter.lint(); - const messages = context.getLintingMessages("/ui5.js"); + const messages = context.getLintingMessages("/ui5.yaml"); // Test returned messages t.is(messages.length, 3, "Detection of 3 deprecated libraries expected"); From 40be3bec01aa477972b4102e5d6ad3edef320c4d Mon Sep 17 00:00:00 2001 From: Max Reichmann Date: Tue, 16 Apr 2024 17:09:20 +0200 Subject: [PATCH 04/12] refactor(YamlLinter): Renamed identifiers --- src/linter/yaml/UI5YamlLinter.ts | 87 ------------------- src/linter/yaml/YamlLinter.ts | 84 ++++++++++++++++++ src/linter/yaml/linter.ts | 4 +- .../{UI5YamlLinter.ts => YamlLinter.ts} | 55 +++++++++++- 4 files changed, 137 insertions(+), 93 deletions(-) delete mode 100644 src/linter/yaml/UI5YamlLinter.ts create mode 100644 src/linter/yaml/YamlLinter.ts rename test/lib/linter/{UI5YamlLinter.ts => YamlLinter.ts} (51%) diff --git a/src/linter/yaml/UI5YamlLinter.ts b/src/linter/yaml/UI5YamlLinter.ts deleted file mode 100644 index f74f794a1..000000000 --- a/src/linter/yaml/UI5YamlLinter.ts +++ /dev/null @@ -1,87 +0,0 @@ -import {LintMessageSeverity} from "../LinterContext.js"; -import LinterContext from "../LinterContext.js"; -import deprecatedLibraries from "../../utils/deprecatedLibs.js"; -import yaml from "js-yaml"; -import {DataWithPosition, fromYaml, getPosition} from "data-with-position"; - -// file content schema of 'UI5Yaml' with only relevant properties -interface UI5YamlContentSchema { // extend for further detections - framework: { - libraries: { - name: string; - }[]; - }; -} - -interface UI5YamlContentSchemaWithPosInfo extends DataWithPosition { - framework?: { - libraries?: { - name: string; - }[]; - }; - positionKey?: { - end: { - column: number; - line: number; - }; - start: { - column: number; - line: number; - }; - }; -} - -export default class UI5YamlLinter { - #content = ""; - #yamlContentWithPosInfo: UI5YamlContentSchemaWithPosInfo = {}; - #resourcePath = ""; - #context: LinterContext; - - constructor(resourcePath: string, content: string, context: LinterContext) { - this.#content = content; - this.#resourcePath = resourcePath; - this.#context = context; - } - - // eslint-disable-next-line @typescript-eslint/require-await - async lint() { - try { - const source: UI5YamlContentSchema = this.#parseUI5Yaml(this.#content); - this.#analyzeUI5Yaml(source); - } catch (err) { - const message = err instanceof Error ? err.message : String(err); - this.#context.addLintingMessage(this.#resourcePath, { - severity: LintMessageSeverity.Error, - message, - ruleId: "ui5-linter-parsing-error", - fatal: true, - }); - } - } - - #parseUI5Yaml(fileContent: string): UI5YamlContentSchema { - // Create JS object from YAML content with position information - this.#yamlContentWithPosInfo = fromYaml(fileContent) as UI5YamlContentSchemaWithPosInfo; - // Convert YAML content to JS object - return yaml.load(fileContent) as UI5YamlContentSchema; - } - - #analyzeUI5Yaml(ui5YamlObject: UI5YamlContentSchema) { - // Check for deprecated libraries - if (ui5YamlObject?.framework?.libraries?.length) { - ui5YamlObject.framework.libraries.forEach((lib, index: number) => { - if (deprecatedLibraries.includes(lib.name)) { - const positionInfo = getPosition(this.#yamlContentWithPosInfo.framework!.libraries![index]); - this.#context.addLintingMessage(this.#resourcePath, { - ruleId: "ui5-linter-no-deprecated-api", - severity: LintMessageSeverity.Error, - fatal: undefined, - line: positionInfo.start.line, - column: positionInfo.start.column, - message: `Use of deprecated library '${lib.name}'`, - }); - } - }); - } - } -} diff --git a/src/linter/yaml/YamlLinter.ts b/src/linter/yaml/YamlLinter.ts new file mode 100644 index 000000000..cc8fbba2d --- /dev/null +++ b/src/linter/yaml/YamlLinter.ts @@ -0,0 +1,84 @@ +import {LintMessageSeverity} from "../LinterContext.js"; +import LinterContext from "../LinterContext.js"; +import deprecatedLibraries from "../../utils/deprecatedLibs.js"; +import {DataWithPosition, fromYaml, getPosition} from "data-with-position"; + +interface YamlContent extends DataWithPosition { + framework?: { + libraries?: { + name: string; + }[]; + }; + positionKey?: { + end: { + column: number; + line: number; + }; + start: { + column: number; + line: number; + }; + }; +} + +export default class YamlLinter { + #content; + #resourcePath; + #context: LinterContext; + + constructor(resourcePath: string, content: string, context: LinterContext) { + this.#content = content; + this.#resourcePath = resourcePath; + this.#context = context; + } + + // eslint-disable-next-line @typescript-eslint/require-await + async lint() { + try { + // TODO: Support multiple documents in one Yaml file + // https://sap.github.io/ui5-tooling/stable/pages/extensibility/CustomTasks/#example-custom-task-extension-defined-in-ui5-project + // How: Loop through this.#content for each line + // Check if line matches yamlDocumentSeparator ('---') + // Use index of line as offset + // Call analyzeYaml() and Pass offset + + // const yamlDocumentLines = this.#content.split(/\r?\n|\r|\n/g); // End of line regex + this.#content.split("---").forEach((partDocument) => { + // TODO: Calculate offset + Pass to analyzeYaml() + const source: YamlContent = this.#parseYaml(partDocument); + this.#analyzeYaml(source); + }); + } catch (err) { + const message = err instanceof Error ? err.message : String(err); + this.#context.addLintingMessage(this.#resourcePath, { + severity: LintMessageSeverity.Error, + message, + ruleId: "ui5-linter-parsing-error", + fatal: true, + }); + } + } + + #parseYaml(fileContent: string): YamlContent { + // Create JS object from YAML content with position information + return fromYaml(fileContent) as YamlContent; + } + + #analyzeYaml(yamlObject: YamlContent) { + // Check for deprecated libraries + yamlObject?.framework?.libraries?.forEach((lib) => { + if (deprecatedLibraries.includes(lib.name.toString())) { + const positionInfo = getPosition(lib); + // TODO: Add offset to line property (addition) + this.#context.addLintingMessage(this.#resourcePath, { + ruleId: "ui5-linter-no-deprecated-api", + severity: LintMessageSeverity.Error, + fatal: undefined, + line: positionInfo.start.line, + column: positionInfo.start.column, + message: `Use of deprecated library '${lib.name}'`, + }); + } + }); + } +} diff --git a/src/linter/yaml/linter.ts b/src/linter/yaml/linter.ts index 805bf839e..b7574ce78 100644 --- a/src/linter/yaml/linter.ts +++ b/src/linter/yaml/linter.ts @@ -1,5 +1,5 @@ import {LinterParameters} from "../LinterContext.js"; -import UI5YamlLinter from "./UI5YamlLinter.js"; +import YamlLinter from "./YamlLinter.js"; import {Resource} from "@ui5/fs"; export default async function lintUI5Yaml({context}: LinterParameters) { @@ -23,7 +23,7 @@ export default async function lintUI5Yaml({context}: LinterParameters) { } await Promise.all(ui5YamlResources.map(async (resource: Resource) => { - const linter = new UI5YamlLinter(resource.getPath(), await resource.getString(), context); + const linter = new YamlLinter(resource.getPath(), await resource.getString(), context); await linter.lint(); })); } diff --git a/test/lib/linter/UI5YamlLinter.ts b/test/lib/linter/YamlLinter.ts similarity index 51% rename from test/lib/linter/UI5YamlLinter.ts rename to test/lib/linter/YamlLinter.ts index 9a54c8d94..5e3b0ddf9 100644 --- a/test/lib/linter/UI5YamlLinter.ts +++ b/test/lib/linter/YamlLinter.ts @@ -1,8 +1,8 @@ import test from "ava"; -import UI5YamlLinter from "../../../src/linter/yaml/UI5YamlLinter.js"; +import YamlLinter from "../../../src/linter/yaml/YamlLinter.js"; import LinterContext from "../../../src/linter/LinterContext.js"; -test("Test UI5YamlLinter report (parsing and analyzing)", async (t) => { +test("Test YamlLinter report (parsing and analyzing)", async (t) => { /* Mock resource content of ui5.yaml file, (formatted as used in src/linter/yaml/linter.ts) (contains relevant 'framework' property and 'libraries' sub-property), @@ -21,11 +21,11 @@ framework: - name: sap.fe.common`; const resourcePath = "/ui5.yaml"; - const projectPath = "test.ui5yamllinter"; + const projectPath = "test.yamllinter"; const context = new LinterContext({rootDir: projectPath}); // Create UI5YamlLinter instance with resource content - const linter = new UI5YamlLinter(resourcePath, resourceContent, context); + const linter = new YamlLinter(resourcePath, resourceContent, context); // Run UI5YamlLinter report await linter.lint(); @@ -50,3 +50,50 @@ framework: t.is(messages[2].column, 7, `Column is correct`); t.is(messages[2].line, 11, `Line is correct`); }); + +test.only("Test YamlLinter report (parsing and analyzing) with multiple documents", async (t) => { + /* Mock resource content of ui5.yaml file, + (formatted as used in src/linter/yaml/linter.ts) + (contains relevant 'framework' property and 'libraries' sub-property), + (contains only deprecated libraries) */ + const resourceContent = +`--- # Task extension as part of your project +specVersion: "3.2" +kind: extension +type: task +metadata: + name: render-markdown-files +task: + path: lib/tasks/renderMarkdownFiles.js +--- # This is a comment +specVersion: '3.0' +metadata: + name: ava-test-ui5yamllinter +type: application +framework: + name: OpenUI5 + version: "1.121.0" + libraries: + - name: sap.ca.scfld.md + - name: sap.ca.ui + - name: sap.fe.common`; + + const resourcePath = "/ui5.yaml"; + const projectPath = "test.yamllinter"; + const context = new LinterContext({rootDir: projectPath}); + + // Create UI5YamlLinter instance with resource content + const linter = new YamlLinter(resourcePath, resourceContent, context); + // Run UI5YamlLinter report + await linter.lint(); + + const messages = context.getLintingMessages("/ui5.yaml"); + + // Test returned messages + t.is(messages.length, 3, "Detection of 3 deprecated libraries expected"); + + // Test each message + t.is(messages[0].ruleId, "ui5-linter-no-deprecated-api", `RuleId is correct`); + + // TODO: Add tests for position info of messages (lines, columns) +}); From 4d7ca542fc78ce7fd8aa8746a902ed4855a973bb Mon Sep 17 00:00:00 2001 From: Max Reichmann Date: Tue, 16 Apr 2024 17:15:37 +0200 Subject: [PATCH 05/12] refactor(ManifestLinter): Use common list of deprecated libs --- src/linter/manifestJson/ManifestLinter.ts | 22 +--------------------- 1 file changed, 1 insertion(+), 21 deletions(-) diff --git a/src/linter/manifestJson/ManifestLinter.ts b/src/linter/manifestJson/ManifestLinter.ts index 53da704ee..c1ae368f6 100644 --- a/src/linter/manifestJson/ManifestLinter.ts +++ b/src/linter/manifestJson/ManifestLinter.ts @@ -10,6 +10,7 @@ import ManifestReporter from "./ManifestReporter.js"; import {LintMessageSeverity, ResourcePath} from "../LinterContext.js"; import jsonMap from "json-source-map"; import LinterContext from "../LinterContext.js"; +import deprecatedLibraries from "../../utils/deprecatedLibs.js"; interface locType { line: number; @@ -17,27 +18,6 @@ interface locType { pos: number; } -const deprecatedLibraries: string[] = [ - "sap.ca.scfld.md", - "sap.ca.ui", - "sap.fe.common", // Internal, removed in 1.110 - "sap.fe.plugins", // Internal, removed in 1.102 - "sap.fe.semantics", // Internal, removed in 1.104 - "sap.landvisz", // Removed in 1.120 - "sap.makit", - "sap.me", - "sap.sac.grid", // Removed in 1.114 - "sap.ui.commons", - "sap.ui.suite", - "sap.ui.ux3", - "sap.ui.vtm", - "sap.uiext.inbox", - "sap.webanalytics.core", - "sap.zen.commons", - "sap.zen.crosstab", - "sap.zen.dsh", -]; - const deprecatedComponents: string[] = [ "sap.zen.dsh.fioriwrapper", ]; From 426ce99af0846c95aeebcc9d90a8019694a9eeff Mon Sep 17 00:00:00 2001 From: Max Reichmann Date: Tue, 16 Apr 2024 22:20:22 +0200 Subject: [PATCH 06/12] deps: Remove js-yaml from package.json --- package-lock.json | 8 -------- package.json | 2 -- 2 files changed, 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2142389f6..88d7fba94 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,6 @@ "data-with-position": "^0.5.0", "figures": "^6.1.0", "he": "^1.2.0", - "js-yaml": "^4.1.0", "json-source-map": "^0.6.1", "sax-wasm": "^2.2.4", "typescript": "5.3.x", @@ -38,7 +37,6 @@ "@istanbuljs/nyc-config-typescript": "^1.0.2", "@stylistic/eslint-plugin": "^1.7.0", "@types/he": "^1.2.3", - "@types/js-yaml": "^4.0.9", "@types/node": "^20.12.7", "@types/sinon": "^17.0.3", "@types/update-notifier": "^6.0.8", @@ -2774,12 +2772,6 @@ "@types/sizzle": "*" } }, - "node_modules/@types/js-yaml": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", - "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", - "dev": true - }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", diff --git a/package.json b/package.json index f25dd2da2..8b8352eaf 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,6 @@ "data-with-position": "^0.5.0", "figures": "^6.1.0", "he": "^1.2.0", - "js-yaml": "^4.1.0", "json-source-map": "^0.6.1", "sax-wasm": "^2.2.4", "typescript": "5.3.x", @@ -88,7 +87,6 @@ "@types/he": "^1.2.3", "@types/node": "^20.12.7", "@types/sinon": "^17.0.3", - "@types/js-yaml": "^4.0.9", "@types/update-notifier": "^6.0.8", "@types/yargs": "^17.0.32", "@types/yauzl-promise": "^4.0.0", From 257b9f19c9d725ea6c826454d8f057335d943a04 Mon Sep 17 00:00:00 2001 From: Max Reichmann Date: Wed, 17 Apr 2024 00:28:08 +0200 Subject: [PATCH 07/12] feat: Add support for multi-doc ui5.yaml's test: Add test for multi-doc ui5.yaml's test: Add test for empty ui5.yaml's --- src/linter/yaml/YamlLinter.ts | 34 +++++++++++++---------- test/lib/linter/YamlLinter.ts | 52 ++++++++++++++++++++++++++++++----- 2 files changed, 64 insertions(+), 22 deletions(-) diff --git a/src/linter/yaml/YamlLinter.ts b/src/linter/yaml/YamlLinter.ts index cc8fbba2d..70e3b5295 100644 --- a/src/linter/yaml/YamlLinter.ts +++ b/src/linter/yaml/YamlLinter.ts @@ -35,19 +35,24 @@ export default class YamlLinter { // eslint-disable-next-line @typescript-eslint/require-await async lint() { try { - // TODO: Support multiple documents in one Yaml file - // https://sap.github.io/ui5-tooling/stable/pages/extensibility/CustomTasks/#example-custom-task-extension-defined-in-ui5-project - // How: Loop through this.#content for each line - // Check if line matches yamlDocumentSeparator ('---') - // Use index of line as offset - // Call analyzeYaml() and Pass offset + /* Support multiple documents in one Yaml file + https://sap.github.io/ui5-tooling/stable/pages/extensibility/CustomTasks/#example-custom-task-extension-defined-in-ui5-project */ - // const yamlDocumentLines = this.#content.split(/\r?\n|\r|\n/g); // End of line regex - this.#content.split("---").forEach((partDocument) => { - // TODO: Calculate offset + Pass to analyzeYaml() - const source: YamlContent = this.#parseYaml(partDocument); - this.#analyzeYaml(source); - }); + // Split Yaml file into part documents by '---' separator + const partDocuments = this.#content.split(/(\r?\n|\r|\n)---/g).map((part) => part.trim()); + + // Calculate the starting line number of each part document + let lineNumberOffset = 0; + for (const part of partDocuments) { + if (part !== "") { + // Parse content only of the current part + const parsedYamlWithPosInfo: YamlContent = this.#parseYaml(part); + // Analyze part content with line number offset + this.#analyzeYaml(parsedYamlWithPosInfo, lineNumberOffset); + // Update line number offset for next part + lineNumberOffset += part.split(/\r?\n|\r|\n/g).length; + } + } } catch (err) { const message = err instanceof Error ? err.message : String(err); this.#context.addLintingMessage(this.#resourcePath, { @@ -64,17 +69,16 @@ export default class YamlLinter { return fromYaml(fileContent) as YamlContent; } - #analyzeYaml(yamlObject: YamlContent) { + #analyzeYaml(yamlObject: YamlContent, offset: number) { // Check for deprecated libraries yamlObject?.framework?.libraries?.forEach((lib) => { if (deprecatedLibraries.includes(lib.name.toString())) { const positionInfo = getPosition(lib); - // TODO: Add offset to line property (addition) this.#context.addLintingMessage(this.#resourcePath, { ruleId: "ui5-linter-no-deprecated-api", severity: LintMessageSeverity.Error, fatal: undefined, - line: positionInfo.start.line, + line: positionInfo.start.line + offset, column: positionInfo.start.column, message: `Use of deprecated library '${lib.name}'`, }); diff --git a/test/lib/linter/YamlLinter.ts b/test/lib/linter/YamlLinter.ts index 5e3b0ddf9..b9c2c85e0 100644 --- a/test/lib/linter/YamlLinter.ts +++ b/test/lib/linter/YamlLinter.ts @@ -51,13 +51,14 @@ framework: t.is(messages[2].line, 11, `Line is correct`); }); -test.only("Test YamlLinter report (parsing and analyzing) with multiple documents", async (t) => { - /* Mock resource content of ui5.yaml file, +test("Test YamlLinter report (parsing and analyzing) with multiple documents", async (t) => { + /* Mock resource content of ui5.yaml file with multiple documents, (formatted as used in src/linter/yaml/linter.ts) (contains relevant 'framework' property and 'libraries' sub-property), - (contains only deprecated libraries) */ + (contains only deprecated libraries) + (contains document separators ('---') + comments after separator) */ const resourceContent = -`--- # Task extension as part of your project +`--- # This is the first document part specVersion: "3.2" kind: extension type: task @@ -65,7 +66,7 @@ metadata: name: render-markdown-files task: path: lib/tasks/renderMarkdownFiles.js ---- # This is a comment +--- # This is the second document part specVersion: '3.0' metadata: name: ava-test-ui5yamllinter @@ -76,7 +77,15 @@ framework: libraries: - name: sap.ca.scfld.md - name: sap.ca.ui - - name: sap.fe.common`; + - name: sap.fe.common +--- # This is the third document part +specVersion: "3.2" +kind: extension +type: task +metadata: + name: render-markdown-files +task: + path: lib/tasks/renderMarkdownFiles.js`; const resourcePath = "/ui5.yaml"; const projectPath = "test.yamllinter"; @@ -94,6 +103,35 @@ framework: // Test each message t.is(messages[0].ruleId, "ui5-linter-no-deprecated-api", `RuleId is correct`); + t.is(messages[0].message, `Use of deprecated library 'sap.ca.scfld.md'`, `Message is correct`); + t.is(messages[0].column, 7, `Column is correct`); + t.is(messages[0].line, 18, `Line is correct`); + + t.is(messages[1].ruleId, "ui5-linter-no-deprecated-api", `RuleId is correct`); + t.is(messages[1].message, `Use of deprecated library 'sap.ca.ui'`, `Message is correct`); + t.is(messages[1].column, 7, `Column is correct`); + t.is(messages[1].line, 19, `Line is correct`); - // TODO: Add tests for position info of messages (lines, columns) + t.is(messages[2].ruleId, "ui5-linter-no-deprecated-api", `RuleId is correct`); + t.is(messages[2].message, `Use of deprecated library 'sap.fe.common'`, `Message is correct`); + t.is(messages[2].column, 7, `Column is correct`); + t.is(messages[2].line, 20, `Line is correct`); +}); + +test("Test YamlLinter report with empty ui5.yaml", async (t) => { + const resourceContent = ``; + + const resourcePath = "/ui5.yaml"; + const projectPath = "test.yamllinter"; + const context = new LinterContext({rootDir: projectPath}); + + // Create UI5YamlLinter instance with resource content + const linter = new YamlLinter(resourcePath, resourceContent, context); + // Run UI5YamlLinter report + await linter.lint(); + + const messages = context.getLintingMessages("/ui5.yaml"); + + // Test returned messages + t.is(messages.length, 0, "0 messages should be reported"); }); From c6c4a4c32664968a4a3e805d6a2aef5a1058010d Mon Sep 17 00:00:00 2001 From: Max Reichmann Date: Wed, 17 Apr 2024 00:44:29 +0200 Subject: [PATCH 08/12] test(linter.ts): Update snapshots --- test/lib/linter/snapshots/linter.ts.snap | Bin 7850 -> 8056 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/test/lib/linter/snapshots/linter.ts.snap b/test/lib/linter/snapshots/linter.ts.snap index 8341c582af937663412a1a2b99f651be9fb6b49e..fdcc391c8ee5db69fe3725b552ba70010cd88341 100644 GIT binary patch literal 8056 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 Date: Wed, 17 Apr 2024 14:03:40 +0200 Subject: [PATCH 09/12] fix(YamlLinter): Fix Yaml multidoc support --- package-lock.json | 133 ++--------------- src/linter/yaml/YamlLinter.ts | 20 ++- test/lib/linter/YamlLinter.ts | 268 +++++++++++++++++++++++++++++++--- 3 files changed, 268 insertions(+), 153 deletions(-) diff --git a/package-lock.json b/package-lock.json index 88d7fba94..ac1d0a922 100644 --- a/package-lock.json +++ b/package-lock.json @@ -728,70 +728,6 @@ "tslib": "^2.4.0" } }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", - "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", - "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", - "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", - "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/@esbuild/darwin-arm64": { "version": "0.19.12", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", @@ -4530,9 +4466,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001608", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001608.tgz", - "integrity": "sha512-cjUJTQkk9fQlJR2s4HMuPMvTiRggl0rAVMtthQuyOlDWuqHXqN8azLq+pi8B2TjwKJ32diHjUqRIKeFX4z1FoA==", + "version": "1.0.30001606", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001606.tgz", + "integrity": "sha512-LPbwnW4vfpJId225pwjZJOgX1m9sGfbw/RKJvw/t0QhYOOaTXHvkjVGFGPpvwEzufrjvTlsULnVTxdy4/6cqkg==", "dev": true, "funding": [ { @@ -5739,9 +5675,9 @@ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, "node_modules/electron-to-chromium": { - "version": "1.4.731", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.731.tgz", - "integrity": "sha512-+TqVfZjpRz2V/5SPpmJxq9qK620SC5SqCnxQIOi7i/U08ZDcTpKbT7Xjj9FU5CbXTMUb4fywbIr8C7cGv4hcjw==", + "version": "1.4.729", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.729.tgz", + "integrity": "sha512-bx7+5Saea/qu14kmPTDHQxkp2UnziG3iajUQu3BxFvCOnpAJdDbMV4rSl+EqFDkkpNNVUFlR1kDfpL59xfy1HA==", "dev": true }, "node_modules/emittery": { @@ -10350,9 +10286,9 @@ } }, "node_modules/pacote/node_modules/@npmcli/git": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.5.tgz", - "integrity": "sha512-x8hXItC8OFOwdgERzRIxg0ic1lQqW6kSZFFQtZTCNYOeGb9UqzVcod02TYljI9UBl4RtfcyQ0A7ygmcGFvEqWw==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.4.tgz", + "integrity": "sha512-nr6/WezNzuYUppzXRaYu/W4aT5rLxdXqEFupbh6e/ovlYFQ8hpu1UUPV3Ir/YTl+74iXl2ZOMlGzudh9ZPUchQ==", "dependencies": { "@npmcli/promise-spawn": "^7.0.0", "lru-cache": "^10.0.1", @@ -10368,9 +10304,9 @@ } }, "node_modules/pacote/node_modules/@npmcli/package-json": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.0.1.tgz", - "integrity": "sha512-WdwGsRP/do+94IXEgfD/oGGVn0VDS+wYM8MoXU5tJ+02Ke8ePSobMwnfcCHAfcvU/pFwZxyZYWaJdOBsqXRAbA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.0.0.tgz", + "integrity": "sha512-OI2zdYBLhQ7kpNPaJxiflofYIpkNLi+lnGdzqUOfRmCF3r2l1nadcjtCYMJKv/Utm/ZtlffaUuTiAktPHbc17g==", "dependencies": { "@npmcli/git": "^5.0.0", "glob": "^10.2.2", @@ -13209,51 +13145,6 @@ "node": ">=12" } }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/yauzl-promise": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yauzl-promise/-/yauzl-promise-4.0.0.tgz", diff --git a/src/linter/yaml/YamlLinter.ts b/src/linter/yaml/YamlLinter.ts index 70e3b5295..8ba820a1d 100644 --- a/src/linter/yaml/YamlLinter.ts +++ b/src/linter/yaml/YamlLinter.ts @@ -39,20 +39,18 @@ export default class YamlLinter { https://sap.github.io/ui5-tooling/stable/pages/extensibility/CustomTasks/#example-custom-task-extension-defined-in-ui5-project */ // Split Yaml file into part documents by '---' separator - const partDocuments = this.#content.split(/(\r?\n|\r|\n)---/g).map((part) => part.trim()); + const partDocuments: string[] = this.#content.split(/(?:\r?\n|\r|\n)---/g); // Calculate the starting line number of each part document let lineNumberOffset = 0; - for (const part of partDocuments) { - if (part !== "") { - // Parse content only of the current part - const parsedYamlWithPosInfo: YamlContent = this.#parseYaml(part); - // Analyze part content with line number offset - this.#analyzeYaml(parsedYamlWithPosInfo, lineNumberOffset); - // Update line number offset for next part - lineNumberOffset += part.split(/\r?\n|\r|\n/g).length; - } - } + partDocuments.forEach((part: string) => { + // Parse content only of the current part + const parsedYamlWithPosInfo: YamlContent = this.#parseYaml(part); + // Analyze part content with line number offset + this.#analyzeYaml(parsedYamlWithPosInfo, lineNumberOffset); + // Update line number offset for next part + lineNumberOffset += part.split(/\r?\n|\r|\n/g).length; + }); } catch (err) { const message = err instanceof Error ? err.message : String(err); this.#context.addLintingMessage(this.#resourcePath, { diff --git a/test/lib/linter/YamlLinter.ts b/test/lib/linter/YamlLinter.ts index b9c2c85e0..21e52be18 100644 --- a/test/lib/linter/YamlLinter.ts +++ b/test/lib/linter/YamlLinter.ts @@ -2,11 +2,7 @@ import test from "ava"; import YamlLinter from "../../../src/linter/yaml/YamlLinter.js"; import LinterContext from "../../../src/linter/LinterContext.js"; -test("Test YamlLinter report (parsing and analyzing)", async (t) => { - /* Mock resource content of ui5.yaml file, - (formatted as used in src/linter/yaml/linter.ts) - (contains relevant 'framework' property and 'libraries' sub-property), - (contains only deprecated libraries) */ +test("Test YamlLinter report", async (t) => { const resourceContent = `specVersion: '3.0' metadata: @@ -51,12 +47,7 @@ framework: t.is(messages[2].line, 11, `Line is correct`); }); -test("Test YamlLinter report (parsing and analyzing) with multiple documents", async (t) => { - /* Mock resource content of ui5.yaml file with multiple documents, - (formatted as used in src/linter/yaml/linter.ts) - (contains relevant 'framework' property and 'libraries' sub-property), - (contains only deprecated libraries) - (contains document separators ('---') + comments after separator) */ +test("Test YamlLinter report with multiple documents", async (t) => { const resourceContent = `--- # This is the first document part specVersion: "3.2" @@ -66,6 +57,11 @@ metadata: name: render-markdown-files task: path: lib/tasks/renderMarkdownFiles.js +framework: + libraries: + - name: sap.sac.grid + - name: sap.ui.commons + - name: sap.ui.suite --- # This is the second document part specVersion: '3.0' metadata: @@ -77,15 +73,83 @@ framework: libraries: - name: sap.ca.scfld.md - name: sap.ca.ui - - name: sap.fe.common ---- # This is the third document part + - name: sap.fe.common`; + + const resourcePath = "/ui5.yaml"; + const projectPath = "test.yamllinter"; + const context = new LinterContext({rootDir: projectPath}); + + // Create UI5YamlLinter instance with resource content + const linter = new YamlLinter(resourcePath, resourceContent, context); + // Run UI5YamlLinter report + await linter.lint(); + + const messages = context.getLintingMessages("/ui5.yaml"); + + // Test returned messages + t.is(messages.length, 6, "Detection of 6 deprecated libraries expected"); + + // Test each message + t.is(messages[0].ruleId, "ui5-linter-no-deprecated-api", `RuleId is correct`); + t.is(messages[0].message, `Use of deprecated library 'sap.sac.grid'`, `Message is correct`); + t.is(messages[0].column, 7, `Column is correct`); + t.is(messages[0].line, 11, `Line is correct`); + + t.is(messages[1].ruleId, "ui5-linter-no-deprecated-api", `RuleId is correct`); + t.is(messages[1].message, `Use of deprecated library 'sap.ui.commons'`, `Message is correct`); + t.is(messages[1].column, 7, `Column is correct`); + t.is(messages[1].line, 12, `Line is correct`); + + t.is(messages[2].ruleId, "ui5-linter-no-deprecated-api", `RuleId is correct`); + t.is(messages[2].message, `Use of deprecated library 'sap.ui.suite'`, `Message is correct`); + t.is(messages[2].column, 7, `Column is correct`); + t.is(messages[2].line, 13, `Line is correct`); + + t.is(messages[3].ruleId, "ui5-linter-no-deprecated-api", `RuleId is correct`); + t.is(messages[3].message, `Use of deprecated library 'sap.ca.scfld.md'`, `Message is correct`); + t.is(messages[3].column, 7, `Column is correct`); + t.is(messages[3].line, 23, `Line is correct`); + + t.is(messages[4].ruleId, "ui5-linter-no-deprecated-api", `RuleId is correct`); + t.is(messages[4].message, `Use of deprecated library 'sap.ca.ui'`, `Message is correct`); + t.is(messages[4].column, 7, `Column is correct`); + t.is(messages[4].line, 24, `Line is correct`); + + t.is(messages[5].ruleId, "ui5-linter-no-deprecated-api", `RuleId is correct`); + t.is(messages[5].message, `Use of deprecated library 'sap.fe.common'`, `Message is correct`); + t.is(messages[5].column, 7, `Column is correct`); + t.is(messages[5].line, 25, `Line is correct`); +}); + +test("Test YamlLinter report with multiple documents and empty lines", async (t) => { + const resourceContent = +`--- # This is the first document part specVersion: "3.2" kind: extension type: task metadata: name: render-markdown-files task: - path: lib/tasks/renderMarkdownFiles.js`; + path: lib/tasks/renderMarkdownFiles.js +framework: + libraries: + - name: sap.sac.grid + - name: sap.ui.commons + - name: sap.ui.suite + +--- # This is the second document part + +specVersion: '3.0' +metadata: + name: ava-test-ui5yamllinter +type: application +framework: + name: OpenUI5 + version: "1.121.0" + libraries: + - name: sap.ca.scfld.md + - name: sap.ca.ui + - name: sap.fe.common`; const resourcePath = "/ui5.yaml"; const projectPath = "test.yamllinter"; @@ -99,23 +163,185 @@ task: const messages = context.getLintingMessages("/ui5.yaml"); // Test returned messages - t.is(messages.length, 3, "Detection of 3 deprecated libraries expected"); + t.is(messages.length, 6, "Detection of 6 deprecated libraries expected"); // Test each message t.is(messages[0].ruleId, "ui5-linter-no-deprecated-api", `RuleId is correct`); - t.is(messages[0].message, `Use of deprecated library 'sap.ca.scfld.md'`, `Message is correct`); + t.is(messages[0].message, `Use of deprecated library 'sap.sac.grid'`, `Message is correct`); t.is(messages[0].column, 7, `Column is correct`); - t.is(messages[0].line, 18, `Line is correct`); + t.is(messages[0].line, 11, `Line is correct`); t.is(messages[1].ruleId, "ui5-linter-no-deprecated-api", `RuleId is correct`); - t.is(messages[1].message, `Use of deprecated library 'sap.ca.ui'`, `Message is correct`); + t.is(messages[1].message, `Use of deprecated library 'sap.ui.commons'`, `Message is correct`); t.is(messages[1].column, 7, `Column is correct`); - t.is(messages[1].line, 19, `Line is correct`); + t.is(messages[1].line, 12, `Line is correct`); t.is(messages[2].ruleId, "ui5-linter-no-deprecated-api", `RuleId is correct`); - t.is(messages[2].message, `Use of deprecated library 'sap.fe.common'`, `Message is correct`); + t.is(messages[2].message, `Use of deprecated library 'sap.ui.suite'`, `Message is correct`); + t.is(messages[2].column, 7, `Column is correct`); + t.is(messages[2].line, 13, `Line is correct`); + + t.is(messages[3].ruleId, "ui5-linter-no-deprecated-api", `RuleId is correct`); + t.is(messages[3].message, `Use of deprecated library 'sap.ca.scfld.md'`, `Message is correct`); + t.is(messages[3].column, 7, `Column is correct`); + t.is(messages[3].line, 25, `Line is correct`); + + t.is(messages[4].ruleId, "ui5-linter-no-deprecated-api", `RuleId is correct`); + t.is(messages[4].message, `Use of deprecated library 'sap.ca.ui'`, `Message is correct`); + t.is(messages[4].column, 7, `Column is correct`); + t.is(messages[4].line, 26, `Line is correct`); + + t.is(messages[5].ruleId, "ui5-linter-no-deprecated-api", `RuleId is correct`); + t.is(messages[5].message, `Use of deprecated library 'sap.fe.common'`, `Message is correct`); + t.is(messages[5].column, 7, `Column is correct`); + t.is(messages[5].line, 27, `Line is correct`); +}); + +test("Test YamlLinter report with multiple documents and without comments", async (t) => { + const resourceContent = +`--- +specVersion: "3.2" +kind: extension +type: task +metadata: + name: render-markdown-files +task: + path: lib/tasks/renderMarkdownFiles.js +framework: + libraries: + - name: sap.sac.grid + - name: sap.ui.commons + - name: sap.ui.suite +--- +specVersion: '3.0' +metadata: + name: ava-test-ui5yamllinter +type: application +framework: + name: OpenUI5 + version: "1.121.0" + libraries: + - name: sap.ca.scfld.md + - name: sap.ca.ui + - name: sap.fe.common`; + + const resourcePath = "/ui5.yaml"; + const projectPath = "test.yamllinter"; + const context = new LinterContext({rootDir: projectPath}); + + // Create UI5YamlLinter instance with resource content + const linter = new YamlLinter(resourcePath, resourceContent, context); + // Run UI5YamlLinter report + await linter.lint(); + + const messages = context.getLintingMessages("/ui5.yaml"); + + // Test returned messages + t.is(messages.length, 6, "Detection of 6 deprecated libraries expected"); + + // Test each message + t.is(messages[0].ruleId, "ui5-linter-no-deprecated-api", `RuleId is correct`); + t.is(messages[0].message, `Use of deprecated library 'sap.sac.grid'`, `Message is correct`); + t.is(messages[0].column, 7, `Column is correct`); + t.is(messages[0].line, 11, `Line is correct`); + + t.is(messages[1].ruleId, "ui5-linter-no-deprecated-api", `RuleId is correct`); + t.is(messages[1].message, `Use of deprecated library 'sap.ui.commons'`, `Message is correct`); + t.is(messages[1].column, 7, `Column is correct`); + t.is(messages[1].line, 12, `Line is correct`); + + t.is(messages[2].ruleId, "ui5-linter-no-deprecated-api", `RuleId is correct`); + t.is(messages[2].message, `Use of deprecated library 'sap.ui.suite'`, `Message is correct`); t.is(messages[2].column, 7, `Column is correct`); - t.is(messages[2].line, 20, `Line is correct`); + t.is(messages[2].line, 13, `Line is correct`); + + t.is(messages[3].ruleId, "ui5-linter-no-deprecated-api", `RuleId is correct`); + t.is(messages[3].message, `Use of deprecated library 'sap.ca.scfld.md'`, `Message is correct`); + t.is(messages[3].column, 7, `Column is correct`); + t.is(messages[3].line, 23, `Line is correct`); + + t.is(messages[4].ruleId, "ui5-linter-no-deprecated-api", `RuleId is correct`); + t.is(messages[4].message, `Use of deprecated library 'sap.ca.ui'`, `Message is correct`); + t.is(messages[4].column, 7, `Column is correct`); + t.is(messages[4].line, 24, `Line is correct`); + + t.is(messages[5].ruleId, "ui5-linter-no-deprecated-api", `RuleId is correct`); + t.is(messages[5].message, `Use of deprecated library 'sap.fe.common'`, `Message is correct`); + t.is(messages[5].column, 7, `Column is correct`); + t.is(messages[5].line, 25, `Line is correct`); +}); + +test("Test YamlLinter report with multiple documents and without first separator", async (t) => { + const resourceContent = +`specVersion: "3.2" +kind: extension +type: task +metadata: + name: render-markdown-files +task: + path: lib/tasks/renderMarkdownFiles.js +framework: + libraries: + - name: sap.sac.grid + - name: sap.ui.commons + - name: sap.ui.suite +--- +specVersion: '3.0' +metadata: + name: ava-test-ui5yamllinter +type: application +framework: + name: OpenUI5 + version: "1.121.0" + libraries: + - name: sap.ca.scfld.md + - name: sap.ca.ui + - name: sap.fe.common`; + + const resourcePath = "/ui5.yaml"; + const projectPath = "test.yamllinter"; + const context = new LinterContext({rootDir: projectPath}); + + // Create UI5YamlLinter instance with resource content + const linter = new YamlLinter(resourcePath, resourceContent, context); + // Run UI5YamlLinter report + await linter.lint(); + + const messages = context.getLintingMessages("/ui5.yaml"); + + // Test returned messages + t.is(messages.length, 6, "Detection of 6 deprecated libraries expected"); + + // Test each message + t.is(messages[0].ruleId, "ui5-linter-no-deprecated-api", `RuleId is correct`); + t.is(messages[0].message, `Use of deprecated library 'sap.sac.grid'`, `Message is correct`); + t.is(messages[0].column, 7, `Column is correct`); + t.is(messages[0].line, 10, `Line is correct`); + + t.is(messages[1].ruleId, "ui5-linter-no-deprecated-api", `RuleId is correct`); + t.is(messages[1].message, `Use of deprecated library 'sap.ui.commons'`, `Message is correct`); + t.is(messages[1].column, 7, `Column is correct`); + t.is(messages[1].line, 11, `Line is correct`); + + t.is(messages[2].ruleId, "ui5-linter-no-deprecated-api", `RuleId is correct`); + t.is(messages[2].message, `Use of deprecated library 'sap.ui.suite'`, `Message is correct`); + t.is(messages[2].column, 7, `Column is correct`); + t.is(messages[2].line, 12, `Line is correct`); + + t.is(messages[3].ruleId, "ui5-linter-no-deprecated-api", `RuleId is correct`); + t.is(messages[3].message, `Use of deprecated library 'sap.ca.scfld.md'`, `Message is correct`); + t.is(messages[3].column, 7, `Column is correct`); + t.is(messages[3].line, 22, `Line is correct`); + + t.is(messages[4].ruleId, "ui5-linter-no-deprecated-api", `RuleId is correct`); + t.is(messages[4].message, `Use of deprecated library 'sap.ca.ui'`, `Message is correct`); + t.is(messages[4].column, 7, `Column is correct`); + t.is(messages[4].line, 23, `Line is correct`); + + t.is(messages[5].ruleId, "ui5-linter-no-deprecated-api", `RuleId is correct`); + t.is(messages[5].message, `Use of deprecated library 'sap.fe.common'`, `Message is correct`); + t.is(messages[5].column, 7, `Column is correct`); + t.is(messages[5].line, 24, `Line is correct`); }); test("Test YamlLinter report with empty ui5.yaml", async (t) => { From 03dfe06729b817c96398f895979a698be2830983 Mon Sep 17 00:00:00 2001 From: Max Reichmann Date: Wed, 17 Apr 2024 14:10:09 +0200 Subject: [PATCH 10/12] refactor(YamlLinter): Rename identifiers --- src/linter/yaml/YamlLinter.ts | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/src/linter/yaml/YamlLinter.ts b/src/linter/yaml/YamlLinter.ts index 8ba820a1d..d7962b4b1 100644 --- a/src/linter/yaml/YamlLinter.ts +++ b/src/linter/yaml/YamlLinter.ts @@ -3,7 +3,7 @@ import LinterContext from "../LinterContext.js"; import deprecatedLibraries from "../../utils/deprecatedLibs.js"; import {DataWithPosition, fromYaml, getPosition} from "data-with-position"; -interface YamlContent extends DataWithPosition { +interface YamlWithPosInfo extends DataWithPosition { framework?: { libraries?: { name: string; @@ -35,21 +35,18 @@ export default class YamlLinter { // eslint-disable-next-line @typescript-eslint/require-await async lint() { try { - /* Support multiple documents in one Yaml file - https://sap.github.io/ui5-tooling/stable/pages/extensibility/CustomTasks/#example-custom-task-extension-defined-in-ui5-project */ - // Split Yaml file into part documents by '---' separator - const partDocuments: string[] = this.#content.split(/(?:\r?\n|\r|\n)---/g); + const allDocuments: string[] = this.#content.split(/(?:\r?\n|\r|\n)---/g); // Calculate the starting line number of each part document let lineNumberOffset = 0; - partDocuments.forEach((part: string) => { + allDocuments.forEach((document: string) => { // Parse content only of the current part - const parsedYamlWithPosInfo: YamlContent = this.#parseYaml(part); + const parsedYamlWithPosInfo: YamlWithPosInfo = this.#parseYaml(document); // Analyze part content with line number offset this.#analyzeYaml(parsedYamlWithPosInfo, lineNumberOffset); // Update line number offset for next part - lineNumberOffset += part.split(/\r?\n|\r|\n/g).length; + lineNumberOffset += document.split(/\r?\n|\r|\n/g).length; }); } catch (err) { const message = err instanceof Error ? err.message : String(err); @@ -62,14 +59,14 @@ export default class YamlLinter { } } - #parseYaml(fileContent: string): YamlContent { + #parseYaml(content: string): YamlWithPosInfo { // Create JS object from YAML content with position information - return fromYaml(fileContent) as YamlContent; + return fromYaml(content) as YamlWithPosInfo; } - #analyzeYaml(yamlObject: YamlContent, offset: number) { + #analyzeYaml(yaml: YamlWithPosInfo, offset: number) { // Check for deprecated libraries - yamlObject?.framework?.libraries?.forEach((lib) => { + yaml?.framework?.libraries?.forEach((lib) => { if (deprecatedLibraries.includes(lib.name.toString())) { const positionInfo = getPosition(lib); this.#context.addLintingMessage(this.#resourcePath, { From fbf9e234e6054e6c87e613ba7d20a0352f3723e6 Mon Sep 17 00:00:00 2001 From: Florian Vogt Date: Wed, 17 Apr 2024 15:55:34 +0200 Subject: [PATCH 11/12] fix: Remove ? --- src/linter/yaml/YamlLinter.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/linter/yaml/YamlLinter.ts b/src/linter/yaml/YamlLinter.ts index d7962b4b1..4c734ef22 100644 --- a/src/linter/yaml/YamlLinter.ts +++ b/src/linter/yaml/YamlLinter.ts @@ -36,7 +36,7 @@ export default class YamlLinter { async lint() { try { // Split Yaml file into part documents by '---' separator - const allDocuments: string[] = this.#content.split(/(?:\r?\n|\r|\n)---/g); + const allDocuments: string[] = this.#content.split(/(?:\r\n|\r|\n)---/g); // Calculate the starting line number of each part document let lineNumberOffset = 0; @@ -46,7 +46,7 @@ export default class YamlLinter { // Analyze part content with line number offset this.#analyzeYaml(parsedYamlWithPosInfo, lineNumberOffset); // Update line number offset for next part - lineNumberOffset += document.split(/\r?\n|\r|\n/g).length; + lineNumberOffset += document.split(/\r\n|\r|\n/g).length; }); } catch (err) { const message = err instanceof Error ? err.message : String(err); From c4ac8953af117b1c85e64e5cd7db082af8690764 Mon Sep 17 00:00:00 2001 From: Florian Vogt Date: Wed, 17 Apr 2024 15:55:50 +0200 Subject: [PATCH 12/12] build: Regenerate lock file --- package-lock.json | 1581 +++++++++++++++++++++++++++++++-------------- 1 file changed, 1094 insertions(+), 487 deletions(-) diff --git a/package-lock.json b/package-lock.json index ac1d0a922..77d247b93 100644 --- a/package-lock.json +++ b/package-lock.json @@ -470,13 +470,13 @@ "dev": true }, "node_modules/@commitlint/cli": { - "version": "19.2.1", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-19.2.1.tgz", - "integrity": "sha512-cbkYUJsLqRomccNxvoJTyv5yn0bSy05BBizVyIcLACkRbVUqYorC351Diw/XFSWC/GtpwiwT2eOvQgFZa374bg==", + "version": "19.2.2", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-19.2.2.tgz", + "integrity": "sha512-P8cbOHfg2PQRzfICLSrzUVOCVMqjEZ8Hlth6mtJ4yOEjT47Q5PbIGymgX3rLVylNw+3IAT2Djn9IJ2wHbXFzBg==", "dev": true, "dependencies": { "@commitlint/format": "^19.0.3", - "@commitlint/lint": "^19.1.0", + "@commitlint/lint": "^19.2.2", "@commitlint/load": "^19.2.0", "@commitlint/read": "^19.2.1", "@commitlint/types": "^19.0.3", @@ -491,9 +491,9 @@ } }, "node_modules/@commitlint/config-conventional": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-19.1.0.tgz", - "integrity": "sha512-KIKD2xrp6Uuk+dcZVj3++MlzIr/Su6zLE8crEDQCZNvWHNQSeeGbzOlNtsR32TUy6H3JbP7nWgduAHCaiGQ6EA==", + "version": "19.2.2", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-19.2.2.tgz", + "integrity": "sha512-mLXjsxUVLYEGgzbxbxicGPggDuyWNkf25Ht23owXIH+zV2pv1eJuzLK3t1gDY5Gp6pxdE60jZnWUY5cvgL3ufw==", "dev": true, "dependencies": { "@commitlint/types": "^19.0.3", @@ -556,9 +556,9 @@ } }, "node_modules/@commitlint/is-ignored": { - "version": "19.0.3", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-19.0.3.tgz", - "integrity": "sha512-MqDrxJaRSVSzCbPsV6iOKG/Lt52Y+PVwFVexqImmYYFhe51iVJjK2hRhOG2jUAGiUHk4jpdFr0cZPzcBkSzXDQ==", + "version": "19.2.2", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-19.2.2.tgz", + "integrity": "sha512-eNX54oXMVxncORywF4ZPFtJoBm3Tvp111tg1xf4zWXGfhBPKpfKG6R+G3G4v5CPlRROXpAOpQ3HMhA9n1Tck1g==", "dev": true, "dependencies": { "@commitlint/types": "^19.0.3", @@ -569,12 +569,12 @@ } }, "node_modules/@commitlint/lint": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-19.1.0.tgz", - "integrity": "sha512-ESjaBmL/9cxm+eePyEr6SFlBUIYlYpI80n+Ltm7IA3MAcrmiP05UMhJdAD66sO8jvo8O4xdGn/1Mt2G5VzfZKw==", + "version": "19.2.2", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-19.2.2.tgz", + "integrity": "sha512-xrzMmz4JqwGyKQKTpFzlN0dx0TAiT7Ran1fqEBgEmEj+PU98crOFtysJgY+QdeSagx6EDRigQIXJVnfrI0ratA==", "dev": true, "dependencies": { - "@commitlint/is-ignored": "^19.0.3", + "@commitlint/is-ignored": "^19.2.2", "@commitlint/parse": "^19.0.3", "@commitlint/rules": "^19.0.3", "@commitlint/types": "^19.0.3" @@ -728,6 +728,70 @@ "tslib": "^2.4.0" } }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/darwin-arm64": { "version": "0.19.12", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", @@ -744,6 +808,294 @@ "node": ">=12" } }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -807,6 +1159,12 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -832,6 +1190,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -948,27 +1318,6 @@ "node": ">=12" } }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@isaacs/string-locale-compare": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", @@ -1007,15 +1356,6 @@ "node": ">=8" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -1029,19 +1369,6 @@ "node": ">=8" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -1167,9 +1494,9 @@ } }, "node_modules/@jsdoc/salty": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.7.tgz", - "integrity": "sha512-mh8LbS9d4Jq84KLw8pzho7XC2q2/IJGiJss3xwRoLD1A+EE16SjN4PfaG4jRCzKegTFLlN0Zd8SdUPE6XdoPFg==", + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.8.tgz", + "integrity": "sha512-5e+SFVavj1ORKlKaKr2BmTOekmXbelU7dC0cDkQLqag7xfuTPuGMUFx7KWJuv4bYZrTsoL2Z18VVCOKYxzoHcg==", "dependencies": { "lodash": "^4.17.21" }, @@ -1788,9 +2115,9 @@ } }, "node_modules/@npmcli/config": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@npmcli/config/-/config-8.2.1.tgz", - "integrity": "sha512-G4PknBr51bwCuY63wXSO8OakSoyHk11JYhxAZCayCAosJruX86lAstCfbr/2Fr+g6OqVz6PPfOVZ98bcoc+eQA==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/config/-/config-8.2.2.tgz", + "integrity": "sha512-VvMHPIzcsKHCaNh9h4kCbn7NyDtcNJFMOUZ8Wu9SWhds5Egr1gMGU2fv+M50P1V5iAUZWZcv2Iguo5HTckpzww==", "dependencies": { "@npmcli/map-workspaces": "^3.0.2", "ci-info": "^4.0.0", @@ -1875,9 +2202,9 @@ } }, "node_modules/@npmcli/map-workspaces": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-3.0.4.tgz", - "integrity": "sha512-Z0TbvXkRbacjFFLpVpV0e2mheCh+WzQpcqL+4xp49uNJOxOnIAPZyXtUxZ5Qn3QBTGKA11Exjd9a5411rBrhDg==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-3.0.6.tgz", + "integrity": "sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA==", "dependencies": { "@npmcli/name-from-folder": "^2.0.0", "glob": "^10.2.2", @@ -2524,16 +2851,16 @@ "dev": true }, "node_modules/@stylistic/eslint-plugin": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-1.7.0.tgz", - "integrity": "sha512-ThMUjGIi/jeWYNvOdjZkoLw1EOVs0tEuKXDgWvTn8uWaEz55HuPlajKxjKLpv19C+qRDbKczJfzUODfCdME53A==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-1.7.2.tgz", + "integrity": "sha512-TesaPR4AOCeD4unwu9gZCdTe8SsUpykriICuwXV8GFBgESuVbfVp+S8g6xTWe9ntVR803bNMtnr2UhxHW0iFqg==", "dev": true, "dependencies": { - "@stylistic/eslint-plugin-js": "1.7.0", - "@stylistic/eslint-plugin-jsx": "1.7.0", - "@stylistic/eslint-plugin-plus": "1.7.0", - "@stylistic/eslint-plugin-ts": "1.7.0", - "@types/eslint": "^8.56.2" + "@stylistic/eslint-plugin-js": "1.7.2", + "@stylistic/eslint-plugin-jsx": "1.7.2", + "@stylistic/eslint-plugin-plus": "1.7.2", + "@stylistic/eslint-plugin-ts": "1.7.2", + "@types/eslint": "^8.56.8" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -2543,12 +2870,12 @@ } }, "node_modules/@stylistic/eslint-plugin-js": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-js/-/eslint-plugin-js-1.7.0.tgz", - "integrity": "sha512-PN6On/+or63FGnhhMKSQfYcWutRlzOiYlVdLM6yN7lquoBTqUJHYnl4TA4MHwiAt46X5gRxDr1+xPZ1lOLcL+Q==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-js/-/eslint-plugin-js-1.7.2.tgz", + "integrity": "sha512-ZYX7C5p7zlHbACwFLU+lISVh6tdcRP/++PWegh2Sy0UgMT5kU0XkPa2tKWEtJYzZmPhJxu9LxbnWcnE/tTwSDQ==", "dev": true, "dependencies": { - "@types/eslint": "^8.56.2", + "@types/eslint": "^8.56.8", "acorn": "^8.11.3", "escape-string-regexp": "^4.0.0", "eslint-visitor-keys": "^3.4.3", @@ -2562,15 +2889,15 @@ } }, "node_modules/@stylistic/eslint-plugin-jsx": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-jsx/-/eslint-plugin-jsx-1.7.0.tgz", - "integrity": "sha512-BACdBwXakQvjYIST5N2WWhRbvhRsIxa/F59BiZol+0IH4FSmDXhie7v/yaxDIIA9CbfElzOmIA5nWNYTVXcnwQ==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-jsx/-/eslint-plugin-jsx-1.7.2.tgz", + "integrity": "sha512-lNZR5PR0HLJPs+kY0y8fy6KroKlYqA5PwsYWpVYWzqZWiL5jgAeUo4s9yLFYjJjzildJ5MsTVMy/xP81Qz6GXg==", "dev": true, "dependencies": { - "@stylistic/eslint-plugin-js": "^1.7.0", - "@types/eslint": "^8.56.2", + "@stylistic/eslint-plugin-js": "^1.7.2", + "@types/eslint": "^8.56.8", "estraverse": "^5.3.0", - "picomatch": "^4.0.1" + "picomatch": "^4.0.2" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -2580,12 +2907,12 @@ } }, "node_modules/@stylistic/eslint-plugin-plus": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-plus/-/eslint-plugin-plus-1.7.0.tgz", - "integrity": "sha512-AabDw8sXsc70Ydx3qnbeTlRHZnIwY6UKEenBPURPhY3bfYWX+/pDpZH40HkOu94v8D0DUrocPkeeEUxl4e0JDg==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-plus/-/eslint-plugin-plus-1.7.2.tgz", + "integrity": "sha512-luUfRVbBVtt0+/FNt8/76BANJEzb/nHWasHD7UUjyMrch2U9xUKpObrkTCzqBuisKek+uFupwGjqXqDP07+fQw==", "dev": true, "dependencies": { - "@types/eslint": "^8.56.2", + "@types/eslint": "^8.56.8", "@typescript-eslint/utils": "^6.21.0" }, "peerDependencies": { @@ -2593,13 +2920,13 @@ } }, "node_modules/@stylistic/eslint-plugin-ts": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-ts/-/eslint-plugin-ts-1.7.0.tgz", - "integrity": "sha512-QsHv98mmW1xaucVYQTyLDgEpybPJ/6jPPxVBrIchntWWwj74xCWKUiw79hu+TpYj/Pbhd9rkqJYLNq3pQGYuyA==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-ts/-/eslint-plugin-ts-1.7.2.tgz", + "integrity": "sha512-szX89YPocwCe4T0eT3alj7MwEzDHt5+B+kb/vQfSSLIjI9CGgoWrgj50zU8PtaDctTh4ZieFBzU/lRmkSUo0RQ==", "dev": true, "dependencies": { - "@stylistic/eslint-plugin-js": "1.7.0", - "@types/eslint": "^8.56.2", + "@stylistic/eslint-plugin-js": "1.7.2", + "@types/eslint": "^8.56.8", "@typescript-eslint/utils": "^6.21.0" }, "engines": { @@ -2674,9 +3001,9 @@ } }, "node_modules/@types/eslint": { - "version": "8.56.7", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.7.tgz", - "integrity": "sha512-SjDvI/x3zsZnOkYZ3lCt9lOZWZLB2jIlNKz+LBgCtDurK0JZcwucxYHn1w2BJkD34dgX9Tjnak0txtq4WTggEA==", + "version": "8.56.9", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.9.tgz", + "integrity": "sha512-W4W3KcqzjJ0sHg2vAq9vfml6OhsJ53TcUjUqfzzZf/EChUtwspszj/S0pzMxnfRcO55/iGq47dscXw71Fxc4Zg==", "dev": true, "dependencies": { "@types/estree": "*", @@ -2835,16 +3162,16 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.6.0.tgz", - "integrity": "sha512-gKmTNwZnblUdnTIJu3e9kmeRRzV2j1a/LUO27KNNAnIC5zjy1aSvXSRp4rVNlmAoHlQ7HzX42NbKpcSr4jF80A==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.7.0.tgz", + "integrity": "sha512-GJWR0YnfrKnsRoluVO3PRb9r5aMZriiMMM/RHj5nnTrBy1/wIgk76XCtCKcnXGjpZQJQRFtGV9/0JJ6n30uwpQ==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.6.0", - "@typescript-eslint/type-utils": "7.6.0", - "@typescript-eslint/utils": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0", + "@typescript-eslint/scope-manager": "7.7.0", + "@typescript-eslint/type-utils": "7.7.0", + "@typescript-eslint/utils": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.3.1", @@ -2870,13 +3197,13 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.6.0.tgz", - "integrity": "sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.0.tgz", + "integrity": "sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0" + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -2887,9 +3214,9 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.6.0.tgz", - "integrity": "sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.0.tgz", + "integrity": "sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -2900,13 +3227,13 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.6.0.tgz", - "integrity": "sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.0.tgz", + "integrity": "sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0", + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2928,17 +3255,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.6.0.tgz", - "integrity": "sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.7.0.tgz", + "integrity": "sha512-LKGAXMPQs8U/zMRFXDZOzmMKgFv3COlxUQ+2NMPhbqgVm6R1w+nU1i4836Pmxu9jZAuIeyySNrN/6Rc657ggig==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.15", "@types/semver": "^7.5.8", - "@typescript-eslint/scope-manager": "7.6.0", - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/typescript-estree": "7.6.0", + "@typescript-eslint/scope-manager": "7.7.0", + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/typescript-estree": "7.7.0", "semver": "^7.6.0" }, "engines": { @@ -2953,12 +3280,12 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.6.0.tgz", - "integrity": "sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.0.tgz", + "integrity": "sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/types": "7.7.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -2985,15 +3312,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.6.0.tgz", - "integrity": "sha512-usPMPHcwX3ZoPWnBnhhorc14NJw9J4HpSXQX4urF2TPKG0au0XhJoZyX62fmvdHONUkmyUe74Hzm1//XA+BoYg==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.7.0.tgz", + "integrity": "sha512-fNcDm3wSwVM8QYL4HKVBggdIPAy9Q41vcvC/GtDobw3c4ndVT3K6cqudUmjHPw8EAp4ufax0o58/xvWaP2FmTg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.6.0", - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/typescript-estree": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0", + "@typescript-eslint/scope-manager": "7.7.0", + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/typescript-estree": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0", "debug": "^4.3.4" }, "engines": { @@ -3013,13 +3340,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.6.0.tgz", - "integrity": "sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.0.tgz", + "integrity": "sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0" + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -3030,9 +3357,9 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.6.0.tgz", - "integrity": "sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.0.tgz", + "integrity": "sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -3043,13 +3370,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.6.0.tgz", - "integrity": "sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.0.tgz", + "integrity": "sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0", + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -3071,12 +3398,12 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.6.0.tgz", - "integrity": "sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.0.tgz", + "integrity": "sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/types": "7.7.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -3120,13 +3447,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.6.0.tgz", - "integrity": "sha512-NxAfqAPNLG6LTmy7uZgpK8KcuiS2NZD/HlThPXQRGwz6u7MDBWRVliEEl1Gj6U7++kVJTpehkhZzCJLMK66Scw==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.7.0.tgz", + "integrity": "sha512-bOp3ejoRYrhAlnT/bozNQi3nio9tIgv3U5C0mVDdZC7cpcQEDZXvq8inrHYghLVwuNABRqrMW5tzAv88Vy77Sg==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.6.0", - "@typescript-eslint/utils": "7.6.0", + "@typescript-eslint/typescript-estree": "7.7.0", + "@typescript-eslint/utils": "7.7.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -3147,13 +3474,13 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/scope-manager": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.6.0.tgz", - "integrity": "sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.0.tgz", + "integrity": "sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0" + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -3164,9 +3491,9 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.6.0.tgz", - "integrity": "sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.0.tgz", + "integrity": "sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -3177,13 +3504,13 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.6.0.tgz", - "integrity": "sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.0.tgz", + "integrity": "sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0", + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -3205,17 +3532,17 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.6.0.tgz", - "integrity": "sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.7.0.tgz", + "integrity": "sha512-LKGAXMPQs8U/zMRFXDZOzmMKgFv3COlxUQ+2NMPhbqgVm6R1w+nU1i4836Pmxu9jZAuIeyySNrN/6Rc657ggig==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.15", "@types/semver": "^7.5.8", - "@typescript-eslint/scope-manager": "7.6.0", - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/typescript-estree": "7.6.0", + "@typescript-eslint/scope-manager": "7.7.0", + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/typescript-estree": "7.7.0", "semver": "^7.6.0" }, "engines": { @@ -3230,12 +3557,12 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.6.0.tgz", - "integrity": "sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.0.tgz", + "integrity": "sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/types": "7.7.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -3572,6 +3899,11 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/@ui5/project/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, "node_modules/@ui5/project/node_modules/escape-string-regexp": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", @@ -3601,6 +3933,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@ui5/project/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/@ui5/project/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -3624,59 +3967,59 @@ "dev": true }, "node_modules/@vue/compiler-core": { - "version": "3.4.21", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.21.tgz", - "integrity": "sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==", + "version": "3.4.23", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.23.tgz", + "integrity": "sha512-HAFmuVEwNqNdmk+w4VCQ2pkLk1Vw4XYiiyxEp3z/xvl14aLTUBw2OfVH3vBcx+FtGsynQLkkhK410Nah1N2yyQ==", "dev": true, "dependencies": { - "@babel/parser": "^7.23.9", - "@vue/shared": "3.4.21", + "@babel/parser": "^7.24.1", + "@vue/shared": "3.4.23", "entities": "^4.5.0", "estree-walker": "^2.0.2", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" } }, "node_modules/@vue/compiler-dom": { - "version": "3.4.21", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.21.tgz", - "integrity": "sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==", + "version": "3.4.23", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.23.tgz", + "integrity": "sha512-t0b9WSTnCRrzsBGrDd1LNR5HGzYTr7LX3z6nNBG+KGvZLqrT0mY6NsMzOqlVMBKKXKVuusbbB5aOOFgTY+senw==", "dev": true, "dependencies": { - "@vue/compiler-core": "3.4.21", - "@vue/shared": "3.4.21" + "@vue/compiler-core": "3.4.23", + "@vue/shared": "3.4.23" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.4.21", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.21.tgz", - "integrity": "sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==", + "version": "3.4.23", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.23.tgz", + "integrity": "sha512-fSDTKTfzaRX1kNAUiaj8JB4AokikzStWgHooMhaxyjZerw624L+IAP/fvI4ZwMpwIh8f08PVzEnu4rg8/Npssw==", "dev": true, "dependencies": { - "@babel/parser": "^7.23.9", - "@vue/compiler-core": "3.4.21", - "@vue/compiler-dom": "3.4.21", - "@vue/compiler-ssr": "3.4.21", - "@vue/shared": "3.4.21", + "@babel/parser": "^7.24.1", + "@vue/compiler-core": "3.4.23", + "@vue/compiler-dom": "3.4.23", + "@vue/compiler-ssr": "3.4.23", + "@vue/shared": "3.4.23", "estree-walker": "^2.0.2", - "magic-string": "^0.30.7", - "postcss": "^8.4.35", - "source-map-js": "^1.0.2" + "magic-string": "^0.30.8", + "postcss": "^8.4.38", + "source-map-js": "^1.2.0" } }, "node_modules/@vue/compiler-ssr": { - "version": "3.4.21", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.21.tgz", - "integrity": "sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q==", + "version": "3.4.23", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.23.tgz", + "integrity": "sha512-hb6Uj2cYs+tfqz71Wj6h3E5t6OKvb4MVcM2Nl5i/z1nv1gjEhw+zYaNOV+Xwn+SSN/VZM0DgANw5TuJfxfezPg==", "dev": true, "dependencies": { - "@vue/compiler-dom": "3.4.21", - "@vue/shared": "3.4.21" + "@vue/compiler-dom": "3.4.23", + "@vue/shared": "3.4.23" } }, "node_modules/@vue/shared": { - "version": "3.4.21", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.21.tgz", - "integrity": "sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==", + "version": "3.4.23", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.23.tgz", + "integrity": "sha512-wBQ0gvf+SMwsCQOyusNw/GoXPV47WGd1xB5A1Pgzy0sQ3Bi5r5xm3n+92y3gCnB3MWqnRDdvfkRGxhKtbBRNgg==", "dev": true }, "node_modules/abbrev": { @@ -3785,6 +4128,51 @@ "string-width": "^4.1.0" } }, + "node_modules/ansi-align/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/ansi-align/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", @@ -3866,9 +4254,13 @@ } }, "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } }, "node_modules/array-differ": { "version": "3.0.0", @@ -4192,38 +4584,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/boxen/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/boxen/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -4281,9 +4641,9 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "node_modules/builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz", + "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==", "dependencies": { "semver": "^7.0.0" } @@ -4466,9 +4826,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001606", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001606.tgz", - "integrity": "sha512-LPbwnW4vfpJId225pwjZJOgX1m9sGfbw/RKJvw/t0QhYOOaTXHvkjVGFGPpvwEzufrjvTlsULnVTxdy4/6cqkg==", + "version": "1.0.30001610", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001610.tgz", + "integrity": "sha512-QFutAY4NgaelojVMjY63o6XlZyORPaLfyMnsl3HgnWdJUcX6K0oaJymHjH8PT5Gk7sTm8rvC/c5COUQKXqmOMA==", "dev": true, "funding": [ { @@ -4649,26 +5009,71 @@ "node": ">=0.10.0" } }, - "node_modules/cli-boxes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", - "engines": { - "node": ">=10" + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-progress": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz", + "integrity": "sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==", + "dependencies": { + "string-width": "^4.2.3" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-progress/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-progress/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/cli-progress/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-progress/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8" } }, - "node_modules/cli-progress": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz", - "integrity": "sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==", + "node_modules/cli-progress/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { - "string-width": "^4.2.3" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/cli-truncate": { @@ -4687,29 +5092,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-truncate/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/cli-truncate/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -4761,6 +5143,32 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/cliui/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -5074,6 +5482,24 @@ "typescript": ">=4" } }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -5391,15 +5817,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/depcheck/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, "node_modules/depcheck/node_modules/camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", @@ -5457,17 +5874,19 @@ "node": ">=10" } }, - "node_modules/depcheck/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "node_modules/depcheck/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/depcheck/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=8" } }, "node_modules/depcheck/node_modules/minimatch": { @@ -5485,6 +5904,20 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/depcheck/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/depcheck/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -5514,15 +5947,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/depcheck/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, "node_modules/depcheck/node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", @@ -5675,9 +6099,9 @@ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, "node_modules/electron-to-chromium": { - "version": "1.4.729", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.729.tgz", - "integrity": "sha512-bx7+5Saea/qu14kmPTDHQxkp2UnziG3iajUQu3BxFvCOnpAJdDbMV4rSl+EqFDkkpNNVUFlR1kDfpL59xfy1HA==", + "version": "1.4.738", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.738.tgz", + "integrity": "sha512-lwKft2CLFztD+vEIpesrOtCrko/TFnEJlHFdRhazU7Y/jx5qc4cqsocfVrBg4So4gGe9lvxnbLIoev47WMpg+A==", "dev": true }, "node_modules/emittery": { @@ -5693,9 +6117,9 @@ } }, "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, "node_modules/encoding": { "version": "0.1.13", @@ -5982,6 +6406,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, "node_modules/eslint/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -6069,6 +6499,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -6634,6 +7076,35 @@ "node": ">=8" } }, + "node_modules/gauge/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/gauge/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/gauge/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/gauge/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -7042,6 +7513,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/hasha/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -7826,11 +8306,13 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, "dependencies": { - "argparse": "^2.0.1" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" @@ -8237,15 +8719,12 @@ } }, "node_modules/magic-string": { - "version": "0.30.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.9.tgz", - "integrity": "sha512-S1+hd+dIrC8EZqKyT9DstTH/0Z+f76kmmvZnkfQVmOpDEF9iVgdYif3Q/pIWHmCoo59bQVGW0kVL3e2nl+9+Sw==", + "version": "0.30.10", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", + "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", "dev": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" } }, "node_modules/make-dir": { @@ -8412,6 +8891,11 @@ "markdown-it": "*" } }, + "node_modules/markdown-it/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, "node_modules/markdown-it/node_modules/entities": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", @@ -9075,6 +9559,12 @@ "node": ">=6" } }, + "node_modules/node-gyp/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, "node_modules/node-gyp/node_modules/fs-minipass": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", @@ -9162,6 +9652,15 @@ "node": ">=8" } }, + "node_modules/node-gyp/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/node-gyp/node_modules/lru-cache": { "version": "7.18.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", @@ -9331,6 +9830,20 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/node-gyp/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/node-gyp/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -9838,6 +10351,12 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "dev": true }, + "node_modules/nyc/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, "node_modules/nyc/node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -9893,6 +10412,15 @@ "node": ">=8" } }, + "node_modules/nyc/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/nyc/node_modules/istanbul-lib-instrument": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", @@ -10010,6 +10538,20 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "node_modules/nyc/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/nyc/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -10255,9 +10797,9 @@ } }, "node_modules/pacote": { - "version": "17.0.6", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-17.0.6.tgz", - "integrity": "sha512-cJKrW21VRE8vVTRskJo78c/RCvwJCn1f4qgfxL4w77SOWrTCRcmfkYHlHtS0gqpgjv3zhXflRtgsrUCX5xwNnQ==", + "version": "17.0.7", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-17.0.7.tgz", + "integrity": "sha512-sgvnoUMlkv9xHwDUKjKQFXVyUi8dtJGKp3vg6sYy+TxbDic5RjZCHF3ygv0EJgNRZ2GfRONjlKPUfokJ9lDpwQ==", "dependencies": { "@npmcli/git": "^5.0.0", "@npmcli/installed-package-contents": "^2.0.1", @@ -10270,7 +10812,7 @@ "npm-packlist": "^8.0.0", "npm-pick-manifest": "^9.0.0", "npm-registry-fetch": "^16.0.0", - "proc-log": "^3.0.0", + "proc-log": "^4.0.0", "promise-retry": "^2.0.1", "read-package-json": "^7.0.0", "read-package-json-fast": "^3.0.0", @@ -10286,14 +10828,14 @@ } }, "node_modules/pacote/node_modules/@npmcli/git": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.4.tgz", - "integrity": "sha512-nr6/WezNzuYUppzXRaYu/W4aT5rLxdXqEFupbh6e/ovlYFQ8hpu1UUPV3Ir/YTl+74iXl2ZOMlGzudh9ZPUchQ==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.6.tgz", + "integrity": "sha512-4x/182sKXmQkf0EtXxT26GEsaOATpD7WVtza5hrYivWZeo6QefC6xq9KAXrnjtFKBZ4rZwR7aX/zClYYXgtwLw==", "dependencies": { "@npmcli/promise-spawn": "^7.0.0", "lru-cache": "^10.0.1", "npm-pick-manifest": "^9.0.0", - "proc-log": "^3.0.0", + "proc-log": "^4.0.0", "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", "semver": "^7.3.5", @@ -10304,16 +10846,16 @@ } }, "node_modules/pacote/node_modules/@npmcli/package-json": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.0.0.tgz", - "integrity": "sha512-OI2zdYBLhQ7kpNPaJxiflofYIpkNLi+lnGdzqUOfRmCF3r2l1nadcjtCYMJKv/Utm/ZtlffaUuTiAktPHbc17g==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.0.3.tgz", + "integrity": "sha512-cgsjCvld2wMqkUqvY+SZI+1ZJ7umGBYc9IAKfqJRKJCcs7hCQYxScUgdsyrRINk3VmdCYf9TXiLBHQ6ECTxhtg==", "dependencies": { "@npmcli/git": "^5.0.0", "glob": "^10.2.2", "hosted-git-info": "^7.0.0", "json-parse-even-better-errors": "^3.0.0", "normalize-package-data": "^6.0.0", - "proc-log": "^3.0.0", + "proc-log": "^4.0.0", "semver": "^7.5.3" }, "engines": { @@ -10457,6 +10999,14 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/pacote/node_modules/node-gyp/node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/pacote/node_modules/normalize-package-data": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.0.tgz", @@ -10472,12 +11022,12 @@ } }, "node_modules/pacote/node_modules/npm-package-arg": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.1.tgz", - "integrity": "sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==", + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.2.tgz", + "integrity": "sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==", "dependencies": { "hosted-git-info": "^7.0.0", - "proc-log": "^3.0.0", + "proc-log": "^4.0.0", "semver": "^7.3.5", "validate-npm-package-name": "^5.0.0" }, @@ -10500,9 +11050,9 @@ } }, "node_modules/pacote/node_modules/npm-registry-fetch": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-16.2.0.tgz", - "integrity": "sha512-zVH+G0q1O2hqgQBUvQ2LWp6ujr6VJAeDnmWxqiMlCguvLexEzBnuQIwC70r04vcvCMAcYEIpA/rO9YyVi+fmJQ==", + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-16.2.1.tgz", + "integrity": "sha512-8l+7jxhim55S85fjiDGJ1rZXBWGtRLi1OSb4Z3BPLObPuIaeKRlPRiYMSHU4/81ck3t71Z+UwDDl47gcpmfQQA==", "dependencies": { "@npmcli/redact": "^1.1.0", "make-fetch-happen": "^13.0.0", @@ -10511,7 +11061,7 @@ "minipass-json-stream": "^1.0.1", "minizlib": "^2.1.2", "npm-package-arg": "^11.0.0", - "proc-log": "^3.0.0" + "proc-log": "^4.0.0" }, "engines": { "node": "^16.14.0 || >=18.0.0" @@ -10531,6 +11081,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/pacote/node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/pacote/node_modules/which": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", @@ -10702,9 +11260,9 @@ } }, "node_modules/path-to-regexp": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", - "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.2.tgz", + "integrity": "sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==", "dev": true }, "node_modules/path-type": { @@ -11776,9 +12334,9 @@ } }, "node_modules/socks": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.1.tgz", - "integrity": "sha512-B6w7tkwNid7ToxjZ08rQMT8M9BJAf8DKx8Ft4NivzH0zBUfd6jldGcisJn/RLgxcX3FPNDdNQCUEMMT79b+oCQ==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", "dependencies": { "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" @@ -12047,16 +12605,19 @@ } }, "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/string-width-cjs": { @@ -12081,6 +12642,11 @@ "node": ">=8" } }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -12100,33 +12666,6 @@ "node": ">=8" } }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/strip-ansi": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", @@ -12208,28 +12747,6 @@ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/supertap/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/supertap/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -12520,12 +13037,14 @@ } }, "node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", "engines": { - "node": ">=8" + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/typedarray-to-buffer": { @@ -12549,14 +13068,14 @@ } }, "node_modules/typescript-eslint": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-7.6.0.tgz", - "integrity": "sha512-LY6vH6F1l5jpGqRtU+uK4+mOecIb4Cd4kaz1hAiJrgnNiHUA8wiw8BkJyYS+MRLM69F1QuSKwtGlQqnGl1Rc6w==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-7.7.0.tgz", + "integrity": "sha512-wZZ+7mTQJCn4mGAvzdERtL4vwKGM/mF9cMSMeKUllz3Hgbd1Mdd5L60Q+nJmCio9RB4OyMMr0EX4Ry2Q7jiAyw==", "dev": true, "dependencies": { - "@typescript-eslint/eslint-plugin": "7.6.0", - "@typescript-eslint/parser": "7.6.0", - "@typescript-eslint/utils": "7.6.0" + "@typescript-eslint/eslint-plugin": "7.7.0", + "@typescript-eslint/parser": "7.7.0", + "@typescript-eslint/utils": "7.7.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -12575,13 +13094,13 @@ } }, "node_modules/typescript-eslint/node_modules/@typescript-eslint/scope-manager": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.6.0.tgz", - "integrity": "sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.0.tgz", + "integrity": "sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0" + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -12592,9 +13111,9 @@ } }, "node_modules/typescript-eslint/node_modules/@typescript-eslint/types": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.6.0.tgz", - "integrity": "sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.0.tgz", + "integrity": "sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -12605,13 +13124,13 @@ } }, "node_modules/typescript-eslint/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.6.0.tgz", - "integrity": "sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.0.tgz", + "integrity": "sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/visitor-keys": "7.6.0", + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -12633,17 +13152,17 @@ } }, "node_modules/typescript-eslint/node_modules/@typescript-eslint/utils": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.6.0.tgz", - "integrity": "sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.7.0.tgz", + "integrity": "sha512-LKGAXMPQs8U/zMRFXDZOzmMKgFv3COlxUQ+2NMPhbqgVm6R1w+nU1i4836Pmxu9jZAuIeyySNrN/6Rc657ggig==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.15", "@types/semver": "^7.5.8", - "@typescript-eslint/scope-manager": "7.6.0", - "@typescript-eslint/types": "7.6.0", - "@typescript-eslint/typescript-estree": "7.6.0", + "@typescript-eslint/scope-manager": "7.7.0", + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/typescript-estree": "7.7.0", "semver": "^7.6.0" }, "engines": { @@ -12658,12 +13177,12 @@ } }, "node_modules/typescript-eslint/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.6.0.tgz", - "integrity": "sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.0.tgz", + "integrity": "sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/types": "7.7.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -12903,33 +13422,62 @@ "string-width": "^1.0.2 || 2 || 3 || 4" } }, - "node_modules/widest-line": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", - "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", + "node_modules/wide-align/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wide-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wide-align/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wide-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "dependencies": { - "string-width": "^5.0.1" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/widest-line/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + "node_modules/wide-align/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/widest-line/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "node_modules/widest-line": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", + "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "string-width": "^5.0.1" }, "engines": { "node": ">=12" @@ -13014,36 +13562,41 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dependencies": { - "ansi-regex": "^5.0.1" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" } }, - "node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/wrappy": { @@ -13115,6 +13668,15 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/yaml-ast-parser": { "version": "0.0.43", "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", @@ -13145,6 +13707,51 @@ "node": ">=12" } }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/yauzl-promise": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yauzl-promise/-/yauzl-promise-4.0.0.tgz",