From bda5ef42bc092dd236dfa86a31af120ce40c9d01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henry=20T=C3=A4schner?= <129834483+HenryT-CG@users.noreply.github.com> Date: Fri, 3 Jan 2025 09:10:47 +0100 Subject: [PATCH] feat: add onecx watermark (#453) * feat: add onecx watermark, fix translations * feat: add husky * feat: add favicon * fix: adjust text size on error pages * fix: tuning error pages * fix: tuning error pages 2 * fix: added missed html * fix: code smells * fix: code smells * fix: code smells --- .commitlintrc.json | 9 + .gitignore | 19 +- .husky/commit-msg | 2 + .husky/pre-commit | 10 + package-lock.json | 2859 +++++++++++++++-- package.json | 17 +- project.json | 1 + src/app/app.component.scss | 0 src/app/app.component.ts | 8 +- src/app/app.routes.ts | 1 + .../shell/components/error-page.component.ts | 22 +- .../shell/components/home/home.component.html | 2 +- .../shell/components/home/home.component.ts | 18 +- .../initialization-error-page.component.html | 30 + ...nitialization-error-page.component.spec.ts | 1 + .../initialization-error-page.component.ts | 43 +- .../components/not-found-page.component.ts | 16 +- src/app/shell/services/routes.service.ts | 276 +- ...initialization-error-handler.utils.spec.ts | 3 +- .../initialization-error-handler.utils.ts | 3 +- src/assets/i18n/de.json | 21 +- src/assets/i18n/en.json | 61 +- src/assets/images/onecx_watermark.png | Bin 0 -> 35468 bytes src/favicon.ico | Bin 0 -> 15086 bytes src/index.html | 8 +- src/styles.scss | 46 +- 26 files changed, 2982 insertions(+), 494 deletions(-) create mode 100644 .commitlintrc.json create mode 100644 .husky/commit-msg create mode 100644 .husky/pre-commit delete mode 100644 src/app/app.component.scss create mode 100644 src/app/shell/components/initialization-error-page/initialization-error-page.component.html create mode 100644 src/assets/images/onecx_watermark.png create mode 100644 src/favicon.ico diff --git a/.commitlintrc.json b/.commitlintrc.json new file mode 100644 index 0000000..837ad18 --- /dev/null +++ b/.commitlintrc.json @@ -0,0 +1,9 @@ +{ + "extends": ["@commitlint/config-conventional"], + "rules": { + "type-case": [2, "always", ["lowerCase"]], + "type-enum": [2, "always", ["build", "ci", "docs", "feat", "fix", "perf", "refactor", "revert", "style", "ticket"]], + "subject-min-length": [2, "always", [5]], + "subject-max-length": [2, "always", [200]] + } +} diff --git a/.gitignore b/.gitignore index 3e8bbcf..d010f6a 100644 --- a/.gitignore +++ b/.gitignore @@ -3,32 +3,32 @@ # compiled output dist tmp -out-tsc +reports # dependencies node_modules +# profiling files +chrome-profiler-events*.json +speed-measure-plugin*.json + # IDEs and editors .idea .project .classpath -.c9 +.history .settings -*.launch -*.sublime-workspace - -# IDE - VSCode .vscode +*.launch # misc .nx .angular .eslintcache -.husky/_ .sass-cache +.husky/_ +.gitlab* connect.lock -coverage -reports typings *.log *.sh @@ -36,4 +36,3 @@ typings # System Files .DS_Store Thumbs.db - diff --git a/.husky/commit-msg b/.husky/commit-msg new file mode 100644 index 0000000..1ba698a --- /dev/null +++ b/.husky/commit-msg @@ -0,0 +1,2 @@ + +npx --no-install commitlint --edit $1 diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 0000000..d0f1c65 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,10 @@ +# .husky/pre-commit + +bash << EOF + +echo "[Husky] Running lint check on changed files:" +nx lint --cache=true +echo "[Husky] Running prettier check on changed files:" +npx prettier -c --cache . + +EOF \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 10b0227..be3da50 100644 --- a/package-lock.json +++ b/package-lock.json @@ -54,6 +54,8 @@ "@angular/cli": "~18.2.12", "@angular/compiler-cli": "^18.2.12", "@angular/language-service": "^18.2.12", + "@commitlint/cli": "^19.5.0", + "@commitlint/config-conventional": "^19.5.0", "@nx/eslint": "19.8.2", "@nx/eslint-plugin": "19.8.2", "@nx/jest": "19.8.2", @@ -67,8 +69,12 @@ "@types/node": "22.7.5", "@typescript-eslint/eslint-plugin": "7.17.0", "@typescript-eslint/parser": "7.18.0", - "eslint": "~8.57.1", - "eslint-config-prettier": "^9.1.0", + "eslint": "^8.57.1", + "eslint-config-prettier": "9.1.0", + "eslint-plugin-deprecation": "^3.0.0", + "eslint-plugin-import": "2.31.0", + "eslint-plugin-prettier": "^5.2.1", + "husky": "^9.1.6", "jest": "29.7.0", "jest-environment-jsdom": "29.7.0", "jest-preset-angular": "14.2.4", @@ -2742,6 +2748,466 @@ "tough-cookie": "^4.1.4" } }, + "node_modules/@commitlint/cli": { + "version": "19.6.1", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-19.6.1.tgz", + "integrity": "sha512-8hcyA6ZoHwWXC76BoC8qVOSr8xHy00LZhZpauiD0iO0VYbVhMnED0da85lTfIULxl7Lj4c6vZgF0Wu/ed1+jlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/format": "^19.5.0", + "@commitlint/lint": "^19.6.0", + "@commitlint/load": "^19.6.1", + "@commitlint/read": "^19.5.0", + "@commitlint/types": "^19.5.0", + "tinyexec": "^0.3.0", + "yargs": "^17.0.0" + }, + "bin": { + "commitlint": "cli.js" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/config-conventional": { + "version": "19.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-19.6.0.tgz", + "integrity": "sha512-DJT40iMnTYtBtUfw9ApbsLZFke1zKh6llITVJ+x9mtpHD08gsNXaIRqHTmwTZL3dNX5+WoyK7pCN/5zswvkBCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^19.5.0", + "conventional-changelog-conventionalcommits": "^7.0.2" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/config-validator": { + "version": "19.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-19.5.0.tgz", + "integrity": "sha512-CHtj92H5rdhKt17RmgALhfQt95VayrUo2tSqY9g2w+laAXyk7K/Ef6uPm9tn5qSIwSmrLjKaXK9eiNuxmQrDBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^19.5.0", + "ajv": "^8.11.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/ensure": { + "version": "19.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-19.5.0.tgz", + "integrity": "sha512-Kv0pYZeMrdg48bHFEU5KKcccRfKmISSm9MvgIgkpI6m+ohFTB55qZlBW6eYqh/XDfRuIO0x4zSmvBjmOwWTwkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^19.5.0", + "lodash.camelcase": "^4.3.0", + "lodash.kebabcase": "^4.1.1", + "lodash.snakecase": "^4.1.1", + "lodash.startcase": "^4.4.0", + "lodash.upperfirst": "^4.3.1" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/execute-rule": { + "version": "19.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-19.5.0.tgz", + "integrity": "sha512-aqyGgytXhl2ejlk+/rfgtwpPexYyri4t8/n4ku6rRJoRhGZpLFMqrZ+YaubeGysCP6oz4mMA34YSTaSOKEeNrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/format": { + "version": "19.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-19.5.0.tgz", + "integrity": "sha512-yNy088miE52stCI3dhG/vvxFo9e4jFkU1Mj3xECfzp/bIS/JUay4491huAlVcffOoMK1cd296q0W92NlER6r3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^19.5.0", + "chalk": "^5.3.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/format/node_modules/chalk": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@commitlint/is-ignored": { + "version": "19.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-19.6.0.tgz", + "integrity": "sha512-Ov6iBgxJQFR9koOupDPHvcHU9keFupDgtB3lObdEZDroiG4jj1rzky60fbQozFKVYRTUdrBGICHG0YVmRuAJmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^19.5.0", + "semver": "^7.6.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/lint": { + "version": "19.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-19.6.0.tgz", + "integrity": "sha512-LRo7zDkXtcIrpco9RnfhOKeg8PAnE3oDDoalnrVU/EVaKHYBWYL1DlRR7+3AWn0JiBqD8yKOfetVxJGdEtZ0tg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/is-ignored": "^19.6.0", + "@commitlint/parse": "^19.5.0", + "@commitlint/rules": "^19.6.0", + "@commitlint/types": "^19.5.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/load": { + "version": "19.6.1", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-19.6.1.tgz", + "integrity": "sha512-kE4mRKWWNju2QpsCWt428XBvUH55OET2N4QKQ0bF85qS/XbsRGG1MiTByDNlEVpEPceMkDr46LNH95DtRwcsfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/config-validator": "^19.5.0", + "@commitlint/execute-rule": "^19.5.0", + "@commitlint/resolve-extends": "^19.5.0", + "@commitlint/types": "^19.5.0", + "chalk": "^5.3.0", + "cosmiconfig": "^9.0.0", + "cosmiconfig-typescript-loader": "^6.1.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2", + "lodash.uniq": "^4.5.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/load/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, + "license": "Python-2.0" + }, + "node_modules/@commitlint/load/node_modules/chalk": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@commitlint/load/node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@commitlint/load/node_modules/cosmiconfig-typescript-loader": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-6.1.0.tgz", + "integrity": "sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "jiti": "^2.4.1" + }, + "engines": { + "node": ">=v18" + }, + "peerDependencies": { + "@types/node": "*", + "cosmiconfig": ">=9", + "typescript": ">=5" + } + }, + "node_modules/@commitlint/load/node_modules/jiti": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", + "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/@commitlint/load/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, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@commitlint/message": { + "version": "19.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-19.5.0.tgz", + "integrity": "sha512-R7AM4YnbxN1Joj1tMfCyBryOC5aNJBdxadTZkuqtWi3Xj0kMdutq16XQwuoGbIzL2Pk62TALV1fZDCv36+JhTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/parse": { + "version": "19.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-19.5.0.tgz", + "integrity": "sha512-cZ/IxfAlfWYhAQV0TwcbdR1Oc0/r0Ik1GEessDJ3Lbuma/MRO8FRQX76eurcXtmhJC//rj52ZSZuXUg0oIX0Fw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^19.5.0", + "conventional-changelog-angular": "^7.0.0", + "conventional-commits-parser": "^5.0.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/read": { + "version": "19.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-19.5.0.tgz", + "integrity": "sha512-TjS3HLPsLsxFPQj6jou8/CZFAmOP2y+6V4PGYt3ihbQKTY1Jnv0QG28WRKl/d1ha6zLODPZqsxLEov52dhR9BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/top-level": "^19.5.0", + "@commitlint/types": "^19.5.0", + "git-raw-commits": "^4.0.0", + "minimist": "^1.2.8", + "tinyexec": "^0.3.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/resolve-extends": { + "version": "19.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-19.5.0.tgz", + "integrity": "sha512-CU/GscZhCUsJwcKTJS9Ndh3AKGZTNFIOoQB2n8CmFnizE0VnEuJoum+COW+C1lNABEeqk6ssfc1Kkalm4bDklA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/config-validator": "^19.5.0", + "@commitlint/types": "^19.5.0", + "global-directory": "^4.0.1", + "import-meta-resolve": "^4.0.0", + "lodash.mergewith": "^4.6.2", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/rules": { + "version": "19.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-19.6.0.tgz", + "integrity": "sha512-1f2reW7lbrI0X0ozZMesS/WZxgPa4/wi56vFuJENBmed6mWq5KsheN/nxqnl/C23ioxpPO/PL6tXpiiFy5Bhjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/ensure": "^19.5.0", + "@commitlint/message": "^19.5.0", + "@commitlint/to-lines": "^19.5.0", + "@commitlint/types": "^19.5.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/to-lines": { + "version": "19.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-19.5.0.tgz", + "integrity": "sha512-R772oj3NHPkodOSRZ9bBVNq224DOxQtNef5Pl8l2M8ZnkkzQfeSTr4uxawV2Sd3ui05dUVzvLNnzenDBO1KBeQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/top-level": { + "version": "19.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-19.5.0.tgz", + "integrity": "sha512-IP1YLmGAk0yWrImPRRc578I3dDUI5A2UBJx9FbSOjxe9sTlzFiwVJ+zeMLgAtHMtGZsC8LUnzmW1qRemkFU4ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^7.0.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/top-level/node_modules/find-up": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz", + "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^7.2.0", + "path-exists": "^5.0.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/top-level/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/top-level/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/top-level/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/top-level/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/@commitlint/top-level/node_modules/yocto-queue": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", + "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/types": { + "version": "19.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-19.5.0.tgz", + "integrity": "sha512-DSHae2obMSMkAtTBSOulg5X7/z+rGLxcXQIkg3OmWvY6wifojge5uVMydfhUvs7yQj+V7jNmRZ2Xzl8GJyqRgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/conventional-commits-parser": "^5.0.0", + "chalk": "^5.3.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/types/node_modules/chalk": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -7149,6 +7615,19 @@ "node": ">=14" } }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.22.4", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz", @@ -7357,6 +7836,13 @@ "win32" ] }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, "node_modules/@schematics/angular": { "version": "18.2.12", "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-18.2.12.tgz", @@ -7961,6 +8447,16 @@ "@types/node": "*" } }, + "node_modules/@types/conventional-commits-parser": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.1.tgz", + "integrity": "sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/cookie": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", @@ -8088,6 +8584,13 @@ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "license": "MIT" }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", @@ -9327,48 +9830,174 @@ "node": ">=8.6" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "dev": true, + "license": "MIT" + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "license": "MIT" - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "dev": true, "license": "MIT", "dependencies": { - "sprintf-js": "~1.0.2" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/aria-query": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", - "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "license": "MIT" - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/ast-types": { @@ -9441,6 +10070,22 @@ "postcss": "^8.1.0" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/axios": { "version": "1.7.8", "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.8.tgz", @@ -10170,16 +10815,45 @@ } }, "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dev": true, "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -10637,6 +11311,17 @@ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "license": "MIT" }, + "node_modules/compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, "node_modules/compare-versions": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-4.1.4.tgz", @@ -10868,6 +11553,51 @@ "node": ">= 0.6" } }, + "node_modules/conventional-changelog-angular": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz", + "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "compare-func": "^2.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/conventional-changelog-conventionalcommits": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz", + "integrity": "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==", + "dev": true, + "license": "ISC", + "dependencies": { + "compare-func": "^2.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/conventional-commits-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", + "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-text-path": "^2.0.0", + "JSONStream": "^1.3.5", + "meow": "^12.0.1", + "split2": "^4.0.0" + }, + "bin": { + "conventional-commits-parser": "cli.mjs" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", @@ -11413,6 +12143,19 @@ "node": ">=12" } }, + "node_modules/dargs": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz", + "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/data-uri-to-buffer": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", @@ -11437,6 +12180,60 @@ "node": ">=12" } }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/date-fns": { "version": "2.30.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", @@ -11563,6 +12360,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", @@ -11588,6 +12386,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/degenerator": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", @@ -11801,6 +12617,19 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/dotenv": { "version": "16.4.6", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.6.tgz", @@ -11828,6 +12657,20 @@ "url": "https://dotenvx.com" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", @@ -12032,33 +12875,152 @@ "is-arrayish": "^0.2.1" } }, + "node_modules/es-abstract": { + "version": "1.23.9", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", + "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.0", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-regex": "^1.2.1", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.0", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.18" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "license": "MIT" + }, + "node_modules/es-object-atoms": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.4" + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" } }, - "node_modules/es-errors": { + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-module-lexer": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", - "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", - "license": "MIT" - }, "node_modules/esbuild": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.0.tgz", @@ -12137,104 +13099,401 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/escodegen": { + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-deprecation": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-deprecation/-/eslint-plugin-deprecation-3.0.0.tgz", + "integrity": "sha512-JuVLdNg/uf0Adjg2tpTyYoYaMbwQNn/c78P1HcccokvhtRphgnRjZDKmhlxbxYptppex03zO76f97DD/yQHv7A==", + "dev": true, + "license": "LGPL-3.0-or-later", + "dependencies": { + "@typescript-eslint/utils": "^7.0.0", + "ts-api-utils": "^1.3.0", + "tslib": "^2.3.1" + }, + "peerDependencies": { + "eslint": "^8.0.0", + "typescript": "^4.2.4 || ^5.0.0" + } + }, + "node_modules/eslint-plugin-deprecation/node_modules/@typescript-eslint/scope-manager": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", + "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-plugin-deprecation/node_modules/@typescript-eslint/types": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-plugin-deprecation/node_modules/@typescript-eslint/utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", + "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/eslint-plugin-deprecation/node_modules/@typescript-eslint/visitor-keys": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", + "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-import/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", "esutils": "^2.0.2" }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "optional": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "node_modules/eslint-plugin-import/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "minimist": "^1.2.0" }, "bin": { - "eslint": "bin/eslint.js" + "json5": "lib/cli.js" + } + }, + "node_modules/eslint-plugin-import/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": "*" } }, - "node_modules/eslint-config-prettier": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", - "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "MIT", + "license": "ISC", "bin": { - "eslint-config-prettier": "bin/cli.js" + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-import/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-import/node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", + "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.9.1" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" }, "peerDependencies": { - "eslint": ">=7.0.0" + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } } }, "node_modules/eslint-scope": { @@ -12682,6 +13941,13 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "license": "MIT" }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/fast-glob": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", @@ -12970,6 +14236,16 @@ } } }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" + } + }, "node_modules/foreground-child": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", @@ -13244,6 +14520,37 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -13275,16 +14582,21 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", + "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.0", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -13303,6 +14615,19 @@ "node": ">=8.0.0" } }, + "node_modules/get-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.0.tgz", + "integrity": "sha512-TtLgOcKaF1nMP2ijJnITkE4nRhbpshHhmzKiuhmSniiwWzovoqwqQ8rNuhf0mXJOqIY5iU+QkUe0CkJYrLsG9w==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -13315,6 +14640,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-uri": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz", @@ -13344,6 +14687,24 @@ "node": ">=14.14" } }, + "node_modules/git-raw-commits": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz", + "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dargs": "^8.0.0", + "meow": "^12.0.1", + "split2": "^4.0.0" + }, + "bin": { + "git-raw-commits": "cli.mjs" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -13405,6 +14766,32 @@ "node": "*" } }, + "node_modules/global-directory": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", + "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "4.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-directory/node_modules/ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/global-modules": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", @@ -13462,6 +14849,23 @@ "node": ">=4" } }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -13484,13 +14888,10 @@ } }, "node_modules/gopd": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.1.0.tgz", - "integrity": "sha512-FQoVQnqcdk4hVM4JN1eromaun4iuS34oStkdlLENLdpULsuQcTyXj8w7ayhuUfPwEYZ1ZOooOTT6fdA9Vmx/RA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, "engines": { "node": ">= 0.4" }, @@ -13533,6 +14934,19 @@ "dev": true, "license": "(Apache-2.0 OR MPL-1.1)" }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -13546,6 +14960,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" @@ -13555,12 +14970,13 @@ } }, "node_modules/has-proto": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.1.0.tgz", - "integrity": "sha512-QLdzI9IIO1Jg7f9GT1gXpPpXArAn6cS31R1eEZqz08Gc+uQ8/XiqHWt17Fiw+2p6oTTIq5GXEpQkAlA88YRl/Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7" + "dunder-proto": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -13940,6 +15356,22 @@ "node": ">=10.17.0" } }, + "node_modules/husky": { + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", + "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", + "dev": true, + "license": "MIT", + "bin": { + "husky": "bin.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, "node_modules/hyperdyperid": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", @@ -14092,6 +15524,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/import-meta-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", + "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -14179,6 +15622,21 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "license": "ISC" }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/ip-address": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", @@ -14207,12 +15665,62 @@ "node": ">= 0.10" } }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "license": "MIT" }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -14225,6 +15733,36 @@ "node": ">=8" } }, + "node_modules/is-boolean-object": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz", + "integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-core-module": { "version": "2.15.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", @@ -14240,6 +15778,41 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-docker": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", @@ -14264,6 +15837,22 @@ "node": ">=0.10.0" } }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-fullwidth-code-point": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", @@ -14347,6 +15936,19 @@ "dev": true, "license": "MIT" }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-network-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", @@ -14372,22 +15974,201 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "license": "MIT", "engines": { - "node": ">=0.12.0" + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-text-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz", + "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "text-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "license": "MIT", "engines": { "node": ">=10" @@ -14396,44 +16177,50 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "node_modules/is-weakref": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.0.tgz", + "integrity": "sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==", + "dev": true, "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-what": { @@ -15618,6 +17405,23 @@ ], "license": "MIT" }, + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, "node_modules/jwt-decode": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz", @@ -16136,6 +17940,13 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "license": "MIT" }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true, + "license": "MIT" + }, "node_modules/lodash.clonedeepwith": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeepwith/-/lodash.clonedeepwith-4.5.0.tgz", @@ -16148,6 +17959,20 @@ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "license": "MIT" }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", + "dev": true, + "license": "MIT" + }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -16160,12 +17985,40 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "license": "MIT" }, + "node_modules/lodash.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.startcase": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", + "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", + "dev": true, + "license": "MIT" + }, "node_modules/lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "license": "MIT" }, + "node_modules/lodash.upperfirst": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", + "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", + "dev": true, + "license": "MIT" + }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -16498,6 +18351,15 @@ "tmpl": "1.0.5" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/mdn-data": { "version": "2.0.30", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", @@ -16525,6 +18387,19 @@ "node": ">= 4.0.0" } }, + "node_modules/meow": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", + "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/merge-descriptors": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", @@ -17736,6 +19611,90 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", @@ -17881,6 +19840,24 @@ "license": "MIT", "peer": true }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/oxc-resolver": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/oxc-resolver/-/oxc-resolver-1.12.0.tgz", @@ -18347,6 +20324,16 @@ "ms": "^2.1.1" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/postcss": { "version": "8.4.41", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz", @@ -19009,6 +20996,19 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/pretty-format": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", @@ -19385,6 +21385,29 @@ "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", "license": "Apache-2.0" }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.9.tgz", + "integrity": "sha512-r0Ay04Snci87djAsI4U+WNRcSw5S4pOH7qFjd/veA5gC7TbqESR3tcj28ia95L/fYUDw11JKP7uqUKUAfVvV5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "dunder-proto": "^1.0.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -19424,6 +21447,25 @@ "integrity": "sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==", "license": "MIT" }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", + "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regexpu-core": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", @@ -19746,6 +21788,33 @@ "tslib": "^2.1.0" } }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -19766,6 +21835,48 @@ ], "license": "MIT" }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -20086,6 +22197,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", @@ -20099,6 +22211,37 @@ "node": ">= 0.4" } }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -20151,15 +22294,69 @@ } }, "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -20438,6 +22635,16 @@ "wbuf": "^1.7.3" } }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -20612,6 +22819,65 @@ "node": ">=8" } }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -20841,6 +23107,23 @@ "devOptional": true, "license": "MIT" }, + "node_modules/synckit": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", + "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -21115,6 +23398,19 @@ "node": "*" } }, + "node_modules/text-extensions": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-2.4.0.tgz", + "integrity": "sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -21145,6 +23441,13 @@ "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "license": "MIT" }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true, + "license": "MIT" + }, "node_modules/tmp": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", @@ -21483,6 +23786,84 @@ "node": ">= 0.6" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typed-assert": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", @@ -21514,6 +23895,25 @@ "node": ">=8" } }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/undici-types": { "version": "6.19.8", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", @@ -22788,6 +25188,101 @@ "node": ">= 8" } }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", + "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/wildcard": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", diff --git a/package.json b/package.json index 4fb228a..d04bf81 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "scripts": { "build": "nx build", "check": "nx lint --cache=true && npx prettier -c --cache .", - "clean": "npm cache clean --force", + "clean": "npm cache clean --force && rm -rf *.log dist reports .nx .angular .eslintcache ./node_modules/.cache/prettier/.prettier-cache", "eslint": "eslint --quiet --ext .js,.ts src", "browser": "npx browserslist", "prepare": "husky || true", @@ -27,6 +27,11 @@ "apigen-generate": "openapi-generator-cli generate -i $npm_package_config_openapiYaml -g typescript-angular -c apigen.yaml -o $npm_package_config_openapiOutput --type-mappings=AnyType=object,set=Array", "apigen": "npm run apigen-cleanup && npm run apigen-generate && npm run apigen-format" }, + "husky": { + "hooks": { + "pre-commit": "pretty-quick --staged" + } + }, "dependencies": { "@angular-architects/module-federation": "18.0.6", "@angular-architects/module-federation-tools": "18.0.6", @@ -73,6 +78,8 @@ "@angular/cli": "~18.2.12", "@angular/compiler-cli": "^18.2.12", "@angular/language-service": "^18.2.12", + "@commitlint/cli": "^19.5.0", + "@commitlint/config-conventional": "^19.5.0", "@nx/eslint": "19.8.2", "@nx/eslint-plugin": "19.8.2", "@nx/jest": "19.8.2", @@ -86,8 +93,12 @@ "@types/node": "22.7.5", "@typescript-eslint/eslint-plugin": "7.17.0", "@typescript-eslint/parser": "7.18.0", - "eslint": "~8.57.1", - "eslint-config-prettier": "^9.1.0", + "eslint": "^8.57.1", + "eslint-config-prettier": "9.1.0", + "eslint-plugin-deprecation": "^3.0.0", + "eslint-plugin-import": "2.31.0", + "eslint-plugin-prettier": "^5.2.1", + "husky": "^9.1.6", "jest": "29.7.0", "jest-environment-jsdom": "29.7.0", "jest-preset-angular": "14.2.4", diff --git a/project.json b/project.json index 56a38c2..9a82ad7 100644 --- a/project.json +++ b/project.json @@ -17,6 +17,7 @@ "tsConfig": "./tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ + "src/favicon.ico", "./src/assets", { "glob": "**/*", diff --git a/src/app/app.component.scss b/src/app/app.component.scss deleted file mode 100644 index e69de29..0000000 diff --git a/src/app/app.component.ts b/src/app/app.component.ts index c919728..9db2a72 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -1,13 +1,13 @@ import { Component, OnInit } from '@angular/core' import { TranslateService } from '@ngx-translate/core' -import { UserService } from '@onecx/angular-integration-interface' import { PrimeNGConfig } from 'primeng/api' import { merge, mergeMap } from 'rxjs' +import { UserService } from '@onecx/angular-integration-interface' + @Component({ selector: 'ocx-shell-root', - templateUrl: './app.component.html', - styleUrls: ['./app.component.scss'] + templateUrl: './app.component.html' }) export class AppComponent implements OnInit { title = 'shell' @@ -27,7 +27,7 @@ export class AppComponent implements OnInit { this.translateService.onTranslationChange, this.translateService.onDefaultLangChange ) - .pipe(mergeMap(() => this.translateService.get('primeng'))) + .pipe(mergeMap(() => this.translateService.get('SHELL'))) .subscribe((res) => this.config.setTranslation(res)) } } diff --git a/src/app/app.routes.ts b/src/app/app.routes.ts index b4af298..1c4a2dd 100644 --- a/src/app/app.routes.ts +++ b/src/app/app.routes.ts @@ -1,4 +1,5 @@ import { Route } from '@angular/router' + import { InitializationErrorPageComponent } from './shell/components/initialization-error-page/initialization-error-page.component' import { ErrorPageComponent } from './shell/components/error-page.component' diff --git a/src/app/shell/components/error-page.component.ts b/src/app/shell/components/error-page.component.ts index 37cbe5f..cb6434e 100644 --- a/src/app/shell/components/error-page.component.ts +++ b/src/app/shell/components/error-page.component.ts @@ -7,12 +7,24 @@ import { getLocation } from '@onecx/accelerator' template: `
-

{{ 'ERROR_PAGE.TITLE' | translate }}

-

{{ 'ERROR_PAGE.DETAILS' | translate }}

-

{{ 'ERROR_PAGE.REQUESTED_PAGE' | translate }} {{ requestedApplicationPath }}

+

{{ 'ERROR_PAGE.TITLE' | translate }}

+

{{ 'ERROR_PAGE.DETAILS' | translate }}

+

+ {{ 'ERROR_PAGE.REQUESTED_PAGE' | translate }} + {{ requestedApplicationPath }} +

-
` diff --git a/src/app/shell/components/home/home.component.html b/src/app/shell/components/home/home.component.html index 88a1316..c96d88f 100644 --- a/src/app/shell/components/home/home.component.html +++ b/src/app/shell/components/home/home.component.html @@ -1,3 +1,3 @@
-
\ No newline at end of file + diff --git a/src/app/shell/components/home/home.component.ts b/src/app/shell/components/home/home.component.ts index 6153b38..9f75e9f 100644 --- a/src/app/shell/components/home/home.component.ts +++ b/src/app/shell/components/home/home.component.ts @@ -1,17 +1,17 @@ -import { Component } from '@angular/core'; -import { AppStateService } from '@onecx/angular-integration-interface'; -import { Workspace } from '@onecx/integration-interface'; -import { map, Observable } from 'rxjs'; +import { Component } from '@angular/core' +import { map, Observable } from 'rxjs' + +import { AppStateService } from '@onecx/angular-integration-interface' +import { Workspace } from '@onecx/integration-interface' + @Component({ selector: 'ocx-shell-home', - templateUrl: './home.component.html', + templateUrl: './home.component.html' }) export class HomeComponent { - workspace$: Observable; + workspace$: Observable constructor(private appStateService: AppStateService) { - this.workspace$ = this.appStateService.currentWorkspace$.pipe( - map((currentWorkspace) => currentWorkspace) - ); + this.workspace$ = this.appStateService.currentWorkspace$.pipe(map((currentWorkspace) => currentWorkspace)) } } diff --git a/src/app/shell/components/initialization-error-page/initialization-error-page.component.html b/src/app/shell/components/initialization-error-page/initialization-error-page.component.html new file mode 100644 index 0000000..bfa41a4 --- /dev/null +++ b/src/app/shell/components/initialization-error-page/initialization-error-page.component.html @@ -0,0 +1,30 @@ +
+

{{ 'INITIALIZATION_ERROR_PAGE.TITLE' | translate }}

+

{{ 'INITIALIZATION_ERROR_PAGE.SUBTITLE' | translate }}

+
+
+
{{ 'INITIALIZATION_ERROR_PAGE.DETAILS.MESSAGE' | translate }}
+ {{ error.message }} +
+
+
{{ 'INITIALIZATION_ERROR_PAGE.DETAILS.REQUESTED_URL' | translate }}
+ {{ error.requestedUrl }} +
+
+
{{ 'INITIALIZATION_ERROR_PAGE.DETAILS.DETAILS' | translate }}
+ {{ error.detail }} +
+
+
{{ 'INITIALIZATION_ERROR_PAGE.DETAILS.ERRORCODE' | translate }}
+ {{ error.errorCode }} +
+
+
{{ 'INITIALIZATION_ERROR_PAGE.DETAILS.INVALID_PARAMS' | translate }}
+ {{ error.invalidParams }} +
+
+
{{ 'INITIALIZATION_ERROR_PAGE.DETAILS.PARAMS' | translate }}
+ {{ error.params }} +
+
+
diff --git a/src/app/shell/components/initialization-error-page/initialization-error-page.component.spec.ts b/src/app/shell/components/initialization-error-page/initialization-error-page.component.spec.ts index 6fbeaf0..fcd70ee 100644 --- a/src/app/shell/components/initialization-error-page/initialization-error-page.component.spec.ts +++ b/src/app/shell/components/initialization-error-page/initialization-error-page.component.spec.ts @@ -2,6 +2,7 @@ import { TestBed, ComponentFixture } from '@angular/core/testing' import { ActivatedRoute } from '@angular/router' import { of } from 'rxjs' import { TranslateTestingModule } from 'ngx-translate-testing' + import { InitializationErrorPageComponent } from './initialization-error-page.component' describe('InitializationErrorPageComponent', () => { diff --git a/src/app/shell/components/initialization-error-page/initialization-error-page.component.ts b/src/app/shell/components/initialization-error-page/initialization-error-page.component.ts index c430b0c..17ef624 100644 --- a/src/app/shell/components/initialization-error-page/initialization-error-page.component.ts +++ b/src/app/shell/components/initialization-error-page/initialization-error-page.component.ts @@ -12,48 +12,7 @@ interface InitializationError { } @Component({ - template: `
-

{{ 'INITIALIZATION_ERROR_PAGE.TITLE' | translate }}

-

{{ 'INITIALIZATION_ERROR_PAGE.SUBTITLE' | translate }}

-
-
-
- {{ 'INITIALIZATION_ERROR_PAGE.DETAILS.MESSAGE' | translate }} -
- {{ error.message }} -
-
-
- {{ 'INITIALIZATION_ERROR_PAGE.DETAILS.REQUESTED_URL' | translate }} -
- {{ error.requestedUrl }} -
-
-
- {{ 'INITIALIZATION_ERROR_PAGE.DETAILS.DETAILS' | translate }} -
- {{ error.detail }} -
-
-
- {{ 'INITIALIZATION_ERROR_PAGE.DETAILS.ERRORCODE' | translate }} -
- {{ error.errorCode }} -
-
-
- {{ 'INITIALIZATION_ERROR_PAGE.DETAILS.INVALID_PARAMS' | translate }} -
- {{ error.invalidParams }} -
-
-
- {{ 'INITIALIZATION_ERROR_PAGE.DETAILS.PARAMS' | translate }} -
- {{ error.params }} -
-
-
` + templateUrl: './initialization-error-page.component.html' }) export class InitializationErrorPageComponent { error$: Observable diff --git a/src/app/shell/components/not-found-page.component.ts b/src/app/shell/components/not-found-page.component.ts index c64580d..ee7a8e7 100644 --- a/src/app/shell/components/not-found-page.component.ts +++ b/src/app/shell/components/not-found-page.component.ts @@ -6,11 +6,19 @@ import { Workspace } from '@onecx/integration-interface' template: `
-

{{ 'NOT_FOUND_PAGE.TITLE' | translate }}

-

{{ 'NOT_FOUND_PAGE.DETAILS' | translate }}

+

{{ 'NOT_FOUND_PAGE.TITLE' | translate }}

+

{{ 'NOT_FOUND_PAGE.DETAILS' | translate }}

-
` diff --git a/src/app/shell/services/routes.service.ts b/src/app/shell/services/routes.service.ts index 66b1d6f..2695c4e 100644 --- a/src/app/shell/services/routes.service.ts +++ b/src/app/shell/services/routes.service.ts @@ -1,50 +1,37 @@ -import { - LoadRemoteModuleOptions, - loadRemoteModule, -} from '@angular-architects/module-federation'; -import { Location } from '@angular/common'; -import { Injectable } from '@angular/core'; -import { - NavigationEnd, - NavigationSkipped, - Route, - Router, -} from '@angular/router'; +import { Injectable } from '@angular/core' +import { Location } from '@angular/common' +import { LoadRemoteModuleOptions, loadRemoteModule } from '@angular-architects/module-federation' +import { NavigationEnd, NavigationSkipped, Route, Router } from '@angular/router' +import { BehaviorSubject, filter, firstValueFrom, map } from 'rxjs' + +import { getLocation } from '@onecx/accelerator' import { AppStateService, CONFIG_KEY, ConfigurationService, - PortalMessageService, -} from '@onecx/angular-integration-interface'; -import { PermissionsTopic } from '@onecx/integration-interface'; -import { - PermissionsCacheService, - ShowContentProvider, -} from '@onecx/shell-core'; -import { BehaviorSubject, filter, firstValueFrom, map } from 'rxjs'; -import { appRoutes } from 'src/app/app.routes'; -import { - PathMatch, - PermissionBffService, - Technologies, -} from 'src/app/shared/generated'; -import { Route as BffGeneratedRoute } from '../../shared/generated'; -import { PageNotFoundComponent } from '../components/not-found-page.component'; -import { HomeComponent } from '../components/home/home.component'; -import { WebcomponentLoaderModule } from '../web-component-loader/webcomponent-loader.module'; -import { getLocation } from '@onecx/accelerator'; + PortalMessageService +} from '@onecx/angular-integration-interface' +import { PermissionsTopic } from '@onecx/integration-interface' +import { PermissionsCacheService, ShowContentProvider } from '@onecx/shell-core' + +import { appRoutes } from 'src/app/app.routes' +import { Route as BffGeneratedRoute, PathMatch, PermissionBffService, Technologies } from 'src/app/shared/generated' + +import { HomeComponent } from '../components/home/home.component' +import { PageNotFoundComponent } from '../components/not-found-page.component' +import { WebcomponentLoaderModule } from '../web-component-loader/webcomponent-loader.module' export const DEFAULT_CATCH_ALL_ROUTE: Route = { path: '**', component: PageNotFoundComponent, - title: 'Error', -}; + title: 'OneCX Error' +} @Injectable({ providedIn: 'root' }) export class RoutesService implements ShowContentProvider { - private permissionsTopic$ = new PermissionsTopic(); - private isFirstLoad = true; - showContent$ = new BehaviorSubject(true); + private readonly permissionsTopic$ = new PermissionsTopic() + private isFirstLoad = true + showContent$ = new BehaviorSubject(true) constructor( private router: Router, @@ -56,33 +43,30 @@ export class RoutesService implements ShowContentProvider { ) { router.events .pipe( - filter( - (e) => e instanceof NavigationEnd || e instanceof NavigationSkipped - ), + filter((e) => e instanceof NavigationEnd || e instanceof NavigationSkipped), map(() => true) ) - .subscribe(this.showContent$); + .subscribe(this.showContent$) } async init(routes: BffGeneratedRoute[]): Promise { - const generatedRoutes = routes.map((r) => this.convertToRoute(r)); + routes.sort(this.sortRoutes) + const generatedRoutes = routes.map((r) => this.convertToRoute(r)) if (!(await this.containsRouteForWorkspace(routes))) { - console.log(`Adding fallback route`); - generatedRoutes.push(await this.createFallbackRoute()); + console.log('🧭 Adding fallback route') + generatedRoutes.push(await this.createFallbackRoute()) } - this.router.resetConfig([ - ...appRoutes, - ...generatedRoutes.sort( - (a, b) => (b.path || '')?.length - (a.path || '')?.length - ), - DEFAULT_CATCH_ALL_ROUTE, - ]); - console.log( - `🧭 Adding App routes: \n${routes - .map((lr) => `${lr.url} -> ${JSON.stringify(lr.baseUrl)}`) - .join('\t\n')}` - ); - return Promise.resolve(); + this.router.resetConfig([...appRoutes, ...generatedRoutes, DEFAULT_CATCH_ALL_ROUTE]) + console.log('🧭 Adding Workspace routes:\n' + this.listRoutes(routes)) + return Promise.resolve() + } + + private listRoutes(routes: BffGeneratedRoute[]): string { + return routes.map((lr) => `\t${lr.url} -> ${JSON.stringify(lr.baseUrl)}`).join('\n') + } + + private sortRoutes(a: BffGeneratedRoute, b: BffGeneratedRoute): number { + return (a.baseUrl ?? '').toUpperCase().localeCompare((b.baseUrl ?? '').toUpperCase()) } private convertToRoute(r: BffGeneratedRoute): Route { @@ -90,89 +74,76 @@ export class RoutesService implements ShowContentProvider { path: this.toRouteUrl(r.baseUrl), data: { module: r.exposedModule, - breadcrumb: r.productName, + breadcrumb: r.productName }, pathMatch: r.pathMatch ?? (r.baseUrl.endsWith('$') ? 'full' : 'prefix'), loadChildren: async () => await this.loadChildren(r, r.baseUrl), canActivateChild: [() => this.updateAppEnvironment(r, r.baseUrl)], - title: r.displayName, - }; + title: r.displayName + } } private async loadChildren(r: BffGeneratedRoute, joinedBaseUrl: string) { - this.showContent$.next(false); - await this.appStateService.globalLoading$.publish(true); - console.log(`➡ Load remote module ${r.exposedModule}`); + this.showContent$.next(false) + await this.appStateService.globalLoading$.publish(true) + console.log(`➡ Load remote module ${r.exposedModule}`) try { try { - await this.updateAppEnvironment(r, joinedBaseUrl); - const m = await loadRemoteModule(this.toLoadRemoteEntryOptions(r)); - const exposedModule = r.exposedModule.startsWith('./') - ? r.exposedModule.slice(2) - : r.exposedModule; - console.log(`Load remote module ${exposedModule} finished.`); + await this.updateAppEnvironment(r, joinedBaseUrl) + const m = await loadRemoteModule(this.toLoadRemoteEntryOptions(r)) + const exposedModule = r.exposedModule.startsWith('./') ? r.exposedModule.slice(2) : r.exposedModule + console.log(`Load remote module ${exposedModule} finished.`) if (r.technology === Technologies.Angular) { - return m[exposedModule]; + return m[exposedModule] } else { - return WebcomponentLoaderModule; + return WebcomponentLoaderModule } } catch (err) { - return await this.onRemoteLoadError(err); + return await this.onRemoteLoadError(err) } } finally { - await this.appStateService.globalLoading$.publish(false); + await this.appStateService.globalLoading$.publish(false) } } - private async updateAppEnvironment( - r: BffGeneratedRoute, - joinedBaseUrl: string - ): Promise { - this.updateAppStyles(r); - return this.updateAppState(r, joinedBaseUrl); + private async updateAppEnvironment(r: BffGeneratedRoute, joinedBaseUrl: string): Promise { + this.updateAppStyles(r) + return this.updateAppState(r, joinedBaseUrl) } - private async updateAppState( - r: BffGeneratedRoute, - joinedBaseUrl: string - ): Promise { - const currentGlobalLoading = await firstValueFrom( - this.appStateService.globalLoading$.asObservable() - ); + private async updateAppState(r: BffGeneratedRoute, joinedBaseUrl: string): Promise { + const currentGlobalLoading = await firstValueFrom(this.appStateService.globalLoading$.asObservable()) const currentMfeInfo = !this.isFirstLoad ? await firstValueFrom(this.appStateService.currentMfe$.asObservable()) - : undefined; + : undefined if (this.isFirstLoad || currentMfeInfo?.remoteBaseUrl !== r.url) { - this.isFirstLoad = false; + this.isFirstLoad = false if (!currentGlobalLoading) { - this.showContent$.next(false); - await this.appStateService.globalLoading$.publish(true); + this.showContent$.next(false) + await this.appStateService.globalLoading$.publish(true) } - await Promise.all([ - this.updateMfeInfo(r, joinedBaseUrl), - this.updatePermissions(r), - ]); + await Promise.all([this.updateMfeInfo(r, joinedBaseUrl), this.updatePermissions(r)]) if (!currentGlobalLoading) { - await this.appStateService.globalLoading$.publish(false); + await this.appStateService.globalLoading$.publish(false) } } - return true; + return true } private async updateAppStyles(r: BffGeneratedRoute) { - let link = document.getElementById('ocx_app_styles') as any; + let link = document.getElementById('ocx_app_styles') as any if (!link) { - link = document.createElement('link'); - link.id = 'ocx_app_styles'; - link.rel = 'stylesheet'; - link.media = 'all'; - document.head.appendChild(link); + link = document.createElement('link') + link.id = 'ocx_app_styles' + link.rel = 'stylesheet' + link.media = 'all' + document.head.appendChild(link) } if (link.href !== Location.joinWithSlash(r.url, 'styles.css')) { - link.href = Location.joinWithSlash(r.url, 'styles.css'); + link.href = Location.joinWithSlash(r.url, 'styles.css') } } @@ -186,124 +157,97 @@ export class RoutesService implements ShowContentProvider { appId: r.appId, productName: r.productName, remoteName: r.remoteName, - elementName: r.elementName, - }; - return await this.appStateService.currentMfe$.publish(mfeInfo); + elementName: r.elementName + } + return await this.appStateService.currentMfe$.publish(mfeInfo) } private async updatePermissions(r: BffGeneratedRoute) { const permissions = await firstValueFrom( - this.permissionsCacheService.getPermissions( - r.appId, - r.productName, - (appId, productName) => - this.permissionsService - .getPermissions({ appId, productName }) - .pipe(map(({ permissions }) => permissions)) + this.permissionsCacheService.getPermissions(r.appId, r.productName, (appId, productName) => + this.permissionsService.getPermissions({ appId, productName }).pipe(map(({ permissions }) => permissions)) ) - ); - await this.permissionsTopic$.publish(permissions); + ) + await this.permissionsTopic$.publish(permissions) } private async onRemoteLoadError(err: unknown) { - console.log(`Failed to load remote module: ${err}`); + console.log(`Failed to load remote module: ${err}`) this.portalMessageService.error({ - summaryKey: 'ERROR_MESSAGES.ON_REMOTE_LOAD_ERROR', - }); + summaryKey: 'ERROR_MESSAGES.ON_REMOTE_LOAD_ERROR' + }) const routerParams = { requestedApplicationPath: getLocation().applicationPath } - this.router.navigate(['remote-loading-error-page', routerParams]); - throw err; + this.router.navigate(['remote-loading-error-page', routerParams]) + throw err } - private toLoadRemoteEntryOptions( - r: BffGeneratedRoute - ): LoadRemoteModuleOptions { - const exposedModule = r.exposedModule.startsWith('./') - ? r.exposedModule.slice(2) - : r.exposedModule; - if ( - r.technology === Technologies.Angular || - r.technology === Technologies.WebComponentModule - ) { + private toLoadRemoteEntryOptions(r: BffGeneratedRoute): LoadRemoteModuleOptions { + const exposedModule = r.exposedModule.startsWith('./') ? r.exposedModule.slice(2) : r.exposedModule + if (r.technology === Technologies.Angular || r.technology === Technologies.WebComponentModule) { return { type: 'module', remoteEntry: r.remoteEntryUrl, - exposedModule: './' + exposedModule, - }; + exposedModule: './' + exposedModule + } } return { type: 'script', remoteName: r.remoteName ?? '', remoteEntry: r.remoteEntryUrl, - exposedModule: './' + exposedModule, - }; + exposedModule: './' + exposedModule + } } private toRouteUrl(url: string | undefined) { if (!url) { - return url; + return url } - const SHELL_BASE_HREF = this.configurationService.getProperty( - CONFIG_KEY.APP_BASE_HREF - ); + const SHELL_BASE_HREF = this.configurationService.getProperty(CONFIG_KEY.APP_BASE_HREF) if (SHELL_BASE_HREF && url.startsWith(SHELL_BASE_HREF)) { - url = url.slice(SHELL_BASE_HREF.length); + url = url.slice(SHELL_BASE_HREF.length) } if (url?.startsWith('/')) { - url = url.substring(1); + url = url.substring(1) } if (url.endsWith('$')) { - url = url.substring(0, url.length - 1); + url = url.substring(0, url.length - 1) } if (url.endsWith('/')) { - url = url.substring(0, url.length - 1); + url = url.substring(0, url.length - 1) } - return url; + return url } - private async containsRouteForWorkspace( - routes: BffGeneratedRoute[] - ): Promise { - const baseUrl = ( - await firstValueFrom( - this.appStateService.currentWorkspace$.asObservable() - ) - ).baseUrl; - return ( - routes.find((r) => r.baseUrl === this.toRouteUrl(baseUrl)) !== undefined - ); + private async containsRouteForWorkspace(routes: BffGeneratedRoute[]): Promise { + const baseUrl = (await firstValueFrom(this.appStateService.currentWorkspace$.asObservable())).baseUrl + return routes.find((r) => r.baseUrl === this.toRouteUrl(baseUrl)) !== undefined } private async createFallbackRoute(): Promise { - const currentWorkspace = await firstValueFrom( - this.appStateService.currentWorkspace$.asObservable() - ); + const currentWorkspace = await firstValueFrom(this.appStateService.currentWorkspace$.asObservable()) const route = { path: this.toRouteUrl(currentWorkspace.baseUrl), - pathMatch: PathMatch.full, - }; + pathMatch: PathMatch.full + } if (!currentWorkspace.homePage) { return { ...route, - component: HomeComponent, - }; + component: HomeComponent + } } return { ...route, - redirectTo: this.createHomePageUrl( - currentWorkspace.baseUrl, - currentWorkspace.homePage - ), - }; + redirectTo: this.createHomePageUrl(currentWorkspace.baseUrl, currentWorkspace.homePage) + } } private createHomePageUrl(baseUrl: string, homePage: string) { - return this.toRouteUrl(Location.joinWithSlash(baseUrl, homePage)); + return this.toRouteUrl(Location.joinWithSlash(baseUrl, homePage)) } } diff --git a/src/app/shell/utils/initialization-error-handler.utils.spec.ts b/src/app/shell/utils/initialization-error-handler.utils.spec.ts index 2c1d4a7..8dc83ff 100644 --- a/src/app/shell/utils/initialization-error-handler.utils.spec.ts +++ b/src/app/shell/utils/initialization-error-handler.utils.spec.ts @@ -1,7 +1,8 @@ import { TestBed } from '@angular/core/testing' +import { HttpErrorResponse } from '@angular/common/http' import { Router } from '@angular/router' + import { initializationErrorHandler } from './initialization-error-handler.utils' -import { HttpErrorResponse } from '@angular/common/http' describe('initializationErrorHandler', () => { let router: Router diff --git a/src/app/shell/utils/initialization-error-handler.utils.ts b/src/app/shell/utils/initialization-error-handler.utils.ts index 9b4dd8a..984004a 100644 --- a/src/app/shell/utils/initialization-error-handler.utils.ts +++ b/src/app/shell/utils/initialization-error-handler.utils.ts @@ -1,6 +1,7 @@ -import { Router } from '@angular/router' import { HttpErrorResponse } from '@angular/common/http' +import { Router } from '@angular/router' import { Observable, of } from 'rxjs' + import { ProblemDetailResponse } from 'src/app/shared/generated' type InitializationErrorDetails = ProblemDetailResponse diff --git a/src/assets/i18n/de.json b/src/assets/i18n/de.json index 7260cce..8ae9a94 100644 --- a/src/assets/i18n/de.json +++ b/src/assets/i18n/de.json @@ -1,6 +1,7 @@ { + "SHELL": "", "ERROR_MESSAGES": { - "ON_REMOTE_LOAD_ERROR": "Teile der Anwendung konnte nicht geladen werden." + "ON_REMOTE_LOAD_ERROR": "Teile der Anwendung konnten nicht geladen werden." }, "WELCOME": { "TITLE": "Hallo" @@ -8,24 +9,26 @@ "NOT_FOUND_PAGE": { "TITLE": "Die Seite konnte nicht gefunden werden.", "DETAILS": "Die Seite, auf die Sie zugreifen möchten, ist im aktuellen Workspace nicht vorhanden.", - "BUTTON": "Workspace Startseite" + "ACTION": "Workspace Startseite", + "ACTION.TOOLTIP": "Zur Workspace Startseite wechseln" }, "ERROR_PAGE": { "TITLE": "Die Seite konnte nicht geladen werden.", "DETAILS": "Versuchen Sie es erneut oder kontaktieren Sie einen Workspace Administrator.", "REQUESTED_PAGE": "Angefragte Seite:", - "BUTTON": "Neuladen" + "ACTION": "Neuladen", + "ACTION.TOOLTIP": "Die Seite erneut aufrufen." }, "INITIALIZATION_ERROR_PAGE": { "TITLE": "Fehler bei der Initialisierung des Workspaces", "SUBTITLE": "Bitte kontaktieren Sie einen Workspace Administrator mit den folgenden Informationen:", "DETAILS": { - "MESSAGE": "Fehlermeldung:", - "REQUESTED_URL": "Aufgerufene URL:", - "DETAILS": "Details:", - "ERRORCODE": "Fehlercode:", - "INVALID_PARAMS": "Ungültige Parameter:", - "PARAMS": "Parameter:" + "MESSAGE": "Fehlermeldung", + "REQUESTED_URL": "Aufgerufene URL", + "DETAILS": "Details", + "ERRORCODE": "Fehlercode", + "INVALID_PARAMS": "Ungültige Parameter", + "PARAMS": "Parameter" } } } diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index fd49db0..c0bf5cd 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -1,31 +1,34 @@ { - "ERROR_MESSAGES": { - "ON_REMOTE_LOAD_ERROR": "Parts of the application could not be loaded." - }, - "WELCOME": { - "TITLE": "Hello" - }, - "NOT_FOUND_PAGE": { - "TITLE": "Page not found", - "DETAILS": "The page you tried to access does not exist in the current Workspace.", - "BUTTON": "Workspace Home" - }, - "ERROR_PAGE": { - "TITLE": "Something went wrong", - "DETAILS": "The page you tried to access could not be loaded. Please try again or contact a Workspace administrator.", - "REQUESTED_PAGE": "Requested page:", - "BUTTON": "Reload" - }, - "INITIALIZATION_ERROR_PAGE": { - "TITLE": "Something went wrong during Workspace initialization.", - "SUBTITLE": "Please contact a Workspace administrator with the following information:", - "DETAILS": { - "MESSAGE": "Error message:", - "REQUESTED_URL": "Requested URL:", - "DETAILS": "Details:", - "ERRORCODE": "Error code:", - "INVALID_PARAMS": "Invalid params:", - "PARAMS": "Params:" - } + "SHELL": "", + "ERROR_MESSAGES": { + "ON_REMOTE_LOAD_ERROR": "Parts of the application could not be loaded." + }, + "WELCOME": { + "TITLE": "Hello" + }, + "NOT_FOUND_PAGE": { + "TITLE": "Page not found", + "DETAILS": "The page you tried to access does not exist in the current Workspace.", + "ACTION": "Workspace Home", + "ACTION.TOOLTIP": "Go to Workspace Home page" + }, + "ERROR_PAGE": { + "TITLE": "Something went wrong", + "DETAILS": "The page you tried to access could not be loaded. Please try again or contact a Workspace administrator.", + "REQUESTED_PAGE": "Requested page:", + "ACTION": "Reload", + "ACTION.TOOLTIP": "Reload of the requested page." + }, + "INITIALIZATION_ERROR_PAGE": { + "TITLE": "Something went wrong during Workspace initialization.", + "SUBTITLE": "Please contact a Workspace administrator with the following information:", + "DETAILS": { + "MESSAGE": "Error message", + "REQUESTED_URL": "Requested URL", + "DETAILS": "Details", + "ERRORCODE": "Error code", + "INVALID_PARAMS": "Invalid parameter", + "PARAMS": "Parameter" } -} \ No newline at end of file + } +} diff --git a/src/assets/images/onecx_watermark.png b/src/assets/images/onecx_watermark.png new file mode 100644 index 0000000000000000000000000000000000000000..2fdd473d16f99df0c49edd489d91a9e755a5eb45 GIT binary patch literal 35468 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 SFC~!|J8Niqs^G+xJO2-3w2+Aa literal 0 HcmV?d00001 diff --git a/src/favicon.ico b/src/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..317ebcb2336e0833a22dddf0ab287849f26fda57 GIT binary patch literal 15086 zcmeI332;U^%p|z7g|#(P)qFEA@4f!_@qOK2 z_lJl}!lhL!VT_U|uN7%8B2iKH??xhDa;*`g{yjTFWHvXn;2s{4R7kH|pKGdy(7z!K zgftM+Ku7~24TLlh(!g)gz|foI94G^t2^IO$uvX$3(OR0<_5L2sB)lMAMy|+`xodJ{ z_Uh_1m)~h?a;2W{dmhM;u!YGo=)OdmId_B<%^V^{ovI@y`7^g1_V9G}*f# zNzAtvou}I!W1#{M^@ROc(BZ! z+F!!_aR&Px3_reO(EW+TwlW~tv*2zr?iP7(d~a~yA|@*a89IUke+c472NXM0wiX{- zl`UrZC^1XYyf%1u)-Y)jj9;MZ!SLfd2Hl?o|80Su%Z?To_=^g_Jt0oa#CT*tjx>BI z16wec&AOWNK<#i0Qd=1O$fymLRoUR*%;h@*@v7}wApDl^w*h}!sYq%kw+DKDY)@&A z@9$ULEB3qkR#85`lb8#WZw=@})#kQig9oqy^I$dj&k4jU&^2(M3q{n1AKeGUKPFbr z1^<)aH;VsG@J|B&l>UtU#Ejv3GIqERzYgL@UOAWtW<{p#zy`WyJgpCy8$c_e%wYJL zyGHRRx38)HyjU3y{-4z6)pzb>&Q1pR)B&u01F-|&Gx4EZWK$nkUkOI|(D4UHOXg_- zw{OBf!oWQUn)Pe(=f=nt=zkmdjpO^o8ZZ9o_|4tW1ni+Un9iCW47*-ut$KQOww!;u z`0q)$s6IZO!~9$e_P9X!hqLxu`fpcL|2f^I5d4*a@Dq28;@2271v_N+5HqYZ>x;&O z05*7JT)mUe&%S0@UD)@&8SmQrMtsDfZT;fkdA!r(S=}Oz>iP)w=W508=Rc#nNn7ym z1;42c|8($ALY8#a({%1#IXbWn9-Y|0eDY$_L&j{63?{?AH{);EzcqfydD$@-B`Y3<%IIj7S7rK_N}je^=dEk%JQ4c z!tBdTPE3Tse;oYF>cnrapWq*o)m47X1`~6@(!Y29#>-#8zm&LXrXa(3=7Z)ElaQqj z-#0JJy3Fi(C#Rx(`=VXtJ63E2_bZGCz+QRa{W0e2(m3sI?LOcUBx)~^YCqZ{XEPX)C>G>U4tfqeH8L(3|pQR*zbL1 zT9e~4Tb5p9_G}$y4t`i*4t_Mr9QYvL9C&Ah*}t`q*}S+VYh0M6GxTTSXI)hMpMpIq zD1ImYqJLzbj0}~EpE-aH#VCH_udYEW#`P2zYmi&xSPs_{n6tBj=MY|-XrA;SGA_>y zGtU$?HXm$gYj*!N)_nQ59%lQdXtQZS3*#PC-{iB_sm+ytD*7j`D*k(P&IH2GHT}Eh z5697eQECVIGQAUe#eU2I!yI&%0CP#>%6MWV z@zS!p@+Y1i1b^QuuEF*13CuB zu69dve5k7&Wgb+^s|UB08Dr3u`h@yM0NTj4h7MnHo-4@xmyr7(*4$rpPwsCDZ@2be zRz9V^GnV;;?^Lk%ynzq&K(Aix`mWmW`^152Hoy$CTYVehpD-S1-W^#k#{0^L`V6CN+E z!w+xte;2vu4AmVNEFUOBmrBL>6MK@!O2*N|2=d|Y;oN&A&qv=qKn73lDD zI(+oJAdgv>Yr}8(&@ZuAZE%XUXmX(U!N+Z_sjL<1vjy1R+1IeHt`79fnYdOL{$ci7 z%3f0A*;Zt@ED&Gjm|OFTYBDe%bbo*xXAQsFz+Q`fVBH!N2)kaxN8P$c>sp~QXnv>b zwq=W3&Mtmih7xkR$YA)1Yi?avHNR6C99!u6fh=cL|KQ&PwF!n@ud^n(HNIImHD!h87!i*t?G|p0o+eelJ?B@A64_9%SBhNaJ64EvKgD&%LjLCYnNfc; znj?%*p@*?dq#NqcQFmmX($wms@CSAr9#>hUR^=I+=0B)vvGX%T&#h$kmX*s=^M2E!@N9#m?LhMvz}YB+kd zG~mbP|D(;{s_#;hsKK9lbVK&Lo734x7SIFJ9V_}2$@q?zm^7?*XH94w5Qae{7zOMUF z^?%F%)c1Y)Q?Iy?I>knw*8gYW#ok|2gdS=YYZLiD=CW|Nj;n^x!=S#iJ#`~Ld79+xXpVmUK^B(xO_vO!btA9y7w3L3-0j-y4 z?M-V{%z;JI`bk7yFDcP}OcCd*{Q9S5$iGA7*E1@tfkyjAi!;wP^O71cZ^Ep)qrQ)N z#wqw0_HS;T7x3y|`P==i3hEwK%|>fZ)c&@kgKO1~5<5xBSk?iZV?KI6&i72H6S9A* z=U(*e)EqEs?Oc04)V-~K5AUmh|62H4*`UAtItO$O(q5?6jj+K^oD!04r=6#dsxp?~}{`?&sXn#q2 zGuY~7>O2=!u@@Kfu7q=W*4egu@qPMRM>(eyYyaIE<|j%d=iWNdGsx%c!902v#ngNg z@#U-O_4xN$s_9?(`{>{>7~-6FgWpBpqXb`Ydc3OFL#&I}Irse9F_8R@4zSS*Y*o*B zXL?6*Aw!AfkNCgcr#*yj&p3ZDe2y>v$>FUdKIy_2N~}6AbHc7gA3`6$g@1o|dE>vz z4pl(j9;kyMsjaw}lO?(?Xg%4k!5%^t#@5n=WVc&JRa+XT$~#@rldvN3S1rEpU$;XgxVny7mki3 z-Hh|jUCHrUXuLr!)`w>wgO0N%KTB-1di>cj(x3Bav`7v z3G7EIbU$z>`Nad7Rk_&OT-W{;qg)-GXV-aJT#(ozdmnA~Rq3GQ_3mby(>q6Ocb-RgTUhTN)))x>m&eD;$J5Bg zo&DhY36Yg=J=$Z>t}RJ>o|@hAcwWzN#r(WJ52^g$lh^!63@hh+dR$&_dEGu&^CR*< z!oFqSqO@>xZ*nC2oiOd0eS*F^IL~W-rsrO`J`ej{=ou_q^_(<$&-3f^J z&L^MSYWIe{&pYq&9eGaArA~*kA + OneCX Portal - +
-
+

Welcome

- +