diff --git a/.all-contributorsrc b/.all-contributorsrc new file mode 100644 index 00000000..679b755c --- /dev/null +++ b/.all-contributorsrc @@ -0,0 +1,101 @@ +{ + "projectName": "angular-example-app", + "projectOwner": "Ismaestro", + "files": ["README.md"], + "commitType": "docs", + "commitConvention": "angular", + "contributorsPerLine": 6, + "contributors": [ + { + "login": "magicalyak", + "name": "Tom Gamull", + "avatar_url": "https://avatars.githubusercontent.com/u/6165889?v=4", + "profile": "https://magicalyak.org/", + "contributions": ["infra"] + }, + { + "login": "mansya", + "name": "mansyaprime", + "avatar_url": "https://avatars.githubusercontent.com/u/33461607?v=4", + "profile": "https://github.com/mansya", + "contributions": ["code"] + }, + { + "login": "codeimmortal", + "name": "codeimmortal", + "avatar_url": "https://avatars.githubusercontent.com/u/16804408?v=4", + "profile": "https://github.com/codeimmortal", + "contributions": ["code"] + }, + { + "login": "tomasfse", + "name": "tomasfse", + "avatar_url": "https://avatars.githubusercontent.com/u/22914697?v=4", + "profile": "https://github.com/tomasfse", + "contributions": ["code"] + }, + { + "login": "golu7679", + "name": "golu", + "avatar_url": "https://avatars.githubusercontent.com/u/55990159?v=4", + "profile": "https://golu7679.github.io/", + "contributions": ["code"] + }, + { + "login": "v-rr", + "name": "rancyr", + "avatar_url": "https://avatars.githubusercontent.com/u/90811840?v=4", + "profile": "https://github.com/microsoft/Secure-Supply-Chain/", + "contributions": ["code"] + }, + { + "login": "codingphasedotcom", + "name": "codingphasedotcom", + "avatar_url": "https://avatars.githubusercontent.com/u/26421899?v=4", + "profile": "http://www.codingphase.com/", + "contributions": ["code"] + }, + { + "login": "scip92", + "name": "Max", + "avatar_url": "https://avatars.githubusercontent.com/u/15237896?v=4", + "profile": "https://github.com/scip92", + "contributions": ["code"] + }, + { + "login": "HerbertKarajan", + "name": "Karajan", + "avatar_url": "https://avatars.githubusercontent.com/u/20851191?v=4", + "profile": "https://github.com/HerbertKarajan", + "contributions": ["code"] + }, + { + "login": "carlchandev", + "name": "Carl Chan", + "avatar_url": "https://avatars.githubusercontent.com/u/34772941?v=4", + "profile": "https://github.com/carlchandev", + "contributions": ["code"] + }, + { + "login": "dyeimys", + "name": "Dyeimys Franco Correa", + "avatar_url": "https://avatars.githubusercontent.com/u/4250372?v=4", + "profile": "https://github.com/dyeimys", + "contributions": ["code"] + }, + { + "login": "mugan86", + "name": "Anartz Mugika Ledo", + "avatar_url": "https://avatars.githubusercontent.com/u/5081970?v=4", + "profile": "https://anartz-mugika.com/qwik-book/es/", + "contributions": ["code"] + }, + { + "login": "OrlPep", + "name": "OrlPep", + "avatar_url": "https://avatars.githubusercontent.com/u/171474908?v=4", + "profile": "https://github.com/OrlPep", + "contributions": ["code"] + } + ] +} diff --git a/.angular-cli.json b/.angular-cli.json deleted file mode 100644 index 2a87b0d8..00000000 --- a/.angular-cli.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "$schema": "./node_modules/@angular/cli/lib/config/schema.json", - "project": { - "name": "angular-example-app" - }, - "apps": [ - { - "root": "src", - "outDir": "dist", - "assets": [ - "assets", - "favicon.ico", - "sitemap.xml", - "googled41787c6aae2151b.html", - "CNAME" - ], - "index": "index.html", - "main": "main.ts", - "polyfills": "polyfills.ts", - "test": "test.ts", - "tsconfig": "tsconfig.app.json", - "testTsconfig": "tsconfig.spec.json", - "prefix": "app", - "stylesUrls": [ - "" - ], - "styles": [ - "assets/css/reset.css", - "assets/css/loading.css", - "assets/css/styles.scss" - ], - "scripts": [ - "assets/js/modernizr.js", - "assets/js/gtm.js" - ], - "environmentSource": "environments/environment.ts", - "environments": { - "dev": "environments/environment.ts", - "prod": "environments/environment.prod.ts" - } - } - ], - "e2e": { - "protractor": { - "config": "./protractor.conf.js" - } - }, - "lint": [ - { - "project": "src/tsconfig.app.json" - }, - { - "project": "src/tsconfig.spec.json" - }, - { - "project": "e2e/tsconfig.e2e.json" - } - ], - "test": { - "karma": { - "config": "./karma.conf.js" - } - }, - "defaults": { - "styleExt": "css", - "component": {} - } -} diff --git a/.browserslistrc b/.browserslistrc new file mode 100755 index 00000000..525da03c --- /dev/null +++ b/.browserslistrc @@ -0,0 +1,14 @@ +# This file is used by the build system to adjust CSS and JS output to support the specified browsers below. +# For additional information regarding the format and rule options, please see: +# https://github.com/browserslist/browserslist#queries + +# For the full list of supported browsers by the Angular framework, please see: +# https://angular.io/guide/browser-support + +# You can see what browsers were selected by your queries by running: +# npx browserslist + +last 2 Chrome versions +last 2 Firefox versions +last 2 Edge versions +last 2 Safari versions diff --git a/.commitlintrc.json b/.commitlintrc.json new file mode 100755 index 00000000..6c703e4e --- /dev/null +++ b/.commitlintrc.json @@ -0,0 +1,25 @@ +{ + "extends": ["@commitlint/config-conventional"], + "rules": { + "type-enum": [2, "always", ["build", "docs", "feat", "fix", "perf", "refactor", "test"]], + "scope-enum": [ + 2, + "always", + [ + "repo", + "tools", + "styles", + "e2e", + "version", + "app", + "core", + "auth", + "home", + "pokemon", + "pokedex" + ] + ], + "subject-case": [2, "always", "lower-case"], + "subject-full-stop": [2, "never"] + } +} diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index d992b0ff..00000000 --- a/.dockerignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -.git \ No newline at end of file diff --git a/.editorconfig b/.editorconfig new file mode 100755 index 00000000..b040ca86 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,20 @@ +# Editor configuration, see https://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*.ts] +quote_type = single + +[*.md] +insert_final_newline = false +trim_trailing_whitespace = false + +[*.xlf] +insert_final_newline = false diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100755 index 00000000..9fa08a62 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,35 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' +--- + +**Describe the bug** A clear and concise description of what the bug is. + +**To Reproduce** Steps to reproduce the behavior: + +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** A clear and concise description of what you expected to happen. + +**Screenshots** If applicable, add screenshots to help explain your problem. + +**Desktop (please complete the following information):** + +- OS: [e.g. iOS] +- Browser [e.g. chrome, safari] +- Version [e.g. 22] + +**Smartphone (please complete the following information):** + +- Device: [e.g. iPhone6] +- OS: [e.g. iOS8.1] +- Browser [e.g. stock browser, safari] +- Version [e.g. 22] + +**Additional context** Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100755 index 00000000..90320852 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,17 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' +--- + +**Is your feature request related to a problem? Please describe.** A clear and concise description +of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** A clear and concise description of any alternative +solutions or features you've considered. + +**Additional context** Add any other context or screenshots about the feature request here. diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 index a4b4294d..865d7fe6 --- a/.gitignore +++ b/.gitignore @@ -1,39 +1,44 @@ -# compiled output +# See https://docs.github.com/get-started/getting-started-with-git/ignoring-files for more about ignoring files. + +# Compiled output /dist +/test-results /tmp +/out-tsc +/bazel-out -# dependencies +# Node /node_modules -/coverage +npm-debug.log +yarn-error.log # IDEs and editors -/.idea +.idea/ .project .classpath .c9/ *.launch .settings/ +*.sublime-workspace -# IDE - VSCode +# Visual Studio Code .vscode/* !.vscode/settings.json !.vscode/tasks.json !.vscode/launch.json !.vscode/extensions.json +.history/* -# misc -/.sass-cache +# Miscellaneous +/.angular/cache +.sass-cache/ /connect.lock -/coverage/* +/coverage /libpeerconnection.log -npm-debug.log testem.log /typings +/playwright-report -# e2e -/e2e/*.js -/e2e/*.map - -#System Files +# System files .DS_Store Thumbs.db diff --git a/.husky/commit-msg b/.husky/commit-msg new file mode 100755 index 00000000..30d445e8 --- /dev/null +++ b/.husky/commit-msg @@ -0,0 +1 @@ +npx commitlint --edit diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 00000000..0c8de168 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1 @@ +npx lint-staged && npm run lint diff --git a/.husky/pre-push b/.husky/pre-push new file mode 100755 index 00000000..a251552a --- /dev/null +++ b/.husky/pre-push @@ -0,0 +1 @@ +npm run format:check && npm run test && npm run build && npm run lighthouse diff --git a/.lintstagedrc.json b/.lintstagedrc.json new file mode 100644 index 00000000..6e262ac9 --- /dev/null +++ b/.lintstagedrc.json @@ -0,0 +1,4 @@ +{ + "*.{ts,js,json,html,css,scss,md,mdx}": ["prettier --write"], + "*.{css,scss}": ["stylelint --fix"] +} diff --git a/.npmrc b/.npmrc new file mode 100644 index 00000000..d5831dd5 --- /dev/null +++ b/.npmrc @@ -0,0 +1,2 @@ +engine-strict=true +legacy-peer-deps=true diff --git a/.prettierignore b/.prettierignore new file mode 100755 index 00000000..c7a96211 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,4 @@ +dist +coverage +node_modules +.angular/cache diff --git a/.prettierrc b/.prettierrc new file mode 100755 index 00000000..f7abc165 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,17 @@ +{ + "printWidth": 100, + "tabWidth": 2, + "useTabs": false, + "embeddedLanguageFormatting": "off", + "singleQuote": true, + "semi": true, + "quoteProps": "preserve", + "bracketSpacing": true, + "trailingComma": "all", + "overrides": [ + { + "files": ".prettierrc", + "options": { "parser": "json" } + } + ] +} diff --git a/.stylelintignore b/.stylelintignore new file mode 100644 index 00000000..865d7fe6 --- /dev/null +++ b/.stylelintignore @@ -0,0 +1,44 @@ +# See https://docs.github.com/get-started/getting-started-with-git/ignoring-files for more about ignoring files. + +# Compiled output +/dist +/test-results +/tmp +/out-tsc +/bazel-out + +# Node +/node_modules +npm-debug.log +yarn-error.log + +# IDEs and editors +.idea/ +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# Visual Studio Code +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +.history/* + +# Miscellaneous +/.angular/cache +.sass-cache/ +/connect.lock +/coverage +/libpeerconnection.log +testem.log +/typings +/playwright-report + +# System files +.DS_Store +Thumbs.db diff --git a/.stylelintrc.json b/.stylelintrc.json new file mode 100755 index 00000000..5afdf7a7 --- /dev/null +++ b/.stylelintrc.json @@ -0,0 +1,12 @@ +{ + "extends": ["stylelint-config-standard-scss", "stylelint-config-recess-order"], + "customSyntax": "postcss-scss", + "plugins": ["stylelint-order"], + "rules": { + "import-notation": null, + "function-no-unknown": null, + "no-descending-specificity": null, + "at-rule-no-unknown": null, + "selector-class-pattern": "^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*(__[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?(--[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$" + } +} diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 536cedc6..00000000 --- a/.travis.yml +++ /dev/null @@ -1,45 +0,0 @@ -#.travis.yml - -sudo: required - -dist: trusty - -addons: - apt: - sources: - - google-chrome - packages: - - google-chrome-stable - -language: node_js - -node_js: - - 7 - -branches: - only: - - master - -before_script: - - set -e - - npm install - - npm install -g angular-cli-ghpages - - export DISPLAY=:99.0 - - sh -e /etc/init.d/xvfb start - -script: - - npm run lint - - npm run test - - npm run e2e - - ng build --prod --base-href / - -after_success: - - if [ "$TRAVIS_PULL_REQUEST" = "false" ] && [ "$TRAVIS_BRANCH" = "master" ]; then - angular-cli-ghpages --repo=https://GH_TOKEN@$GH_REPO --name="New release" --email=$EMAIL; - fi - - cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js - -notifications: - email: - on_failure: change - on_success: change \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md old mode 100644 new mode 100755 index 279e4153..1d3df8fb --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,56 +1,35 @@ -# Change Log + -All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +# 20.0.0 (2025-10-30) - -# [5.1.0](https://github.com/Ismaestro/angular5-example-app/compare/v2.4.0...v5.1.0) (2017-12-07) +### Angular 20 +| Type | Description | +| ---- | ---------------------------- | +| feat | update angular version to 20 | -### Bug Fixes +--- -* **e2e:** updated number of default heroes ([cd0b1d4](https://github.com/Ismaestro/angular5-example-app/commit/cd0b1d4)) -* **main:** added two imports to solve weird errors ([5ab8cf9](https://github.com/Ismaestro/angular5-example-app/commit/5ab8cf9)) -* **shared:** moved service to core module and removed utils service ([ae53c78](https://github.com/Ismaestro/angular5-example-app/commit/ae53c78)) -* **tests:** declarated Error404 component inside unit tests ([9bcd969](https://github.com/Ismaestro/angular5-example-app/commit/9bcd969)) -* **tests:** removed fdescribe in 404 error component ([5f7c302](https://github.com/Ismaestro/angular5-example-app/commit/5f7c302)) + +# 19.1.0 (2025-10-27) -### Features +### app -* **404:** added 404 page error ([0d0853d](https://github.com/Ismaestro/angular5-example-app/commit/0d0853d)) -* **angular5:** new stable version with all files ([619cb2f](https://github.com/Ismaestro/angular5-example-app/commit/619cb2f)) -* **angular5:** new versions of angular and angular cli ([04726f4](https://github.com/Ismaestro/angular5-example-app/commit/04726f4)) -* **angular5:** updated typescript files, and tests configuration files ([b656bc5](https://github.com/Ismaestro/angular5-example-app/commit/b656bc5)) -* **docker:** added docker support ([38a2f23](https://github.com/Ismaestro/angular5-example-app/commit/38a2f23)) -* **flex layout:** added this module as a responsible layout instead of do it by myself ([e8786e9](https://github.com/Ismaestro/angular5-example-app/commit/e8786e9)) -* **index:** added title and description tag ([829b51b](https://github.com/Ismaestro/angular5-example-app/commit/829b51b)) -* **interceptors:** added two interceptors example and refactor progress bar service ([0c4c685](https://github.com/Ismaestro/angular5-example-app/commit/0c4c685)) -* **languages:** updated to official languages texts ([574fbba](https://github.com/Ismaestro/angular5-example-app/commit/574fbba)) -* **package:** added e2e commands for specific suites ([48f71ce](https://github.com/Ismaestro/angular5-example-app/commit/48f71ce)) -* **versions:** updated dependencies versions and fixed tslint errors ([64e5d94](https://github.com/Ismaestro/angular5-example-app/commit/64e5d94)) +| Type | Description | +| ---- | -------------------------------------------------------------------------------------------------------------------------------------- | +| feat | add support for **SSG (Static Site Generation)**, prerendering the main path `/` and individual Pokémon routes like `/pokemon/pikachu` | +--- + - -# [5.0.0](https://github.com/Ismaestro/angular4-example-app/compare/v2.4.0...v5.0.0) (2017-11-06) +# 19.0.0 (2025-01-29) +### app -### Bug Fixes +| Type | Description | +| ---- | ---------------------------------------------- | +| feat | add number of real time users inside home page | -* **e2e:** updated number of default heroes ([cd0b1d4](https://github.com/Ismaestro/angular4-example-app/commit/cd0b1d4)) -* **main:** added two imports to solve weird errors ([5ab8cf9](https://github.com/Ismaestro/angular4-example-app/commit/5ab8cf9)) -* **shared:** moved service to core module and removed utils service ([ae53c78](https://github.com/Ismaestro/angular4-example-app/commit/ae53c78)) -* **tests:** declarated Error404 component inside unit tests ([9bcd969](https://github.com/Ismaestro/angular4-example-app/commit/9bcd969)) -* **tests:** removed fdescribe in 404 error component ([5f7c302](https://github.com/Ismaestro/angular4-example-app/commit/5f7c302)) - - -### Features - -* **404:** added 404 page error ([0d0853d](https://github.com/Ismaestro/angular4-example-app/commit/0d0853d)) -* **angular5:** new versions of angular and angular cli ([04726f4](https://github.com/Ismaestro/angular4-example-app/commit/04726f4)) -* **angular5:** updated typescript files, and tests configuration files ([b656bc5](https://github.com/Ismaestro/angular4-example-app/commit/b656bc5)) -* **docker:** added docker support ([38a2f23](https://github.com/Ismaestro/angular4-example-app/commit/38a2f23)) -* **flex layout:** added this module as a responsible layout instead of do it by myself ([e8786e9](https://github.com/Ismaestro/angular4-example-app/commit/e8786e9)) -* **index:** added title and description tag ([829b51b](https://github.com/Ismaestro/angular4-example-app/commit/829b51b)) -* **languages:** updated to official languages texts ([574fbba](https://github.com/Ismaestro/angular4-example-app/commit/574fbba)) -* **package:** added e2e commands for specific suites ([48f71ce](https://github.com/Ismaestro/angular4-example-app/commit/48f71ce)) +--- diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md deleted file mode 100644 index 2e3213f6..00000000 --- a/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at ramossilvanismael@gmail.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 9e9eb57d..00000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,53 +0,0 @@ -Contributing - -When contributing to this repository, please first discuss the change you wish to make via issue, email, or any other method with the owners of this repository before making a change. - -Please note we have a code of conduct, please follow it in all your interactions with the project. - -Pull Request Process - -Ensure any install or build dependencies are removed before the end of the layer when doing a build. -Update the README.md with details of changes to the interface, this includes new environment variables, exposed ports, useful file locations and container parameters. -Increase the version numbers in any examples files and the README.md to the new version that this Pull Request would represent. The versioning scheme we use is SemVer. -You may merge the Pull Request in once you have the sign-off of two other developers, or if you do not have permission to do that, you may request the second reviewer to merge it for you. -Code of Conduct - -Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -Using welcoming and inclusive language -Being respectful of differing viewpoints and experiences -Gracefully accepting constructive criticism -Focusing on what is best for the community -Showing empathy towards other community members -Examples of unacceptable behavior by participants include: - -The use of sexualized language or imagery and unwelcome sexual attention or advances -Trolling, insulting/derogatory comments, and personal or political attacks -Public or private harassment -Publishing others' private information, such as a physical or electronic address, without explicit permission -Other conduct which could reasonably be considered inappropriate in a professional setting -Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at ramossilvanismael@gmail.com. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -Attribution - -This Code of Conduct is adapted from the Contributor Covenant, version 1.4, available at http://contributor-covenant.org/version/1/4 diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index d7712cfb..00000000 --- a/Dockerfile +++ /dev/null @@ -1,28 +0,0 @@ -FROM node:8-alpine as builder - -COPY package.json package-lock.json ./ - -RUN npm set progress=false && npm config set depth 0 && npm cache clean --force - -## Storing node modules on a separate layer will prevent unnecessary npm installs at each build -RUN npm i && mkdir /ng-app && cp -R ./node_modules ./ng-app - -WORKDIR /ng-app - -COPY . . - -## Build the angular app in production mode and store the artifacts in dist folder -RUN $(npm bin)/ng build --prod - -FROM nginx:1.13.3-alpine - -## Copy our default nginx config -COPY nginx/default.conf /etc/nginx/conf.d/ - -## Remove default nginx website -RUN rm -rf /usr/share/nginx/html/* - -## From 'builder' stage copy over the artifacts in dist folder to default nginx public folder -COPY --from=builder /ng-app/dist /usr/share/nginx/html - -CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file diff --git a/LICENSE b/LICENSE deleted file mode 100755 index 2080ef3d..00000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) [2016] [Ismael Ramos Silvan] - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md index b56389c1..259391e9 100755 --- a/README.md +++ b/README.md @@ -1,112 +1,120 @@ -# Example app with Angular 5 + Angular CLI + Angular Material + Docker +
+

🚀 Angular Example App

-> ### Base project made with much :heart: . Contains CRUD, official style guide, patterns, etc. +

+ Your all-in-one real-world Angular starter — built for learning, productivity, and scaling. +

+ Crafted with ❤️ to showcase real best practices in action: standalone components, signals, routing, i18n, authentication and more. +

+ 🔥 Live Demo +

+ Demo example +

+
-![travis](https://travis-ci.org/Ismaestro/angular5-example-app.svg?branch=master) -[![Coverage Status](https://coveralls.io/repos/github/Ismaestro/angular5-example-app/badge.svg?branch=master)](https://coveralls.io/github/Ismaestro/angular5-example-app?branch=master) -[![Codacy Badge](https://api.codacy.com/project/badge/Grade/9d190a60fc864060ac054ba17a4e92e4)](https://www.codacy.com/app/Ismaestro/angular5-example-app?utm_source=github.com&utm_medium=referral&utm_content=Ismaestro/angular5-example-app&utm_campaign=badger) -[![Known Vulnerabilities](https://snyk.io/test/github/ismaestro/angular5-example-app/badge.svg)](https://snyk.io/test/github/ismaestro/angular5-example-app) -[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org) +--- -[![dependency Status](https://david-dm.org/ismaestro/angular5-example-app.svg)](https://david-dm.org/ismaestro/angular5-example-app#info=dependencies) -[![devDependency Status](https://david-dm.org/ismaestro/angular5-example-app/dev-status.svg)](https://david-dm.org/ismaestro/angular5-example-app#info=devDependencies) -[![peerDependencies Status](https://david-dm.org/ismaestro/angular5-example-app/peer-status.svg)](https://david-dm.org/ismaestro/angular5-example-app?type=peer) +## 📦 Why This Project? -[![npm](https://img.shields.io/badge/demo-online-brightgreen.svg)](http://angularexampleapp.com/) -[![Join the chat at https://gitter.im/angular5-example-app/Lobby](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/angular5-example-app/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +Whether you're just starting with Angular or looking for a solid base for your next app, this project has you covered. -[![GitHub forks](https://img.shields.io/github/forks/ismaestro/angular5-example-app.svg?style=social&label=Fork)](https://github.com/ismaestro/angular5-example-app/fork) -[![GitHub stars](https://img.shields.io/github/stars/ismaestro/angular5-example-app.svg?style=social&label=Star)](https://github.com/ismaestro/angular5-example-app) +- ✅ **Beginner-friendly**: Clean code, best practices, and detailed structure. +- ✅ **Production-ready**: Real APIs, authentication, modular architecture. +- ✅ **Feature-rich**: Not just a to-do list! Real-world logic you’ll use in any serious project. +- ✅ **Made with love**: Built by passionate developers, for the community. -### DEMO +--- -Live DEMO [here](http://angularexampleapp.com/)! +## 🛠️ Getting Started -[![angular-example-app](http://thumbsnap.com/i/aIpN07i3.png?0812)](http://angularexampleapp.com/) +```bash +npm i +npm start +``` -## Usage +--- -**Warning: we strongly recommend node >=v6.9.0 and npm >=3.0.0** +## 🚨 Live Status -`npm i` - Installs everything needed +[![Netlify Status](https://api.netlify.com/api/v1/badges/f593abee-25b9-424a-bd54-6bc52aff7230/deploy-status)](https://app.netlify.com/sites/angular-example-app/deploys) -`npm start` - Starts the app. Then, go to `localhost:4200` +--- -`npm run test` - Runs unit tests with karma and jasmine +## 🌍 Backend API -`npm run e2e` - Runs end to end tests +This app connects to a real backend powered by NestJS, PostgreSQL, and Prisma, deployed on Fly.io. You can explore the codebase [here](https://github.com/Ismaestro/nestjs-example-app). -`npm run e2e:home` - Runs end to end tests only for the home directory. There are more commands like this one, for development purposes +--- -`npm run build` - Builds the app for production +## ✨ Features -`npm run lint` - Runs the linter (tslint) +| | | +| ----------------------- | --------------------------------------------------- | +| ✅ Angular 20 | Using the latest version | +| ✅ Internationalization | i18n with English and Spanish | +| ✅ Authentication | JWT-based, real login flow | +| ✅ Routing & Guards | Functional guards with lazy-loaded routes | +| ✅ Responsive Design | Mobile-first layouts with Flexbox and Grid | +| ✅ APIs | Example integration with the PokeAPI | +| ✅ Shoelace Components | Accessible and modern UI components | +| ✅ NgOptimizedImage | Fast image loading with Angular's directive | +| ✅ SSG & Prerendering | Static Site Generation for main and Pokémon pages | +| ✅ Animations | Smooth transitions with Angular Animations | +| ✅ Clean Architecture | Modular folder structure following best practices | +| ✅ SASS & BEM | Maintainable and scalable styling | +| ✅ Tests E2E | Using Playwright and also with best practices (POM) | +| ✅ Lighthouse | Verifying web performance with defined thresholds | +| 🧪 Testing | Unit (coming soon!) | -`npm run ci` - Executes linter and tests +--- -`npm run deploy` - Builds the app and deploy it to Github pages (angular-cli-ghpages) (fork to do this and remove CNAME file) +## 🧩 Roadmap -`npm run sme` - Builds and runs source map explorer, really cool :) +- [ ] Component & service testing with Angular Testing Library +- [ ] End-to-End tests with Playwright -`npm run release` - Creates a new release using standard-version +--- -`npm run docker` - Builds the docker image and run the container +## 🐛 Found a bug? Got an idea? -**Windows: use precompilation to speed up** +We love feedback! If something doesn't work or you think of a cool new feature, [open an issue](https://github.com/Ismaestro/angular-example-app/issues/new) or contribute directly with a PR. -`tsc --project tsconfig.json` -`npm start` +--- -## Features -* Responsive layout (flex layout module) -* Internationalization -* Lazy loading modules -* Interceptors and Events (Progress bar active, if a request is pending) -* CRUD: create, update and remove heroes -* Search bar, to look for heroes -* Modal and toasts (snakbar)! -* Unit tests with Jasmine and Karma including code coverage -* End-to-end tests with Protractor -* ES6 Promises -* Github pages deploy ready -* Google Tag Manager -* Modernizr (browser features detection) -* Following the [best practices](https://angular.io/guide/styleguide)! +## 🤝 Contributors -## Docker + + + + + + + + + + + + + + + + + + + + + + + +
Tom Gamull
Tom Gamull

🚇
mansyaprime
mansyaprime

💻
codeimmortal
codeimmortal

💻
tomasfse
tomasfse

💻
golu
golu

💻
rancyr
rancyr

💻
codingphasedotcom
codingphasedotcom

💻
Max
Max

💻
Karajan
Karajan

💻
Carl Chan
Carl Chan

💻
Dyeimys Franco Correa
Dyeimys Franco Correa

💻
Anartz Mugika Ledo
Anartz Mugika Ledo

💻
OrlPep
OrlPep

💻
-You can build the image and run the container with Docker. The configuration is in the nginx folder if you want to change it. + + -`docker build -t angularexampleapp .` + -`docker run -d -p 4200:80 angularexampleapp` - -Thanks to [avatsaev](https://github.com/avatsaev/angular4-docker-example)! - -## Travis CI -We use Travis CI to run this tasks in order: -* Linter -* Tests -* Build for production -* Deploy in Github pages -:) - -## Contributing -- Please see the CONTRIBUTING file for guidelines. -- Create **pull requests, submit bugs, suggest new features** or documentation updates :wrench: - -## Server - -This repo is using an API which is [a minimal app](https://github.com/Ismaestro/nodejs-example-app) in NodeJS deployed on Heroku and using PostGreSQL, to create, modify and delete heroes. - -## Contributors - -Thanks to all contributors and their support! +--- ## License -MIT - -Enjoy :metal: - -We are always happy to hear your feedback! +This project is licensed under the [MIT License](https://github.com/Ismaestro/angular-example-app/blob/master/LICENSE). diff --git a/angular.json b/angular.json new file mode 100755 index 00000000..c9b2a5fa --- /dev/null +++ b/angular.json @@ -0,0 +1,170 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "angularexampleapp": { + "projectType": "application", + "schematics": { + "@schematics/angular:component": { + "style": "scss", + "standalone": true, + "changeDetection": "OnPush" + } + }, + "root": "", + "sourceRoot": "src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular/build:application", + "options": { + "outputPath": "dist/angularexampleapp", + "index": "src/index.html", + "browser": "src/main.ts", + "polyfills": ["@angular/localize/init"], + "tsConfig": "tsconfig.app.json", + "i18nMissingTranslation": "warning", + "inlineStyleLanguage": "scss", + "assets": [ + { + "glob": "**/*", + "input": "public", + "output": "" + } + ], + "styles": ["@shoelace-style/shoelace/dist/themes/light.css", "src/styles/global.scss"], + "stylePreprocessorOptions": { + "includePaths": ["src/styles"] + }, + "outputMode": "static", + "server": "src/main.server.ts", + "ssr": false + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kB", + "maximumError": "1MB" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kB", + "maximumError": "4kB" + } + ], + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.production.ts" + } + ], + "outputHashing": "all", + "localize": ["es", "en"] + }, + "production-sourcemaps": { + "sourceMap": true, + "outputHashing": "all" + }, + "development-en": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true + }, + "development-es": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true, + "localize": ["es"] + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular/build:dev-server", + "configurations": { + "production": { + "buildTarget": "angularexampleapp:build:production" + }, + "development-en": { + "buildTarget": "angularexampleapp:build:development-en" + }, + "development-es": { + "buildTarget": "angularexampleapp:build:development-es" + } + }, + "defaultConfiguration": "development-en" + }, + "extract-i18n": { + "builder": "ng-extract-i18n-merge:ng-extract-i18n-merge", + "options": { + "buildTarget": "angularexampleapp:build", + "format": "xlf", + "outputPath": "src/locale", + "targetFiles": ["messages.es.xlf"], + "prettyNestedTags": true, + "sort": "stableAppendNew" + } + }, + "test": { + "builder": "@angular/build:unit-test", + "options": { + "tsConfig": "tsconfig.spec.json", + "buildTarget": "::development-es", + "runner": "vitest" + } + }, + "lint": { + "builder": "@angular-eslint/builder:lint", + "options": { + "lintFilePatterns": ["src/**/*.ts", "src/**/*.html"] + } + } + }, + "i18n": { + "sourceLocale": { + "code": "en", + "subPath": "" + }, + "locales": { + "es": { + "translation": "src/locale/messages.es.xlf", + "subPath": "es" + } + } + } + } + }, + "cli": { + "analytics": "49e1320d-9031-4d19-bb7c-2d84a0f2fd49", + "schematicCollections": ["@angular-eslint/schematics"] + }, + "schematics": { + "@schematics/angular:component": { + "type": "component" + }, + "@schematics/angular:directive": { + "type": "directive" + }, + "@schematics/angular:service": { + "type": "service" + }, + "@schematics/angular:guard": { + "typeSeparator": "." + }, + "@schematics/angular:interceptor": { + "typeSeparator": "." + }, + "@schematics/angular:module": { + "typeSeparator": "." + }, + "@schematics/angular:pipe": { + "typeSeparator": "." + }, + "@schematics/angular:resolver": { + "typeSeparator": "." + } + } +} diff --git a/commitlint.config.js b/commitlint.config.js new file mode 100755 index 00000000..84dcb122 --- /dev/null +++ b/commitlint.config.js @@ -0,0 +1,3 @@ +module.exports = { + extends: ['@commitlint/config-conventional'], +}; diff --git a/e2e/fixtures/base.fixture.ts b/e2e/fixtures/base.fixture.ts new file mode 100644 index 00000000..91e8f0bb --- /dev/null +++ b/e2e/fixtures/base.fixture.ts @@ -0,0 +1,10 @@ +import type { Page } from '@playwright/test'; +import { test as base } from '@playwright/test'; + +type AppFixtures = { + page: Page; +}; + +export const test = base.extend({}); + +export { expect } from '@playwright/test'; diff --git a/e2e/heroes-list/heroes-list-page.e2e-spec.ts b/e2e/heroes-list/heroes-list-page.e2e-spec.ts deleted file mode 100644 index 4225187d..00000000 --- a/e2e/heroes-list/heroes-list-page.e2e-spec.ts +++ /dev/null @@ -1,14 +0,0 @@ -import {HeroesListPage} from './heroes-list-page'; - -describe('Home page', function () { - let page; - - beforeEach(() => { - page = new HeroesListPage(); - }); - - it('should contains equal or more heroes than default ones', () => { - HeroesListPage.navigateTo(); - expect(HeroesListPage.getNumberHeroes()).toBeGreaterThanOrEqual(8); - }); -}); diff --git a/e2e/heroes-list/heroes-list-page.ts b/e2e/heroes-list/heroes-list-page.ts deleted file mode 100644 index 4f1b8d03..00000000 --- a/e2e/heroes-list/heroes-list-page.ts +++ /dev/null @@ -1,12 +0,0 @@ -import {browser, by, element} from 'protractor'; -import {AppConfig} from '../../src/app/config/app.config'; - -export class HeroesListPage { - static navigateTo(): any { - return browser.get(AppConfig.routes.heroes); - } - - static getNumberHeroes(): any { - return element.all(by.css('#left mat-list-item')).count(); - } -} diff --git a/e2e/home/home-page.e2e-spec.ts b/e2e/home/home-page.e2e-spec.ts deleted file mode 100644 index 8a61fc8b..00000000 --- a/e2e/home/home-page.e2e-spec.ts +++ /dev/null @@ -1,15 +0,0 @@ -import {AppConfig} from '../../src/app/config/app.config'; -import {HomePage} from './home-page'; - -describe('Home page', function () { - let page; - - beforeEach(() => { - page = new HomePage(); - }); - - it('should contains heroes limit', () => { - HomePage.navigateTo(); - expect(HomePage.getNumberHeroes()).toBe(AppConfig.topHeroesLimit); - }); -}); diff --git a/e2e/home/home-page.ts b/e2e/home/home-page.ts deleted file mode 100644 index 76d9b7b9..00000000 --- a/e2e/home/home-page.ts +++ /dev/null @@ -1,11 +0,0 @@ -import {browser, by, element} from 'protractor'; - -export class HomePage { - static navigateTo(): any { - return browser.get('/'); - } - - static getNumberHeroes(): any { - return element.all(by.css('#heroes-list mat-card')).count(); - } -} diff --git a/e2e/pages/header.ps.ts b/e2e/pages/header.ps.ts new file mode 100644 index 00000000..1c614344 --- /dev/null +++ b/e2e/pages/header.ps.ts @@ -0,0 +1,19 @@ +import type { Page } from '@playwright/test'; +import { expect } from '@playwright/test'; +import type { Locator } from 'playwright'; + +export class HeaderComponent { + readonly signInLink: Locator; + readonly signUpLink: Locator; + + // eslint-disable-next-line @typescript-eslint/parameter-properties + constructor(private readonly page: Page) { + this.signInLink = this.page.getByRole('link', { name: 'Log in' }); + this.signUpLink = this.page.getByRole('link', { name: 'Register' }); + } + + async expectLinksVisible() { + await expect(this.signInLink).toBeVisible(); + await expect(this.signUpLink).toBeVisible(); + } +} diff --git a/e2e/pages/home.po.ts b/e2e/pages/home.po.ts new file mode 100644 index 00000000..e3d34a49 --- /dev/null +++ b/e2e/pages/home.po.ts @@ -0,0 +1,33 @@ +import type { Page } from '@playwright/test'; +import { expect } from '@playwright/test'; +import type { Locator } from 'playwright'; +import { HeaderComponent } from './header.ps'; + +export class HomePage { + readonly header: HeaderComponent; + private readonly title: Locator; + + // eslint-disable-next-line @typescript-eslint/parameter-properties + constructor(private readonly page: Page) { + this.header = new HeaderComponent(page); + this.title = page.locator('h1'); + } + + async goto() { + await this.page.goto('/'); + } + + async expectLoaded() { + await expect(this.title).toContainText('Angular Example App'); + } + + async expectNavigationToLogin() { + await expect(this.page).toHaveURL(/auth\/log-in$/u); + await expect(this.page.locator('[data-testid="login-title"]')).toBeVisible(); + } + + async expectNavigationToRegister() { + await expect(this.page).toHaveURL(/auth\/register$/u); + await expect(this.page.locator('[data-testid="register-title"]')).toBeVisible(); + } +} diff --git a/e2e/tests/home.spec.ts b/e2e/tests/home.spec.ts new file mode 100644 index 00000000..0c162537 --- /dev/null +++ b/e2e/tests/home.spec.ts @@ -0,0 +1,26 @@ +import { test } from '../fixtures/base.fixture'; +import { HomePage } from '../pages/home.po'; + +test.describe('Home page', () => { + let home: HomePage; + + test.beforeEach(async ({ page }) => { + home = new HomePage(page); + await home.goto(); + }); + + test('displays main title and navigation links', async () => { + await home.expectLoaded(); + await home.header.expectLinksVisible(); + }); + + test('navigates to the login page from the header', async () => { + await home.header.signInLink.click(); + await home.expectNavigationToLogin(); + }); + + test('navigates to the register page from the header', async () => { + await home.header.signUpLink.click(); + await home.expectNavigationToRegister(); + }); +}); diff --git a/e2e/tsconfig.e2e.json b/e2e/tsconfig.e2e.json deleted file mode 100644 index 1d9e5edf..00000000 --- a/e2e/tsconfig.e2e.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "outDir": "../out-tsc/e2e", - "baseUrl": "./", - "module": "commonjs", - "target": "es5", - "types": [ - "jasmine", - "jasminewd2", - "node" - ] - } -} diff --git a/e2e/utils/environment.ts b/e2e/utils/environment.ts new file mode 100644 index 00000000..45703f52 --- /dev/null +++ b/e2e/utils/environment.ts @@ -0,0 +1 @@ +export const BASE_URL = process.env['BASE_URL'] ?? 'https://angular-example-app.netlify.app/'; diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 00000000..f49f6bf5 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,164 @@ +import eslint from '@eslint/js'; +import tsEslint from 'typescript-eslint'; +import angular from 'angular-eslint'; +import eslintComments from 'eslint-plugin-eslint-comments'; +import typescriptEslint from '@typescript-eslint/eslint-plugin'; +import eslintConfigPrettier from 'eslint-config-prettier'; +import pluginPromise from 'eslint-plugin-promise'; +import eslintPluginUnicorn from 'eslint-plugin-unicorn'; + +const APP_PREFIX = 'app'; + +export default tsEslint.config( + { + files: ['**/*.ts'], + languageOptions: { + ecmaVersion: 5, + sourceType: 'script', + parserOptions: { + project: ['tsconfig.eslint.json'], + createDefaultProgram: false, + }, + }, + extends: [ + eslint.configs.all, + ...tsEslint.configs.all, + ...angular.configs.tsAll, + eslintPluginUnicorn.configs['flat/all'], + pluginPromise.configs['flat/recommended'], + ], + plugins: { + typescriptEslint, + 'eslint-comments': eslintComments, + }, + processor: angular.processInlineTemplates, + rules: { + complexity: [ + 'error', + { + max: 5, + }, + ], + 'max-len': [ + 'error', + { + code: 300, + }, + ], + 'max-lines-per-function': [ + 'error', + { + max: 30, + }, + ], + 'no-plusplus': ['error', { 'allowForLoopAfterthoughts': true }], + '@typescript-eslint/max-params': [ + 'error', + { + max: 2, + }, + ], + '@typescript-eslint/consistent-type-definitions': ['error', 'type'], + '@typescript-eslint/explicit-member-accessibility': [ + 'error', + { + accessibility: 'no-public', + }, + ], + '@angular-eslint/directive-selector': [ + 'error', + { + type: 'attribute', + prefix: APP_PREFIX, + style: 'camelCase', + }, + ], + '@angular-eslint/component-selector': [ + 'error', + { + type: 'element', + prefix: APP_PREFIX, + style: 'kebab-case', + }, + ], + 'promise/no-multiple-resolved': 'error', + 'promise/spec-only': 'error', + 'eslint-comments/no-use': [ + 'error', + { 'allow': ['eslint-disable-next-line', 'eslint-disable', 'eslint-enable'] }, + ], + 'no-warning-comments': ['error', { 'terms': ['warn'] }], + 'capitalized-comments': ['error', 'always', { 'ignoreConsecutiveComments': true }], + + // Off + 'max-params': 'off', + 'sort-keys': 'off', + 'no-underscore-dangle': 'off', + 'sort-imports': 'off', + 'new-cap': 'off', + 'strict': 'off', + 'one-var': 'off', + 'no-undefined': 'off', + 'no-inline-comments': 'off', + 'no-void': 'off', + 'func-style': 'off', + 'no-duplicate-imports': 'off', + 'no-implicit-coercion': 'off', + 'no-ternary': 'off', + 'no-implicit-globals': 'off', + '@angular-eslint/no-experimental': 'off', + '@angular-eslint/no-developer-preview': 'off', + '@angular-eslint/prefer-standalone': 'off', + '@angular-eslint/prefer-standalone-component': 'off', + '@angular-eslint/runtime-localize': 'off', + '@angular-eslint/no-host-metadata-property': 'off', + '@typescript-eslint/no-unsafe-type-assertion': 'off', + '@typescript-eslint/switch-exhaustiveness-check': 'off', + '@typescript-eslint/no-use-before-define': 'off', + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/prefer-readonly-parameter-types': 'off', + '@typescript-eslint/unbound-method': 'off', + '@typescript-eslint/no-unsafe-argument': 'off', + '@typescript-eslint/no-magic-numbers': 'off', + '@typescript-eslint/use-unknown-in-catch-callback-variable': 'off', + '@typescript-eslint/no-extraneous-class': 'off', + '@typescript-eslint/strict-boolean-expressions': 'off', + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/init-declarations': 'off', + '@typescript-eslint/naming-convention': 'off', + '@typescript-eslint/member-ordering': 'off', + '@typescript-eslint/class-methods-use-this': 'off', + 'unicorn/prefer-top-level-await': 'off', + 'unicorn/no-null': 'off', + 'unicorn/prefer-global-this': 'off', + 'unicorn/consistent-function-scoping': 'off', + 'unicorn/prefer-dom-node-dataset': 'off', + }, + }, + { + files: ['**/*.spec.ts'], + rules: { + 'max-lines-per-function': 'off', + }, + }, + { + files: ['**/*.html'], + extends: [...angular.configs.templateAll], + rules: { + '@angular-eslint/template/no-call-expression': 'off', + '@angular-eslint/template/prefer-template-literal': 'off', + '@angular-eslint/template/i18n': [ + 'error', + { + 'checkId': false, + 'checkAttributes': false, + }, + ], + }, + }, + eslintConfigPrettier, +); diff --git a/karma.conf.js b/karma.conf.js deleted file mode 100644 index 15f9a357..00000000 --- a/karma.conf.js +++ /dev/null @@ -1,50 +0,0 @@ -module.exports = function (config) { - config.set({ - basePath: '', - frameworks: ['jasmine', '@angular/cli'], - plugins: [ - require('karma-jasmine'), - require('karma-chrome-launcher'), - require('karma-remap-istanbul'), - require('@angular/cli/plugins/karma'), - require('karma-jasmine-html-reporter'), - require('karma-coverage-istanbul-reporter'), - require('@angular/cli/plugins/karma') - ], - client: { - clearContext: false - }, - files: [ - {pattern: './node_modules/@angular/material/prebuilt-themes/indigo-pink.css', included: true, watched: true}, - {pattern: './src/test.ts', watched: false} - ], - preprocessors: { - './src/test.ts': ['@angular/cli'] - }, - mime: { - 'text/x-typescript': ['ts', 'tsx'] - }, - coverageIstanbulReporter: { - reports: ['html', 'lcovonly'], - fixWebpackSourcePaths: true - }, - remapIstanbulReporter: { - reports: { - html: 'coverage', - lcovonly: './coverage/coverage.lcov' - } - }, - angularCli: { - environment: 'dev' - }, - reporters: config.angularCli && config.angularCli.codeCoverage - ? ['progress', 'coverage-istanbul'] - : ['progress', 'kjhtml'], - port: 9876, - colors: true, - logLevel: config.LOG_INFO, - autoWatch: true, - browsers: ['Chrome'], - singleRun: false - }); -}; diff --git a/lighthouse.config.json b/lighthouse.config.json new file mode 100644 index 00000000..446799e3 --- /dev/null +++ b/lighthouse.config.json @@ -0,0 +1,11 @@ +{ + "distPath": "dist/angularexampleapp/browser", + "reportPath": "dist/lighthouse-report.html", + "port": 4200, + "thresholds": { + "performance": 73, + "accessibility": 95, + "best-practices": 100, + "seo": 92 + } +} diff --git a/nginx/default.conf b/nginx/default.conf deleted file mode 100644 index 307f969a..00000000 --- a/nginx/default.conf +++ /dev/null @@ -1,22 +0,0 @@ -server { - listen 80; - - sendfile on; - - default_type application/octet-stream; - - gzip on; - gzip_http_version 1.1; - gzip_disable "MSIE [1-6]\."; - gzip_min_length 256; - gzip_vary on; - gzip_proxied expired no-cache no-store private auth; - gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript; - gzip_comp_level 9; - - root /usr/share/nginx/html; - - location / { - try_files $uri $uri/ /index.html =404; - } -} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 22164a2b..e7b5cac0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11770 +1,18144 @@ { - "name": "angular-example-app", - "version": "5.1.0", - "lockfileVersion": 1, + "name": "angularexampleapp", + "version": "19.1.0", + "lockfileVersion": 3, "requires": true, - "dependencies": { - "@angular-devkit/build-optimizer": { - "version": "0.0.35", - "resolved": "http://npm.trustu.pre/@angular-devkit/build-optimizer/-/build-optimizer-0.0.35/3aadad1d7e9ffc7dcd106fda8a5670465936562c.tgz", - "integrity": "sha512-7JxZZAYFSCc0tP6+NrRn3b2Cd1b9d+a3+OfwVNyNsNd2unelqUMko2hm0KLbC8BXcXt/OILg1E/ZgLAXSS47nw==", - "dev": true, - "requires": { - "loader-utils": "1.1.0", - "source-map": "0.5.7", - "typescript": "2.6.2", - "webpack-sources": "1.1.0" + "packages": { + "": { + "name": "angularexampleapp", + "version": "19.1.0", + "dependencies": { + "@angular/animations": "20.3.7", + "@angular/common": "20.3.7", + "@angular/compiler": "20.3.7", + "@angular/core": "20.3.7", + "@angular/forms": "20.3.7", + "@angular/localize": "20.3.7", + "@angular/platform-browser": "20.3.7", + "@angular/platform-browser-dynamic": "20.3.7", + "@angular/platform-server": "20.3.7", + "@angular/router": "20.3.7", + "@angular/ssr": "20.3.7", + "ngx-progressbar": "14.0.0", + "rxjs": "7.8.2", + "tslib": "2.8.1" }, + "devDependencies": { + "@angular-eslint/builder": "20.5.0", + "@angular-eslint/eslint-plugin": "20.5.0", + "@angular-eslint/eslint-plugin-template": "20.5.0", + "@angular-eslint/schematics": "20.5.0", + "@angular-eslint/template-parser": "20.5.0", + "@angular/build": "20.3.7", + "@angular/cli": "20.3.7", + "@angular/compiler-cli": "20.3.7", + "@commitlint/cli": "20.1.0", + "@commitlint/config-conventional": "20.0.0", + "@eslint/js": "9.38.0", + "@ngrx/component": "20.1.0", + "@playwright/test": "1.56.1", + "@shoelace-style/shoelace": "2.20.1", + "@types/express": "4.17.17", + "@types/node": "24.9.2", + "@types/validator": "13.15.4", + "@typescript-eslint/eslint-plugin": "8.46.2", + "@typescript-eslint/parser": "8.46.2", + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/utils": "8.46.2", + "@vitest/coverage-v8": "4.0.4", + "angular-eslint": "20.5.0", + "axe-core": "4.11.0", + "chrome-launcher": "^1.2.1", + "eslint": "9.38.0", + "eslint-config-prettier": "10.1.8", + "eslint-plugin-eslint-comments": "3.2.0", + "eslint-plugin-prettier": "5.5.4", + "eslint-plugin-promise": "7.2.1", + "eslint-plugin-unicorn": "62.0.0", + "husky": "9.1.7", + "jsdom": "27.0.1", + "lighthouse": "^12.8.2", + "lint-staged": "16.2.6", + "ng-extract-i18n-merge": "3.1.0", + "playwright": "1.56.1", + "postcss-scss": "4.0.9", + "prettier": "3.6.2", + "prettier-eslint": "16.4.2", + "serve": "^14.2.5", + "stylelint": "16.25.0", + "stylelint-config-recess-order": "7.4.0", + "stylelint-config-standard-scss": "16.0.0", + "stylelint-order": "7.0.0", + "ts-loader": "9.5.4", + "typescript": "5.9.3", + "typescript-eslint": "8.46.2", + "vitest": "4.0.4" + } + }, + "node_modules/@algolia/abtesting": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.1.0.tgz", + "integrity": "sha512-sEyWjw28a/9iluA37KLGu8vjxEIlb60uxznfTUmXImy7H5NvbpSO6yYgmgH5KiD7j+zTUUihiST0jEP12IoXow==", + "dev": true, + "license": "MIT", "dependencies": { - "typescript": { - "version": "2.6.2", - "resolved": "http://npm.trustu.pre/typescript/-/typescript-2.6.2/3c5b6fd7f6de0914269027f03c0946758f7673a4.tgz", - "integrity": "sha1-PFtv1/beCRQmkCfwPAlGdY92c6Q=", - "dev": true - } + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" } }, - "@angular-devkit/core": { - "version": "0.0.22", - "resolved": "http://npm.trustu.pre/@angular-devkit/core/-/core-0.0.22/e90f46bf7ff47d260a767959267bc65ffee39ef1.tgz", - "integrity": "sha512-zxrNtTiv60liye/GGeRMnnGgLgAWoqlMTfPLMW0D1qJ4bbrPHtme010mpxS3QL4edcDtQseyXSFCnEkuo2MrRw==", + "node_modules/@algolia/client-abtesting": { + "version": "5.35.0", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.35.0.tgz", + "integrity": "sha512-uUdHxbfHdoppDVflCHMxRlj49/IllPwwQ2cQ8DLC4LXr3kY96AHBpW0dMyi6ygkn2MtFCc6BxXCzr668ZRhLBQ==", "dev": true, - "requires": { - "source-map": "0.5.7" + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" } }, - "@angular-devkit/schematics": { - "version": "0.0.41", - "resolved": "http://npm.trustu.pre/@angular-devkit/schematics/-/schematics-0.0.41/9a066e442bdf10de4a093d6dd33a58e600d1b101.tgz", - "integrity": "sha512-eSXyRLM7g9NvNUwDd71iPjHEL0Zutg9PcLUSCrwFXR3Z8S6iStO2FpZACNmz5/Y7ksWLy5/1wjLuDJCHS4X/ig==", + "node_modules/@algolia/client-analytics": { + "version": "5.35.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.35.0.tgz", + "integrity": "sha512-SunAgwa9CamLcRCPnPHx1V2uxdQwJGqb1crYrRWktWUdld0+B2KyakNEeVn5lln4VyeNtW17Ia7V7qBWyM/Skw==", "dev": true, - "requires": { - "@angular-devkit/core": "0.0.22", - "@ngtools/json-schema": "1.1.0", - "@schematics/schematics": "0.0.10", - "minimist": "1.2.0", - "rxjs": "5.5.5" + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" } }, - "@angular/animations": { - "version": "5.1.0", - "resolved": "http://npm.trustu.pre/@angular/animations/-/animations-5.1.0/439135ed56355ec779791bf3ea7de1c711cd2185.tgz", - "integrity": "sha512-s0tV6y2D16CQAcXjv8CN8AahHb+LoWm9KAUkxvSJ18ZZQweuAY4T8jlRB95ODRFFKfjwyRD9HqXKUC5yHmG9ww==", - "requires": { - "tslib": "1.8.1" + "node_modules/@algolia/client-common": { + "version": "5.35.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.35.0.tgz", + "integrity": "sha512-ipE0IuvHu/bg7TjT2s+187kz/E3h5ssfTtjpg1LbWMgxlgiaZIgTTbyynM7NfpSJSKsgQvCQxWjGUO51WSCu7w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.0.0" } }, - "@angular/cdk": { - "version": "5.0.0", - "resolved": "http://npm.trustu.pre/@angular/cdk/-/cdk-5.0.0/d7cb3294c9e3cc37d3d41c33e6beb044e84636c3.tgz", - "integrity": "sha512-+u67Bns23tuCUGUCWhqkR/+onCwB4ObRURUv7ar2+BHw5VIvzML+IOCi1BJRF7gqvL+IVYQpLuY2cQh0J2SbBQ==", + "node_modules/@algolia/client-insights": { + "version": "5.35.0", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.35.0.tgz", + "integrity": "sha512-UNbCXcBpqtzUucxExwTSfAe8gknAJ485NfPN6o1ziHm6nnxx97piIbcBQ3edw823Tej2Wxu1C0xBY06KgeZ7gA==", "dev": true, - "requires": { - "tslib": "1.8.1" + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" } }, - "@angular/cli": { - "version": "1.6.0", - "resolved": "http://npm.trustu.pre/@angular/cli/-/cli-1.6.0/eba521f6a8e4c2db628300baddbc4da13ca96998.tgz", - "integrity": "sha512-X049QAgSKy5J48byyo3T6iBTHubTC66QBMshMpTT7PWAaSq3HpPPE1xW0WwgFIXZWMQIsmncaqPwmnFmxljUdw==", - "dev": true, - "requires": { - "@angular-devkit/build-optimizer": "0.0.35", - "@angular-devkit/schematics": "0.0.41", - "@ngtools/json-schema": "1.1.0", - "@ngtools/webpack": "1.9.0", - "@schematics/angular": "0.1.10", - "autoprefixer": "6.7.7", - "chalk": "2.2.2", - "circular-dependency-plugin": "4.3.0", - "common-tags": "1.5.1", - "copy-webpack-plugin": "4.2.3", - "core-object": "3.1.5", - "css-loader": "0.28.7", - "cssnano": "3.10.0", - "denodeify": "1.2.1", - "ember-cli-string-utils": "1.1.0", - "exports-loader": "0.6.4", - "extract-text-webpack-plugin": "3.0.2", - "file-loader": "1.1.5", - "fs-extra": "4.0.3", - "glob": "7.1.2", - "html-webpack-plugin": "2.30.1", - "istanbul-instrumenter-loader": "2.0.0", - "karma-source-map-support": "1.2.0", - "less": "2.7.3", - "less-loader": "4.0.5", - "license-webpack-plugin": "1.1.1", - "lodash": "4.17.4", - "memory-fs": "0.4.1", - "minimatch": "3.0.4", - "node-modules-path": "1.0.1", - "node-sass": "4.7.2", - "nopt": "4.0.1", - "opn": "5.1.0", - "portfinder": "1.0.13", - "postcss-custom-properties": "6.2.0", - "postcss-loader": "2.0.9", - "postcss-url": "7.3.0", - "raw-loader": "0.5.1", - "resolve": "1.5.0", - "rxjs": "5.5.5", - "sass-loader": "6.0.6", - "semver": "5.4.1", - "silent-error": "1.1.0", - "source-map-loader": "0.2.3", - "source-map-support": "0.4.18", - "style-loader": "0.13.2", - "stylus": "0.54.5", - "stylus-loader": "3.0.1", - "uglifyjs-webpack-plugin": "1.1.2", - "url-loader": "0.6.2", - "webpack": "3.10.0", - "webpack-concat-plugin": "1.4.2", - "webpack-dev-middleware": "1.12.2", - "webpack-dev-server": "2.9.7", - "webpack-merge": "4.1.1", - "webpack-sources": "1.1.0", - "webpack-subresource-integrity": "1.0.3", - "zone.js": "0.8.18" - } - }, - "@angular/common": { - "version": "5.1.0", - "resolved": "http://npm.trustu.pre/@angular/common/-/common-5.1.0/88b586e0aff6a93b8de08cce1e14c0e65fde5a56.tgz", - "integrity": "sha512-J6E0OfTJJGcyoKU51ZucsDFV40YEAPgP6VCIPYECgOFHxrqg6O1ZFZSD1fdviMXMLVEFCi6Fy6IB7GJyiWgDIA==", - "requires": { - "tslib": "1.8.1" + "node_modules/@algolia/client-personalization": { + "version": "5.35.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.35.0.tgz", + "integrity": "sha512-/KWjttZ6UCStt4QnWoDAJ12cKlQ+fkpMtyPmBgSS2WThJQdSV/4UWcqCUqGH7YLbwlj3JjNirCu3Y7uRTClxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" } }, - "@angular/compiler": { - "version": "5.1.0", - "resolved": "http://npm.trustu.pre/@angular/compiler/-/compiler-5.1.0/23fe2914061487fcc909616b4dc5c24c5a8d47a1.tgz", - "integrity": "sha512-iyFQqmhKNRSc9JRx7ty6z/wCsypjpbRu0QR6q2LMa6imuCt9qLHOvTajBQExRB8guqd/LTVDG4WiYY1lf8iO2w==", - "requires": { - "tslib": "1.8.1" + "node_modules/@algolia/client-query-suggestions": { + "version": "5.35.0", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.35.0.tgz", + "integrity": "sha512-8oCuJCFf/71IYyvQQC+iu4kgViTODbXDk3m7yMctEncRSRV+u2RtDVlpGGfPlJQOrAY7OONwJlSHkmbbm2Kp/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" } }, - "@angular/compiler-cli": { - "version": "5.1.0", - "resolved": "http://npm.trustu.pre/@angular/compiler-cli/-/compiler-cli-5.1.0/9512abf2515c7d3b7e9ee45650801ee78d63223e.tgz", - "integrity": "sha512-M1//TjgcckkwTMeGTRe7mvFY+00NxaLqlsObnGA9+R3T9cpWeLpy5iVD444Wdxl5MA/Bo3TgGNmeXZsJvh466w==", + "node_modules/@algolia/client-search": { + "version": "5.35.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.35.0.tgz", + "integrity": "sha512-FfmdHTrXhIduWyyuko1YTcGLuicVbhUyRjO3HbXE4aP655yKZgdTIfMhZ/V5VY9bHuxv/fGEh3Od1Lvv2ODNTg==", "dev": true, - "requires": { - "chokidar": "1.7.0", - "minimist": "1.2.0", - "reflect-metadata": "0.1.10", - "tsickle": "0.25.5" + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" } }, - "@angular/core": { - "version": "5.1.0", - "resolved": "http://npm.trustu.pre/@angular/core/-/core-5.1.0/6f7596ad780418cecac527ae0508cfc1a36383a0.tgz", - "integrity": "sha512-duObjve+INoz4wWuqcaJzl1isUyI37RtRblTFXgZBp2n2n0nXJq1CubcfgxQhMMR2d64xWLKg9+d34PvnzaMmg==", - "requires": { - "tslib": "1.8.1" + "node_modules/@algolia/ingestion": { + "version": "1.35.0", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.35.0.tgz", + "integrity": "sha512-gPzACem9IL1Co8mM1LKMhzn1aSJmp+Vp434An4C0OBY4uEJRcqsLN3uLBlY+bYvFg8C8ImwM9YRiKczJXRk0XA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" } }, - "@angular/flex-layout": { - "version": "2.0.0-beta.10-4905443", - "resolved": "http://npm.trustu.pre/@angular/flex-layout/-/flex-layout-2.0.0-beta.10-4905443/c62915c8f9a379d1da4800c12e3751e32cc7f855.tgz", - "integrity": "sha512-jjr6mQ3X2vdEQbsyHD/mz1hfTBUUEOZVLFWEz/sbNoeU7uiA4lvqdp/ASrkZydGJHmTDUYrbBE/9kx0lherZ8Q==", - "requires": { - "tslib": "1.8.1" + "node_modules/@algolia/monitoring": { + "version": "1.35.0", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.35.0.tgz", + "integrity": "sha512-w9MGFLB6ashI8BGcQoVt7iLgDIJNCn4OIu0Q0giE3M2ItNrssvb8C0xuwJQyTy1OFZnemG0EB1OvXhIHOvQwWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" } }, - "@angular/forms": { - "version": "5.1.0", - "resolved": "http://npm.trustu.pre/@angular/forms/-/forms-5.1.0/8699c7117a348607d4c7a1deee9caa5ca460c2cb.tgz", - "integrity": "sha512-2sJqtMht/6vbFg6HwFs0MX4pRhgLt7h2pa6oTH4oBoQ2UF67jCuq4cMljDm9SVxrGw0Q83+/eBk3ER4QnKk48Q==", - "requires": { - "tslib": "1.8.1" + "node_modules/@algolia/recommend": { + "version": "5.35.0", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.35.0.tgz", + "integrity": "sha512-AhrVgaaXAb8Ue0u2nuRWwugt0dL5UmRgS9LXe0Hhz493a8KFeZVUE56RGIV3hAa6tHzmAV7eIoqcWTQvxzlJeQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" } }, - "@angular/http": { - "version": "5.1.0", - "resolved": "http://npm.trustu.pre/@angular/http/-/http-5.1.0/59d47c1878896f25e64b9abc700017cff7836710.tgz", - "integrity": "sha512-ltSs52OYnWZJEnbxtHoN5LQiH/37F3GxN6iL0TsQdSlw8HzrdcdbmebKlCpfXwhgcgZC48KWbKSaOs5/xVurfQ==", - "requires": { - "tslib": "1.8.1" + "node_modules/@algolia/requester-browser-xhr": { + "version": "5.35.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.35.0.tgz", + "integrity": "sha512-diY415KLJZ6x1Kbwl9u96Jsz0OstE3asjXtJ9pmk1d+5gPuQ5jQyEsgC+WmEXzlec3iuVszm8AzNYYaqw6B+Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" } }, - "@angular/material": { - "version": "5.0.0", - "resolved": "http://npm.trustu.pre/@angular/material/-/material-5.0.0/2ae8610f36cd6aa5bfe58155ffd96bf44d965162.tgz", - "integrity": "sha512-rzF061r4aYgaf2WI12Jk0+Rd4c1VBObdeMDFWRa3XKIcvETtkz+DXFH1n+vIC4YabfPgrdJRPrzdrZ7fKhRz6g==", + "node_modules/@algolia/requester-fetch": { + "version": "5.35.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.35.0.tgz", + "integrity": "sha512-uydqnSmpAjrgo8bqhE9N1wgcB98psTRRQXcjc4izwMB7yRl9C8uuAQ/5YqRj04U0mMQ+fdu2fcNF6m9+Z1BzDQ==", "dev": true, - "requires": { - "tslib": "1.8.1" + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" } }, - "@angular/platform-browser": { - "version": "5.1.0", - "resolved": "http://npm.trustu.pre/@angular/platform-browser/-/platform-browser-5.1.0/b5373232403d73c355b971cfae8b03191c4f58a2.tgz", - "integrity": "sha512-8aeppeASwQv4Fj3B8KBiFHQrKPrwA328AEhlH/HnggCvt0CFffIs2PSqzJBwnOfFWvhFZk020W51B8jrHLQyoQ==", - "requires": { - "tslib": "1.8.1" + "node_modules/@algolia/requester-node-http": { + "version": "5.35.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.35.0.tgz", + "integrity": "sha512-RgLX78ojYOrThJHrIiPzT4HW3yfQa0D7K+MQ81rhxqaNyNBu4F1r+72LNHYH/Z+y9I1Mrjrd/c/Ue5zfDgAEjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" } }, - "@angular/platform-browser-dynamic": { - "version": "5.1.0", - "resolved": "http://npm.trustu.pre/@angular/platform-browser-dynamic/-/platform-browser-dynamic-5.1.0/60566728dd949c442e064bf8247aa51672411f2b.tgz", - "integrity": "sha512-f6Iv4NCYQwBkNeyInZzja8pg0nfUOrxx5H5rEvr0J1bwag2eDofGVPOftha7LDOLVALVOQQiXQBePATMNLB85g==", - "requires": { - "tslib": "1.8.1" + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" } }, - "@angular/platform-server": { - "version": "5.1.0", - "resolved": "http://npm.trustu.pre/@angular/platform-server/-/platform-server-5.1.0/c28c0e05ce423ec99f299478496dd5066e1b41b6.tgz", - "integrity": "sha512-A81lS8nXEPoR7lRc0n1Up3AKWLcV6t504wnUbgZiwvAUZ2G/LFMnestR1hyOA3jxOFzZ9IhqHQ+fQyqhACMdpA==", + "node_modules/@angular-devkit/architect": { + "version": "0.2003.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2003.7.tgz", + "integrity": "sha512-NGHLfrNQNjwWwvyQomMM1AqRaqH3UU0TwySJh9XlSc9dC/roB5zD2NjLf98K4LfAIfHvDBwkQ+dMo3F556/Xuw==", "dev": true, - "requires": { - "domino": "1.0.30", - "tslib": "1.8.1", - "xhr2": "0.1.4" + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "20.3.7", + "rxjs": "7.8.2" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" } }, - "@angular/router": { - "version": "5.1.0", - "resolved": "http://npm.trustu.pre/@angular/router/-/router-5.1.0/4e7283e34cd3d244899b289d835b830640c7bad9.tgz", - "integrity": "sha512-CtOwqeo1IUk4kUs+tUggkYFmuu2fPTZ1G/GP7YK6gd3Jr9OtkMFB7wkmnd5YcaYo3wVeYkJWZdJQAvj6OakMww==", - "requires": { - "tslib": "1.8.1" + "node_modules/@angular-devkit/core": { + "version": "20.3.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.7.tgz", + "integrity": "sha512-psmcjwYcXve4sLrcdnARc15/Wfd3RpydbtLo9+mViNzk5HQ6L2eEztKl/2QVYMgzZVIa1GfhjwUllVCyLAv3sg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "8.17.1", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.3.1", + "picomatch": "4.0.3", + "rxjs": "7.8.2", + "source-map": "0.7.6" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^4.0.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } } }, - "@ngtools/json-schema": { - "version": "1.1.0", - "resolved": "http://npm.trustu.pre/@ngtools/json-schema/-/json-schema-1.1.0/c3a0c544d62392acc2813a42c8a0dc6f58f86922.tgz", - "integrity": "sha1-w6DFRNYjkqzCgTpCyKDcb1j4aSI=", - "dev": true - }, - "@ngtools/webpack": { - "version": "1.9.0", - "resolved": "http://npm.trustu.pre/@ngtools/webpack/-/webpack-1.9.0/ef395c45be2de9beb93a2b9f5f171d28c344eb10.tgz", - "integrity": "sha512-+9EFOELj9D7zarsKTiIFSbTL2Pr3jYdRJ/cEuSoTxzZUDq7f3urq9ILbcy3DTaDlZs2CCYKwgz+In8QnDtw4fg==", + "node_modules/@angular-devkit/core/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, - "requires": { - "chalk": "2.2.2", - "enhanced-resolve": "3.4.1", - "loader-utils": "1.1.0", - "magic-string": "0.22.4", - "semver": "5.4.1", - "source-map": "0.5.7", - "tree-kill": "1.2.0" + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "@ngx-translate/core": { - "version": "9.0.1", - "resolved": "http://npm.trustu.pre/@ngx-translate/core/-/core-9.0.1/000f2d863c4c94c818e1416ef43cca2c5c0c5848.tgz", - "integrity": "sha1-AA8thjxMlMgY4UFu9DzKLFwMWEg=", - "dev": true - }, - "@ngx-translate/http-loader": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/@ngx-translate/http-loader/-/http-loader-2.0.0/9c16d07cd070c67ada270a2e940281eb826b3f43.tgz", - "integrity": "sha1-nBbQfNBwxnraJwoulAKB64JrP0M=", - "dev": true - }, - "@schematics/angular": { - "version": "0.1.10", - "resolved": "http://npm.trustu.pre/@schematics/angular/-/angular-0.1.10/654d867992277484ed2d82d015b2d3b6ff87b93d.tgz", - "integrity": "sha512-ykq4FL0WTygkpvIcGDxnxHHT2uvJMWseDeAujmfyZpzdT9X22GOTURNo3LjvOIhhVUpMVZvnAYqjV46KqB702g==", + "node_modules/@angular-devkit/core/node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", "dev": true, - "requires": { - "@angular-devkit/core": "0.0.22" + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" } }, - "@schematics/schematics": { - "version": "0.0.10", - "resolved": "http://npm.trustu.pre/@schematics/schematics/-/schematics-0.0.10/b27b49a1a5482dc6c1c93fb3c20371c95874938b.tgz", - "integrity": "sha512-9vr9W1X6oRp42pbiGRIk3L+T6SoFtHlAGrzbh6rbFQDNXT4UCHarqDigow+DEL6PR2ptXZO9WeLcad4it7zNyA==", - "dev": true - }, - "@types/jasmine": { - "version": "2.8.2", - "resolved": "http://npm.trustu.pre/@types/jasmine/-/jasmine-2.8.2/6ae4d8740c0da5d5a627df725b4eed71b8e36668.tgz", - "integrity": "sha512-RabEJPjYMpjWqW1qYj4k0rlgP5uzyguoc0yxedJdq7t5h19MYvqhjCR1evM3raZ/peHRxp1Qfl24iawvkibSug==", - "dev": true - }, - "@types/jasminewd2": { - "version": "2.0.3", - "resolved": "http://npm.trustu.pre/@types/jasminewd2/-/jasminewd2-2.0.3/0d2886b0cbdae4c0eeba55e30792f584bf040a95.tgz", - "integrity": "sha512-hYDVmQZT5VA2kigd4H4bv7vl/OhlympwREUemqBdOqtrYTo5Ytm12a5W5/nGgGYdanGVxj0x/VhZ7J3hOg/YKg==", + "node_modules/@angular-devkit/schematics": { + "version": "20.3.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-20.3.7.tgz", + "integrity": "sha512-DUxcQBPKO69p56ZgIdVfxWyLiSjdcUoD6BH9/nWHp0QiqRAR6GcXP4SFax76JPl2WsiCp4hHZ233Hf69AP1xew==", "dev": true, - "requires": { - "@types/jasmine": "2.8.2" + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "20.3.7", + "jsonc-parser": "3.3.1", + "magic-string": "0.30.17", + "ora": "8.2.0", + "rxjs": "7.8.2" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" } }, - "@types/node": { - "version": "8.0.56", - "resolved": "http://npm.trustu.pre/@types/node/-/node-8.0.56/c4652f88d7a677e26ccc16c1485c282ce28f1ce9.tgz", - "integrity": "sha512-JAlQv3hUWbrnruuTiLDf1scd4F/TBT0LgGEe+BBeF3p/Rc3yL6RV57WJN2nK5i+BshEz1sDllwH0Fzbuo7G4QA==", - "dev": true - }, - "@types/q": { - "version": "0.0.32", - "resolved": "http://npm.trustu.pre/@types/q/-/q-0.0.32/bd284e57c84f1325da702babfc82a5328190c0c5.tgz", - "integrity": "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=", - "dev": true - }, - "@types/selenium-webdriver": { - "version": "2.53.43", - "resolved": "http://npm.trustu.pre/@types/selenium-webdriver/-/selenium-webdriver-2.53.43/2de3d718819bc20165754c4a59afb7e9833f6707.tgz", - "integrity": "sha512-UBYHWph6P3tutkbXpW6XYg9ZPbTKjw/YC2hGG1/GEvWwTbvezBUv3h+mmUFw79T3RFPnmedpiXdOBbXX+4l0jg==", - "dev": true - }, - "JSONStream": { - "version": "1.3.1", - "resolved": "http://npm.trustu.pre/JSONStream/-/JSONStream-1.3.1/707f761e01dae9e16f1bcf93703b78c70966579a.tgz", - "integrity": "sha1-cH92HgHa6eFvG8+TcDt4xwlmV5o=", + "node_modules/@angular-eslint/builder": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-20.5.0.tgz", + "integrity": "sha512-ycrvgomFgitSwzDndo+i3Ob1iu9lAJeuZZ8cwBR4E/RYsCxNm02NLCv5qjQ3ya57yjkh12N6yvjzWnCO9Vdiuw==", "dev": true, - "requires": { - "jsonparse": "1.3.1", - "through": "2.3.8" + "license": "MIT", + "dependencies": { + "@angular-devkit/architect": ">= 0.2000.0 < 0.2100.0", + "@angular-devkit/core": ">= 20.0.0 < 21.0.0" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": "*" } }, - "abbrev": { - "version": "1.1.1", - "resolved": "http://npm.trustu.pre/abbrev/-/abbrev-1.1.1/f8f2c887ad10bf67f634f005b6987fed3179aac8.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true + "node_modules/@angular-eslint/bundled-angular-compiler": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-20.5.0.tgz", + "integrity": "sha512-XjvSZk+G/4rRUOLHHjlHBeS4OnnsLV9G1YtE5OerBB2H4x6nKgUEzpptad3uuL4iYWI9rGaWMLqGPTvyYqw/IA==", + "dev": true, + "license": "MIT" }, - "accepts": { - "version": "1.3.4", - "resolved": "http://npm.trustu.pre/accepts/-/accepts-1.3.4/86246758c7dd6d21a6474ff084a4740ec05eb21f.tgz", - "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", + "node_modules/@angular-eslint/eslint-plugin": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-20.5.0.tgz", + "integrity": "sha512-xpBrx4qCq0mzQ1lmqHa06faxHuKvBZGYb5owP/vTQBr2kZvQ502ENp5vwv+NS04TRKcWht1zHbMfy9rKRdhL5w==", "dev": true, - "requires": { - "mime-types": "2.1.17", - "negotiator": "0.6.1" + "license": "MIT", + "dependencies": { + "@angular-eslint/bundled-angular-compiler": "20.5.0", + "@angular-eslint/utils": "20.5.0", + "ts-api-utils": "^2.1.0" + }, + "peerDependencies": { + "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": "*" } }, - "acorn": { - "version": "5.2.1", - "resolved": "http://npm.trustu.pre/acorn/-/acorn-5.2.1/317ac7821826c22c702d66189ab8359675f135d7.tgz", - "integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w==", - "dev": true - }, - "acorn-dynamic-import": { - "version": "2.0.2", - "resolved": "http://npm.trustu.pre/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2/c752bd210bef679501b6c6cb7fc84f8f47158cc4.tgz", - "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", + "node_modules/@angular-eslint/eslint-plugin-template": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-20.5.0.tgz", + "integrity": "sha512-sX3TgTTGusYv4CjnEWWNvSyVCPmf2WF2LT5NpcKF+4BLcIVLXHdTXKz9H+OxIHeHk9R7QSRkuop/F7DAKyEPhA==", "dev": true, - "requires": { - "acorn": "4.0.13" - }, + "license": "MIT", "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "http://npm.trustu.pre/acorn/-/acorn-4.0.13/105495ae5361d697bd195c825192e1ad7f253787.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", - "dev": true - } + "@angular-eslint/bundled-angular-compiler": "20.5.0", + "@angular-eslint/utils": "20.5.0", + "aria-query": "5.3.2", + "axobject-query": "4.1.0" + }, + "peerDependencies": { + "@angular-eslint/template-parser": "20.5.0", + "@typescript-eslint/types": "^7.11.0 || ^8.0.0", + "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": "*" } }, - "adm-zip": { - "version": "0.4.4", - "resolved": "http://npm.trustu.pre/adm-zip/-/adm-zip-0.4.4/a61ed5ae6905c3aea58b3a657d25033091052736.tgz", - "integrity": "sha1-ph7VrmkFw66lizplfSUDMJEFJzY=", - "dev": true - }, - "after": { - "version": "0.8.2", - "resolved": "http://npm.trustu.pre/after/-/after-0.8.2/fedb394f9f0e02aa9768e702bda23b505fae7e1f.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", - "dev": true - }, - "agent-base": { - "version": "2.1.1", - "resolved": "http://npm.trustu.pre/agent-base/-/agent-base-2.1.1/d6de10d5af6132d5bd692427d46fc538539094c7.tgz", - "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=", + "node_modules/@angular-eslint/eslint-plugin/node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", "dev": true, - "requires": { - "extend": "3.0.1", - "semver": "5.0.3" + "license": "MIT", + "engines": { + "node": ">=18.12" }, - "dependencies": { - "semver": { - "version": "5.0.3", - "resolved": "http://npm.trustu.pre/semver/-/semver-5.0.3/77466de589cd5d3c95f138aa78bc569a3cb5d27a.tgz", - "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=", - "dev": true - } + "peerDependencies": { + "typescript": ">=4.8.4" } }, - "ajv": { - "version": "5.5.1", - "resolved": "http://npm.trustu.pre/ajv/-/ajv-5.5.1/b38bb8876d9e86bee994956a04e721e88b248eb2.tgz", - "integrity": "sha1-s4u4h22ehr7plJVqBOch6IskjrI=", + "node_modules/@angular-eslint/schematics": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-20.5.0.tgz", + "integrity": "sha512-pYGxMKocgUzKIMOOYBcGjvtxRcvnOY5ETs64IFcdHnwKoFfWeQV0a77sJdDj1YGOu/mj4PeORTRHfQyLvbhvyQ==", "dev": true, - "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.0.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "license": "MIT", + "dependencies": { + "@angular-devkit/core": ">= 20.0.0 < 21.0.0", + "@angular-devkit/schematics": ">= 20.0.0 < 21.0.0", + "@angular-eslint/eslint-plugin": "20.5.0", + "@angular-eslint/eslint-plugin-template": "20.5.0", + "ignore": "7.0.5", + "semver": "7.7.3", + "strip-json-comments": "3.1.1" } }, - "ajv-keywords": { - "version": "2.1.1", - "resolved": "http://npm.trustu.pre/ajv-keywords/-/ajv-keywords-2.1.1/617997fc5f60576894c435f940d819e135b80762.tgz", - "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", - "dev": true - }, - "align-text": { - "version": "0.1.4", - "resolved": "http://npm.trustu.pre/align-text/-/align-text-0.1.4/0cd90a561093f35d0a99256c22b7069433fad117.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "node_modules/@angular-eslint/template-parser": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-20.5.0.tgz", + "integrity": "sha512-dWaz2Knjy6yJI5/xVYqp5iu65b725wveMwt1DgJ9EDTZ5gpJcTsvSCW4zQr/6iXfpAZHKPh9LJvVW1svowhtWw==", "dev": true, - "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" + "license": "MIT", + "dependencies": { + "@angular-eslint/bundled-angular-compiler": "20.5.0", + "eslint-scope": "^8.0.2" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": "*" } }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "http://npm.trustu.pre/alphanum-sort/-/alphanum-sort-1.0.2/97a1119649b211ad33691d9f9f486a8ec9fbe0a3.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", - "dev": true + "node_modules/@angular-eslint/utils": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-20.5.0.tgz", + "integrity": "sha512-eP8al/UKP9FpmwK3hVWkYUjBuq4BnUDrcboS51L9mRZsoOblkPt1/UgU6MJqW8sh6sfebP9N3RxLQOAFrM3juQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-eslint/bundled-angular-compiler": "20.5.0" + }, + "peerDependencies": { + "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": "*" + } }, - "amdefine": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/amdefine/-/amdefine-1.0.1/4a5282ac164729e93619bcfd3ad151f817ce91f5.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true + "node_modules/@angular/animations": { + "version": "20.3.7", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-20.3.7.tgz", + "integrity": "sha512-i655RaL0zmLE3OESUlDnRNBDRIMW/67nTQvMqP6V1cQ42l2+SMJtREsxmX6cWt55/qvvgeytAA6aBN4aerBl5A==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/core": "20.3.7" + } }, - "angular-cli-ghpages": { - "version": "0.5.2", - "resolved": "http://npm.trustu.pre/angular-cli-ghpages/-/angular-cli-ghpages-0.5.2/9551c5022c6982d0e4c5c7c97a21cd29d728b14d.tgz", - "integrity": "sha512-C+eCfJQv9p56FEU1X9Ewcm+2WGO1e7CfdFZKj8u3+g7LNX6PU4qNqcTyI8Va4uI96gGqmwSEM+rf+VSNfdd2Qg==", - "dev": true, - "requires": { - "commander": "2.9.0", - "denodeify": "1.2.1", - "fs-extra": "3.0.1", - "gh-pages": "0.12.0" - }, - "dependencies": { - "commander": { - "version": "2.9.0", - "resolved": "http://npm.trustu.pre/commander/-/commander-2.9.0/9c99094176e12240cb22d6c5146098400fe0f7d4.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true, - "requires": { - "graceful-readlink": "1.0.1" - } + "node_modules/@angular/build": { + "version": "20.3.7", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-20.3.7.tgz", + "integrity": "sha512-NHN5JNDqUc0Ux4IZPCe/fpFAnuRHujkxVfRHSqDFW5+jtj2JuW1XO6qlX+kDheFRlj/NvFgTpidKsE9IjpfMWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.2003.7", + "@babel/core": "7.28.3", + "@babel/helper-annotate-as-pure": "7.27.3", + "@babel/helper-split-export-declaration": "7.24.7", + "@inquirer/confirm": "5.1.14", + "@vitejs/plugin-basic-ssl": "2.1.0", + "beasties": "0.3.5", + "browserslist": "^4.23.0", + "esbuild": "0.25.9", + "https-proxy-agent": "7.0.6", + "istanbul-lib-instrument": "6.0.3", + "jsonc-parser": "3.3.1", + "listr2": "9.0.1", + "magic-string": "0.30.17", + "mrmime": "2.0.1", + "parse5-html-rewriting-stream": "8.0.0", + "picomatch": "4.0.3", + "piscina": "5.1.3", + "rollup": "4.52.3", + "sass": "1.90.0", + "semver": "7.7.2", + "source-map-support": "0.5.21", + "tinyglobby": "0.2.14", + "vite": "7.1.11", + "watchpack": "2.4.4" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "lmdb": "3.4.2" + }, + "peerDependencies": { + "@angular/compiler": "^20.0.0", + "@angular/compiler-cli": "^20.0.0", + "@angular/core": "^20.0.0", + "@angular/localize": "^20.0.0", + "@angular/platform-browser": "^20.0.0", + "@angular/platform-server": "^20.0.0", + "@angular/service-worker": "^20.0.0", + "@angular/ssr": "^20.3.7", + "karma": "^6.4.0", + "less": "^4.2.0", + "ng-packagr": "^20.0.0", + "postcss": "^8.4.0", + "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", + "tslib": "^2.3.0", + "typescript": ">=5.8 <6.0", + "vitest": "^3.1.1" + }, + "peerDependenciesMeta": { + "@angular/core": { + "optional": true + }, + "@angular/localize": { + "optional": true + }, + "@angular/platform-browser": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "@angular/ssr": { + "optional": true + }, + "karma": { + "optional": true + }, + "less": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "postcss": { + "optional": true }, - "fs-extra": { - "version": "3.0.1", - "resolved": "http://npm.trustu.pre/fs-extra/-/fs-extra-3.0.1/3794f378c58b342ea7dbbb23095109c4b3b62291.tgz", - "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "3.0.1", - "universalify": "0.1.1" - } + "tailwindcss": { + "optional": true }, - "jsonfile": { - "version": "3.0.1", - "resolved": "http://npm.trustu.pre/jsonfile/-/jsonfile-3.0.1/a5ecc6f65f53f662c4415c7675a0331d0992ec66.tgz", - "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11" - } + "vitest": { + "optional": true } } }, - "ansi-html": { - "version": "0.0.7", - "resolved": "http://npm.trustu.pre/ansi-html/-/ansi-html-0.0.7/813584021962a9e9e6fd039f940d12f56ca7859e.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "http://npm.trustu.pre/ansi-regex/-/ansi-regex-2.1.1/c3b33ab5ee360d86e0e628f0468ae7ef27d654df.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.0", - "resolved": "http://npm.trustu.pre/ansi-styles/-/ansi-styles-3.2.0/c159b8d5be0f9e5a6f346dab94f16ce022161b88.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "node_modules/@angular/build/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, - "requires": { - "color-convert": "1.9.1" + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "anymatch": { - "version": "1.3.2", - "resolved": "http://npm.trustu.pre/anymatch/-/anymatch-1.3.2/553dcb8f91e3c889845dfdba34c77721b90b9d7a.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "node_modules/@angular/build/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, - "requires": { - "micromatch": "2.3.11", - "normalize-path": "2.1.1" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "app-root-path": { - "version": "2.0.1", - "resolved": "http://npm.trustu.pre/app-root-path/-/app-root-path-2.0.1/cd62dcf8e4fd5a417efc664d2e5b10653c651b46.tgz", - "integrity": "sha1-zWLc+OT9WkF+/GZNLlsQZTxlG0Y=", - "dev": true - }, - "append-transform": { - "version": "0.4.0", - "resolved": "http://npm.trustu.pre/append-transform/-/append-transform-0.4.0/d76ebf8ca94d276e247a36bad44a4b74ab611991.tgz", - "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", + "node_modules/@angular/cli": { + "version": "20.3.7", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-20.3.7.tgz", + "integrity": "sha512-hNurF7g/e9cDHFBRCKLPSmQJs0n28jZsC3sTl/XuWE8PYtv5egh2EuqrxdruYB5GdANpIqSQNgDGQJrKrk/XnQ==", "dev": true, - "requires": { - "default-require-extensions": "1.0.0" + "license": "MIT", + "dependencies": { + "@angular-devkit/architect": "0.2003.7", + "@angular-devkit/core": "20.3.7", + "@angular-devkit/schematics": "20.3.7", + "@inquirer/prompts": "7.8.2", + "@listr2/prompt-adapter-inquirer": "3.0.1", + "@modelcontextprotocol/sdk": "1.17.3", + "@schematics/angular": "20.3.7", + "@yarnpkg/lockfile": "1.1.0", + "algoliasearch": "5.35.0", + "ini": "5.0.0", + "jsonc-parser": "3.3.1", + "listr2": "9.0.1", + "npm-package-arg": "13.0.0", + "pacote": "21.0.0", + "resolve": "1.22.10", + "semver": "7.7.2", + "yargs": "18.0.0", + "zod": "3.25.76" + }, + "bin": { + "ng": "bin/ng.js" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" } }, - "aproba": { - "version": "1.2.0", - "resolved": "http://npm.trustu.pre/aproba/-/aproba-1.2.0/6802e6264efd18c790a1b0d517f0f2627bf2c94a.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "resolved": "http://npm.trustu.pre/are-we-there-yet/-/are-we-there-yet-1.1.4/bb5dca382bb94f05e15194373d16fd3ba1ca110d.tgz", - "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", + "node_modules/@angular/cli/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.3" + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "argparse": { - "version": "1.0.9", - "resolved": "http://npm.trustu.pre/argparse/-/argparse-1.0.9/73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "node_modules/@angular/cli/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, - "requires": { - "sprintf-js": "1.0.3" + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "arr-diff": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/arr-diff/-/arr-diff-2.0.0/8f3b827f955a8bd669697e4a4256ac3ceae356cf.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "node_modules/@angular/cli/node_modules/cliui": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", "dev": true, - "requires": { - "arr-flatten": "1.1.0" + "license": "ISC", + "dependencies": { + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20" } }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "http://npm.trustu.pre/arr-flatten/-/arr-flatten-1.1.0/36048bbff4e7b47e136644316c99669ea5ae91f1.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "array-differ": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/array-differ/-/array-differ-1.0.0/eff52e3758249d33be402b8bb8e564bb2b5d4031.tgz", - "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", - "dev": true - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "http://npm.trustu.pre/array-find-index/-/array-find-index-1.0.2/df010aa1287e164bbda6f9723b0a96a1ec4187a1.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true - }, - "array-flatten": { - "version": "2.1.1", - "resolved": "http://npm.trustu.pre/array-flatten/-/array-flatten-2.1.1/426bb9da84090c1838d812c8150af20a8331e296.tgz", - "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=", - "dev": true - }, - "array-ify": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/array-ify/-/array-ify-1.0.0/9e528762b4a9066ad163a6962a364418e9626ece.tgz", - "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", - "dev": true - }, - "array-includes": { - "version": "3.0.3", - "resolved": "http://npm.trustu.pre/array-includes/-/array-includes-3.0.3/184b48f62d92d7452bb31b323165c7f8bd02266d.tgz", - "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "node_modules/@angular/cli/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, - "requires": { - "define-properties": "1.1.2", - "es-abstract": "1.10.0" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "array-slice": { - "version": "0.2.3", - "resolved": "http://npm.trustu.pre/array-slice/-/array-slice-0.2.3/dd3cfb80ed7973a75117cdac69b0b99ec86186f5.tgz", - "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", - "dev": true + "node_modules/@angular/cli/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } }, - "array-union": { - "version": "1.0.2", - "resolved": "http://npm.trustu.pre/array-union/-/array-union-1.0.2/9a34410e4f4e3da23dea375be5be70f24778ec39.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "node_modules/@angular/cli/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "dev": true, - "requires": { - "array-uniq": "1.0.3" + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "array-uniq": { - "version": "1.0.3", - "resolved": "http://npm.trustu.pre/array-uniq/-/array-uniq-1.0.3/af6ac877a25cc7f74e058894753858dfdb24fdb6.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true + "node_modules/@angular/cli/node_modules/yargs": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", + "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^9.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "string-width": "^7.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^22.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } }, - "array-unique": { - "version": "0.2.1", - "resolved": "http://npm.trustu.pre/array-unique/-/array-unique-0.2.1/a1d97ccafcbc2625cc70fadceb36a50c58b01a53.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true + "node_modules/@angular/cli/node_modules/yargs-parser": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } }, - "arraybuffer.slice": { - "version": "0.0.6", - "resolved": "http://npm.trustu.pre/arraybuffer.slice/-/arraybuffer.slice-0.0.6/f33b2159f0532a3f3107a272c0ccfbd1ad2979ca.tgz", - "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=", - "dev": true + "node_modules/@angular/common": { + "version": "20.3.7", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-20.3.7.tgz", + "integrity": "sha512-uf8dXYTJbedk/wudkt2MfbtvN/T97aEZBtOTq8/IFQQZ3722rag6D+Cg76e5hBccROOn+ueGJX2gpxz02phTwA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/core": "20.3.7", + "rxjs": "^6.5.3 || ^7.4.0" + } }, - "arrify": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/arrify/-/arrify-1.0.1/898508da2226f380df904728456849c1501a4b0d.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true + "node_modules/@angular/compiler": { + "version": "20.3.7", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-20.3.7.tgz", + "integrity": "sha512-EouHO15dUsgnFArj0M25R8cOPVoUfiFYSt6iXnMO8+S4dY1fDEmbFqkW5smlP66HL5Gys59Nwb5inejfIWHrLw==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } }, - "asap": { - "version": "2.0.6", - "resolved": "http://npm.trustu.pre/asap/-/asap-2.0.6/e50347611d7e690943208bbdafebcbc2fb866d46.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "node_modules/@angular/compiler-cli": { + "version": "20.3.7", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-20.3.7.tgz", + "integrity": "sha512-viZwWlwc1BAqryRJE0Wq2WgAxDaW9fuwtYHYrOWnIn9sy9KemKmR6RmU9VRydrwUROOlqK49R9+RC1wQ6sYwqA==", "dev": true, - "optional": true - }, - "asn1": { - "version": "0.2.3", - "resolved": "http://npm.trustu.pre/asn1/-/asn1-0.2.3/dac8787713c9966849fc8180777ebe9c1ddf3b86.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true + "license": "MIT", + "dependencies": { + "@babel/core": "7.28.3", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^4.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.2.0", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^18.0.0" + }, + "bin": { + "ng-xi18n": "bundles/src/bin/ng_xi18n.js", + "ngc": "bundles/src/bin/ngc.js" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/compiler": "20.3.7", + "typescript": ">=5.8 <6.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } }, - "asn1.js": { - "version": "4.9.2", - "resolved": "http://npm.trustu.pre/asn1.js/-/asn1.js-4.9.2/8117ef4f7ed87cd8f89044b5bff97ac243a16c9a.tgz", - "integrity": "sha512-b/OsSjvWEo8Pi8H0zsDd2P6Uqo2TK2pH8gNLSJtNLM2Db0v2QaAZ0pBQJXVjAn4gBuugeVDr7s63ZogpUIwWDg==", + "node_modules/@angular/compiler-cli/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, - "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "assert": { - "version": "1.4.1", - "resolved": "http://npm.trustu.pre/assert/-/assert-1.4.1/99912d591836b5a6f5b345c0f07eefc08fc65d91.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "node_modules/@angular/compiler-cli/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, - "requires": { - "util": "0.10.3" + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "assert-plus": { - "version": "0.2.0", - "resolved": "http://npm.trustu.pre/assert-plus/-/assert-plus-0.2.0/d74e1b87e7affc0db8aadb7021f3fe48101ab234.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "dev": true - }, - "async": { - "version": "2.6.0", - "resolved": "http://npm.trustu.pre/async/-/async-2.6.0/61a29abb6fcc026fea77e56d1c6ec53a795951f4.tgz", - "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "node_modules/@angular/compiler-cli/node_modules/cliui": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", "dev": true, - "requires": { - "lodash": "4.17.4" + "license": "ISC", + "dependencies": { + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20" } }, - "async-each": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/async-each/-/async-each-1.0.1/19d386a1d9edc6e7c1c85d388aedbcc56d33602d.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true + "node_modules/@angular/compiler-cli/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } }, - "async-foreach": { - "version": "0.1.3", - "resolved": "http://npm.trustu.pre/async-foreach/-/async-foreach-0.1.3/36121f845c0578172de419a97dbeb1d16ec34542.tgz", - "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", + "node_modules/@angular/compiler-cli/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "dev": true, - "optional": true + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } }, - "asynckit": { - "version": "0.4.0", - "resolved": "http://npm.trustu.pre/asynckit/-/asynckit-0.4.0/c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true + "node_modules/@angular/compiler-cli/node_modules/yargs": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", + "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^9.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "string-width": "^7.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^22.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } }, - "autoprefixer": { - "version": "6.7.7", - "resolved": "http://npm.trustu.pre/autoprefixer/-/autoprefixer-6.7.7/1dbd1c835658e35ce3f9984099db00585c782014.tgz", - "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", + "node_modules/@angular/compiler-cli/node_modules/yargs-parser": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", "dev": true, - "requires": { - "browserslist": "1.7.7", - "caniuse-db": "1.0.30000780", - "normalize-range": "0.1.2", - "num2fraction": "1.2.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "license": "ISC", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" } }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "http://npm.trustu.pre/aws-sign2/-/aws-sign2-0.6.0/14342dd38dbcc94d0e5b87d763cd63612c0e794f.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "dev": true + "node_modules/@angular/core": { + "version": "20.3.7", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-20.3.7.tgz", + "integrity": "sha512-2UuYzC2A5SUtu33tYTN411Wk0WilA+2Uld/GP3O6mragw1O7v/M8pMFmbe9TR5Ah/abRJIocWGlNqeztZmQmrw==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/compiler": "20.3.7", + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.15.0" + }, + "peerDependenciesMeta": { + "@angular/compiler": { + "optional": true + }, + "zone.js": { + "optional": true + } + } }, - "aws4": { - "version": "1.6.0", - "resolved": "http://npm.trustu.pre/aws4/-/aws4-1.6.0/83ef5ca860b2b32e4a0deedee8c771b9db57471e.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", - "dev": true + "node_modules/@angular/forms": { + "version": "20.3.7", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-20.3.7.tgz", + "integrity": "sha512-uOCGCoqXeAWIlQMWiIeed/W8g8h2tk91YemMI+Ce1VQ/36Xfft40Bouz4eKcvJV6kLXGygdpWjzFGz32CE+3Og==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/common": "20.3.7", + "@angular/core": "20.3.7", + "@angular/platform-browser": "20.3.7", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/localize": { + "version": "20.3.7", + "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-20.3.7.tgz", + "integrity": "sha512-FYuuwU9ujiVT+0xjMIutaUT2PErV4AvxeAPWMlYRA1/yQxqn1VyNUd6kHPjAV+yrZg9Q0MDco2/c0Lh8rmAhSA==", + "license": "MIT", + "dependencies": { + "@babel/core": "7.28.3", + "@types/babel__core": "7.20.5", + "tinyglobby": "^0.2.12", + "yargs": "^18.0.0" + }, + "bin": { + "localize-extract": "tools/bundles/src/extract/cli.js", + "localize-migrate": "tools/bundles/src/migrate/cli.js", + "localize-translate": "tools/bundles/src/translate/cli.js" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/compiler": "20.3.7", + "@angular/compiler-cli": "20.3.7" + } + }, + "node_modules/@angular/localize/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "http://npm.trustu.pre/babel-code-frame/-/babel-code-frame-6.26.0/63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" + "node_modules/@angular/localize/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@angular/localize/node_modules/cliui": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", + "license": "ISC", "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "http://npm.trustu.pre/ansi-styles/-/ansi-styles-2.2.1/b432dd3358b634cf75e1e4664368240533c1ddbe.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "http://npm.trustu.pre/chalk/-/chalk-1.1.3/a8115c55e4a702fe4d150abd3872822a7e09fc98.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/supports-color/-/supports-color-2.0.0/535d045ce6b6363fa40117084629995e9df324c7.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@angular/localize/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@angular/localize/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@angular/localize/node_modules/yargs": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", + "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", + "license": "MIT", + "dependencies": { + "cliui": "^9.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "string-width": "^7.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^22.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/@angular/localize/node_modules/yargs-parser": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "license": "ISC", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/@angular/platform-browser": { + "version": "20.3.7", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-20.3.7.tgz", + "integrity": "sha512-AbLtyR7fVEGDYyrz95dP2pc69J5XIjLLsFNAuNQPzNX02WPoAxtrWrNY6UnTzGoSrCc5F52hiL2Uo6yPZTiJcg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/animations": "20.3.7", + "@angular/common": "20.3.7", + "@angular/core": "20.3.7" + }, + "peerDependenciesMeta": { + "@angular/animations": { + "optional": true } } }, - "babel-generator": { - "version": "6.26.0", - "resolved": "http://npm.trustu.pre/babel-generator/-/babel-generator-6.26.0/ac1ae20070b79f6e3ca1d3269613053774f20dc5.tgz", - "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", - "dev": true, - "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.4", - "source-map": "0.5.7", - "trim-right": "1.0.1" + "node_modules/@angular/platform-browser-dynamic": { + "version": "20.3.7", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-20.3.7.tgz", + "integrity": "sha512-4TEPA12183cMeVCzuU/Rmuk5RuIgsunTbjgx0o+ymxvYyULOxKDlhZ4hGDKzmRCOu6s3ZeEs4XbgaLP6pK+Kxg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/common": "20.3.7", + "@angular/compiler": "20.3.7", + "@angular/core": "20.3.7", + "@angular/platform-browser": "20.3.7" + } + }, + "node_modules/@angular/platform-server": { + "version": "20.3.7", + "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-20.3.7.tgz", + "integrity": "sha512-ADqOwqeUpTkp97SUpNO4jZ0o9Du7oBpi0mqzLx/c1dQYgL5hKAZYpa7bpG/edn2nSMHXwQAaGw7t+MTmU7elxQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0", + "xhr2": "^0.2.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/common": "20.3.7", + "@angular/compiler": "20.3.7", + "@angular/core": "20.3.7", + "@angular/platform-browser": "20.3.7", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/router": { + "version": "20.3.7", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-20.3.7.tgz", + "integrity": "sha512-Lq7mCNcLP1npmNh2JlNEe02YS2jNnaLnCy/t//o+Qq0c6DGV78JRl7pHubiB2R6XXlgvOcZWg88v94Li+y85Iw==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/common": "20.3.7", + "@angular/core": "20.3.7", + "@angular/platform-browser": "20.3.7", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/ssr": { + "version": "20.3.7", + "resolved": "https://registry.npmjs.org/@angular/ssr/-/ssr-20.3.7.tgz", + "integrity": "sha512-munpdYSgU2jDdRb5xujmaAXEpnOhFVLNO0ghqPugeDOH8ejeum3oBsHkdWK1w6rhj1PmX32/Q0DlAiuY4VlXCQ==", + "license": "MIT", "dependencies": { - "jsesc": { - "version": "1.3.0", - "resolved": "http://npm.trustu.pre/jsesc/-/jsesc-1.3.0/46c3fec8c1892b12b0833db9bc7622176dbab34b.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "dev": true + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "^20.0.0", + "@angular/core": "^20.0.0", + "@angular/platform-server": "^20.0.0", + "@angular/router": "^20.0.0" + }, + "peerDependenciesMeta": { + "@angular/platform-server": { + "optional": true } } }, - "babel-messages": { - "version": "6.23.0", - "resolved": "http://npm.trustu.pre/babel-messages/-/babel-messages-6.23.0/f3cdf4703858035b2a2951c6ec5edf6c62f2630e.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "node_modules/@asamuzakjp/css-color": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-4.0.5.tgz", + "integrity": "sha512-lMrXidNhPGsDjytDy11Vwlb6OIGrT3CmLg3VWNFyWkLWtijKl7xjvForlh8vuj0SHGjgl4qZEQzUmYTeQA2JFQ==", "dev": true, - "requires": { - "babel-runtime": "6.26.0" + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^2.1.4", + "@csstools/css-color-parser": "^3.1.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "lru-cache": "^11.2.1" } }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "http://npm.trustu.pre/babel-runtime/-/babel-runtime-6.26.0/965c7058668e82b55d7bfe04ff2337bc8b5647fe.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", + "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", "dev": true, - "requires": { - "core-js": "2.5.1", - "regenerator-runtime": "0.11.0" + "license": "ISC", + "engines": { + "node": "20 || >=22" } }, - "babel-template": { - "version": "6.26.0", - "resolved": "http://npm.trustu.pre/babel-template/-/babel-template-6.26.0/de03e2d16396b069f46dd9fff8521fb1a0e35e02.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "node_modules/@asamuzakjp/dom-selector": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-6.7.3.tgz", + "integrity": "sha512-kiGFeY+Hxf5KbPpjRLf+ffWbkos1aGo8MBfd91oxS3O57RgU3XhZrt/6UzoVF9VMpWbC3v87SRc9jxGrc9qHtQ==", "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.4" + "license": "MIT", + "dependencies": { + "@asamuzakjp/nwsapi": "^2.3.9", + "bidi-js": "^1.0.3", + "css-tree": "^3.1.0", + "is-potential-custom-element-name": "^1.0.1", + "lru-cache": "^11.2.2" } }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "http://npm.trustu.pre/babel-traverse/-/babel-traverse-6.26.0/46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "node_modules/@asamuzakjp/dom-selector/node_modules/lru-cache": { + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", + "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.9", - "globals": "9.18.0", - "invariant": "2.2.2", - "lodash": "4.17.4" + "license": "ISC", + "engines": { + "node": "20 || >=22" } }, - "babel-types": { - "version": "6.26.0", - "resolved": "http://npm.trustu.pre/babel-types/-/babel-types-6.26.0/a3b073f94ab49eb6fa55cd65227a334380632497.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "node_modules/@asamuzakjp/nwsapi": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@asamuzakjp/nwsapi/-/nwsapi-2.3.9.tgz", + "integrity": "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==", "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.4", - "to-fast-properties": "1.0.3" + "license": "MIT" + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" } }, - "babylon": { - "version": "6.18.0", - "resolved": "http://npm.trustu.pre/babylon/-/babylon-6.18.0/af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true + "node_modules/@babel/compat-data": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", + "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } }, - "backo2": { - "version": "1.0.2", - "resolved": "http://npm.trustu.pre/backo2/-/backo2-1.0.2/31ab1ac8b129363463e35b3ebb69f4dfcfba7947.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", - "dev": true + "node_modules/@babel/core": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.3.tgz", + "integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==", + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.3", + "@babel/parser": "^7.28.3", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.3", + "@babel/types": "^7.28.2", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } }, - "balanced-match": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/balanced-match/-/balanced-match-1.0.0/89b4d199ab2bee49de164ea02b89ce462d71b767.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", + "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.3", + "@babel/types": "^7.28.2", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } }, - "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "http://npm.trustu.pre/base64-arraybuffer/-/base64-arraybuffer-0.1.5/73926771923b5a19747ad666aa5cd4bf9c6e9ce8.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", - "dev": true + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } }, - "base64-js": { - "version": "1.2.1", - "resolved": "http://npm.trustu.pre/base64-js/-/base64-js-1.2.1/a91947da1f4a516ea38e5b4ec0ec3773675e0886.tgz", - "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==", - "dev": true + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } }, - "base64id": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/base64id/-/base64id-1.0.0/47688cb99bb6804f0e06d3e763b1c32e57d8e6b6.tgz", - "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", - "dev": true + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } }, - "batch": { - "version": "0.6.1", - "resolved": "http://npm.trustu.pre/batch/-/batch-0.6.1/dc34314f4e679318093fc760272525f94bf25c16.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1/63bc5dcb61331b92bc05fd528953c33462a06f8d.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" } }, - "beeper": { - "version": "1.1.1", - "resolved": "http://npm.trustu.pre/beeper/-/beeper-1.1.1/e6d5ea8c5dad001304a70b22638447f69cb2f809.tgz", - "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", - "dev": true + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } }, - "better-assert": { - "version": "1.0.2", - "resolved": "http://npm.trustu.pre/better-assert/-/better-assert-1.0.2/40866b9e1b9e0b55b481894311e68faffaebc522.tgz", - "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", "dev": true, - "requires": { - "callsite": "1.0.0" + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" } }, - "big.js": { - "version": "3.2.0", - "resolved": "http://npm.trustu.pre/big.js/-/big.js-3.2.0/a5fc298b81b9e0dca2e458824784b65c52ba588e.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", - "dev": true - }, - "binary-extensions": { - "version": "1.11.0", - "resolved": "http://npm.trustu.pre/binary-extensions/-/binary-extensions-1.11.0/46aa1751fb6a2f93ee5e689bb1087d4b14c6c205.tgz", - "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", - "dev": true - }, - "blob": { - "version": "0.0.4", - "resolved": "http://npm.trustu.pre/blob/-/blob-0.0.4/bcf13052ca54463f30f9fc7e95b9a47630a94921.tgz", - "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", - "dev": true + "node_modules/@babel/parser": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.5" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } }, - "block-stream": { - "version": "0.0.9", - "resolved": "http://npm.trustu.pre/block-stream/-/block-stream-0.0.9/13ebfe778a03205cfe03751481ebb4b3300c126a.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "dev": true, - "optional": true, - "requires": { - "inherits": "2.0.3" + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" } }, - "blocking-proxy": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/blocking-proxy/-/blocking-proxy-1.0.1/81d6fd1fe13a4c0d6957df7f91b75e98dac40cb2.tgz", - "integrity": "sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA==", - "dev": true, - "requires": { - "minimist": "1.2.0" + "node_modules/@babel/traverse": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", + "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.5", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" } }, - "bluebird": { - "version": "3.5.1", - "resolved": "http://npm.trustu.pre/bluebird/-/bluebird-3.5.1/d9551f9de98f1fcda1e683d17ee91a0602ee2eb9.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", - "dev": true + "node_modules/@babel/traverse/node_modules/@babel/generator": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", + "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } }, - "bn.js": { - "version": "4.11.8", - "resolved": "http://npm.trustu.pre/bn.js/-/bn.js-4.11.8/2cde09eb5ee341f484746bb0309b3253b1b1442f.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true + "node_modules/@babel/types": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } }, - "body-parser": { - "version": "1.18.2", - "resolved": "http://npm.trustu.pre/body-parser/-/body-parser-1.18.2/87678a19d84b47d859b83199bd59bce222b10454.tgz", - "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "node_modules/@bcoe/v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz", + "integrity": "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==", "dev": true, - "requires": { - "bytes": "3.0.0", - "content-type": "1.0.4", - "debug": "2.6.9", - "depd": "1.1.1", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", - "on-finished": "2.3.0", - "qs": "6.5.1", - "raw-body": "2.3.2", - "type-is": "1.6.15" - }, - "dependencies": { - "qs": { - "version": "6.5.1", - "resolved": "http://npm.trustu.pre/qs/-/qs-6.5.1/349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", - "dev": true - } + "license": "MIT", + "engines": { + "node": ">=18" } }, - "bonjour": { - "version": "3.5.0", - "resolved": "http://npm.trustu.pre/bonjour/-/bonjour-3.5.0/8e890a183d8ee9a2393b3844c691a42bcf7bc9f5.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "node_modules/@cacheable/memoize": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@cacheable/memoize/-/memoize-2.0.3.tgz", + "integrity": "sha512-hl9wfQgpiydhQEIv7fkjEzTGE+tcosCXLKFDO707wYJ/78FVOlowb36djex5GdbSyeHnG62pomYLMuV/OT8Pbw==", "dev": true, - "requires": { - "array-flatten": "2.1.1", - "deep-equal": "1.0.1", - "dns-equal": "1.0.0", - "dns-txt": "2.0.2", - "multicast-dns": "6.2.1", - "multicast-dns-service-types": "1.1.0" + "license": "MIT", + "dependencies": { + "@cacheable/utils": "^2.0.3" } }, - "boolbase": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/boolbase/-/boolbase-1.0.0/68dff5fbe60c51eb37725ea9e3ed310dcc1e776e.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "boom": { - "version": "2.10.1", - "resolved": "http://npm.trustu.pre/boom/-/boom-2.10.1/39c8918ceff5799f83f9492a848f625add0c766f.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "node_modules/@cacheable/memory": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@cacheable/memory/-/memory-2.0.3.tgz", + "integrity": "sha512-R3UKy/CKOyb1LZG/VRCTMcpiMDyLH7SH3JrraRdK6kf3GweWCOU3sgvE13W3TiDRbxnDKylzKJvhUAvWl9LQOA==", "dev": true, - "requires": { - "hoek": "2.16.3" + "license": "MIT", + "dependencies": { + "@cacheable/memoize": "^2.0.3", + "@cacheable/utils": "^2.0.3", + "@keyv/bigmap": "^1.0.2", + "hookified": "^1.12.1", + "keyv": "^5.5.3" } }, - "brace-expansion": { - "version": "1.1.8", - "resolved": "http://npm.trustu.pre/brace-expansion/-/brace-expansion-1.1.8/c07b211c7c952ec1f8efd51a77ef0d1d3990a292.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "node_modules/@cacheable/memory/node_modules/keyv": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.5.3.tgz", + "integrity": "sha512-h0Un1ieD+HUrzBH6dJXhod3ifSghk5Hw/2Y4/KHBziPlZecrFyE9YOTPU6eOs0V9pYl8gOs86fkr/KN8lUX39A==", "dev": true, - "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" + "license": "MIT", + "dependencies": { + "@keyv/serialize": "^1.1.1" } }, - "braces": { - "version": "1.8.5", - "resolved": "http://npm.trustu.pre/braces/-/braces-1.8.5/ba77962e12dff969d6b76711e914b737857bf6a7.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "node_modules/@cacheable/utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.1.0.tgz", + "integrity": "sha512-ZdxfOiaarMqMj+H7qwlt5EBKWaeGihSYVHdQv5lUsbn8MJJOTW82OIwirQ39U5tMZkNvy3bQE+ryzC+xTAb9/g==", "dev": true, - "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" + "license": "MIT", + "dependencies": { + "keyv": "^5.5.3" } }, - "brorand": { - "version": "1.1.0", - "resolved": "http://npm.trustu.pre/brorand/-/brorand-1.1.0/12c25efe40a45e3c323eb8675a0a0ce57b22371f.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "browserify-aes": { - "version": "1.1.1", - "resolved": "http://npm.trustu.pre/browserify-aes/-/browserify-aes-1.1.1/38b7ab55edb806ff2dcda1a7f1620773a477c49f.tgz", - "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==", + "node_modules/@cacheable/utils/node_modules/keyv": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.5.3.tgz", + "integrity": "sha512-h0Un1ieD+HUrzBH6dJXhod3ifSghk5Hw/2Y4/KHBziPlZecrFyE9YOTPU6eOs0V9pYl8gOs86fkr/KN8lUX39A==", "dev": true, - "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "license": "MIT", + "dependencies": { + "@keyv/serialize": "^1.1.1" } }, - "browserify-cipher": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/browserify-cipher/-/browserify-cipher-1.0.0/9988244874bf5ed4e28da95666dcd66ac8fc363a.tgz", - "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "node_modules/@commitlint/cli": { + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-20.1.0.tgz", + "integrity": "sha512-pW5ujjrOovhq5RcYv5xCpb4GkZxkO2+GtOdBW2/qrr0Ll9tl3PX0aBBobGQl3mdZUbOBgwAexEQLeH6uxL0VYg==", "dev": true, - "requires": { - "browserify-aes": "1.1.1", - "browserify-des": "1.0.0", - "evp_bytestokey": "1.0.3" + "license": "MIT", + "dependencies": { + "@commitlint/format": "^20.0.0", + "@commitlint/lint": "^20.0.0", + "@commitlint/load": "^20.1.0", + "@commitlint/read": "^20.0.0", + "@commitlint/types": "^20.0.0", + "tinyexec": "^1.0.0", + "yargs": "^17.0.0" + }, + "bin": { + "commitlint": "cli.js" + }, + "engines": { + "node": ">=v18" } }, - "browserify-des": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/browserify-des/-/browserify-des-1.0.0/daa277717470922ed2fe18594118a175439721dd.tgz", - "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "node_modules/@commitlint/cli/node_modules/tinyexec": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.1.tgz", + "integrity": "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==", "dev": true, - "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.3" - } + "license": "MIT" }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "http://npm.trustu.pre/browserify-rsa/-/browserify-rsa-4.0.1/21e0abfaf6f2029cf2fafb133567a701d4135524.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "node_modules/@commitlint/config-conventional": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-20.0.0.tgz", + "integrity": "sha512-q7JroPIkDBtyOkVe9Bca0p7kAUYxZMxkrBArCfuD3yN4KjRAenP9PmYwnn7rsw8Q+hHq1QB2BRmBh0/Z19ZoJw==", "dev": true, - "requires": { - "bn.js": "4.11.8", - "randombytes": "2.0.5" + "license": "MIT", + "dependencies": { + "@commitlint/types": "^20.0.0", + "conventional-changelog-conventionalcommits": "^7.0.2" + }, + "engines": { + "node": ">=v18" } }, - "browserify-sign": { - "version": "4.0.4", - "resolved": "http://npm.trustu.pre/browserify-sign/-/browserify-sign-4.0.4/aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "node_modules/@commitlint/config-validator": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-20.0.0.tgz", + "integrity": "sha512-BeyLMaRIJDdroJuYM2EGhDMGwVBMZna9UiIqV9hxj+J551Ctc6yoGuGSmghOy/qPhBSuhA6oMtbEiTmxECafsg==", "dev": true, - "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "elliptic": "6.4.0", - "inherits": "2.0.3", - "parse-asn1": "5.1.0" + "license": "MIT", + "dependencies": { + "@commitlint/types": "^20.0.0", + "ajv": "^8.11.0" + }, + "engines": { + "node": ">=v18" } }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "http://npm.trustu.pre/browserify-zlib/-/browserify-zlib-0.2.0/2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "node_modules/@commitlint/ensure": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-20.0.0.tgz", + "integrity": "sha512-WBV47Fffvabe68n+13HJNFBqiMH5U1Ryls4W3ieGwPC0C7kJqp3OVQQzG2GXqOALmzrgAB+7GXmyy8N9ct8/Fg==", "dev": true, - "requires": { - "pako": "1.0.6" + "license": "MIT", + "dependencies": { + "@commitlint/types": "^20.0.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" } }, - "browserslist": { - "version": "1.7.7", - "resolved": "http://npm.trustu.pre/browserslist/-/browserslist-1.7.7/0bd76704258be829b2398bb50e4b62d1a166b0b9.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "node_modules/@commitlint/execute-rule": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-20.0.0.tgz", + "integrity": "sha512-xyCoOShoPuPL44gVa+5EdZsBVao/pNzpQhkzq3RdtlFdKZtjWcLlUFQHSWBuhk5utKYykeJPSz2i8ABHQA+ZZw==", "dev": true, - "requires": { - "caniuse-db": "1.0.30000780", - "electron-to-chromium": "1.3.28" + "license": "MIT", + "engines": { + "node": ">=v18" } }, - "btoa": { - "version": "1.1.2", - "resolved": "http://npm.trustu.pre/btoa/-/btoa-1.1.2/3e40b81663f81d2dd6596a4cb714a8dc16cfabe0.tgz", - "integrity": "sha1-PkC4FmP4HS3WWWpMtxSo3BbPq+A=", - "dev": true - }, - "buffer": { - "version": "4.9.1", - "resolved": "http://npm.trustu.pre/buffer/-/buffer-4.9.1/6d1bb601b07a4efced97094132093027c95bc298.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "node_modules/@commitlint/format": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-20.0.0.tgz", + "integrity": "sha512-zrZQXUcSDmQ4eGGrd+gFESiX0Rw+WFJk7nW4VFOmxub4mAATNKBQ4vNw5FgMCVehLUKG2OT2LjOqD0Hk8HvcRg==", "dev": true, - "requires": { - "base64-js": "1.2.1", - "ieee754": "1.1.8", - "isarray": "1.0.0" + "license": "MIT", + "dependencies": { + "@commitlint/types": "^20.0.0", + "chalk": "^5.3.0" + }, + "engines": { + "node": ">=v18" } }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "http://npm.trustu.pre/buffer-indexof/-/buffer-indexof-1.1.1/52fabcc6a606d1a00302802648ef68f639da268c.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "http://npm.trustu.pre/buffer-xor/-/buffer-xor-1.0.3/26e61ed1422fb70dd42e6e36729ed51d855fe8d9.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "http://npm.trustu.pre/builtin-modules/-/builtin-modules-1.1.1/270f076c5a72c02f5b65a47df94c5fe3a278892f.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "http://npm.trustu.pre/builtin-status-codes/-/builtin-status-codes-3.0.0/85982878e21b98e1c66425e03d0174788f569ee8.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "bytes": { - "version": "3.0.0", - "resolved": "http://npm.trustu.pre/bytes/-/bytes-3.0.0/d32815404d689699f85a4ea4fa8755dd13a96048.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true - }, - "cacache": { - "version": "10.0.1", - "resolved": "http://npm.trustu.pre/cacache/-/cacache-10.0.1/3e05f6e616117d9b54665b1b20c8aeb93ea5d36f.tgz", - "integrity": "sha512-dRHYcs9LvG9cHgdPzjiI+/eS7e1xRhULrcyOx04RZQsszNJXU2SL9CyG60yLnge282Qq5nwTv+ieK2fH+WPZmA==", - "dev": true, - "requires": { - "bluebird": "3.5.1", - "chownr": "1.0.1", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "lru-cache": "4.1.1", - "mississippi": "1.3.0", - "mkdirp": "0.5.1", - "move-concurrently": "1.0.1", - "promise-inflight": "1.0.1", - "rimraf": "2.6.2", - "ssri": "5.0.0", - "unique-filename": "1.1.0", - "y18n": "3.2.1" - } - }, - "callsite": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/callsite/-/callsite-1.0.0/280398e5d664bd74038b6f0905153e6e8af1bc20.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", - "dev": true - }, - "camel-case": { - "version": "3.0.0", - "resolved": "http://npm.trustu.pre/camel-case/-/camel-case-3.0.0/ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "node_modules/@commitlint/is-ignored": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-20.0.0.tgz", + "integrity": "sha512-ayPLicsqqGAphYIQwh9LdAYOVAQ9Oe5QCgTNTj+BfxZb9b/JW222V5taPoIBzYnAP0z9EfUtljgBk+0BN4T4Cw==", "dev": true, - "requires": { - "no-case": "2.3.2", - "upper-case": "1.1.3" + "license": "MIT", + "dependencies": { + "@commitlint/types": "^20.0.0", + "semver": "^7.6.0" + }, + "engines": { + "node": ">=v18" } }, - "camelcase": { - "version": "2.1.1", - "resolved": "http://npm.trustu.pre/camelcase/-/camelcase-2.1.1/7c1d16d679a1bbe59ca02cacecfb011e201f5a1f.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "http://npm.trustu.pre/camelcase-keys/-/camelcase-keys-2.1.0/308beeaffdf28119051efa1d932213c91b8f92e7.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "node_modules/@commitlint/lint": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-20.0.0.tgz", + "integrity": "sha512-kWrX8SfWk4+4nCexfLaQT3f3EcNjJwJBsSZ5rMBw6JCd6OzXufFHgel2Curos4LKIxwec9WSvs2YUD87rXlxNQ==", "dev": true, - "requires": { - "camelcase": "2.1.1", - "map-obj": "1.0.1" + "license": "MIT", + "dependencies": { + "@commitlint/is-ignored": "^20.0.0", + "@commitlint/parse": "^20.0.0", + "@commitlint/rules": "^20.0.0", + "@commitlint/types": "^20.0.0" + }, + "engines": { + "node": ">=v18" } }, - "caniuse-api": { - "version": "1.6.1", - "resolved": "http://npm.trustu.pre/caniuse-api/-/caniuse-api-1.6.1/b534e7c734c4f81ec5fbe8aca2ad24354b962c6c.tgz", - "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", + "node_modules/@commitlint/load": { + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-20.1.0.tgz", + "integrity": "sha512-qo9ER0XiAimATQR5QhvvzePfeDfApi/AFlC1G+YN+ZAY8/Ua6IRrDrxRvQAr+YXUKAxUsTDSp9KXeXLBPsNRWg==", "dev": true, - "requires": { - "browserslist": "1.7.7", - "caniuse-db": "1.0.30000780", - "lodash.memoize": "4.1.2", - "lodash.uniq": "4.5.0" + "license": "MIT", + "dependencies": { + "@commitlint/config-validator": "^20.0.0", + "@commitlint/execute-rule": "^20.0.0", + "@commitlint/resolve-extends": "^20.1.0", + "@commitlint/types": "^20.0.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" } }, - "caniuse-db": { - "version": "1.0.30000780", - "resolved": "http://npm.trustu.pre/caniuse-db/-/caniuse-db-1.0.30000780/8d1977561d00ff0f0ed2b6b66140328ab4504c0a.tgz", - "integrity": "sha1-jRl3Vh0A/w8O0ra2YUAyirRQTAo=", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "http://npm.trustu.pre/caseless/-/caseless-0.12.0/1b681c21ff84033c826543090689420d187151dc.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true + "node_modules/@commitlint/message": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-20.0.0.tgz", + "integrity": "sha512-gLX4YmKnZqSwkmSB9OckQUrI5VyXEYiv3J5JKZRxIp8jOQsWjZgHSG/OgEfMQBK9ibdclEdAyIPYggwXoFGXjQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=v18" + } }, - "center-align": { - "version": "0.1.3", - "resolved": "http://npm.trustu.pre/center-align/-/center-align-0.1.3/aa0d32629b6ee972200411cbd4461c907bc2b7ad.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "node_modules/@commitlint/parse": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-20.0.0.tgz", + "integrity": "sha512-j/PHCDX2bGM5xGcWObOvpOc54cXjn9g6xScXzAeOLwTsScaL4Y+qd0pFC6HBwTtrH92NvJQc+2Lx9HFkVi48cg==", "dev": true, - "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" - }, + "license": "MIT", "dependencies": { - "lazy-cache": { - "version": "1.0.4", - "resolved": "http://npm.trustu.pre/lazy-cache/-/lazy-cache-1.0.4/a1d78fc3a50474cb80845d3b3b6e1da49a446e8e.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true - } + "@commitlint/types": "^20.0.0", + "conventional-changelog-angular": "^7.0.0", + "conventional-commits-parser": "^5.0.0" + }, + "engines": { + "node": ">=v18" } }, - "chalk": { - "version": "2.2.2", - "resolved": "http://npm.trustu.pre/chalk/-/chalk-2.2.2/4403f5cf18f35c05f51fbdf152bf588f956cf7cb.tgz", - "integrity": "sha512-LvixLAQ4MYhbf7hgL4o5PeK32gJKvVzDRiSNIApDofQvyhl8adgG2lJVXn4+ekQoK7HL9RF8lqxwerpe0x2pCw==", + "node_modules/@commitlint/read": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-20.0.0.tgz", + "integrity": "sha512-Ti7Y7aEgxsM1nkwA4ZIJczkTFRX/+USMjNrL9NXwWQHqNqrBX2iMi+zfuzZXqfZ327WXBjdkRaytJ+z5vNqTOA==", "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" + "license": "MIT", + "dependencies": { + "@commitlint/top-level": "^20.0.0", + "@commitlint/types": "^20.0.0", + "git-raw-commits": "^4.0.0", + "minimist": "^1.2.8", + "tinyexec": "^1.0.0" + }, + "engines": { + "node": ">=v18" } }, - "charenc": { - "version": "0.0.2", - "resolved": "http://npm.trustu.pre/charenc/-/charenc-0.0.2/c0a1d2f3a7092e03774bfa83f14c0fc5790a8667.tgz", - "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", - "dev": true - }, - "chokidar": { - "version": "1.7.0", - "resolved": "http://npm.trustu.pre/chokidar/-/chokidar-1.7.0/798e689778151c8076b4b360e5edd28cda2bb468.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "dev": true, - "requires": { - "anymatch": "1.3.2", - "async-each": "1.0.1", - "fsevents": "1.1.3", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/is-extglob/-/is-extglob-1.0.0/ac468177c4943405a092fc8f29760c6ffc6206c0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "http://npm.trustu.pre/is-glob/-/is-glob-2.0.1/d096f926a3ded5600f3fdfd91198cb0888c2d863.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - } - } - }, - "chownr": { + "node_modules/@commitlint/read/node_modules/tinyexec": { "version": "1.0.1", - "resolved": "http://npm.trustu.pre/chownr/-/chownr-1.0.1/e2a75042a9551908bebd25b8523d5f9769d79181.tgz", - "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", - "dev": true + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.1.tgz", + "integrity": "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==", + "dev": true, + "license": "MIT" }, - "cipher-base": { - "version": "1.0.4", - "resolved": "http://npm.trustu.pre/cipher-base/-/cipher-base-1.0.4/8760e4ecc272f4c363532f926d874aae2c1397de.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "node_modules/@commitlint/resolve-extends": { + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-20.1.0.tgz", + "integrity": "sha512-cxKXQrqHjZT3o+XPdqDCwOWVFQiae++uwd9dUBC7f2MdV58ons3uUvASdW7m55eat5sRiQ6xUHyMWMRm6atZWw==", "dev": true, - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "license": "MIT", + "dependencies": { + "@commitlint/config-validator": "^20.0.0", + "@commitlint/types": "^20.0.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" } }, - "circular-dependency-plugin": { - "version": "4.3.0", - "resolved": "http://npm.trustu.pre/circular-dependency-plugin/-/circular-dependency-plugin-4.3.0/2a12824e584546e1aeea5865b7bf234a11c4a695.tgz", - "integrity": "sha512-L3W9L1S0wC64rq+QSaZzmWnJW7cVBgimxI2lNEFEX5biwlRG8EHRM68JFi+CX5ZkCGUWJHIpnhdVs181Zlq3wA==", - "dev": true - }, - "clap": { - "version": "1.2.3", - "resolved": "http://npm.trustu.pre/clap/-/clap-1.2.3/4f36745b32008492557f46412d66d50cb99bce51.tgz", - "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", + "node_modules/@commitlint/rules": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-20.0.0.tgz", + "integrity": "sha512-gvg2k10I/RfvHn5I5sxvVZKM1fl72Sqrv2YY/BnM7lMHcYqO0E2jnRWoYguvBfEcZ39t+rbATlciggVe77E4zA==", "dev": true, - "requires": { - "chalk": "1.1.3" - }, + "license": "MIT", "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "http://npm.trustu.pre/ansi-styles/-/ansi-styles-2.2.1/b432dd3358b634cf75e1e4664368240533c1ddbe.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "http://npm.trustu.pre/chalk/-/chalk-1.1.3/a8115c55e4a702fe4d150abd3872822a7e09fc98.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/supports-color/-/supports-color-2.0.0/535d045ce6b6363fa40117084629995e9df324c7.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } + "@commitlint/ensure": "^20.0.0", + "@commitlint/message": "^20.0.0", + "@commitlint/to-lines": "^20.0.0", + "@commitlint/types": "^20.0.0" + }, + "engines": { + "node": ">=v18" } }, - "classlist.js": { - "version": "1.1.20150312", - "resolved": "http://npm.trustu.pre/classlist.js/-/classlist.js-1.1.20150312/1d70842f7022f08d9ac086ce69e5b250f2c57789.tgz", - "integrity": "sha1-HXCEL3Ai8I2awIbOaeWyUPLFd4k=" - }, - "clean-css": { - "version": "4.1.9", - "resolved": "http://npm.trustu.pre/clean-css/-/clean-css-4.1.9/35cee8ae7687a49b98034f70de00c4edd3826301.tgz", - "integrity": "sha1-Nc7ornaHpJuYA09w3gDE7dOCYwE=", + "node_modules/@commitlint/to-lines": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-20.0.0.tgz", + "integrity": "sha512-2l9gmwiCRqZNWgV+pX1X7z4yP0b3ex/86UmUFgoRt672Ez6cAM2lOQeHFRUTuE6sPpi8XBCGnd8Kh3bMoyHwJw==", "dev": true, - "requires": { - "source-map": "0.5.7" + "license": "MIT", + "engines": { + "node": ">=v18" } }, - "cliui": { - "version": "3.2.0", - "resolved": "http://npm.trustu.pre/cliui/-/cliui-3.2.0/120601537a916d29940f934da3b48d585a39213d.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "node_modules/@commitlint/top-level": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-20.0.0.tgz", + "integrity": "sha512-drXaPSP2EcopukrUXvUXmsQMu3Ey/FuJDc/5oiW4heoCfoE5BdLQyuc7veGeE3aoQaTVqZnh4D5WTWe2vefYKg==", "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" + "license": "MIT", + "dependencies": { + "find-up": "^7.0.0" + }, + "engines": { + "node": ">=v18" } }, - "clone": { - "version": "1.0.3", - "resolved": "http://npm.trustu.pre/clone/-/clone-1.0.3/298d7e2231660f40c003c2ed3140decf3f53085f.tgz", - "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", - "dev": true - }, - "clone-deep": { - "version": "0.3.0", - "resolved": "http://npm.trustu.pre/clone-deep/-/clone-deep-0.3.0/348c61ae9cdbe0edfe053d91ff4cc521d790ede8.tgz", - "integrity": "sha1-NIxhrpzb4O3+BT2R/0zFIdeQ7eg=", + "node_modules/@commitlint/types": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-20.0.0.tgz", + "integrity": "sha512-bVUNBqG6aznYcYjTjnc3+Cat/iBgbgpflxbIBTnsHTX0YVpnmINPEkSRWymT2Q8aSH3Y7aKnEbunilkYe8TybA==", "dev": true, - "requires": { - "for-own": "1.0.0", - "is-plain-object": "2.0.4", - "kind-of": "3.2.2", - "shallow-clone": "0.1.2" + "license": "MIT", + "dependencies": { + "@types/conventional-commits-parser": "^5.0.0", + "chalk": "^5.3.0" + }, + "engines": { + "node": ">=v18" } }, - "clone-stats": { - "version": "0.0.1", - "resolved": "http://npm.trustu.pre/clone-stats/-/clone-stats-0.0.1/b88f94a82cf38b8791d58046ea4029ad88ca99d1.tgz", - "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", - "dev": true - }, - "co": { - "version": "4.6.0", - "resolved": "http://npm.trustu.pre/co/-/co-4.6.0/6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "coa": { - "version": "1.0.4", - "resolved": "http://npm.trustu.pre/coa/-/coa-1.0.4/a9ef153660d6a86a8bdec0289a5c684d217432fd.tgz", - "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", + "node_modules/@csstools/color-helpers": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", + "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==", "dev": true, - "requires": { - "q": "1.5.1" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" } }, - "code-point-at": { - "version": "1.1.0", - "resolved": "http://npm.trustu.pre/code-point-at/-/code-point-at-1.1.0/0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "codelyzer": { - "version": "4.0.1", - "resolved": "http://npm.trustu.pre/codelyzer/-/codelyzer-4.0.1/0bb4cf52a325b257790f4980bb3c63833db10789.tgz", - "integrity": "sha512-MsOcaiLqcBK7hjHbfp9HZrflqWg5tD9A5qVSXkW208OJ8pkf63id8IiOjEiK/XU3o70W8tWbFKi1tAOwiJDMrQ==", + "node_modules/@csstools/css-calc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", "dev": true, - "requires": { - "app-root-path": "2.0.1", - "css-selector-tokenizer": "0.7.0", - "cssauron": "1.4.0", - "semver-dsl": "1.0.1", - "source-map": "0.5.7", - "sprintf-js": "1.0.3" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "collections": { - "version": "0.2.2", - "resolved": "http://npm.trustu.pre/collections/-/collections-0.2.2/1f23026b2ef36f927eecc901e99c5f0d48fa334e.tgz", - "integrity": "sha1-HyMCay7zb5J+7MkB6ZxfDUj6M04=", + "node_modules/@csstools/css-color-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz", + "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==", "dev": true, - "requires": { - "weak-map": "1.0.0" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^5.1.0", + "@csstools/css-calc": "^2.1.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "color": { - "version": "0.11.4", - "resolved": "http://npm.trustu.pre/color/-/color-0.11.4/6d7b5c74fb65e841cd48792ad1ed5e07b904d764.tgz", - "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", "dev": true, - "requires": { - "clone": "1.0.3", - "color-convert": "1.9.1", - "color-string": "0.3.0" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" } }, - "color-convert": { - "version": "1.9.1", - "resolved": "http://npm.trustu.pre/color-convert/-/color-convert-1.9.1/c1261107aeb2f294ebffec9ed9ecad529a6097ed.tgz", - "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "node_modules/@csstools/css-syntax-patches-for-csstree": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.0.14.tgz", + "integrity": "sha512-zSlIxa20WvMojjpCSy8WrNpcZ61RqfTfX3XTaOeVlGJrt/8HF3YbzgFZa01yTbT4GWQLwfTcC3EB8i3XnB647Q==", "dev": true, - "requires": { - "color-name": "1.1.3" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "color-name": { - "version": "1.1.3", - "resolved": "http://npm.trustu.pre/color-name/-/color-name-1.1.3/a7d0558bd89c42f795dd42328f740831ca53bc25.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "color-string": { - "version": "0.3.0", - "resolved": "http://npm.trustu.pre/color-string/-/color-string-0.3.0/27d46fb67025c5c2fa25993bfbf579e47841b991.tgz", - "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", "dev": true, - "requires": { - "color-name": "1.1.3" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" } }, - "colormin": { - "version": "1.1.2", - "resolved": "http://npm.trustu.pre/colormin/-/colormin-1.1.2/ea2f7420a72b96881a38aae59ec124a6f7298133.tgz", - "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", + "node_modules/@csstools/media-query-list-parser": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz", + "integrity": "sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==", "dev": true, - "requires": { - "color": "0.11.4", - "css-color-names": "0.0.4", - "has": "1.0.1" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "colors": { - "version": "1.1.2", - "resolved": "http://npm.trustu.pre/colors/-/colors-1.1.2/168a4701756b6a7f51a12ce0c97bfa28c084ed63.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "dev": true - }, - "combine-lists": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/combine-lists/-/combine-lists-1.0.1/458c07e09e0d900fc28b70a3fec2dacd1d2cb7f6.tgz", - "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", + "node_modules/@csstools/selector-specificity": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", "dev": true, - "requires": { - "lodash": "4.17.4" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" } }, - "combined-stream": { - "version": "1.0.5", - "resolved": "http://npm.trustu.pre/combined-stream/-/combined-stream-1.0.5/938370a57b4a51dea2c77c15d5c5fdf895164009.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "node_modules/@ctrl/tinycolor": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-4.1.0.tgz", + "integrity": "sha512-WyOx8cJQ+FQus4Mm4uPIZA64gbk3Wxh0so5Lcii0aJifqwoVOlfFtorjLE0Hen4OYyHZMXDWqMmaQemBhgxFRQ==", "dev": true, - "requires": { - "delayed-stream": "1.0.0" + "license": "MIT", + "engines": { + "node": ">=14" } }, - "commander": { - "version": "2.12.2", - "resolved": "http://npm.trustu.pre/commander/-/commander-2.12.2/0f5946c427ed9ec0d91a46bb9def53e54650e555.tgz", - "integrity": "sha512-BFnaq5ZOGcDN7FlrtBT4xxkgIToalIIxwjxLWVJ8bGTpe1LroqMiqQXdA7ygc7CRvaYS+9zfPGFnJqFSayx+AA==", - "dev": true - }, - "common-tags": { - "version": "1.5.1", - "resolved": "http://npm.trustu.pre/common-tags/-/common-tags-1.5.1/e2e39931a013cd02253defeed89a1ad615a27f07.tgz", - "integrity": "sha512-NrUYGY5TApAk9KB+IZXkR3GR4tA3g26HDsoiGt4kCMHZ727gOGkC+UNfq0Z22jE15bLkc/6RV5Jw1RBW6Usg6A==", + "node_modules/@dual-bundle/import-meta-resolve": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.2.1.tgz", + "integrity": "sha512-id+7YRUgoUX6CgV0DtuhirQWodeeA7Lf4i2x71JS/vtA5pRb/hIGWlw+G6MeXvsM+MXrz0VAydTGElX1rAfgPg==", "dev": true, - "requires": { - "babel-runtime": "6.26.0" + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/JounQin" } }, - "commondir": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/commondir/-/commondir-1.0.1/ddd800da0c66127393cca5950ea968a3aaf1253b.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "compare-func": { - "version": "1.3.2", - "resolved": "http://npm.trustu.pre/compare-func/-/compare-func-1.3.2/99dd0ba457e1f9bc722b12c08ec33eeab31fa648.tgz", - "integrity": "sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=", + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.9.tgz", + "integrity": "sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==", + "cpu": [ + "ppc64" + ], "dev": true, - "requires": { - "array-ify": "1.0.0", - "dot-prop": "3.0.0" + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.9.tgz", + "integrity": "sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.9.tgz", + "integrity": "sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.9.tgz", + "integrity": "sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.9.tgz", + "integrity": "sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.9.tgz", + "integrity": "sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.9.tgz", + "integrity": "sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.9.tgz", + "integrity": "sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.9.tgz", + "integrity": "sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.9.tgz", + "integrity": "sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.9.tgz", + "integrity": "sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.9.tgz", + "integrity": "sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.9.tgz", + "integrity": "sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.9.tgz", + "integrity": "sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.9.tgz", + "integrity": "sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.9.tgz", + "integrity": "sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.9.tgz", + "integrity": "sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.9.tgz", + "integrity": "sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.9.tgz", + "integrity": "sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.9.tgz", + "integrity": "sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.9.tgz", + "integrity": "sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.9.tgz", + "integrity": "sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.9.tgz", + "integrity": "sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.9.tgz", + "integrity": "sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.9.tgz", + "integrity": "sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.9.tgz", + "integrity": "sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" } }, - "component-bind": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/component-bind/-/component-bind-1.0.0/00c608ab7dcd93897c0009651b1d3a8e1e73bbd1.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", - "dev": true - }, - "component-emitter": { - "version": "1.1.2", - "resolved": "http://npm.trustu.pre/component-emitter/-/component-emitter-1.1.2/296594f2753daa63996d2af08d15a95116c9aec3.tgz", - "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=", - "dev": true - }, - "component-inherit": { - "version": "0.0.3", - "resolved": "http://npm.trustu.pre/component-inherit/-/component-inherit-0.0.3/645fc4adf58b72b649d5cae65135619db26ff143.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", - "dev": true - }, - "compressible": { - "version": "2.0.12", - "resolved": "http://npm.trustu.pre/compressible/-/compressible-2.0.12/c59a5c99db76767e9876500e271ef63b3493bd66.tgz", - "integrity": "sha1-xZpcmdt2dn6YdlAOJx72OzSTvWY=", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", "dev": true, - "requires": { - "mime-db": "1.30.0" + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "compression": { - "version": "1.7.1", - "resolved": "http://npm.trustu.pre/compression/-/compression-1.7.1/eff2603efc2e22cf86f35d2eb93589f9875373db.tgz", - "integrity": "sha1-7/JgPvwuIs+G810uuTWJ+YdTc9s=", + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, - "requires": { - "accepts": "1.3.4", - "bytes": "3.0.0", - "compressible": "2.0.12", - "debug": "2.6.9", - "on-headers": "1.0.1", - "safe-buffer": "5.1.1", - "vary": "1.1.2" + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "concat-map": { - "version": "0.0.1", - "resolved": "http://npm.trustu.pre/concat-map/-/concat-map-0.0.1/d8a96bd77fd68df7793a73036a3ba0d5405d477b.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.0", - "resolved": "http://npm.trustu.pre/concat-stream/-/concat-stream-1.6.0/0aac662fd52be78964d5532f694784e70110acf7.tgz", - "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "node_modules/@eslint/config-array": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "typedarray": "0.0.6" + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "connect": { - "version": "3.6.5", - "resolved": "http://npm.trustu.pre/connect/-/connect-3.6.5/fb8dde7ba0763877d0ec9df9dac0b4b40e72c7da.tgz", - "integrity": "sha1-+43ee6B2OHfQ7J352sC0tA5yx9o=", + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.0.6", - "parseurl": "1.3.2", - "utils-merge": "1.0.1" - }, - "dependencies": { - "finalhandler": { - "version": "1.0.6", - "resolved": "http://npm.trustu.pre/finalhandler/-/finalhandler-1.0.6/007aea33d1a4d3e42017f624848ad58d212f814f.tgz", - "integrity": "sha1-AHrqM9Gk0+QgF/YkhIrVjSEvgU8=", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.3.1", - "unpipe": "1.0.0" - } - } + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "connect-history-api-fallback": { - "version": "1.5.0", - "resolved": "http://npm.trustu.pre/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0/b06873934bc5e344fef611a196a6faae0aee015a.tgz", - "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=", - "dev": true - }, - "console-browserify": { - "version": "1.1.0", - "resolved": "http://npm.trustu.pre/console-browserify/-/console-browserify-1.1.0/f0241c45730a9fc6323b206dbf38edc741d0bb10.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "node_modules/@eslint/config-array/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, - "requires": { - "date-now": "0.1.4" + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "http://npm.trustu.pre/console-control-strings/-/console-control-strings-1.1.0/3d7cf4464db6446ea644bf4b39507f9851008e8e.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/constants-browserify/-/constants-browserify-1.0.0/c20b96d8c617748aaf1c16021760cd27fcb8cb75.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "http://npm.trustu.pre/content-disposition/-/content-disposition-0.5.2/0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", - "dev": true - }, - "content-type": { - "version": "1.0.4", - "resolved": "http://npm.trustu.pre/content-type/-/content-type-1.0.4/e138cc75e040c727b1966fe5e5f8c9aee256fe3b.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "conventional-changelog": { - "version": "1.1.7", - "resolved": "http://npm.trustu.pre/conventional-changelog/-/conventional-changelog-1.1.7/9151a62b1d8edb2d82711dabf5b7cf71041f82b1.tgz", - "integrity": "sha1-kVGmKx2O2y2CcR2r9bfPcQQfgrE=", + "node_modules/@eslint/config-helpers": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.1.tgz", + "integrity": "sha512-csZAzkNhsgwb0I/UAV6/RGFTbiakPCf0ZrGmrIxQpYvGZ00PhTkSnyKNolphgIvmnJeGw6rcGVEXfTzUnFuEvw==", "dev": true, - "requires": { - "conventional-changelog-angular": "1.5.2", - "conventional-changelog-atom": "0.1.2", - "conventional-changelog-codemirror": "0.2.1", - "conventional-changelog-core": "1.9.3", - "conventional-changelog-ember": "0.2.9", - "conventional-changelog-eslint": "0.2.1", - "conventional-changelog-express": "0.2.1", - "conventional-changelog-jquery": "0.1.0", - "conventional-changelog-jscs": "0.1.0", - "conventional-changelog-jshint": "0.2.1" + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.16.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "conventional-changelog-angular": { - "version": "1.5.2", - "resolved": "http://npm.trustu.pre/conventional-changelog-angular/-/conventional-changelog-angular-1.5.2/2b38f665fe9c5920af1a2f82f547f4babe6de57c.tgz", - "integrity": "sha1-Kzj2Zf6cWSCvGi+C9Uf0ur5t5Xw=", + "node_modules/@eslint/core": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.16.0.tgz", + "integrity": "sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==", "dev": true, - "requires": { - "compare-func": "1.3.2", - "q": "1.5.1" + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "conventional-changelog-atom": { - "version": "0.1.2", - "resolved": "http://npm.trustu.pre/conventional-changelog-atom/-/conventional-changelog-atom-0.1.2/12595ad5267a6937c34cf900281b1c65198a4c63.tgz", - "integrity": "sha1-Ella1SZ6aTfDTPkAKBscZRmKTGM=", + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", "dev": true, - "requires": { - "q": "1.5.1" + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "conventional-changelog-codemirror": { - "version": "0.2.1", - "resolved": "http://npm.trustu.pre/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.2.1/299a4f7147baf350e6c8158fc54954a291c5cc09.tgz", - "integrity": "sha1-KZpPcUe681DmyBWPxUlUopHFzAk=", - "dev": true, - "requires": { - "q": "1.5.1" - } - }, - "conventional-changelog-core": { - "version": "1.9.3", - "resolved": "http://npm.trustu.pre/conventional-changelog-core/-/conventional-changelog-core-1.9.3/2899fe779389a329f0ec4b2746c36ddefb98da2d.tgz", - "integrity": "sha1-KJn+d5OJoynw7EsnRsNt3vuY2i0=", - "dev": true, - "requires": { - "conventional-changelog-writer": "2.0.2", - "conventional-commits-parser": "2.0.1", - "dateformat": "1.0.12", - "get-pkg-repo": "1.4.0", - "git-raw-commits": "1.3.0", - "git-remote-origin-url": "2.0.0", - "git-semver-tags": "1.2.3", - "lodash": "4.17.4", - "normalize-package-data": "2.4.0", - "q": "1.5.1", - "read-pkg": "1.1.0", - "read-pkg-up": "1.0.1", - "through2": "2.0.3" - } - }, - "conventional-changelog-ember": { - "version": "0.2.9", - "resolved": "http://npm.trustu.pre/conventional-changelog-ember/-/conventional-changelog-ember-0.2.9/8ec73cc054e3ab064667fb1feb52fe8ef1b16438.tgz", - "integrity": "sha1-jsc8wFTjqwZGZ/sf61L+jvGxZDg=", + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "requires": { - "q": "1.5.1" + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "conventional-changelog-eslint": { - "version": "0.2.1", - "resolved": "http://npm.trustu.pre/conventional-changelog-eslint/-/conventional-changelog-eslint-0.2.1/2c2a11beb216f80649ba72834180293b687c0662.tgz", - "integrity": "sha1-LCoRvrIW+AZJunKDQYApO2h8BmI=", + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, - "requires": { - "q": "1.5.1" + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "conventional-changelog-express": { - "version": "0.2.1", - "resolved": "http://npm.trustu.pre/conventional-changelog-express/-/conventional-changelog-express-0.2.1/838d9e1e6c9099703b150b9c19aa2d781742bd6c.tgz", - "integrity": "sha1-g42eHmyQmXA7FQucGaoteBdCvWw=", + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, - "requires": { - "q": "1.5.1" + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "conventional-changelog-jquery": { - "version": "0.1.0", - "resolved": "http://npm.trustu.pre/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0/0208397162e3846986e71273b6c79c5b5f80f510.tgz", - "integrity": "sha1-Agg5cWLjhGmG5xJztsecW1+A9RA=", + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, - "requires": { - "q": "1.5.1" + "license": "MIT", + "engines": { + "node": ">= 4" } }, - "conventional-changelog-jscs": { - "version": "0.1.0", - "resolved": "http://npm.trustu.pre/conventional-changelog-jscs/-/conventional-changelog-jscs-0.1.0/0479eb443cc7d72c58bf0bcf0ef1d444a92f0e5c.tgz", - "integrity": "sha1-BHnrRDzH1yxYvwvPDvHURKkvDlw=", + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, - "requires": { - "q": "1.5.1" - } + "license": "MIT" }, - "conventional-changelog-jshint": { - "version": "0.2.1", - "resolved": "http://npm.trustu.pre/conventional-changelog-jshint/-/conventional-changelog-jshint-0.2.1/86139bb3ac99899f2b177e9617e09b37d99bcf3a.tgz", - "integrity": "sha1-hhObs6yZiZ8rF36WF+CbN9mbzzo=", + "node_modules/@eslint/eslintrc/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, - "requires": { - "compare-func": "1.3.2", - "q": "1.5.1" + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "conventional-changelog-writer": { - "version": "2.0.2", - "resolved": "http://npm.trustu.pre/conventional-changelog-writer/-/conventional-changelog-writer-2.0.2/b5857ded1b001daf9a78b9cd40926f45c134949b.tgz", - "integrity": "sha1-tYV97RsAHa+aeLnNQJJvRcE0lJs=", - "dev": true, - "requires": { - "compare-func": "1.3.2", - "conventional-commits-filter": "1.1.0", - "dateformat": "1.0.12", - "handlebars": "4.0.11", - "json-stringify-safe": "5.0.1", - "lodash": "4.17.4", - "meow": "3.7.0", - "semver": "5.4.1", - "split": "1.0.1", - "through2": "2.0.3" - } - }, - "conventional-commits-filter": { - "version": "1.1.0", - "resolved": "http://npm.trustu.pre/conventional-commits-filter/-/conventional-commits-filter-1.1.0/1fc29af30b5edab76f54e229c411b0c663d0f9eb.tgz", - "integrity": "sha1-H8Ka8wte2rdvVOIpxBGwxmPQ+es=", + "node_modules/@eslint/js": { + "version": "9.38.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.38.0.tgz", + "integrity": "sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A==", "dev": true, - "requires": { - "is-subset": "0.1.1", - "modify-values": "1.0.0" + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" } }, - "conventional-commits-parser": { - "version": "2.0.1", - "resolved": "http://npm.trustu.pre/conventional-commits-parser/-/conventional-commits-parser-2.0.1/1f15ce6b844f7ca41495c8190c0833c30b8b1693.tgz", - "integrity": "sha1-HxXOa4RPfKQUlcgZDAgzwwuLFpM=", + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", "dev": true, - "requires": { - "JSONStream": "1.3.1", - "is-text-path": "1.0.1", - "lodash": "4.17.4", - "meow": "3.7.0", - "split2": "2.2.0", - "through2": "2.0.3", - "trim-off-newlines": "1.0.1" + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "conventional-recommended-bump": { - "version": "1.0.3", - "resolved": "http://npm.trustu.pre/conventional-recommended-bump/-/conventional-recommended-bump-1.0.3/472b69b1b8f09c5c4ed40fe28a41e63cc04bd736.tgz", - "integrity": "sha1-RytpsbjwnFxO1A/iikHmPMBL1zY=", - "dev": true, - "requires": { - "concat-stream": "1.6.0", - "conventional-commits-filter": "1.1.0", - "conventional-commits-parser": "2.0.1", - "git-raw-commits": "1.3.0", - "git-semver-tags": "1.2.3", - "meow": "3.7.0", - "object-assign": "4.1.1" - } - }, - "convert-source-map": { - "version": "1.5.1", - "resolved": "http://npm.trustu.pre/convert-source-map/-/convert-source-map-1.5.1/b8278097b9bc229365de5c62cf5fcaed8b5599e5.tgz", - "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", - "dev": true - }, - "cookie": { - "version": "0.3.1", - "resolved": "http://npm.trustu.pre/cookie/-/cookie-0.3.1/e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "http://npm.trustu.pre/cookie-signature/-/cookie-signature-1.0.6/e303a882b342cc3ee8ca513a79999734dab3ae2c.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "http://npm.trustu.pre/copy-concurrently/-/copy-concurrently-1.0.5/92297398cae34937fcafd6ec8139c18051f0b5e0.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "node_modules/@eslint/plugin-kit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.0.tgz", + "integrity": "sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==", "dev": true, - "requires": { - "aproba": "1.2.0", - "fs-write-stream-atomic": "1.0.10", - "iferr": "0.1.5", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.16.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "copy-webpack-plugin": { - "version": "4.2.3", - "resolved": "http://npm.trustu.pre/copy-webpack-plugin/-/copy-webpack-plugin-4.2.3/4a3c61089f3b635777f0f0af346c338b39d63755.tgz", - "integrity": "sha512-cL/Wl3Y1QmmKThl/mWeGB+HH3YH+25tn8nhqEGsZda4Yn7GqGnDZ+TbeKJ7A6zvrxyNhhuviYAxn/tCyyAqh8Q==", - "dev": true, - "requires": { - "bluebird": "3.5.1", - "glob": "7.1.2", - "is-glob": "4.0.0", - "loader-utils": "0.2.17", - "lodash": "4.17.4", - "minimatch": "3.0.4" - }, - "dependencies": { - "loader-utils": { - "version": "0.2.17", - "resolved": "http://npm.trustu.pre/loader-utils/-/loader-utils-0.2.17/f86e6374d43205a6e6c60e9196f17c0299bfb348.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", - "dev": true, - "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1", - "object-assign": "4.1.1" - } - } + "node_modules/@floating-ui/core": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz", + "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.8" } }, - "core-js": { - "version": "2.5.1", - "resolved": "http://npm.trustu.pre/core-js/-/core-js-2.5.1/ae6874dc66937789b80754ff5428df66819ca50b.tgz", - "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=" - }, - "core-object": { - "version": "3.1.5", - "resolved": "http://npm.trustu.pre/core-object/-/core-object-3.1.5/fa627b87502adc98045e44678e9a8ec3b9c0d2a9.tgz", - "integrity": "sha512-sA2/4+/PZ/KV6CKgjrVrrUVBKCkdDO02CUlQ0YKTQoYUwPYNOtOAcWlbYhd5v/1JqYaA6oZ4sDlOU4ppVw6Wbg==", + "node_modules/@floating-ui/dom": { + "version": "1.6.12", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.12.tgz", + "integrity": "sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==", "dev": true, - "requires": { - "chalk": "2.2.2" + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.8" } }, - "core-util-is": { - "version": "1.0.2", - "resolved": "http://npm.trustu.pre/core-util-is/-/core-util-is-1.0.2/b5fd54220aa2bc5ab57aab7140c940754503c1a7.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true + "node_modules/@floating-ui/utils": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz", + "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==", + "dev": true, + "license": "MIT" }, - "cosmiconfig": { - "version": "2.2.2", - "resolved": "http://npm.trustu.pre/cosmiconfig/-/cosmiconfig-2.2.2/6173cebd56fac042c1f4390edf7af6c07c7cb892.tgz", - "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", + "node_modules/@formatjs/ecma402-abstract": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.6.tgz", + "integrity": "sha512-HJnTFeRM2kVFVr5gr5kH1XP6K0JcJtE7Lzvtr3FS/so5f1kpsqqqxy5JF+FRaO6H2qmcMfAUIox7AJteieRtVw==", "dev": true, - "requires": { - "is-directory": "0.3.1", - "js-yaml": "3.7.0", - "minimist": "1.2.0", - "object-assign": "4.1.1", - "os-homedir": "1.0.2", - "parse-json": "2.2.0", - "require-from-string": "1.2.1" + "license": "MIT", + "dependencies": { + "@formatjs/fast-memoize": "2.2.7", + "@formatjs/intl-localematcher": "0.6.2", + "decimal.js": "^10.4.3", + "tslib": "^2.8.0" } }, - "coveralls": { - "version": "3.0.0", - "resolved": "http://npm.trustu.pre/coveralls/-/coveralls-3.0.0/22ef730330538080d29b8c151dc9146afde88a99.tgz", - "integrity": "sha512-ZppXR9y5PraUOrf/DzHJY6gzNUhXYE3b9D43xEXs4QYZ7/Oe0Gy0CS+IPKWFfvQFXB3RG9QduaQUFehzSpGAFw==", + "node_modules/@formatjs/fast-memoize": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.7.tgz", + "integrity": "sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==", "dev": true, - "requires": { - "js-yaml": "3.7.0", - "lcov-parse": "0.0.10", - "log-driver": "1.2.5", - "minimist": "1.2.0", - "request": "2.81.0" + "license": "MIT", + "dependencies": { + "tslib": "^2.8.0" } }, - "create-ecdh": { - "version": "4.0.0", - "resolved": "http://npm.trustu.pre/create-ecdh/-/create-ecdh-4.0.0/888c723596cdf7612f6498233eebd7a35301737d.tgz", - "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "node_modules/@formatjs/icu-messageformat-parser": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.11.4.tgz", + "integrity": "sha512-7kR78cRrPNB4fjGFZg3Rmj5aah8rQj9KPzuLsmcSn4ipLXQvC04keycTI1F7kJYDwIXtT2+7IDEto842CfZBtw==", "dev": true, - "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.0" + "license": "MIT", + "dependencies": { + "@formatjs/ecma402-abstract": "2.3.6", + "@formatjs/icu-skeleton-parser": "1.8.16", + "tslib": "^2.8.0" } }, - "create-hash": { - "version": "1.1.3", - "resolved": "http://npm.trustu.pre/create-hash/-/create-hash-1.1.3/606042ac8b9262750f483caddab0f5819172d8fd.tgz", - "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "node_modules/@formatjs/icu-skeleton-parser": { + "version": "1.8.16", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.16.tgz", + "integrity": "sha512-H13E9Xl+PxBd8D5/6TVUluSpxGNvFSlN/b3coUp0e0JpuWXXnQDiavIpY3NnvSp4xhEMoXyyBvVfdFX8jglOHQ==", "dev": true, - "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "ripemd160": "2.0.1", - "sha.js": "2.4.9" + "license": "MIT", + "dependencies": { + "@formatjs/ecma402-abstract": "2.3.6", + "tslib": "^2.8.0" } }, - "create-hmac": { - "version": "1.1.6", - "resolved": "http://npm.trustu.pre/create-hmac/-/create-hmac-1.1.6/acb9e221a4e17bdb076e90657c42b93e3726cf06.tgz", - "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "node_modules/@formatjs/intl-localematcher": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.6.2.tgz", + "integrity": "sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==", "dev": true, - "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "inherits": "2.0.3", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.9" + "license": "MIT", + "dependencies": { + "tslib": "^2.8.0" } }, - "cross-spawn": { - "version": "3.0.1", - "resolved": "http://npm.trustu.pre/cross-spawn/-/cross-spawn-3.0.1/1256037ecb9f0c5f79e3d6ef135e30770184b982.tgz", - "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", "dev": true, - "optional": true, - "requires": { - "lru-cache": "4.1.1", - "which": "1.3.0" + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" } }, - "crypt": { - "version": "0.0.2", - "resolved": "http://npm.trustu.pre/crypt/-/crypt-0.0.2/88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b.tgz", - "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", - "dev": true - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "http://npm.trustu.pre/cryptiles/-/cryptiles-2.0.5/3bdfecdc608147c1c67202fa291e7dca59eaa3b8.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "dev": true, - "requires": { - "boom": "2.10.1" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "http://npm.trustu.pre/crypto-browserify/-/crypto-browserify-3.12.0/396cf9f3137f03e4b8e532c58f698254e00f80ec.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "requires": { - "browserify-cipher": "1.0.0", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.0", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "diffie-hellman": "5.0.2", - "inherits": "2.0.3", - "pbkdf2": "3.0.14", - "public-encrypt": "4.0.0", - "randombytes": "2.0.5", - "randomfill": "1.0.3" - } - }, - "css-color-names": { - "version": "0.0.4", - "resolved": "http://npm.trustu.pre/css-color-names/-/css-color-names-0.0.4/808adc2e79cf84738069b646cb20ec27beb629e0.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", - "dev": true - }, - "css-loader": { - "version": "0.28.7", - "resolved": "http://npm.trustu.pre/css-loader/-/css-loader-0.28.7/5f2ee989dd32edd907717f953317656160999c1b.tgz", - "integrity": "sha512-GxMpax8a/VgcfRrVy0gXD6yLd5ePYbXX/5zGgTVYp4wXtJklS8Z2VaUArJgc//f6/Dzil7BaJObdSv8eKKCPgg==", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "css-selector-tokenizer": "0.7.0", - "cssnano": "3.10.0", - "icss-utils": "2.1.0", - "loader-utils": "1.1.0", - "lodash.camelcase": "4.3.0", - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-modules-extract-imports": "1.1.0", - "postcss-modules-local-by-default": "1.2.0", - "postcss-modules-scope": "1.1.0", - "postcss-modules-values": "1.3.0", - "postcss-value-parser": "3.3.0", - "source-list-map": "2.0.0" - } - }, - "css-parse": { - "version": "1.7.0", - "resolved": "http://npm.trustu.pre/css-parse/-/css-parse-1.7.0/321f6cf73782a6ff751111390fc05e2c657d8c9b.tgz", - "integrity": "sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs=", - "dev": true - }, - "css-select": { - "version": "1.2.0", - "resolved": "http://npm.trustu.pre/css-select/-/css-select-1.2.0/2b3a110539c5355f1cd8d314623e870b121ec858.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", "dev": true, - "requires": { - "boolbase": "1.0.0", - "css-what": "2.1.0", - "domutils": "1.5.1", - "nth-check": "1.0.1" + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" } }, - "css-selector-tokenizer": { - "version": "0.7.0", - "resolved": "http://npm.trustu.pre/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0/e6988474ae8c953477bf5e7efecfceccd9cf4c86.tgz", - "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", "dev": true, - "requires": { - "cssesc": "0.1.0", - "fastparse": "1.1.1", - "regexpu-core": "1.0.0" + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "css-what": { - "version": "2.1.0", - "resolved": "http://npm.trustu.pre/css-what/-/css-what-2.1.0/9467d032c38cfaefb9f2d79501253062f87fa1bd.tgz", - "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", - "dev": true - }, - "cssauron": { - "version": "1.4.0", - "resolved": "http://npm.trustu.pre/cssauron/-/cssauron-1.4.0/a6602dff7e04a8306dc0db9a551e92e8b5662ad8.tgz", - "integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=", + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", "dev": true, - "requires": { - "through": "2.3.8" + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" } }, - "cssesc": { - "version": "0.1.0", - "resolved": "http://npm.trustu.pre/cssesc/-/cssesc-0.1.0/c814903e45623371a0477b40109aaafbeeaddbb4.tgz", - "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", - "dev": true - }, - "cssnano": { - "version": "3.10.0", - "resolved": "http://npm.trustu.pre/cssnano/-/cssnano-3.10.0/4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38.tgz", - "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", - "dev": true, - "requires": { - "autoprefixer": "6.7.7", - "decamelize": "1.2.0", - "defined": "1.0.0", - "has": "1.0.1", - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-calc": "5.3.1", - "postcss-colormin": "2.2.2", - "postcss-convert-values": "2.6.1", - "postcss-discard-comments": "2.0.4", - "postcss-discard-duplicates": "2.1.0", - "postcss-discard-empty": "2.1.0", - "postcss-discard-overridden": "0.1.1", - "postcss-discard-unused": "2.2.3", - "postcss-filter-plugins": "2.0.2", - "postcss-merge-idents": "2.1.7", - "postcss-merge-longhand": "2.0.2", - "postcss-merge-rules": "2.1.2", - "postcss-minify-font-values": "1.0.5", - "postcss-minify-gradients": "1.0.5", - "postcss-minify-params": "1.2.2", - "postcss-minify-selectors": "2.1.1", - "postcss-normalize-charset": "1.1.1", - "postcss-normalize-url": "3.0.8", - "postcss-ordered-values": "2.2.3", - "postcss-reduce-idents": "2.4.0", - "postcss-reduce-initial": "1.0.1", - "postcss-reduce-transforms": "1.0.4", - "postcss-svgo": "2.1.6", - "postcss-unique-selectors": "2.0.2", - "postcss-value-parser": "3.3.0", - "postcss-zindex": "2.2.0" - } - }, - "csso": { - "version": "2.3.2", - "resolved": "http://npm.trustu.pre/csso/-/csso-2.3.2/ddd52c587033f49e94b71fc55569f252e8ff5f85.tgz", - "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, - "requires": { - "clap": "1.2.3", - "source-map": "0.5.7" + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "cuint": { - "version": "0.2.2", - "resolved": "http://npm.trustu.pre/cuint/-/cuint-0.2.2/408086d409550c2631155619e9fa7bcadc3b991b.tgz", - "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=", - "dev": true - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "http://npm.trustu.pre/currently-unhandled/-/currently-unhandled-0.4.1/988df33feab191ef799a61369dd76c17adf957ea.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "node_modules/@humanwhocodes/config-array/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, - "requires": { - "array-find-index": "1.0.2" + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "custom-event": { + "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", - "resolved": "http://npm.trustu.pre/custom-event/-/custom-event-1.0.1/5d02a46850adf1b4a317946a3928fccb5bfd0425.tgz", - "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", - "dev": true - }, - "cyclist": { - "version": "0.2.2", - "resolved": "http://npm.trustu.pre/cyclist/-/cyclist-0.2.2/1b33792e11e914a2fd6d6ed6447464444e5fa640.tgz", - "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", - "dev": true - }, - "d": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/d/-/d-1.0.0/754bb5bfe55451da69a58b94d45f4c5b0462d58f.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, - "requires": { - "es5-ext": "0.10.37" + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "dargs": { - "version": "4.1.0", - "resolved": "http://npm.trustu.pre/dargs/-/dargs-4.1.0/03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17.tgz", - "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=", + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } + "license": "BSD-3-Clause" }, - "dashdash": { - "version": "1.14.1", - "resolved": "http://npm.trustu.pre/dashdash/-/dashdash-1.14.1/853cfa0f7cbe2fed5de20326b8dd581035f6e2f0.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "node_modules/@humanwhocodes/retry": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz", + "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==", "dev": true, - "requires": { - "assert-plus": "1.0.0" + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/assert-plus/-/assert-plus-1.0.0/f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "date-now": { - "version": "0.1.4", - "resolved": "http://npm.trustu.pre/date-now/-/date-now-0.1.4/eaf439fd4d4848ad74e5cc7dbef200672b9e345b.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", - "dev": true - }, - "dateformat": { - "version": "1.0.12", - "resolved": "http://npm.trustu.pre/dateformat/-/dateformat-1.0.12/9f124b67594c937ff706932e4a642cca8dbbfee9.tgz", - "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", + "node_modules/@inquirer/ansi": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.1.tgz", + "integrity": "sha512-yqq0aJW/5XPhi5xOAL1xRCpe1eh8UFVgYFpFsjEqmIR8rKLyP+HINvFXwUaxYICflJrVlxnp7lLN6As735kVpw==", "dev": true, - "requires": { - "get-stdin": "4.0.1", - "meow": "3.7.0" + "license": "MIT", + "engines": { + "node": ">=18" } }, - "debug": { - "version": "2.6.9", - "resolved": "http://npm.trustu.pre/debug/-/debug-2.6.9/5d128515df134ff327e90a4c93f4e077a536341f.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/@inquirer/checkbox": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.3.0.tgz", + "integrity": "sha512-5+Q3PKH35YsnoPTh75LucALdAxom6xh5D1oeY561x4cqBuH24ZFVyFREPe14xgnrtmGu3EEt1dIi60wRVSnGCw==", "dev": true, - "requires": { - "ms": "2.0.0" + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.1", + "@inquirer/core": "^10.3.0", + "@inquirer/figures": "^1.0.14", + "@inquirer/type": "^3.0.9", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "decamelize": { - "version": "1.2.0", - "resolved": "http://npm.trustu.pre/decamelize/-/decamelize-1.2.0/f6534d15148269b20352e7bee26f501f9a191290.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "deep-equal": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/deep-equal/-/deep-equal-1.0.1/f5d260292b660e084eff4cdbc9f08ad3247448b5.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "http://npm.trustu.pre/deep-is/-/deep-is-0.1.3/b369d6fb5dbc13eecf524f91b070feedc357cf34.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "default-require-extensions": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/default-require-extensions/-/default-require-extensions-1.0.0/f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8.tgz", - "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", + "node_modules/@inquirer/confirm": { + "version": "5.1.14", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.14.tgz", + "integrity": "sha512-5yR4IBfe0kXe59r1YCTG8WXkUbl7Z35HK87Sw+WUyGD8wNUx7JvY7laahzeytyE1oLn74bQnL7hstctQxisQ8Q==", "dev": true, - "requires": { - "strip-bom": "2.0.0" + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.15", + "@inquirer/type": "^3.0.8" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "define-properties": { - "version": "1.1.2", - "resolved": "http://npm.trustu.pre/define-properties/-/define-properties-1.1.2/83a73f2fea569898fb737193c8f873caf6d45c94.tgz", - "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", + "node_modules/@inquirer/core": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.3.0.tgz", + "integrity": "sha512-Uv2aPPPSK5jeCplQmQ9xadnFx2Zhj9b5Dj7bU6ZeCdDNNY11nhYy4btcSdtDguHqCT2h5oNeQTcUNSGGLA7NTA==", "dev": true, - "requires": { - "foreach": "2.0.5", - "object-keys": "1.0.11" - } - }, - "defined": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/defined/-/defined-1.0.0/c98d9bcef75674188e110969151199e39b1fa693.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", - "dev": true - }, - "del": { - "version": "3.0.0", - "resolved": "http://npm.trustu.pre/del/-/del-3.0.0/53ecf699ffcbcb39637691ab13baf160819766e5.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", - "dev": true, - "requires": { - "globby": "6.1.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", - "p-map": "1.2.0", - "pify": "3.0.0", - "rimraf": "2.6.2" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "http://npm.trustu.pre/pify/-/pify-3.0.0/e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.1", + "@inquirer/figures": "^1.0.14", + "@inquirer/type": "^3.0.9", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true } } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/delayed-stream/-/delayed-stream-1.0.0/df3ae199acadfb7d440aaae0b29e2272b24ec619.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/delegates/-/delegates-1.0.0/84c6e159b81904fdca59a0ef44cd870d31250f9a.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, - "denodeify": { - "version": "1.2.1", - "resolved": "http://npm.trustu.pre/denodeify/-/denodeify-1.2.1/3a36287f5034e699e7577901052c2e6c94251631.tgz", - "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=", - "dev": true - }, - "depd": { - "version": "1.1.1", - "resolved": "http://npm.trustu.pre/depd/-/depd-1.1.1/5783b4e1c459f06fa5ca27f991f3d06e7a310359.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", - "dev": true - }, - "des.js": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/des.js/-/des.js-1.0.0/c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "node_modules/@inquirer/editor": { + "version": "4.2.21", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.21.tgz", + "integrity": "sha512-MjtjOGjr0Kh4BciaFShYpZ1s9400idOdvQ5D7u7lE6VztPFoyLcVNE5dXBmEEIQq5zi4B9h2kU+q7AVBxJMAkQ==", "dev": true, - "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.0", + "@inquirer/external-editor": "^1.0.2", + "@inquirer/type": "^3.0.9" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "destroy": { - "version": "1.0.4", - "resolved": "http://npm.trustu.pre/destroy/-/destroy-1.0.4/978857442c44749e4206613e37946205826abd80.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "detect-indent": { - "version": "4.0.0", - "resolved": "http://npm.trustu.pre/detect-indent/-/detect-indent-4.0.0/f76d064352cdf43a1cb6ce619c4ee3a9475de208.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "node_modules/@inquirer/expand": { + "version": "4.0.21", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.21.tgz", + "integrity": "sha512-+mScLhIcbPFmuvU3tAGBed78XvYHSvCl6dBiYMlzCLhpr0bzGzd8tfivMMeqND6XZiaZ1tgusbUHJEfc6YzOdA==", "dev": true, - "requires": { - "repeating": "2.0.1" + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.0", + "@inquirer/type": "^3.0.9", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "detect-node": { - "version": "2.0.3", - "resolved": "http://npm.trustu.pre/detect-node/-/detect-node-2.0.3/a2033c09cc8e158d37748fbde7507832bd6ce127.tgz", - "integrity": "sha1-ogM8CcyOFY03dI+951B4Mr1s4Sc=", - "dev": true - }, - "di": { - "version": "0.0.1", - "resolved": "http://npm.trustu.pre/di/-/di-0.0.1/806649326ceaa7caa3306d75d985ea2748ba913c.tgz", - "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", - "dev": true - }, - "diff": { - "version": "3.4.0", - "resolved": "http://npm.trustu.pre/diff/-/diff-3.4.0/b1d85507daf3964828de54b37d0d73ba67dda56c.tgz", - "integrity": "sha512-QpVuMTEoJMF7cKzi6bvWhRulU1fZqZnvyVQgNhPaxxuTYwyjn/j1v9falseQ/uXWwPnO56RBfwtg4h/EQXmucA==", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.2", - "resolved": "http://npm.trustu.pre/diffie-hellman/-/diffie-hellman-5.0.2/b5835739270cfe26acf632099fded2a07f209e5e.tgz", - "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "node_modules/@inquirer/external-editor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.2.tgz", + "integrity": "sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==", "dev": true, - "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.1", - "randombytes": "2.0.5" + "license": "MIT", + "dependencies": { + "chardet": "^2.1.0", + "iconv-lite": "^0.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "dns-equal": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/dns-equal/-/dns-equal-1.0.0/b39e7f1da6eb0a75ba9c17324b34753c47e0654d.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true - }, - "dns-packet": { - "version": "1.2.2", - "resolved": "http://npm.trustu.pre/dns-packet/-/dns-packet-1.2.2/a8a26bec7646438963fc86e06f8f8b16d6c8bf7a.tgz", - "integrity": "sha512-kN+DjfGF7dJGUL7nWRktL9Z18t1rWP3aQlyZdY8XlpvU3Nc6GeFTQApftcjtWKxAZfiggZSGrCEoszNgvnpwDg==", + "node_modules/@inquirer/external-editor/node_modules/iconv-lite": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", "dev": true, - "requires": { - "ip": "1.1.5", - "safe-buffer": "5.1.1" + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "dns-txt": { - "version": "2.0.2", - "resolved": "http://npm.trustu.pre/dns-txt/-/dns-txt-2.0.2/b91d806f5d27188e4ab3e7d107d881a1cc4642b6.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "node_modules/@inquirer/figures": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.14.tgz", + "integrity": "sha512-DbFgdt+9/OZYFM+19dbpXOSeAstPy884FPy1KjDu4anWwymZeOYhMY1mdFri172htv6mvc/uvIAAi7b7tvjJBQ==", "dev": true, - "requires": { - "buffer-indexof": "1.1.1" + "license": "MIT", + "engines": { + "node": ">=18" } }, - "docopt": { - "version": "0.6.2", - "resolved": "http://npm.trustu.pre/docopt/-/docopt-0.6.2/b28e9e2220da5ec49f7ea5bb24a47787405eeb11.tgz", - "integrity": "sha1-so6eIiDaXsSffqW7JKR3h0Be6xE=", - "dev": true - }, - "dom-converter": { - "version": "0.1.4", - "resolved": "http://npm.trustu.pre/dom-converter/-/dom-converter-0.1.4/a45ef5727b890c9bffe6d7c876e7b19cb0e17f3b.tgz", - "integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=", + "node_modules/@inquirer/input": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.2.5.tgz", + "integrity": "sha512-7GoWev7P6s7t0oJbenH0eQ0ThNdDJbEAEtVt9vsrYZ9FulIokvd823yLyhQlWHJPGce1wzP53ttfdCZmonMHyA==", "dev": true, - "requires": { - "utila": "0.3.3" - }, + "license": "MIT", "dependencies": { - "utila": { - "version": "0.3.3", - "resolved": "http://npm.trustu.pre/utila/-/utila-0.3.3/d7e8e7d7e309107092b05f8d9688824d633a4226.tgz", - "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", - "dev": true + "@inquirer/core": "^10.3.0", + "@inquirer/type": "^3.0.9" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true } } }, - "dom-serialize": { - "version": "2.2.1", - "resolved": "http://npm.trustu.pre/dom-serialize/-/dom-serialize-2.2.1/562ae8999f44be5ea3076f5419dcd59eb43ac95b.tgz", - "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "node_modules/@inquirer/number": { + "version": "3.0.21", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.21.tgz", + "integrity": "sha512-5QWs0KGaNMlhbdhOSCFfKsW+/dcAVC2g4wT/z2MCiZM47uLgatC5N20kpkDQf7dHx+XFct/MJvvNGy6aYJn4Pw==", "dev": true, - "requires": { - "custom-event": "1.0.1", - "ent": "2.2.0", - "extend": "3.0.1", - "void-elements": "2.0.1" + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.0", + "@inquirer/type": "^3.0.9" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "dom-serializer": { - "version": "0.1.0", - "resolved": "http://npm.trustu.pre/dom-serializer/-/dom-serializer-0.1.0/073c697546ce0780ce23be4a28e293e40bc30c82.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "node_modules/@inquirer/password": { + "version": "4.0.21", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.21.tgz", + "integrity": "sha512-xxeW1V5SbNFNig2pLfetsDb0svWlKuhmr7MPJZMYuDnCTkpVBI+X/doudg4pznc1/U+yYmWFFOi4hNvGgUo7EA==", "dev": true, - "requires": { - "domelementtype": "1.1.3", - "entities": "1.1.1" - }, + "license": "MIT", "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "http://npm.trustu.pre/domelementtype/-/domelementtype-1.1.3/bd28773e2642881aec51544924299c5cd822185b.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true + "@inquirer/ansi": "^1.0.1", + "@inquirer/core": "^10.3.0", + "@inquirer/type": "^3.0.9" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true } } }, - "domain-browser": { - "version": "1.1.7", - "resolved": "http://npm.trustu.pre/domain-browser/-/domain-browser-1.1.7/867aa4b093faa05f1de08c06f4d7b21fdf8698bc.tgz", - "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", - "dev": true - }, - "domelementtype": { - "version": "1.3.0", - "resolved": "http://npm.trustu.pre/domelementtype/-/domelementtype-1.3.0/b17aed82e8ab59e52dd9c19b1756e0fc187204c2.tgz", - "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", - "dev": true - }, - "domhandler": { - "version": "2.1.0", - "resolved": "http://npm.trustu.pre/domhandler/-/domhandler-2.1.0/d2646f5e57f6c3bab11cf6cb05d3c0acf7412594.tgz", - "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", + "node_modules/@inquirer/prompts": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.8.2.tgz", + "integrity": "sha512-nqhDw2ZcAUrKNPwhjinJny903bRhI0rQhiDz1LksjeRxqa36i3l75+4iXbOy0rlDpLJGxqtgoPavQjmmyS5UJw==", "dev": true, - "requires": { - "domelementtype": "1.3.0" + "license": "MIT", + "dependencies": { + "@inquirer/checkbox": "^4.2.1", + "@inquirer/confirm": "^5.1.14", + "@inquirer/editor": "^4.2.17", + "@inquirer/expand": "^4.0.17", + "@inquirer/input": "^4.2.1", + "@inquirer/number": "^3.0.17", + "@inquirer/password": "^4.0.17", + "@inquirer/rawlist": "^4.1.5", + "@inquirer/search": "^3.1.0", + "@inquirer/select": "^4.3.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "domino": { - "version": "1.0.30", - "resolved": "http://npm.trustu.pre/domino/-/domino-1.0.30/54a4154ecae968616680f8feba3cedff355c71f4.tgz", - "integrity": "sha512-ikq8WiDSkICdkElud317F2Sigc6A3EDpWsxWBwIZqOl95km4p/Vc9Rj98id7qKgsjDmExj0AVM7JOd4bb647Xg==", - "dev": true - }, - "domutils": { - "version": "1.5.1", - "resolved": "http://npm.trustu.pre/domutils/-/domutils-1.5.1/dcd8488a26f563d61079e48c9f7b7e32373682cf.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "node_modules/@inquirer/rawlist": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.9.tgz", + "integrity": "sha512-AWpxB7MuJrRiSfTKGJ7Y68imYt8P9N3Gaa7ySdkFj1iWjr6WfbGAhdZvw/UnhFXTHITJzxGUI9k8IX7akAEBCg==", "dev": true, - "requires": { - "dom-serializer": "0.1.0", - "domelementtype": "1.3.0" + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.0", + "@inquirer/type": "^3.0.9", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "dot-prop": { - "version": "3.0.0", - "resolved": "http://npm.trustu.pre/dot-prop/-/dot-prop-3.0.0/1b708af094a49c9a0e7dbcad790aba539dac1177.tgz", - "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", + "node_modules/@inquirer/search": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.2.0.tgz", + "integrity": "sha512-a5SzB/qrXafDX1Z4AZW3CsVoiNxcIYCzYP7r9RzrfMpaLpB+yWi5U8BWagZyLmwR0pKbbL5umnGRd0RzGVI8bQ==", "dev": true, - "requires": { - "is-obj": "1.0.1" + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.0", + "@inquirer/figures": "^1.0.14", + "@inquirer/type": "^3.0.9", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "duplexer2": { - "version": "0.0.2", - "resolved": "http://npm.trustu.pre/duplexer2/-/duplexer2-0.0.2/c614dcf67e2fb14995a91711e5a617e8a60a31db.tgz", - "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", + "node_modules/@inquirer/select": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.4.0.tgz", + "integrity": "sha512-kaC3FHsJZvVyIjYBs5Ih8y8Bj4P/QItQWrZW22WJax7zTN+ZPXVGuOM55vzbdCP9zKUiBd9iEJVdesujfF+cAA==", "dev": true, - "requires": { - "readable-stream": "1.1.14" - }, + "license": "MIT", "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "http://npm.trustu.pre/isarray/-/isarray-0.0.1/8a18acfca9a8f4177e09abfc6038939b05d1eedf.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "http://npm.trustu.pre/readable-stream/-/readable-stream-1.1.14/7cf4c54ef648e3813084c636dd2079e166c081d9.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "http://npm.trustu.pre/string_decoder/-/string_decoder-0.10.31/62e203bc41766c6c28c9fc84301dab1c5310fa94.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true + "@inquirer/ansi": "^1.0.1", + "@inquirer/core": "^10.3.0", + "@inquirer/figures": "^1.0.14", + "@inquirer/type": "^3.0.9", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true } } }, - "duplexify": { - "version": "3.5.1", - "resolved": "http://npm.trustu.pre/duplexify/-/duplexify-3.5.1/4e1516be68838bc90a49994f0b39a6e5960befcd.tgz", - "integrity": "sha512-j5goxHTwVED1Fpe5hh3q9R93Kip0Bg2KVAt4f8CEYM3UEwYcPSvWbXaUQOzdX/HtiNomipv+gU7ASQPDbV7pGQ==", + "node_modules/@inquirer/type": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.9.tgz", + "integrity": "sha512-QPaNt/nmE2bLGQa9b7wwyRJoLZ7pN6rcyXvzU0YCmivmJyq1BVo94G98tStRWkoD1RgDX5C+dPlhhHzNdu/W/w==", "dev": true, - "requires": { - "end-of-stream": "1.4.0", - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "stream-shift": "1.0.0" + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "http://npm.trustu.pre/ecc-jsbn/-/ecc-jsbn-0.1.1/0fc73a9ed5f0d53c38193398523ef7e543777505.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" + "license": "MIT", + "engines": { + "node": "20 || >=22" } }, - "ee-first": { - "version": "1.1.1", - "resolved": "http://npm.trustu.pre/ee-first/-/ee-first-1.1.1/590c61156b0ae2f4f0255732a158b266bc56b21d.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "ejs": { - "version": "2.5.7", - "resolved": "http://npm.trustu.pre/ejs/-/ejs-2.5.7/cc872c168880ae3c7189762fd5ffc00896c9518a.tgz", - "integrity": "sha1-zIcsFoiArjxxiXYv1f/ACJbJUYo=", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.28", - "resolved": "http://npm.trustu.pre/electron-to-chromium/-/electron-to-chromium-1.3.28/8dd4e6458086644e9f9f0a1cf32e2a1f9dffd9ee.tgz", - "integrity": "sha1-jdTmRYCGZE6fnwoc8y4qH53/2e4=", - "dev": true - }, - "elliptic": { - "version": "6.4.0", - "resolved": "http://npm.trustu.pre/elliptic/-/elliptic-6.4.0/cac9af8762c85836187003c8dfe193e5e2eae5df.tgz", - "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", "dev": true, - "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.3", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" - } - }, - "ember-cli-string-utils": { - "version": "1.1.0", - "resolved": "http://npm.trustu.pre/ember-cli-string-utils/-/ember-cli-string-utils-1.1.0/39b677fc2805f55173735376fcef278eaa4452a1.tgz", - "integrity": "sha1-ObZ3/CgF9VFzc1N2/O8njqpEUqE=", - "dev": true - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "http://npm.trustu.pre/emojis-list/-/emojis-list-2.1.0/4daa4d9db00f9819880c79fa457ae5b09a1fd389.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true - }, - "encodeurl": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/encodeurl/-/encodeurl-1.0.1/79e3d58655346909fe6f0f45a5de68103b294d20.tgz", - "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=", - "dev": true - }, - "end-of-stream": { - "version": "1.4.0", - "resolved": "http://npm.trustu.pre/end-of-stream/-/end-of-stream-1.4.0/7a90d833efda6cfa6eac0f4949dbb0fad3a63206.tgz", - "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", - "dev": true, - "requires": { - "once": "1.4.0" - } - }, - "engine.io": { - "version": "1.8.3", - "resolved": "http://npm.trustu.pre/engine.io/-/engine.io-1.8.3/8de7f97895d20d39b85f88eeee777b2bd42b13d4.tgz", - "integrity": "sha1-jef5eJXSDTm4X4ju7nd7K9QrE9Q=", - "dev": true, - "requires": { - "accepts": "1.3.3", - "base64id": "1.0.0", - "cookie": "0.3.1", - "debug": "2.3.3", - "engine.io-parser": "1.3.2", - "ws": "1.1.2" - }, - "dependencies": { - "accepts": { - "version": "1.3.3", - "resolved": "http://npm.trustu.pre/accepts/-/accepts-1.3.3/c3ca7434938648c3e0d9c1e328dd68b622c284ca.tgz", - "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", - "dev": true, - "requires": { - "mime-types": "2.1.17", - "negotiator": "0.6.1" - } - }, - "debug": { - "version": "2.3.3", - "resolved": "http://npm.trustu.pre/debug/-/debug-2.3.3/40c453e67e6e13c901ddec317af8986cda9eff8c.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "http://npm.trustu.pre/ms/-/ms-0.7.2/ae25cf2512b3885a1d95d7f037868d8431124765.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - } + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" } }, - "engine.io-client": { - "version": "1.8.3", - "resolved": "http://npm.trustu.pre/engine.io-client/-/engine.io-client-1.8.3/1798ed93451246453d4c6f635d7a201fe940d5ab.tgz", - "integrity": "sha1-F5jtk0USRkU9TG9jXXogH+lA1as=", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "2.3.3", - "engine.io-parser": "1.3.2", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parsejson": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "1.1.2", - "xmlhttprequest-ssl": "1.5.3", - "yeast": "0.1.2" - }, - "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "http://npm.trustu.pre/component-emitter/-/component-emitter-1.2.1/137918d6d78283f7df7a6b7c5a63e140e69425e6.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "debug": { - "version": "2.3.3", - "resolved": "http://npm.trustu.pre/debug/-/debug-2.3.3/40c453e67e6e13c901ddec317af8986cda9eff8c.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "http://npm.trustu.pre/ms/-/ms-0.7.2/ae25cf2512b3885a1d95d7f037868d8431124765.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - } + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" } }, - "engine.io-parser": { - "version": "1.3.2", - "resolved": "http://npm.trustu.pre/engine.io-parser/-/engine.io-parser-1.3.2/937b079f0007d0893ec56d46cb220b8cb435220a.tgz", - "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, - "requires": { - "after": "0.8.2", - "arraybuffer.slice": "0.0.6", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.4", - "has-binary": "0.1.7", - "wtf-8": "1.0.0" + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "enhanced-resolve": { - "version": "3.4.1", - "resolved": "http://npm.trustu.pre/enhanced-resolve/-/enhanced-resolve-3.4.1/0421e339fd71419b3da13d129b3979040230476e.tgz", - "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "memory-fs": "0.4.1", - "object-assign": "4.1.1", - "tapable": "0.2.8" + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "ent": { - "version": "2.2.0", - "resolved": "http://npm.trustu.pre/ent/-/ent-2.2.0/e964219325a21d05f44466a2f686ed6ce5f5dd1d.tgz", - "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", - "dev": true - }, - "entities": { - "version": "1.1.1", - "resolved": "http://npm.trustu.pre/entities/-/entities-1.1.1/6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", - "dev": true + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" }, - "errno": { - "version": "0.1.4", - "resolved": "http://npm.trustu.pre/errno/-/errno-0.1.4/b896e23a9e5e8ba33871fc996abd3635fc9a1c7d.tgz", - "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, - "requires": { - "prr": "0.0.0" + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "error-ex": { - "version": "1.3.1", - "resolved": "http://npm.trustu.pre/error-ex/-/error-ex-1.3.1/f855a86ce61adc4e8621c3cda21e7a7612c3a8dc.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "dev": true, - "requires": { - "is-arrayish": "0.2.1" + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "es-abstract": { - "version": "1.10.0", - "resolved": "http://npm.trustu.pre/es-abstract/-/es-abstract-1.10.0/1ecb36c197842a00d8ee4c2dfd8646bb97d60864.tgz", - "integrity": "sha512-/uh/DhdqIOSkAWifU+8nG78vlQxdLckUdI/sPgy0VhuXi2qJ7T8czBmqIYtLQVpCIFYafChnsRsB5pyb1JdmCQ==", + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, - "requires": { - "es-to-primitive": "1.1.1", - "function-bind": "1.1.1", - "has": "1.0.1", - "is-callable": "1.1.3", - "is-regex": "1.0.4" + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "es-to-primitive": { - "version": "1.1.1", - "resolved": "http://npm.trustu.pre/es-to-primitive/-/es-to-primitive-1.1.1/45355248a88979034b6792e19bb81f2b7975dd0d.tgz", - "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", "dev": true, - "requires": { - "is-callable": "1.1.3", - "is-date-object": "1.0.1", - "is-symbol": "1.0.1" + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" } }, - "es5-ext": { - "version": "0.10.37", - "resolved": "http://npm.trustu.pre/es5-ext/-/es5-ext-0.10.37/0ee741d148b80069ba27d020393756af257defc3.tgz", - "integrity": "sha1-DudB0Ui4AGm6J9AgOTdWryV978M=", + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, - "requires": { - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "http://npm.trustu.pre/es6-iterator/-/es6-iterator-2.0.3/a7de889141a05a94b0854403b2d0a0fbfa98f3b7.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.37", - "es6-symbol": "3.1.1" + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "es6-map": { - "version": "0.1.5", - "resolved": "http://npm.trustu.pre/es6-map/-/es6-map-0.1.5/9136e0503dcc06a301690f0bb14ff4e364e949f0.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.37", - "es6-iterator": "2.0.3", - "es6-set": "0.1.5", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "es6-promise": { - "version": "3.0.2", - "resolved": "http://npm.trustu.pre/es6-promise/-/es6-promise-3.0.2/010d5858423a5f118979665f46486a95c6ee2bb6.tgz", - "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=", - "dev": true + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } }, - "es6-set": { - "version": "0.1.5", - "resolved": "http://npm.trustu.pre/es6-set/-/es6-set-0.1.5/d2b3ec5d4d800ced818db538d28974db0a73ccb1.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "node_modules/@keyv/bigmap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@keyv/bigmap/-/bigmap-1.1.0.tgz", + "integrity": "sha512-MX7XIUNwVRK+hjZcAbNJ0Z8DREo+Weu9vinBOjGU1thEi9F6vPhICzBbk4CCf3eEefKRz7n6TfZXwUFZTSgj8Q==", "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.37", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" + "license": "MIT", + "dependencies": { + "hookified": "^1.12.2" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "keyv": "^5.5.3" } }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "http://npm.trustu.pre/es6-symbol/-/es6-symbol-3.1.1/bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "node_modules/@keyv/serialize": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz", + "integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==", "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.37" - } + "license": "MIT" }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "http://npm.trustu.pre/es6-weak-map/-/es6-weak-map-2.0.2/5e3ab32251ffd1538a1f8e5ffa1357772f92d96f.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "node_modules/@listr2/prompt-adapter-inquirer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-3.0.1.tgz", + "integrity": "sha512-3XFmGwm3u6ioREG+ynAQB7FoxfajgQnMhIu8wC5eo/Lsih4aKDg0VuIMGaOsYn7hJSJagSeaD4K8yfpkEoDEmA==", "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.37", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" + "license": "MIT", + "dependencies": { + "@inquirer/type": "^3.0.7" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@inquirer/prompts": ">= 3 < 8", + "listr2": "9.0.1" } }, - "escape-html": { - "version": "1.0.3", - "resolved": "http://npm.trustu.pre/escape-html/-/escape-html-1.0.3/0258eae4d3d0c0974de1c169188ef0051d1d1988.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "http://npm.trustu.pre/escape-string-regexp/-/escape-string-regexp-1.0.5/1b61c0562190a8dff6ae3bb2cf0200ca130b86d4.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true + "node_modules/@lit-labs/ssr-dom-shim": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.2.1.tgz", + "integrity": "sha512-wx4aBmgeGvFmOKucFKY+8VFJSYZxs9poN3SDNQFF6lT6NrQUnHiPB2PWz2sc4ieEcAaYYzN+1uWahEeTq2aRIQ==", + "dev": true, + "license": "BSD-3-Clause" }, - "escodegen": { - "version": "1.8.1", - "resolved": "http://npm.trustu.pre/escodegen/-/escodegen-1.8.1/5a5b53af4693110bebb0867aa3430dd3b70a1018.tgz", - "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", - "dev": true, - "requires": { - "esprima": "2.7.3", - "estraverse": "1.9.3", - "esutils": "2.0.2", - "optionator": "0.8.2", - "source-map": "0.2.0" - }, - "dependencies": { - "estraverse": { - "version": "1.9.3", - "resolved": "http://npm.trustu.pre/estraverse/-/estraverse-1.9.3/af67f2dc922582415950926091a4005d29c9bb44.tgz", - "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", - "dev": true - }, - "source-map": { - "version": "0.2.0", - "resolved": "http://npm.trustu.pre/source-map/-/source-map-0.2.0/dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d.tgz", - "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", - "dev": true, - "optional": true, - "requires": { - "amdefine": "1.0.1" - } - } + "node_modules/@lit/react": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@lit/react/-/react-1.0.6.tgz", + "integrity": "sha512-QIss8MPh6qUoFJmuaF4dSHts3qCsA36S3HcOLiNPShxhgYPr4XJRnCBKPipk85sR9xr6TQrOcDMfexwbNdJHYA==", + "dev": true, + "license": "BSD-3-Clause", + "peerDependencies": { + "@types/react": "17 || 18" } }, - "escope": { - "version": "3.6.0", - "resolved": "http://npm.trustu.pre/escope/-/escope-3.6.0/e01975e812781a163a6dadfdd80398dc64c889c3.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "node_modules/@lit/reactive-element": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.0.4.tgz", + "integrity": "sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==", "dev": true, - "requires": { - "es6-map": "0.1.5", - "es6-weak-map": "2.0.2", - "esrecurse": "4.2.0", - "estraverse": "4.2.0" + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.2.0" } }, - "esprima": { - "version": "2.7.3", - "resolved": "http://npm.trustu.pre/esprima/-/esprima-2.7.3/96e3b70d5779f6ad49cd032673d1c312767ba581.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true + "node_modules/@lmdb/lmdb-darwin-arm64": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.4.2.tgz", + "integrity": "sha512-NK80WwDoODyPaSazKbzd3NEJ3ygePrkERilZshxBViBARNz21rmediktGHExoj9n5t9+ChlgLlxecdFKLCuCKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-darwin-x64": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.4.2.tgz", + "integrity": "sha512-zevaowQNmrp3U7Fz1s9pls5aIgpKRsKb3dZWDINtLiozh3jZI9fBrI19lYYBxqdyiIyNdlyiidPnwPShj4aK+w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.4.2.tgz", + "integrity": "sha512-OmHCULY17rkx/RoCoXlzU7LyR8xqrksgdYWwtYa14l/sseezZ8seKWXcogHcjulBddER5NnEFV4L/Jtr2nyxeg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm64": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.4.2.tgz", + "integrity": "sha512-ZBEfbNZdkneebvZs98Lq30jMY8V9IJzckVeigGivV7nTHJc+89Ctomp1kAIWKlwIG0ovCDrFI448GzFPORANYg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-x64": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.4.2.tgz", + "integrity": "sha512-vL9nM17C77lohPYE4YaAQvfZCSVJSryE4fXdi8M7uWPBnU+9DJabgKVAeyDb84ZM2vcFseoBE4/AagVtJeRE7g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-win32-arm64": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-arm64/-/lmdb-win32-arm64-3.4.2.tgz", + "integrity": "sha512-SXWjdBfNDze4ZPeLtYIzsIeDJDJ/SdsA0pEXcUBayUIMO0FQBHfVZZyHXQjjHr4cvOAzANBgIiqaXRwfMhzmLw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@lmdb/lmdb-win32-x64": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.4.2.tgz", + "integrity": "sha512-IY+r3bxKW6Q6sIPiMC0L533DEfRJSXibjSI3Ft/w9Q8KQBNqEIvUFXt+09wV8S5BRk0a8uSF19YWxuRwEfI90g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] }, - "esrecurse": { - "version": "4.2.0", - "resolved": "http://npm.trustu.pre/esrecurse/-/esrecurse-4.2.0/fa9568d98d3823f9a41d91e902dcab9ea6e5b163.tgz", - "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.17.3", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.17.3.tgz", + "integrity": "sha512-JPwUKWSsbzx+DLFznf/QZ32Qa+ptfbUlHhRLrBQBAFu9iI1iYvizM4p+zhhRDceSsPutXp4z+R/HPVphlIiclg==", "dev": true, - "requires": { - "estraverse": "4.2.0", - "object-assign": "4.1.1" + "license": "MIT", + "dependencies": { + "ajv": "^6.12.6", + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "express": "^5.0.1", + "express-rate-limit": "^7.5.0", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.23.8", + "zod-to-json-schema": "^3.24.1" + }, + "engines": { + "node": ">=18" } }, - "estraverse": { - "version": "4.2.0", - "resolved": "http://npm.trustu.pre/estraverse/-/estraverse-4.2.0/0dee3fed31fcd469618ce7342099fc1afa0bdb13.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "http://npm.trustu.pre/esutils/-/esutils-2.0.2/0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "http://npm.trustu.pre/etag/-/etag-1.8.1/41ae2eeb65efa62268aebfea83ac7d79299b0887.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true + "node_modules/@modelcontextprotocol/sdk/node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } }, - "event-emitter": { - "version": "0.3.5", - "resolved": "http://npm.trustu.pre/event-emitter/-/event-emitter-0.3.5/df8c69eef1647923c7157b9ce83840610b02cc39.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "node_modules/@modelcontextprotocol/sdk/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.37" + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "eventemitter3": { - "version": "1.2.0", - "resolved": "http://npm.trustu.pre/eventemitter3/-/eventemitter3-1.2.0/1c86991d816ad1e504750e73874224ecf3bec508.tgz", - "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", - "dev": true + "node_modules/@modelcontextprotocol/sdk/node_modules/body-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.6.3", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.0", + "type-is": "^2.0.0" + }, + "engines": { + "node": ">=18" + } }, - "events": { - "version": "1.1.1", - "resolved": "http://npm.trustu.pre/events/-/events-1.1.1/9ebdb7635ad099c70dcc4c2a1f5004288e8bd924.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", - "dev": true + "node_modules/@modelcontextprotocol/sdk/node_modules/content-disposition": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", + "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } }, - "eventsource": { - "version": "0.1.6", - "resolved": "http://npm.trustu.pre/eventsource/-/eventsource-0.1.6/0acede849ed7dd1ccc32c811bb11b944d4f29232.tgz", - "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", + "node_modules/@modelcontextprotocol/sdk/node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", "dev": true, - "requires": { - "original": "1.0.0" + "license": "MIT", + "engines": { + "node": ">=6.6.0" } }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "http://npm.trustu.pre/evp_bytestokey/-/evp_bytestokey-1.0.3/7fcbdb198dc71959432efe13842684e0525acb02.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "node_modules/@modelcontextprotocol/sdk/node_modules/express": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", + "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", "dev": true, - "requires": { - "md5.js": "1.3.4", - "safe-buffer": "5.1.1" + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.0", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "execa": { - "version": "0.7.0", - "resolved": "http://npm.trustu.pre/execa/-/execa-0.7.0/944becd34cc41ee32a63a9faf27ad5a65fc59777.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "http://npm.trustu.pre/cross-spawn/-/cross-spawn-5.1.0/e8bd0efee58fcff6f8f94510a0a554bbfa235449.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "4.1.1", - "shebang-command": "1.2.0", - "which": "1.3.0" - } - } + "node_modules/@modelcontextprotocol/sdk/node_modules/finalhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", + "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 0.8" } }, - "exit": { - "version": "0.1.2", - "resolved": "http://npm.trustu.pre/exit/-/exit-0.1.2/0632638f8d877cc82107d30a0fff1a17cba1cd0c.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true + "node_modules/@modelcontextprotocol/sdk/node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } }, - "expand-braces": { - "version": "0.1.2", - "resolved": "http://npm.trustu.pre/expand-braces/-/expand-braces-0.1.2/488b1d1d2451cb3d3a6b192cfc030f44c5855fea.tgz", - "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", - "dev": true, - "requires": { - "array-slice": "0.2.3", - "array-unique": "0.2.1", - "braces": "0.1.5" - }, - "dependencies": { - "braces": { - "version": "0.1.5", - "resolved": "http://npm.trustu.pre/braces/-/braces-0.1.5/c085711085291d8b75fdd74eab0f8597280711e6.tgz", - "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", - "dev": true, - "requires": { - "expand-range": "0.1.1" - } - }, - "expand-range": { - "version": "0.1.1", - "resolved": "http://npm.trustu.pre/expand-range/-/expand-range-0.1.1/4cb8eda0993ca56fa4f41fc42f3cbb4ccadff044.tgz", - "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", - "dev": true, - "requires": { - "is-number": "0.1.1", - "repeat-string": "0.2.2" - } - }, - "is-number": { - "version": "0.1.1", - "resolved": "http://npm.trustu.pre/is-number/-/is-number-0.1.1/69a7af116963d47206ec9bd9b48a14216f1e3806.tgz", - "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", - "dev": true - }, - "repeat-string": { - "version": "0.2.2", - "resolved": "http://npm.trustu.pre/repeat-string/-/repeat-string-0.2.2/c7a8d3236068362059a7e4651fc6884e8b1fb4ae.tgz", - "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", - "dev": true - } + "node_modules/@modelcontextprotocol/sdk/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "http://npm.trustu.pre/expand-brackets/-/expand-brackets-0.1.5/df07284e342a807cd733ac5af72411e581d1177b.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "node_modules/@modelcontextprotocol/sdk/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", "dev": true, - "requires": { - "is-posix-bracket": "0.1.1" + "license": "MIT", + "engines": { + "node": ">= 0.8" } }, - "expand-range": { - "version": "1.8.2", - "resolved": "http://npm.trustu.pre/expand-range/-/expand-range-1.8.2/a299effd335fe2721ebae8e257ec79644fc85337.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "node_modules/@modelcontextprotocol/sdk/node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", "dev": true, - "requires": { - "fill-range": "2.2.3" + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "exports-loader": { - "version": "0.6.4", - "resolved": "http://npm.trustu.pre/exports-loader/-/exports-loader-0.6.4/d70fc6121975b35fc12830cf52754be2740fc886.tgz", - "integrity": "sha1-1w/GEhl1s1/BKDDPUnVL4nQPyIY=", + "node_modules/@modelcontextprotocol/sdk/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", "dev": true, - "requires": { - "loader-utils": "1.1.0", - "source-map": "0.5.7" + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" } }, - "express": { - "version": "4.16.2", - "resolved": "http://npm.trustu.pre/express/-/express-4.16.2/e35c6dfe2d64b7dca0a5cd4f21781be3299e076c.tgz", - "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", + "node_modules/@modelcontextprotocol/sdk/node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", "dev": true, - "requires": { - "accepts": "1.3.4", - "array-flatten": "1.1.1", - "body-parser": "1.18.2", - "content-disposition": "0.5.2", - "content-type": "1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "1.1.1", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "etag": "1.8.1", - "finalhandler": "1.1.0", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.2", - "qs": "6.5.1", - "range-parser": "1.2.0", - "safe-buffer": "5.1.1", - "send": "0.16.1", - "serve-static": "1.13.1", - "setprototypeof": "1.1.0", - "statuses": "1.3.1", - "type-is": "1.6.15", - "utils-merge": "1.0.1", - "vary": "1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "http://npm.trustu.pre/array-flatten/-/array-flatten-1.1.1/9a5f699051b1e7073328f2a008968b64ea2955d2.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "qs": { - "version": "6.5.1", - "resolved": "http://npm.trustu.pre/qs/-/qs-6.5.1/349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", - "dev": true - } + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "extend": { + "node_modules/@modelcontextprotocol/sdk/node_modules/raw-body": { "version": "3.0.1", - "resolved": "http://npm.trustu.pre/extend/-/extend-3.0.1/a755ea7bc1adfcc5a31ce7e762dbaadc5e636444.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "dev": true + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.1.tgz", + "integrity": "sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.7.0", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.10" + } }, - "extglob": { - "version": "0.3.2", - "resolved": "http://npm.trustu.pre/extglob/-/extglob-0.3.2/2e18ff3d2f49ab2765cec9023f011daa8d8349a1.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "node_modules/@modelcontextprotocol/sdk/node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", "dev": true, - "requires": { - "is-extglob": "1.0.0" + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/send": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "dev": true, + "license": "MIT", "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/is-extglob/-/is-extglob-1.0.0/ac468177c4943405a092fc8f29760c6ffc6206c0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - } + "debug": "^4.3.5", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "mime-types": "^3.0.1", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18" } }, - "extract-text-webpack-plugin": { - "version": "3.0.2", - "resolved": "http://npm.trustu.pre/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2/5f043eaa02f9750a9258b78c0a6e0dc1408fb2f7.tgz", - "integrity": "sha512-bt/LZ4m5Rqt/Crl2HiKuAl/oqg0psx1tsTLkvWbJen1CtD+fftkZhMaQ9HOtY2gWsl2Wq+sABmMVi9z3DhKWQQ==", + "node_modules/@modelcontextprotocol/sdk/node_modules/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", "dev": true, - "requires": { - "async": "2.6.0", - "loader-utils": "1.1.0", - "schema-utils": "0.3.0", - "webpack-sources": "1.1.0" + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" } }, - "extsprintf": { - "version": "1.3.0", - "resolved": "http://npm.trustu.pre/extsprintf/-/extsprintf-1.3.0/96918440e3041a7a414f8c52e3c574eb3c3e1e05.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true + "node_modules/@modelcontextprotocol/sdk/node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } }, - "fancy-log": { - "version": "1.3.0", - "resolved": "http://npm.trustu.pre/fancy-log/-/fancy-log-1.3.0/45be17d02bb9917d60ccffd4995c999e6c8c9948.tgz", - "integrity": "sha1-Rb4X0Cu5kX1gzP/UmVyZnmyMmUg=", + "node_modules/@modelcontextprotocol/sdk/node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", "dev": true, - "requires": { - "chalk": "1.1.3", - "time-stamp": "1.1.0" - }, + "license": "MIT", "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "http://npm.trustu.pre/ansi-styles/-/ansi-styles-2.2.1/b432dd3358b634cf75e1e4664368240533c1ddbe.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "http://npm.trustu.pre/chalk/-/chalk-1.1.3/a8115c55e4a702fe4d150abd3872822a7e09fc98.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/supports-color/-/supports-color-2.0.0/535d045ce6b6363fa40117084629995e9df324c7.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "time-stamp": { - "version": "1.1.0", - "resolved": "http://npm.trustu.pre/time-stamp/-/time-stamp-1.1.0/764a5a11af50561921b133f3b44e618687e0f5c3.tgz", - "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", - "dev": true - } + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" } }, - "fast-deep-equal": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/fast-deep-equal/-/fast-deep-equal-1.0.0/96256a3bc975595eb36d82e9929d060d893439ff.tgz", - "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", - "dev": true + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz", + "integrity": "sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0/d5142c0caee6b1189f87d3a76111064f86c8bbf2.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz", + "integrity": "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "http://npm.trustu.pre/fast-levenshtein/-/fast-levenshtein-2.0.6/3d8a5c66883a16a30ca8643e851f19baa7797917.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz", + "integrity": "sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "fastparse": { - "version": "1.1.1", - "resolved": "http://npm.trustu.pre/fastparse/-/fastparse-1.1.1/d1e2643b38a94d7583b479060e6c4affc94071f8.tgz", - "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=", - "dev": true + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.3.tgz", + "integrity": "sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "faye-websocket": { - "version": "0.10.0", - "resolved": "http://npm.trustu.pre/faye-websocket/-/faye-websocket-0.10.0/4e492f8d04dfb6f89003507f6edbf2d501e7c6f4.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz", + "integrity": "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==", + "cpu": [ + "x64" + ], "dev": true, - "requires": { - "websocket-driver": "0.7.0" - } + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "figures": { - "version": "1.7.0", - "resolved": "http://npm.trustu.pre/figures/-/figures-1.7.0/cbe1e3affcf1cd44b80cadfed28dc793a9701d2e.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz", + "integrity": "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==", + "cpu": [ + "x64" + ], "dev": true, - "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" - } + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] }, - "file-loader": { - "version": "1.1.5", - "resolved": "http://npm.trustu.pre/file-loader/-/file-loader-1.1.5/91c25b6b6fbe56dae99f10a425fd64933b5c9daa.tgz", - "integrity": "sha512-RzGHDatcVNpGISTvCpfUfOGpYuSR7HSsSg87ki+wF6rw1Hm0RALPTiAdsxAq1UwLf0RRhbe22/eHK6nhXspiOQ==", + "node_modules/@napi-rs/nice": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.1.1.tgz", + "integrity": "sha512-xJIPs+bYuc9ASBl+cvGsKbGrJmS6fAKaSZCnT0lhahT5rhA2VVy9/EcIgd2JhtEuFOJNx7UHNn/qiTPTY4nrQw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/nice-android-arm-eabi": "1.1.1", + "@napi-rs/nice-android-arm64": "1.1.1", + "@napi-rs/nice-darwin-arm64": "1.1.1", + "@napi-rs/nice-darwin-x64": "1.1.1", + "@napi-rs/nice-freebsd-x64": "1.1.1", + "@napi-rs/nice-linux-arm-gnueabihf": "1.1.1", + "@napi-rs/nice-linux-arm64-gnu": "1.1.1", + "@napi-rs/nice-linux-arm64-musl": "1.1.1", + "@napi-rs/nice-linux-ppc64-gnu": "1.1.1", + "@napi-rs/nice-linux-riscv64-gnu": "1.1.1", + "@napi-rs/nice-linux-s390x-gnu": "1.1.1", + "@napi-rs/nice-linux-x64-gnu": "1.1.1", + "@napi-rs/nice-linux-x64-musl": "1.1.1", + "@napi-rs/nice-openharmony-arm64": "1.1.1", + "@napi-rs/nice-win32-arm64-msvc": "1.1.1", + "@napi-rs/nice-win32-ia32-msvc": "1.1.1", + "@napi-rs/nice-win32-x64-msvc": "1.1.1" + } + }, + "node_modules/@napi-rs/nice-android-arm-eabi": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.1.1.tgz", + "integrity": "sha512-kjirL3N6TnRPv5iuHw36wnucNqXAO46dzK9oPb0wj076R5Xm8PfUVA9nAFB5ZNMmfJQJVKACAPd/Z2KYMppthw==", + "cpu": [ + "arm" + ], "dev": true, - "requires": { - "loader-utils": "1.1.0", - "schema-utils": "0.3.0" + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" } }, - "filename-regex": { - "version": "2.0.1", - "resolved": "http://npm.trustu.pre/filename-regex/-/filename-regex-2.0.1/c1c4b9bee3e09725ddb106b75c1e301fe2f18b26.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true - }, - "fileset": { - "version": "2.0.3", - "resolved": "http://npm.trustu.pre/fileset/-/fileset-2.0.3/8e7548a96d3cc2327ee5e674168723a333bba2a0.tgz", - "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", + "node_modules/@napi-rs/nice-android-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.1.1.tgz", + "integrity": "sha512-blG0i7dXgbInN5urONoUCNf+DUEAavRffrO7fZSeoRMJc5qD+BJeNcpr54msPF6qfDD6kzs9AQJogZvT2KD5nw==", + "cpu": [ + "arm64" + ], "dev": true, - "requires": { - "glob": "7.1.2", - "minimatch": "3.0.4" + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" } }, - "fill-range": { - "version": "2.2.3", - "resolved": "http://npm.trustu.pre/fill-range/-/fill-range-2.2.3/50b77dfd7e469bc7492470963699fe7a8485a723.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", - "dev": true, - "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "1.1.7", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "http://npm.trustu.pre/isobject/-/isobject-2.1.0/f065561096a3f1da2ef46272f815c840d87e0c89.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } + "node_modules/@napi-rs/nice-darwin-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.1.1.tgz", + "integrity": "sha512-s/E7w45NaLqTGuOjC2p96pct4jRfo61xb9bU1unM/MJ/RFkKlJyJDx7OJI/O0ll/hrfpqKopuAFDV8yo0hfT7A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" } }, - "finalhandler": { - "version": "1.1.0", - "resolved": "http://npm.trustu.pre/finalhandler/-/finalhandler-1.1.0/ce0b6855b45853e791b2fcc680046d88253dd7f5.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "node_modules/@napi-rs/nice-darwin-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.1.1.tgz", + "integrity": "sha512-dGoEBnVpsdcC+oHHmW1LRK5eiyzLwdgNQq3BmZIav+9/5WTZwBYX7r5ZkQC07Nxd3KHOCkgbHSh4wPkH1N1LiQ==", + "cpu": [ + "x64" + ], "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.3.1", - "unpipe": "1.0.0" + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" } }, - "find-cache-dir": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/find-cache-dir/-/find-cache-dir-1.0.0/9288e3e9e3cc3748717d39eade17cf71fc30ee6f.tgz", - "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "node_modules/@napi-rs/nice-freebsd-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.1.1.tgz", + "integrity": "sha512-kHv4kEHAylMYmlNwcQcDtXjklYp4FCf0b05E+0h6nDHsZ+F0bDe04U/tXNOqrx5CmIAth4vwfkjjUmp4c4JktQ==", + "cpu": [ + "x64" + ], "dev": true, - "requires": { - "commondir": "1.0.1", - "make-dir": "1.1.0", - "pkg-dir": "2.0.0" + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" } }, - "find-up": { - "version": "1.1.2", - "resolved": "http://npm.trustu.pre/find-up/-/find-up-1.1.2/6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "node_modules/@napi-rs/nice-linux-arm-gnueabihf": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.1.1.tgz", + "integrity": "sha512-E1t7K0efyKXZDoZg1LzCOLxgolxV58HCkaEkEvIYQx12ht2pa8hoBo+4OB3qh7e+QiBlp1SRf+voWUZFxyhyqg==", + "cpu": [ + "arm" + ], "dev": true, - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" } }, - "flatten": { - "version": "1.0.2", - "resolved": "http://npm.trustu.pre/flatten/-/flatten-1.0.2/dae46a9d78fbe25292258cc1e780a41d95c03782.tgz", - "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", - "dev": true - }, - "flush-write-stream": { - "version": "1.0.2", - "resolved": "http://npm.trustu.pre/flush-write-stream/-/flush-write-stream-1.0.2/c81b90d8746766f1a609a46809946c45dd8ae417.tgz", - "integrity": "sha1-yBuQ2HRnZvGmCaRoCZRsRd2K5Bc=", + "node_modules/@napi-rs/nice-linux-arm64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.1.1.tgz", + "integrity": "sha512-CIKLA12DTIZlmTaaKhQP88R3Xao+gyJxNWEn04wZwC2wmRapNnxCUZkVwggInMJvtVElA+D4ZzOU5sX4jV+SmQ==", + "cpu": [ + "arm64" + ], "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3" + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" } }, - "for-in": { - "version": "1.0.2", - "resolved": "http://npm.trustu.pre/for-in/-/for-in-1.0.2/81068d295a8142ec0ac726c6e2200c30fb6d5e80.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "for-own": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/for-own/-/for-own-1.0.0/c63332f415cedc4b04dbfe70cf836494c53cb44b.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "node_modules/@napi-rs/nice-linux-arm64-musl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.1.1.tgz", + "integrity": "sha512-+2Rzdb3nTIYZ0YJF43qf2twhqOCkiSrHx2Pg6DJaCPYhhaxbLcdlV8hCRMHghQ+EtZQWGNcS2xF4KxBhSGeutg==", + "cpu": [ + "arm64" + ], "dev": true, - "requires": { - "for-in": "1.0.2" + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" } }, - "foreach": { - "version": "2.0.5", - "resolved": "http://npm.trustu.pre/foreach/-/foreach-2.0.5/0bee005018aeb260d0a3af3ae658dd0136ec1b99.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "http://npm.trustu.pre/forever-agent/-/forever-agent-0.6.1/fbc71f0c41adeb37f96c577ad1ed42d8fdacca91.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.1.4", - "resolved": "http://npm.trustu.pre/form-data/-/form-data-2.1.4/33c183acf193276ecaa98143a69e94bfee1750d1.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "node_modules/@napi-rs/nice-linux-ppc64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.1.1.tgz", + "integrity": "sha512-4FS8oc0GeHpwvv4tKciKkw3Y4jKsL7FRhaOeiPei0X9T4Jd619wHNe4xCLmN2EMgZoeGg+Q7GY7BsvwKpL22Tg==", + "cpu": [ + "ppc64" + ], "dev": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" } }, - "forwarded": { - "version": "0.1.2", - "resolved": "http://npm.trustu.pre/forwarded/-/forwarded-0.1.2/98c23dab1175657b8c0573e8ceccd91b0ff18c84.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true + "node_modules/@napi-rs/nice-linux-riscv64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.1.1.tgz", + "integrity": "sha512-HU0nw9uD4FO/oGCCk409tCi5IzIZpH2agE6nN4fqpwVlCn5BOq0MS1dXGjXaG17JaAvrlpV5ZeyZwSon10XOXw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } }, - "fresh": { - "version": "0.5.2", - "resolved": "http://npm.trustu.pre/fresh/-/fresh-0.5.2/3d8cadd90d976569fa835ab1f8e4b23a105605a7.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true + "node_modules/@napi-rs/nice-linux-s390x-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.1.1.tgz", + "integrity": "sha512-2YqKJWWl24EwrX0DzCQgPLKQBxYDdBxOHot1KWEq7aY2uYeX+Uvtv4I8xFVVygJDgf6/92h9N3Y43WPx8+PAgQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } }, - "from2": { - "version": "2.3.0", - "resolved": "http://npm.trustu.pre/from2/-/from2-2.3.0/8bfb5502bde4a4d36cfdeea007fcca21d7e382af.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "node_modules/@napi-rs/nice-linux-x64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.1.1.tgz", + "integrity": "sha512-/gaNz3R92t+dcrfCw/96pDopcmec7oCcAQ3l/M+Zxr82KT4DljD37CpgrnXV+pJC263JkW572pdbP3hP+KjcIg==", + "cpu": [ + "x64" + ], "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3" + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" } }, - "fs-access": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/fs-access/-/fs-access-1.0.1/d6a87f262271cefebec30c553407fb995da8777a.tgz", - "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "node_modules/@napi-rs/nice-linux-x64-musl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.1.1.tgz", + "integrity": "sha512-xScCGnyj/oppsNPMnevsBe3pvNaoK7FGvMjT35riz9YdhB2WtTG47ZlbxtOLpjeO9SqqQ2J2igCmz6IJOD5JYw==", + "cpu": [ + "x64" + ], "dev": true, - "requires": { - "null-check": "1.0.0" + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" } }, - "fs-extra": { - "version": "4.0.3", - "resolved": "http://npm.trustu.pre/fs-extra/-/fs-extra-4.0.3/0d852122e5bc5beb453fb028e9c0c9bf36340c94.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "node_modules/@napi-rs/nice-openharmony-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-openharmony-arm64/-/nice-openharmony-arm64-1.1.1.tgz", + "integrity": "sha512-6uJPRVwVCLDeoOaNyeiW0gp2kFIM4r7PL2MczdZQHkFi9gVlgm+Vn+V6nTWRcu856mJ2WjYJiumEajfSm7arPQ==", + "cpu": [ + "arm64" + ], "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "4.0.0", - "universalify": "0.1.1" + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">= 10" } }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "http://npm.trustu.pre/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10/b47df53493ef911df75731e70a9ded0189db40c9.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "node_modules/@napi-rs/nice-win32-arm64-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.1.1.tgz", + "integrity": "sha512-uoTb4eAvM5B2aj/z8j+Nv8OttPf2m+HVx3UjA5jcFxASvNhQriyCQF1OB1lHL43ZhW+VwZlgvjmP5qF3+59atA==", + "cpu": [ + "arm64" + ], "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "iferr": "0.1.5", - "imurmurhash": "0.1.4", - "readable-stream": "2.3.3" + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" } }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/fs.realpath/-/fs.realpath-1.0.0/1504ad2523158caa40db4a2787cb01411994ea4f.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "node_modules/@napi-rs/nice-win32-ia32-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.1.1.tgz", + "integrity": "sha512-CNQqlQT9MwuCsg1Vd/oKXiuH+TcsSPJmlAFc5frFyX/KkOh0UpBLEj7aoY656d5UKZQMQFP7vJNa1DNUNORvug==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } }, - "fsevents": { - "version": "1.1.3", - "resolved": "http://npm.trustu.pre/fsevents/-/fsevents-1.1.3/11f82318f5fe7bb2cd22965a108e9306208216d8.tgz", - "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", + "node_modules/@napi-rs/nice-win32-x64-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.1.1.tgz", + "integrity": "sha512-vB+4G/jBQCAh0jelMTY3+kgFy00Hlx2f2/1zjMoH821IbplbWZOkLiTYXQkygNTzQJTq5cvwBDgn2ppHD+bglQ==", + "cpu": [ + "x64" + ], "dev": true, + "license": "MIT", "optional": true, - "requires": { - "nan": "2.8.0", - "node-pre-gyp": "0.6.39" + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ngrx/component": { + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@ngrx/component/-/component-20.1.0.tgz", + "integrity": "sha512-EFQdAYbSV1tkxunHviGAjNXPcv6/JQb2r1TMoin/XJYC2+r7QwBVj1lmCC1OZnhCXYXytqKmweb4g9ZkT/TYhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/common": "^20.0.0", + "@angular/core": "^20.0.0", + "rxjs": "^6.5.3 || ^7.5.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-3.0.0.tgz", + "integrity": "sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/agent/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@npmcli/fs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", + "integrity": "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/git": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-6.0.3.tgz", + "integrity": "sha512-GUYESQlxZRAdhs3UhbB6pVRNUELQOHXwK9ruDkwmCv2aZ5y0SApQzUJCg02p3A7Ue2J5hxvlk1YI53c00NmRyQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^8.0.0", + "ini": "^5.0.0", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^10.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/git/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-3.0.0.tgz", + "integrity": "sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-4.0.0.tgz", + "integrity": "sha512-+t5DZ6mO/QFh78PByMq1fGSAub/agLJZDRfJRMeOSNCt8s9YVlTjmGpIPwPhvXTGUIJk+WszlT0rQa1W33yzNA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/package-json": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-6.2.0.tgz", + "integrity": "sha512-rCNLSB/JzNvot0SEyXqWZ7tX2B5dD2a1br2Dp0vSYVo5jh8Z0EZ7lS9TsZ1UtziddB1UfNUaMCc538/HztnJGA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^6.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^8.0.0", + "json-parse-even-better-errors": "^4.0.0", + "proc-log": "^5.0.0", + "semver": "^7.5.3", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/package-json/node_modules/hosted-git-info": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", + "integrity": "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@npmcli/promise-spawn": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-8.0.3.tgz", + "integrity": "sha512-Yb00SWaL4F8w+K8YGhQ55+xE4RUNdMHV43WZGsiTM92gS+lC0mGsn7I4hLug7pbao035S6bj3Y3w0cUNGLfmkg==", + "dev": true, + "license": "ISC", + "dependencies": { + "which": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/redact": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-3.2.2.tgz", + "integrity": "sha512-7VmYAmk4csGv08QzrDKScdzn11jHPFGyqJW39FyPgPuAp3zIaUmuCo1yxw9aGs+NEJuTGQ9Gwqpt93vtJubucg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-9.1.0.tgz", + "integrity": "sha512-aoNSbxtkePXUlbZB+anS1LqsJdctG5n3UVhfU47+CDdwMi6uNTBMF9gPcQRnqghQd2FGzcwwIFBruFMxjhBewg==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^4.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "node-gyp": "^11.0.0", + "proc-log": "^5.0.0", + "which": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@opentelemetry/api": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@opentelemetry/api-logs": { + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.57.2.tgz", + "integrity": "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api": "^1.3.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/context-async-hooks": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.30.1.tgz", + "integrity": "sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/core": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", + "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/core/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation": { + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.57.2.tgz", + "integrity": "sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.57.2", + "@types/shimmer": "^1.2.0", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-amqplib": { + "version": "0.46.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.46.1.tgz", + "integrity": "sha512-AyXVnlCf/xV3K/rNumzKxZqsULyITJH6OVLiW6730JPRqWA7Zc9bvYoVNpN6iOpTU8CasH34SU/ksVJmObFibQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-connect": { + "version": "0.43.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.43.1.tgz", + "integrity": "sha512-ht7YGWQuV5BopMcw5Q2hXn3I8eG8TH0J/kc/GMcW4CuNTgiP6wCu44BOnucJWL3CmFWaRHI//vWyAhaC8BwePw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@types/connect": "3.4.38" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-dataloader": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dataloader/-/instrumentation-dataloader-0.16.1.tgz", + "integrity": "sha512-K/qU4CjnzOpNkkKO4DfCLSQshejRNAJtd4esgigo/50nxCB6XCyi1dhAblUHM9jG5dRm8eu0FB+t87nIo99LYQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-express": { + "version": "0.47.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.47.1.tgz", + "integrity": "sha512-QNXPTWteDclR2B4pDFpz0TNghgB33UMjUt14B+BZPmtH1MwUFAfLHBaP5If0Z5NZC+jaH8oF2glgYjrmhZWmSw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-fs": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.19.1.tgz", + "integrity": "sha512-6g0FhB3B9UobAR60BGTcXg4IHZ6aaYJzp0Ki5FhnxyAPt8Ns+9SSvgcrnsN2eGmk3RWG5vYycUGOEApycQL24A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.57.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-generic-pool": { + "version": "0.43.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.43.1.tgz", + "integrity": "sha512-M6qGYsp1cURtvVLGDrPPZemMFEbuMmCXgQYTReC/IbimV5sGrLBjB+/hANUpRZjX67nGLdKSVLZuQQAiNz+sww==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-graphql": { + "version": "0.47.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.47.1.tgz", + "integrity": "sha512-EGQRWMGqwiuVma8ZLAZnExQ7sBvbOx0N/AE/nlafISPs8S+QtXX+Viy6dcQwVWwYHQPAcuY3bFt3xgoAwb4ZNQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-hapi": { + "version": "0.45.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.45.2.tgz", + "integrity": "sha512-7Ehow/7Wp3aoyCrZwQpU7a2CnoMq0XhIcioFuKjBb0PLYfBfmTsFTUyatlHu0fRxhwcRsSQRTvEhmZu8CppBpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-http": { + "version": "0.57.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.57.2.tgz", + "integrity": "sha512-1Uz5iJ9ZAlFOiPuwYg29Bf7bJJc/GeoeJIFKJYQf67nTVKFe8RHbEtxgkOmK4UGZNHKXcpW4P8cWBYzBn1USpg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.30.1", + "@opentelemetry/instrumentation": "0.57.2", + "@opentelemetry/semantic-conventions": "1.28.0", + "forwarded-parse": "2.1.2", + "semver": "^7.5.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-http/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation-ioredis": { + "version": "0.47.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.47.1.tgz", + "integrity": "sha512-OtFGSN+kgk/aoKgdkKQnBsQFDiG8WdCxu+UrHr0bXScdAmtSzLSraLo7wFIb25RVHfRWvzI5kZomqJYEg/l1iA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/redis-common": "^0.36.2", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-kafkajs": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-kafkajs/-/instrumentation-kafkajs-0.7.1.tgz", + "integrity": "sha512-OtjaKs8H7oysfErajdYr1yuWSjMAectT7Dwr+axIoZqT9lmEOkD/H/3rgAs8h/NIuEi2imSXD+vL4MZtOuJfqQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-knex": { + "version": "0.44.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-knex/-/instrumentation-knex-0.44.1.tgz", + "integrity": "sha512-U4dQxkNhvPexffjEmGwCq68FuftFK15JgUF05y/HlK3M6W/G2iEaACIfXdSnwVNe9Qh0sPfw8LbOPxrWzGWGMQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-koa": { + "version": "0.47.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.47.1.tgz", + "integrity": "sha512-l/c+Z9F86cOiPJUllUCt09v+kICKvT+Vg1vOAJHtHPsJIzurGayucfCMq2acd/A/yxeNWunl9d9eqZ0G+XiI6A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-lru-memoizer": { + "version": "0.44.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-lru-memoizer/-/instrumentation-lru-memoizer-0.44.1.tgz", + "integrity": "sha512-5MPkYCvG2yw7WONEjYj5lr5JFehTobW7wX+ZUFy81oF2lr9IPfZk9qO+FTaM0bGEiymwfLwKe6jE15nHn1nmHg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mongodb": { + "version": "0.52.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.52.0.tgz", + "integrity": "sha512-1xmAqOtRUQGR7QfJFfGV/M2kC7wmI2WgZdpru8hJl3S0r4hW0n3OQpEHlSGXJAaNFyvT+ilnwkT+g5L4ljHR6g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mongoose": { + "version": "0.46.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.46.1.tgz", + "integrity": "sha512-3kINtW1LUTPkiXFRSSBmva1SXzS/72we/jL22N+BnF3DFcoewkdkHPYOIdAAk9gSicJ4d5Ojtt1/HeibEc5OQg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mysql": { + "version": "0.45.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.45.1.tgz", + "integrity": "sha512-TKp4hQ8iKQsY7vnp/j0yJJ4ZsP109Ht6l4RHTj0lNEG1TfgTrIH5vJMbgmoYXWzNHAqBH2e7fncN12p3BP8LFg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@types/mysql": "2.15.26" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mysql2": { + "version": "0.45.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.45.2.tgz", + "integrity": "sha512-h6Ad60FjCYdJZ5DTz1Lk2VmQsShiViKe0G7sYikb0GHI0NVvApp2XQNRHNjEMz87roFttGPLHOYVPlfy+yVIhQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@opentelemetry/sql-common": "^0.40.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-pg": { + "version": "0.51.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.51.1.tgz", + "integrity": "sha512-QxgjSrxyWZc7Vk+qGSfsejPVFL1AgAJdSBMYZdDUbwg730D09ub3PXScB9d04vIqPriZ+0dqzjmQx0yWKiCi2Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.26.0", + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@opentelemetry/sql-common": "^0.40.1", + "@types/pg": "8.6.1", + "@types/pg-pool": "2.0.6" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-redis-4": { + "version": "0.46.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis-4/-/instrumentation-redis-4-0.46.1.tgz", + "integrity": "sha512-UMqleEoabYMsWoTkqyt9WAzXwZ4BlFZHO40wr3d5ZvtjKCHlD4YXLm+6OLCeIi/HkX7EXvQaz8gtAwkwwSEvcQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/redis-common": "^0.36.2", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-tedious": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-tedious/-/instrumentation-tedious-0.18.1.tgz", + "integrity": "sha512-5Cuy/nj0HBaH+ZJ4leuD7RjgvA844aY2WW+B5uLcWtxGjRZl3MNLuxnNg5DYWZNPO+NafSSnra0q49KWAHsKBg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.57.1", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@types/tedious": "^4.0.14" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-undici": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-undici/-/instrumentation-undici-0.10.1.tgz", + "integrity": "sha512-rkOGikPEyRpMCmNu9AQuV5dtRlDmJp2dK5sw8roVshAGoB6hH/3QjDtRhdwd75SsJwgynWUNRUYe0wAkTo16tQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.57.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.7.0" + } + }, + "node_modules/@opentelemetry/redis-common": { + "version": "0.36.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/redis-common/-/redis-common-0.36.2.tgz", + "integrity": "sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/resources": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.30.1.tgz", + "integrity": "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.30.1", + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/resources/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.30.1.tgz", + "integrity": "sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.30.1", + "@opentelemetry/resources": "1.30.1", + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace-base/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/semantic-conventions": { + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.37.0.tgz", + "integrity": "sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/sql-common": { + "version": "0.40.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sql-common/-/sql-common-0.40.1.tgz", + "integrity": "sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.1.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher/node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/@parcel/watcher/node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/@paulirish/trace_engine": { + "version": "0.0.59", + "resolved": "https://registry.npmjs.org/@paulirish/trace_engine/-/trace_engine-0.0.59.tgz", + "integrity": "sha512-439NUzQGmH+9Y017/xCchBP9571J4bzhpcNhrxorf7r37wcyJZkgUfrUsRL3xl+JDcZ6ORhoFCzCw98c6S3YHw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "legacy-javascript": "latest", + "third-party-web": "latest" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgr/core": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, + "node_modules/@playwright/test": { + "version": "1.56.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.56.1.tgz", + "integrity": "sha512-vSMYtL/zOcFpvJCW71Q/OEGQb7KYBPAdKh35WNSkaZA75JlAO8ED8UN6GUNTm3drWomcbcqRPFqQbLae8yBTdg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright": "1.56.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@prisma/instrumentation": { + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/@prisma/instrumentation/-/instrumentation-6.11.1.tgz", + "integrity": "sha512-mrZOev24EDhnefmnZX7WVVT7v+r9LttPRqf54ONvj6re4XMF7wFTpK2tLJi4XHB7fFp/6xhYbgRel8YV7gQiyA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0 || ^0.53.0 || ^0.54.0 || ^0.55.0 || ^0.56.0 || ^0.57.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.8" + } + }, + "node_modules/@puppeteer/browsers": { + "version": "2.10.13", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.10.13.tgz", + "integrity": "sha512-a9Ruw3j3qlnB5a/zHRTkruppynxqaeE4H9WNj5eYGRWqw0ZauZ23f4W2ARf3hghF5doozyD+CRtt7XSYuYRI/Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "debug": "^4.4.3", + "extract-zip": "^2.0.1", + "progress": "^2.0.3", + "proxy-agent": "^6.5.0", + "semver": "^7.7.3", + "tar-fs": "^3.1.1", + "yargs": "^17.7.2" + }, + "bin": { + "browsers": "lib/cjs/main-cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.3.tgz", + "integrity": "sha512-h6cqHGZ6VdnwliFG1NXvMPTy/9PS3h8oLh7ImwR+kl+oYnQizgjxsONmmPSb2C66RksfkfIxEVtDSEcJiO0tqw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.3.tgz", + "integrity": "sha512-wd+u7SLT/u6knklV/ifG7gr5Qy4GUbH2hMWcDauPFJzmCZUAJ8L2bTkVXC2niOIxp8lk3iH/QX8kSrUxVZrOVw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.3.tgz", + "integrity": "sha512-lj9ViATR1SsqycwFkJCtYfQTheBdvlWJqzqxwc9f2qrcVrQaF/gCuBRTiTolkRWS6KvNxSk4KHZWG7tDktLgjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.3.tgz", + "integrity": "sha512-+Dyo7O1KUmIsbzx1l+4V4tvEVnVQqMOIYtrxK7ncLSknl1xnMHLgn7gddJVrYPNZfEB8CIi3hK8gq8bDhb3h5A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.3.tgz", + "integrity": "sha512-u9Xg2FavYbD30g3DSfNhxgNrxhi6xVG4Y6i9Ur1C7xUuGDW3banRbXj+qgnIrwRN4KeJ396jchwy9bCIzbyBEQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.3.tgz", + "integrity": "sha512-5M8kyi/OX96wtD5qJR89a/3x5x8x5inXBZO04JWhkQb2JWavOWfjgkdvUqibGJeNNaz1/Z1PPza5/tAPXICI6A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.3.tgz", + "integrity": "sha512-IoerZJ4l1wRMopEHRKOO16e04iXRDyZFZnNZKrWeNquh5d6bucjezgd+OxG03mOMTnS1x7hilzb3uURPkJ0OfA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.3.tgz", + "integrity": "sha512-ZYdtqgHTDfvrJHSh3W22TvjWxwOgc3ThK/XjgcNGP2DIwFIPeAPNsQxrJO5XqleSlgDux2VAoWQ5iJrtaC1TbA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.3.tgz", + "integrity": "sha512-NcViG7A0YtuFDA6xWSgmFb6iPFzHlf5vcqb2p0lGEbT+gjrEEz8nC/EeDHvx6mnGXnGCC1SeVV+8u+smj0CeGQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.3.tgz", + "integrity": "sha512-d3pY7LWno6SYNXRm6Ebsq0DJGoiLXTb83AIPCXl9fmtIQs/rXoS8SJxxUNtFbJ5MiOvs+7y34np77+9l4nfFMw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.3.tgz", + "integrity": "sha512-3y5GA0JkBuirLqmjwAKwB0keDlI6JfGYduMlJD/Rl7fvb4Ni8iKdQs1eiunMZJhwDWdCvrcqXRY++VEBbvk6Eg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.3.tgz", + "integrity": "sha512-AUUH65a0p3Q0Yfm5oD2KVgzTKgwPyp9DSXc3UA7DtxhEb/WSPfbG4wqXeSN62OG5gSo18em4xv6dbfcUGXcagw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.3.tgz", + "integrity": "sha512-1makPhFFVBqZE+XFg3Dkq+IkQ7JvmUrwwqaYBL2CE+ZpxPaqkGaiWFEWVGyvTwZace6WLJHwjVh/+CXbKDGPmg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.3.tgz", + "integrity": "sha512-OOFJa28dxfl8kLOPMUOQBCO6z3X2SAfzIE276fwT52uXDWUS178KWq0pL7d6p1kz7pkzA0yQwtqL0dEPoVcRWg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.3.tgz", + "integrity": "sha512-jMdsML2VI5l+V7cKfZx3ak+SLlJ8fKvLJ0Eoa4b9/vCUrzXKgoKxvHqvJ/mkWhFiyp88nCkM5S2v6nIwRtPcgg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.3.tgz", + "integrity": "sha512-tPgGd6bY2M2LJTA1uGq8fkSPK8ZLYjDjY+ZLK9WHncCnfIz29LIXIqUgzCR0hIefzy6Hpbe8Th5WOSwTM8E7LA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.3.tgz", + "integrity": "sha512-BCFkJjgk+WFzP+tcSMXq77ymAPIxsX9lFJWs+2JzuZTLtksJ2o5hvgTdIcZ5+oKzUDMwI0PfWzRBYAydAHF2Mw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.3.tgz", + "integrity": "sha512-KTD/EqjZF3yvRaWUJdD1cW+IQBk4fbQaHYJUmP8N4XoKFZilVL8cobFSTDnjTtxWJQ3JYaMgF4nObY/+nYkumA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.3.tgz", + "integrity": "sha512-+zteHZdoUYLkyYKObGHieibUFLbttX2r+58l27XZauq0tcWYYuKUwY2wjeCN9oK1Um2YgH2ibd6cnX/wFD7DuA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.3.tgz", + "integrity": "sha512-of1iHkTQSo3kr6dTIRX6t81uj/c/b15HXVsPcEElN5sS859qHrOepM5p9G41Hah+CTqSh2r8Bm56dL2z9UQQ7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.3.tgz", + "integrity": "sha512-s0hybmlHb56mWVZQj8ra9048/WZTPLILKxcvcq+8awSZmyiSUZjjem1AhU3Tf4ZKpYhK4mg36HtHDOe8QJS5PQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.3.tgz", + "integrity": "sha512-zGIbEVVXVtauFgl3MRwGWEN36P5ZGenHRMgNw88X5wEhEBpq0XrMEZwOn07+ICrwM17XO5xfMZqh0OldCH5VTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@schematics/angular": { + "version": "20.3.7", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-20.3.7.tgz", + "integrity": "sha512-jR2LPJVGK6yzPTNXkGJZYtdeLGkNdqJhVow2E+ILt3pk/LZuT/iSdr9V4nArU9yysifGuJFTyZapVOYkEYaykg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "20.3.7", + "@angular-devkit/schematics": "20.3.7", + "jsonc-parser": "3.3.1" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@sentry/core": { + "version": "9.46.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-9.46.0.tgz", + "integrity": "sha512-it7JMFqxVproAgEtbLgCVBYtQ9fIb+Bu0JD+cEplTN/Ukpe6GaolyYib5geZqslVxhp2sQgT+58aGvfd/k0N8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@sentry/node": { + "version": "9.46.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-9.46.0.tgz", + "integrity": "sha512-pRLqAcd7GTGvN8gex5FtkQR5Mcol8gOy1WlyZZFq4rBbVtMbqKOQRhohwqnb+YrnmtFpj7IZ7KNDo077MvNeOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/context-async-hooks": "^1.30.1", + "@opentelemetry/core": "^1.30.1", + "@opentelemetry/instrumentation": "^0.57.2", + "@opentelemetry/instrumentation-amqplib": "^0.46.1", + "@opentelemetry/instrumentation-connect": "0.43.1", + "@opentelemetry/instrumentation-dataloader": "0.16.1", + "@opentelemetry/instrumentation-express": "0.47.1", + "@opentelemetry/instrumentation-fs": "0.19.1", + "@opentelemetry/instrumentation-generic-pool": "0.43.1", + "@opentelemetry/instrumentation-graphql": "0.47.1", + "@opentelemetry/instrumentation-hapi": "0.45.2", + "@opentelemetry/instrumentation-http": "0.57.2", + "@opentelemetry/instrumentation-ioredis": "0.47.1", + "@opentelemetry/instrumentation-kafkajs": "0.7.1", + "@opentelemetry/instrumentation-knex": "0.44.1", + "@opentelemetry/instrumentation-koa": "0.47.1", + "@opentelemetry/instrumentation-lru-memoizer": "0.44.1", + "@opentelemetry/instrumentation-mongodb": "0.52.0", + "@opentelemetry/instrumentation-mongoose": "0.46.1", + "@opentelemetry/instrumentation-mysql": "0.45.1", + "@opentelemetry/instrumentation-mysql2": "0.45.2", + "@opentelemetry/instrumentation-pg": "0.51.1", + "@opentelemetry/instrumentation-redis-4": "0.46.1", + "@opentelemetry/instrumentation-tedious": "0.18.1", + "@opentelemetry/instrumentation-undici": "0.10.1", + "@opentelemetry/resources": "^1.30.1", + "@opentelemetry/sdk-trace-base": "^1.30.1", + "@opentelemetry/semantic-conventions": "^1.34.0", + "@prisma/instrumentation": "6.11.1", + "@sentry/core": "9.46.0", + "@sentry/node-core": "9.46.0", + "@sentry/opentelemetry": "9.46.0", + "import-in-the-middle": "^1.14.2", + "minimatch": "^9.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@sentry/node-core": { + "version": "9.46.0", + "resolved": "https://registry.npmjs.org/@sentry/node-core/-/node-core-9.46.0.tgz", + "integrity": "sha512-XRVu5pqoklZeh4wqhxCLZkz/ipoKhitctgEFXX9Yh1e1BoHM2pIxT52wf+W6hHM676TFmFXW3uKBjsmRM3AjgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sentry/core": "9.46.0", + "@sentry/opentelemetry": "9.46.0", + "import-in-the-middle": "^1.14.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/context-async-hooks": "^1.30.1 || ^2.0.0", + "@opentelemetry/core": "^1.30.1 || ^2.0.0", + "@opentelemetry/instrumentation": ">=0.57.1 <1", + "@opentelemetry/resources": "^1.30.1 || ^2.0.0", + "@opentelemetry/sdk-trace-base": "^1.30.1 || ^2.0.0", + "@opentelemetry/semantic-conventions": "^1.34.0" + } + }, + "node_modules/@sentry/opentelemetry": { + "version": "9.46.0", + "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-9.46.0.tgz", + "integrity": "sha512-w2zTxqrdmwRok0cXBoh+ksXdGRUHUZhlpfL/H2kfTodOL+Mk8rW72qUmfqQceXoqgbz8UyK8YgJbyt+XS5H4Qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sentry/core": "9.46.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/context-async-hooks": "^1.30.1 || ^2.0.0", + "@opentelemetry/core": "^1.30.1 || ^2.0.0", + "@opentelemetry/sdk-trace-base": "^1.30.1 || ^2.0.0", + "@opentelemetry/semantic-conventions": "^1.34.0" + } + }, + "node_modules/@shoelace-style/animations": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@shoelace-style/animations/-/animations-1.2.0.tgz", + "integrity": "sha512-avvo1xxkLbv2dgtabdewBbqcJfV0e0zCwFqkPMnHFGbJbBHorRFfMAHh1NG9ymmXn0jW95ibUVH03E1NYXD6Gw==", + "dev": true, + "license": "MIT", + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/claviska" + } + }, + "node_modules/@shoelace-style/localize": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@shoelace-style/localize/-/localize-3.2.1.tgz", + "integrity": "sha512-r4C9C/5kSfMBIr0D9imvpRdCNXtUNgyYThc4YlS6K5Hchv1UyxNQ9mxwj+BTRH2i1Neits260sR3OjKMnplsFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@shoelace-style/shoelace": { + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/@shoelace-style/shoelace/-/shoelace-2.20.1.tgz", + "integrity": "sha512-FSghU95jZPGbwr/mybVvk66qRZYpx5FkXL+vLNpy1Vp8UsdwSxXjIHE3fsvMbKWTKi9UFfewHTkc5e7jAqRYoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ctrl/tinycolor": "^4.1.0", + "@floating-ui/dom": "^1.6.12", + "@lit/react": "^1.0.6", + "@shoelace-style/animations": "^1.2.0", + "@shoelace-style/localize": "^3.2.1", + "composed-offset-position": "^0.0.6", + "lit": "^3.2.1", + "qr-creator": "^1.0.0" + }, + "engines": { + "node": ">=14.17.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/claviska" + } + }, + "node_modules/@sigstore/bundle": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-3.1.0.tgz", + "integrity": "sha512-Mm1E3/CmDDCz3nDhFKTuYdB47EdRFRQMOE/EAbiG1MJW77/w1b3P7Qx7JSrVJs8PfwOLOVcKQCHErIwCTyPbag==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.4.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sigstore/core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-2.0.0.tgz", + "integrity": "sha512-nYxaSb/MtlSI+JWcwTHQxyNmWeWrUXJJ/G4liLrGG7+tS4vAz6LF3xRXqLH6wPIVUoZQel2Fs4ddLx4NCpiIYg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.4.3.tgz", + "integrity": "sha512-fk2zjD9117RL9BjqEwF7fwv7Q/P9yGsMV4MUJZ/DocaQJ6+3pKr+syBq1owU5Q5qGw5CUbXzm+4yJ2JVRDQeSA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-3.1.0.tgz", + "integrity": "sha512-knzjmaOHOov1Ur7N/z4B1oPqZ0QX5geUfhrVaqVlu+hl0EAoL4o+l0MSULINcD5GCWe3Z0+YJO8ues6vFlW0Yw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^3.1.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.4.0", + "make-fetch-happen": "^14.0.2", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sigstore/tuf": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-3.1.1.tgz", + "integrity": "sha512-eFFvlcBIoGwVkkwmTi/vEQFSva3xs5Ot3WmBcjgjVdiaoelBLQaQ/ZBfhlG0MnG0cmTYScPpk7eDdGDWUcFUmg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.4.1", + "tuf-js": "^3.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sigstore/verify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-2.1.1.tgz", + "integrity": "sha512-hVJD77oT67aowHxwT4+M6PGOp+E2LtLdTK3+FC0lBO9T7sYwItDMXZ7Z07IDCvR1M717a4axbIWckrW67KMP/w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^3.1.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.4.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@standard-schema/spec": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", + "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-3.0.1.tgz", + "integrity": "sha512-UUYHISyhCU3ZgN8yaear3cGATHb3SMuKHsQ/nVbHXcmnBf+LzQ/cQfhNG+rfaSHgqGKNEm2cOCLVLELStUQ1JA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.5" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/conventional-commits-parser": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.2.tgz", + "integrity": "sha512-BgT2szDXnVypgpNxOK8aL5SGjUdaQbC++WZNjF1Qge3Og2+zhHj+RWhmehLhYyvQwqAmvezruVfOf8+3m74W+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "4.17.17", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.7", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.7.tgz", + "integrity": "sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mysql": { + "version": "2.15.26", + "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.26.tgz", + "integrity": "sha512-DSLCOXhkvfS5WNNPbfn2KdICAmk8lLc+/PNvnPnF7gOdMZCxopXduqv0OQ13y/yA/zXTSikZZqVgybUxOEg6YQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "24.9.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.2.tgz", + "integrity": "sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/pg": { + "version": "8.6.1", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.6.1.tgz", + "integrity": "sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "pg-protocol": "*", + "pg-types": "^2.2.0" + } + }, + "node_modules/@types/pg-pool": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/pg-pool/-/pg-pool-2.0.6.tgz", + "integrity": "sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/pg": "*" + } + }, + "node_modules/@types/qs": { + "version": "6.9.18", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz", + "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/shimmer": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.2.0.tgz", + "integrity": "sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/tedious": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/@types/tedious/-/tedious-4.0.14.tgz", + "integrity": "sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/validator": { + "version": "13.15.4", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.15.4.tgz", + "integrity": "sha512-LSFfpSnJJY9wbC0LQxgvfb+ynbHftFo0tMsFOl/J4wexLnYMmDSPaj2ZyDv3TkfL1UePxPrxOWJfbiRS8mQv7A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.2.tgz", + "integrity": "sha512-ZGBMToy857/NIPaaCucIUQgqueOiq7HeAKkhlvqVV4lm089zUFW6ikRySx2v+cAhKeUCPuWVHeimyk6Dw1iY3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.46.2", + "@typescript-eslint/type-utils": "8.46.2", + "@typescript-eslint/utils": "8.46.2", + "@typescript-eslint/visitor-keys": "8.46.2", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.46.2", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.2.tgz", + "integrity": "sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.46.2", + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/typescript-estree": "8.46.2", + "@typescript-eslint/visitor-keys": "8.46.2", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.2.tgz", + "integrity": "sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.46.2", + "@typescript-eslint/types": "^8.46.2", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.2.tgz", + "integrity": "sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/visitor-keys": "8.46.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.2.tgz", + "integrity": "sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.46.2.tgz", + "integrity": "sha512-HbPM4LbaAAt/DjxXaG9yiS9brOOz6fabal4uvUmaUYe6l3K1phQDMQKBRUrr06BQkxkvIZVVHttqiybM9nJsLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/typescript-estree": "8.46.2", + "@typescript-eslint/utils": "8.46.2", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.2.tgz", + "integrity": "sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.2.tgz", + "integrity": "sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.46.2", + "@typescript-eslint/tsconfig-utils": "8.46.2", + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/visitor-keys": "8.46.2", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.2.tgz", + "integrity": "sha512-sExxzucx0Tud5tE0XqR0lT0psBQvEpnpiul9XbGUB1QwpWJJAps1O/Z7hJxLGiZLBKMCutjTzDgmd1muEhBnVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.46.2", + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/typescript-estree": "8.46.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.2.tgz", + "integrity": "sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.46.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.1.tgz", + "integrity": "sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==", + "dev": true, + "license": "ISC" + }, + "node_modules/@vitejs/plugin-basic-ssl": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.1.0.tgz", + "integrity": "sha512-dOxxrhgyDIEUADhb/8OlV9JIqYLgos03YorAueTIeOUskLJSEsfwCByjbu98ctXitUN3znXKp0bYD/WHSudCeA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "peerDependencies": { + "vite": "^6.0.0 || ^7.0.0" + } + }, + "node_modules/@vitest/coverage-v8": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.0.4.tgz", + "integrity": "sha512-YM7gDj2TX2AXyGLz0p/B7hvTsTfaQc+kSV/LU0nEnKlep/ZfbdCDppPND4YQiQC43OXyrhkG3y8ZSTqYb2CKqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^1.0.2", + "@vitest/utils": "4.0.4", + "ast-v8-to-istanbul": "^0.3.5", + "debug": "^4.4.3", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^5.0.6", + "istanbul-reports": "^3.2.0", + "magicast": "^0.3.5", + "std-env": "^3.9.0", + "tinyrainbow": "^3.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@vitest/browser": "4.0.4", + "vitest": "4.0.4" + }, + "peerDependenciesMeta": { + "@vitest/browser": { + "optional": true + } + } + }, + "node_modules/@vitest/coverage-v8/node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vitest/expect": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.4.tgz", + "integrity": "sha512-0ioMscWJtfpyH7+P82sGpAi3Si30OVV73jD+tEqXm5+rIx9LgnfdaOn45uaFkKOncABi/PHL00Yn0oW/wK4cXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "@types/chai": "^5.2.2", + "@vitest/spy": "4.0.4", + "@vitest/utils": "4.0.4", + "chai": "^6.0.1", + "tinyrainbow": "^3.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.4.tgz", + "integrity": "sha512-UTtKgpjWj+pvn3lUM55nSg34098obGhSHH+KlJcXesky8b5wCUgg7s60epxrS6yAG8slZ9W8T9jGWg4PisMf5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "4.0.4", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.19" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/mocker/node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/@vitest/pretty-format": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.4.tgz", + "integrity": "sha512-lHI2rbyrLVSd1TiHGJYyEtbOBo2SDndIsN3qY4o4xe2pBxoJLD6IICghNCvD7P+BFin6jeyHXiUICXqgl6vEaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^3.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.4.tgz", + "integrity": "sha512-99EDqiCkncCmvIZj3qJXBZbyoQ35ghOwVWNnQ5nj0Hnsv4Qm40HmrMJrceewjLVvsxV/JSU4qyx2CGcfMBmXJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "4.0.4", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.4.tgz", + "integrity": "sha512-XICqf5Gi4648FGoBIeRgnHWSNDp+7R5tpclGosFaUUFzY6SfcpsfHNMnC7oDu/iOLBxYfxVzaQpylEvpgii3zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.0.4", + "magic-string": "^0.30.19", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot/node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/@vitest/spy": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.4.tgz", + "integrity": "sha512-G9L13AFyYECo40QG7E07EdYnZZYCKMTSp83p9W8Vwed0IyCG1GnpDLxObkx8uOGPXfDpdeVf24P1Yka8/q1s9g==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.4.tgz", + "integrity": "sha512-4bJLmSvZLyVbNsYFRpPYdJViG9jZyRvMZ35IF4ymXbRZoS+ycYghmwTGiscTXduUg2lgKK7POWIyXJNute1hjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.0.4", + "tinyrainbow": "^3.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/@zeit/schemas": { + "version": "2.36.0", + "resolved": "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.36.0.tgz", + "integrity": "sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg==", + "dev": true, + "license": "MIT" + }, + "node_modules/abbrev": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", + "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/algoliasearch": { + "version": "5.35.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.35.0.tgz", + "integrity": "sha512-Y+moNhsqgLmvJdgTsO4GZNgsaDWv8AOGAaPeIeHKlDn/XunoAqYbA+XNpBd1dW8GOXAUDyxC9Rxc7AV4kpFcIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/abtesting": "1.1.0", + "@algolia/client-abtesting": "5.35.0", + "@algolia/client-analytics": "5.35.0", + "@algolia/client-common": "5.35.0", + "@algolia/client-insights": "5.35.0", + "@algolia/client-personalization": "5.35.0", + "@algolia/client-query-suggestions": "5.35.0", + "@algolia/client-search": "5.35.0", + "@algolia/ingestion": "1.35.0", + "@algolia/monitoring": "1.35.0", + "@algolia/recommend": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/angular-eslint": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/angular-eslint/-/angular-eslint-20.5.0.tgz", + "integrity": "sha512-TSZWjLl3NF6C+PV4wEs6EV1lw+ENo6aOkLCoZ41jXB2bmSvH76LqgTLzWtVNaSZE/MmAL0RkDJFyRtGcE4dtgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": ">= 20.0.0 < 21.0.0", + "@angular-devkit/schematics": ">= 20.0.0 < 21.0.0", + "@angular-eslint/builder": "20.5.0", + "@angular-eslint/eslint-plugin": "20.5.0", + "@angular-eslint/eslint-plugin-template": "20.5.0", + "@angular-eslint/schematics": "20.5.0", + "@angular-eslint/template-parser": "20.5.0", + "@typescript-eslint/types": "^8.0.0", + "@typescript-eslint/utils": "^8.0.0" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": "*", + "typescript-eslint": "^8.0.0" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/ansi-align/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.1.1.tgz", + "integrity": "sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, + "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/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-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-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/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ast-v8-to-istanbul": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-0.3.8.tgz", + "integrity": "sha512-szgSZqUxI5T8mLKvS7WTjF9is+MVbOeLADU73IseOcrqhxr/VAvy6wfoVE39KnKzA7JRhjF5eUagNlHwvZPlKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.31", + "estree-walker": "^3.0.3", + "js-tokens": "^9.0.1" + } + }, + "node_modules/ast-v8-to-istanbul/node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/atomically": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/atomically/-/atomically-2.1.0.tgz", + "integrity": "sha512-+gDffFXRW6sl/HCwbta7zK4uNqbPjv4YJEAdz7Vu+FLQHe77eZ4bvbJGi4hE0QPeJlMYMA3piXEr1UL3dAwx7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "stubborn-fs": "^2.0.0", + "when-exit": "^2.1.4" + } + }, + "node_modules/axe-core": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.0.tgz", + "integrity": "sha512-ilYanEU8vxxBexpJd8cWM4ElSQq4QctCLKih0TSfjIfCQTeyH/6zVrmIJfLPrKTKJRbiG+cfnZbQIjAlJmF1jQ==", + "dev": true, + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/b4a": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz", + "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==", + "dev": true, + "license": "Apache-2.0", + "peerDependencies": { + "react-native-b4a": "*" + }, + "peerDependenciesMeta": { + "react-native-b4a": { + "optional": true + } + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/bare-events": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.1.tgz", + "integrity": "sha512-oxSAxTS1hRfnyit2CL5QpAOS5ixfBjj6ex3yTNvXyY/kE719jQ/IjuESJBK2w5v4wwQRAHGseVJXx9QBYOtFGQ==", + "dev": true, + "license": "Apache-2.0", + "peerDependencies": { + "bare-abort-controller": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + } + } + }, + "node_modules/bare-fs": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.5.0.tgz", + "integrity": "sha512-GljgCjeupKZJNetTqxKaQArLK10vpmK28or0+RwWjEl5Rk+/xG3wkpmkv+WrcBm3q1BwHKlnhXzR8O37kcvkXQ==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-events": "^2.5.4", + "bare-path": "^3.0.0", + "bare-stream": "^2.6.4", + "bare-url": "^2.2.2", + "fast-fifo": "^1.3.2" + }, + "engines": { + "bare": ">=1.16.0" + }, + "peerDependencies": { + "bare-buffer": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + } + } + }, + "node_modules/bare-os": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.2.tgz", + "integrity": "sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "engines": { + "bare": ">=1.14.0" + } + }, + "node_modules/bare-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", + "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-os": "^3.0.1" + } + }, + "node_modules/bare-stream": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.7.0.tgz", + "integrity": "sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "streamx": "^2.21.0" + }, + "peerDependencies": { + "bare-buffer": "*", + "bare-events": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + }, + "bare-events": { + "optional": true + } + } + }, + "node_modules/bare-url": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.3.2.tgz", + "integrity": "sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-path": "^3.0.0" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.8.20", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.20.tgz", + "integrity": "sha512-JMWsdF+O8Orq3EMukbUN1QfbLK9mX2CkUmQBcW2T0s8OmdAUL5LLM/6wFwSrqXzlXB13yhyK9gTKS1rIizOduQ==", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/basic-ftp": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", + "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/beasties": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/beasties/-/beasties-0.3.5.tgz", + "integrity": "sha512-NaWu+f4YrJxEttJSm16AzMIFtVldCvaJ68b1L098KpqXmxt9xOLtKoLkKxb8ekhOrLqEJAbvT6n6SEvB/sac7A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "css-select": "^6.0.0", + "css-what": "^7.0.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "htmlparser2": "^10.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.49", + "postcss-media-query-parser": "^0.2.3" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/bidi-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", + "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "require-from-string": "^2.0.2" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/boxen": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.0.0.tgz", + "integrity": "sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^7.0.0", + "chalk": "^5.0.1", + "cli-boxes": "^3.0.0", + "string-width": "^5.1.2", + "type-fest": "^2.13.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.0.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/boxen/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/boxen/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/boxen/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/boxen/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.27.0.tgz", + "integrity": "sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.8.19", + "caniuse-lite": "^1.0.30001751", + "electron-to-chromium": "^1.5.238", + "node-releases": "^2.0.26", + "update-browserslist-db": "^1.1.4" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/builtin-modules": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-5.0.0.tgz", + "integrity": "sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "19.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz", + "integrity": "sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^4.0.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^7.0.2", + "ssri": "^12.0.0", + "tar": "^7.4.3", + "unique-filename": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/cacache/node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/cacache/node_modules/tar": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.1.tgz", + "integrity": "sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==", + "dev": true, + "license": "ISC", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/cacache/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/cacheable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.1.1.tgz", + "integrity": "sha512-LmF4AXiSNdiRbI2UjH8pAp9NIXxeQsTotpEaegPiDcnN0YPygDJDV3l/Urc0mL72JWdATEorKqIHEx55nDlONg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cacheable/memoize": "^2.0.3", + "@cacheable/memory": "^2.0.3", + "@cacheable/utils": "^2.1.0", + "hookified": "^1.12.2", + "keyv": "^5.5.3", + "qified": "^0.5.0" + } + }, + "node_modules/cacheable/node_modules/keyv": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.5.3.tgz", + "integrity": "sha512-h0Un1ieD+HUrzBH6dJXhod3ifSghk5Hw/2Y4/KHBziPlZecrFyE9YOTPU6eOs0V9pYl8gOs86fkr/KN8lUX39A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@keyv/serialize": "^1.1.1" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", + "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001751", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001751.tgz", + "integrity": "sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chai": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.0.tgz", + "integrity": "sha512-aUTnJc/JipRzJrNADXVvpVqi6CO0dn3nx4EVPxijri+fj3LUUDyZQOgVeW54Ob3Y1Xh9Iz8f+CgaCl8v0mn9bA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "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/chalk-template": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz", + "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/chalk-template?sponsor=1" + } + }, + "node_modules/chalk-template/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/chalk-template/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/change-case": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", + "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/chardet": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.0.tgz", + "integrity": "sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-launcher": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-1.2.1.tgz", + "integrity": "sha512-qmFR5PLMzHyuNJHwOloHPAHhbaNglkfeV/xDtt5b7xiFFyU1I+AZZX0PYseMuhenJSSirgxELYIbswcoc+5H4A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^2.0.1" + }, + "bin": { + "print-chrome-path": "bin/print-chrome-path.cjs" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/chromium-bidi": { + "version": "10.5.1", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-10.5.1.tgz", + "integrity": "sha512-rlj6OyhKhVTnk4aENcUme3Jl9h+cq4oXu4AzBcvr8RMmT6BR4a3zSNT9dbIfXr9/BS6ibzRyDhowuw4n2GgzsQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "mitt": "^3.0.1", + "zod": "^3.24.1" + }, + "peerDependencies": { + "devtools-protocol": "*" + } + }, + "node_modules/ci-info": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", + "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/clean-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", + "integrity": "sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/clean-regexp/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/clipboardy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-3.0.0.tgz", + "integrity": "sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==", + "dev": true, + "license": "MIT", + "dependencies": { + "arch": "^2.2.0", + "execa": "^5.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.2.tgz", + "integrity": "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "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/composed-offset-position": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/composed-offset-position/-/composed-offset-position-0.0.6.tgz", + "integrity": "sha512-Q7dLompI6lUwd7LWyIcP66r4WcS9u7AL2h8HaeipiRfCRPLMWqRx8fYsjb4OHi6UQFifO7XtNC2IlEJ1ozIFxw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@floating-ui/utils": "^0.2.5" + } + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.1.0", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/compression/node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/configstore": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-7.1.0.tgz", + "integrity": "sha512-N4oog6YJWbR9kGyXvS7jEykLDXIE2C0ILYqNBZBp9iwiJpoCBWYsuAdW6PPFn6w06jjnC+3JstVvWHO4cZqvRg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "atomically": "^2.0.3", + "dot-prop": "^9.0.0", + "graceful-fs": "^4.2.11", + "xdg-basedir": "^5.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/configstore/node_modules/dot-prop": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-9.0.0.tgz", + "integrity": "sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^4.18.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "license": "MIT", + "engines": { + "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", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/core-js-compat": { + "version": "3.46.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.46.0.tgz", + "integrity": "sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.26.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "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/cosmiconfig-typescript-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-6.2.0.tgz", + "integrity": "sha512-GEN39v7TgdxgIoNcdkRE3uiAzQt3UXLyHbRHD6YoL048XAeOomyxaP+Hh/+2C6C2wYjxJ2onhJcsQp+L4YEkVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "jiti": "^2.6.1" + }, + "engines": { + "node": ">=v18" + }, + "peerDependencies": { + "@types/node": "*", + "cosmiconfig": ">=9", + "typescript": ">=5" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csp_evaluator": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/csp_evaluator/-/csp_evaluator-1.1.5.tgz", + "integrity": "sha512-EL/iN9etCTzw/fBnp0/uj0f5BOOGvZut2mzsiiBZ/FdT6gFQCKRO/tmcKOxn5drWZ2Ndm/xBb1SI4zwWbGtmIw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/css-functions-list": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.3.tgz", + "integrity": "sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12 || >=16" + } + }, + "node_modules/css-select": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-6.0.0.tgz", + "integrity": "sha512-rZZVSLle8v0+EY8QAkDWrKhpgt6SA5OtHsgBnsj6ZaLb5dmDVOWUDtQitd9ydxxvEjhewNudS6eTVU7uOyzvXw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^7.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "nth-check": "^2.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-7.0.0.tgz", + "integrity": "sha512-wD5oz5xibMOPHzy13CyGmogB3phdvcDaB5t0W/Nr5Z2O/agcB8YwOz6e2Lsp10pNDzBoDO9nVa3RGs/2BttpHQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssstyle": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-5.3.1.tgz", + "integrity": "sha512-g5PC9Aiph9eiczFpcgUhd9S4UUO3F+LHGRIi5NUMZ+4xtoIYbHNZwZnWA2JsFGe8OU8nl4WyaEFiZuGuxlutJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^4.0.3", + "@csstools/css-syntax-patches-for-csstree": "^1.0.14", + "css-tree": "^3.1.0" + }, + "engines": { + "node": ">=20" + } + }, + "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", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/data-urls": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-6.0.0.tgz", + "integrity": "sha512-BnBS08aLUM+DKamupXs3w2tJJoqU+AkaE/+6vQxi/G/DPmIZFJJp9Dkb1kM03AZx8ADehDUZgsNxju3mPXZYIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^15.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true, + "license": "MIT" + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/degenerator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/devtools-protocol": { + "version": "0.0.1507524", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1507524.tgz", + "integrity": "sha512-OjaNE7qpk6GRTXtqQjAE5bGx6+c4F1zZH0YXtpZQLM92HNXx4zMAaqlKhP4T52DosG6hDW8gPMNhGOF8xbwk/w==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dir-glob/node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true, + "license": "MIT" + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "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/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "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/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.240", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.240.tgz", + "integrity": "sha512-OBwbZjWgrCOH+g6uJsA2/7Twpas2OlepS9uvByJjR2datRDuKGYeD+nP8lBBks2qnB7bGJNHDUx7c/YLaT3QMQ==", + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.0.tgz", + "integrity": "sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.9.tgz", + "integrity": "sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.9", + "@esbuild/android-arm": "0.25.9", + "@esbuild/android-arm64": "0.25.9", + "@esbuild/android-x64": "0.25.9", + "@esbuild/darwin-arm64": "0.25.9", + "@esbuild/darwin-x64": "0.25.9", + "@esbuild/freebsd-arm64": "0.25.9", + "@esbuild/freebsd-x64": "0.25.9", + "@esbuild/linux-arm": "0.25.9", + "@esbuild/linux-arm64": "0.25.9", + "@esbuild/linux-ia32": "0.25.9", + "@esbuild/linux-loong64": "0.25.9", + "@esbuild/linux-mips64el": "0.25.9", + "@esbuild/linux-ppc64": "0.25.9", + "@esbuild/linux-riscv64": "0.25.9", + "@esbuild/linux-s390x": "0.25.9", + "@esbuild/linux-x64": "0.25.9", + "@esbuild/netbsd-arm64": "0.25.9", + "@esbuild/netbsd-x64": "0.25.9", + "@esbuild/openbsd-arm64": "0.25.9", + "@esbuild/openbsd-x64": "0.25.9", + "@esbuild/openharmony-arm64": "0.25.9", + "@esbuild/sunos-x64": "0.25.9", + "@esbuild/win32-arm64": "0.25.9", + "@esbuild/win32-ia32": "0.25.9", + "@esbuild/win32-x64": "0.25.9" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "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==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint": { + "version": "9.38.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.38.0.tgz", + "integrity": "sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.1", + "@eslint/core": "^0.16.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.38.0", + "@eslint/plugin-kit": "^0.4.0", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-config-prettier": { + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", + "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-eslint-comments": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz", + "integrity": "sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5", + "ignore": "^5.0.5" + }, + "engines": { + "node": ">=6.5.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-eslint-comments/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint-plugin-eslint-comments/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.4.tgz", + "integrity": "sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.11.7" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-promise": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-7.2.1.tgz", + "integrity": "sha512-SWKjd+EuvWkYaS+uN2csvj0KoP43YTu7+phKQ5v+xw6+A0gutVX2yqCeCkC3uLCJFiPfR2dD8Es5L7yUsmvEaA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-unicorn": { + "version": "62.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-62.0.0.tgz", + "integrity": "sha512-HIlIkGLkvf29YEiS/ImuDZQbP12gWyx5i3C6XrRxMvVdqMroCI9qoVYCoIl17ChN+U89pn9sVwLxhIWj5nEc7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "@eslint-community/eslint-utils": "^4.9.0", + "@eslint/plugin-kit": "^0.4.0", + "change-case": "^5.4.4", + "ci-info": "^4.3.1", + "clean-regexp": "^1.0.0", + "core-js-compat": "^3.46.0", + "esquery": "^1.6.0", + "find-up-simple": "^1.0.1", + "globals": "^16.4.0", + "indent-string": "^5.0.0", + "is-builtin-module": "^5.0.0", + "jsesc": "^3.1.0", + "pluralize": "^8.0.0", + "regexp-tree": "^0.1.27", + "regjsparser": "^0.13.0", + "semver": "^7.7.3", + "strip-indent": "^4.1.1" + }, + "engines": { + "node": "^20.10.0 || >=21.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" + }, + "peerDependencies": { + "eslint": ">=9.38.0" + } + }, + "node_modules/eslint-plugin-unicorn/node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/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": "*" + } + }, + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true, + "license": "MIT" + }, + "node_modules/events-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bare-events": "^2.7.0" + } + }, + "node_modules/eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eventsource-parser": "^3.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/eventsource-parser": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", + "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/execa/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/expect-type": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.2.tgz", + "integrity": "sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", + "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/express-rate-limit": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.1.tgz", + "integrity": "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" + } + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "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-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastq": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz", + "integrity": "sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "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/find-up-simple": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz", + "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/forwarded-parse": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/forwarded-parse/-/forwarded-parse-2.1.2.tgz", + "integrity": "sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "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", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", + "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz", + "integrity": "sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "dunder-proto": "^1.0.0", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "function-bind": "^1.1.2", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-uri": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz", + "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 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", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/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": "*" + } + }, + "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": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "license": "ISC" + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "16.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.4.0.tgz", + "integrity": "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", + "dev": true, + "license": "MIT" + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hookified": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.12.2.tgz", + "integrity": "sha512-aokUX1VdTpI0DUsndvW+OiwmBpKCu/NgRsSSkuSY0zq8PY6Q6a+lmOfAFDXAAOtBqJELvcWY9L1EVtzjbQcMdg==", + "dev": true, + "license": "MIT" + }, + "node_modules/hosted-git-info": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.2.tgz", + "integrity": "sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^11.1.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", + "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/htmlparser2": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz", + "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.1", + "entities": "^6.0.0" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-link-header": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/http-link-header/-/http-link-header-1.1.3.tgz", + "integrity": "sha512-3cZ0SRL8fb9MUlU3mKM61FcQvPfXx2dBrZW3Vbg5CXa8jFlK8OaEpePenLe1oEXQduhz8b0QjsqfS59QP4AJDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "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/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-8.0.0.tgz", + "integrity": "sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A==", + "dev": true, + "license": "ISC", + "dependencies": { + "minimatch": "^10.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", + "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/image-ssim": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/image-ssim/-/image-ssim-0.2.0.tgz", + "integrity": "sha512-W7+sO6/yhxy83L0G7xR8YAc5Z5QFtYEXXRV6EaE8tuYBZJnA3gVgp3q7X7muhLZVodeb9UfvjSbwt9VJwjIYAg==", + "dev": true, + "license": "MIT" + }, + "node_modules/immutable": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.4.tgz", + "integrity": "sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/import-in-the-middle": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.15.0.tgz", + "integrity": "sha512-bpQy+CrsRmYmoPMAE/0G33iwRqwW4ouqdRg8jgbH3aKuCtOc8lxgmYXg2dMM92CRiGP660EtBcymH/eVUpCSaA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "acorn": "^8.14.0", + "acorn-import-attributes": "^1.9.5", + "cjs-module-lexer": "^1.2.2", + "module-details-from-path": "^1.0.3" + } + }, + "node_modules/import-meta-resolve": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", + "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", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ini": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-5.0.0.tgz", + "integrity": "sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/intl-messageformat": { + "version": "10.7.18", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.7.18.tgz", + "integrity": "sha512-m3Ofv/X/tV8Y3tHXLohcuVuhWKo7BBq62cqY15etqmLxg2DZ34AGGgQDeR+SCta2+zICb1NX83af0GJmbQ1++g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@formatjs/ecma402-abstract": "2.3.6", + "@formatjs/fast-memoize": "2.2.7", + "@formatjs/icu-messageformat-parser": "2.11.4", + "tslib": "^2.8.0" + } + }, + "node_modules/ip-address": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", + "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-builtin-module": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-5.0.0.tgz", + "integrity": "sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "builtin-modules": "^5.0.0" + }, + "engines": { + "node": ">=18.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-port-reachable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-port-reachable/-/is-port-reachable-4.0.0.tgz", + "integrity": "sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "dev": 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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/jpeg-js": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz", + "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/js-library-detector": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/js-library-detector/-/js-library-detector-6.7.0.tgz", + "integrity": "sha512-c80Qupofp43y4cJ7+8TTDN/AsDwLi5oOm/plBrWI+iQt485vKXCco+yVmOwEgdo9VOdsYTuV0UlTeetVPTriXA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "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/jsdom": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-27.0.1.tgz", + "integrity": "sha512-SNSQteBL1IlV2zqhwwolaG9CwhIhTvVHWg3kTss/cLE7H/X4644mtPQqYvCfsSrGQWt9hSZcgOXX8bOZaMN+kA==", + "dev": true, + "license": "MIT", "dependencies": { - "abbrev": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "ajv": { - "version": "4.11.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "aproba": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" - } - }, - "asn1": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "assert-plus": { - "version": "0.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws4": { - "version": "1.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "balanced-match": { - "version": "0.4.2", - "bundled": true, - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "block-stream": { - "version": "0.0.9", - "bundled": true, - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "boom": { - "version": "2.10.1", - "bundled": true, - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "brace-expansion": { - "version": "1.1.7", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "0.4.2", - "concat-map": "0.0.1" - } - }, - "buffer-shims": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "caseless": { - "version": "0.12.0", - "bundled": true, - "dev": true, - "optional": true - }, - "co": { - "version": "4.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "combined-stream": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "cryptiles": { - "version": "2.0.5", - "bundled": true, - "dev": true, - "requires": { - "boom": "2.10.1" - } - }, - "dashdash": { - "version": "1.14.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "debug": { - "version": "2.6.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.4.2", - "bundled": true, - "dev": true, - "optional": true - }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "extend": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "extsprintf": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "bundled": true, - "dev": true, - "optional": true - }, - "form-data": { - "version": "2.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "fstream": { - "version": "1.0.11", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" - } - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "1.1.1", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } - }, - "getpass": { - "version": "0.1.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true, - "dev": true - }, - "har-schema": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "hawk": { - "version": "3.1.3", - "bundled": true, - "dev": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "hoek": { - "version": "2.16.3", - "bundled": true, - "dev": true - }, - "http-signature": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "ini": { - "version": "1.3.4", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "isstream": { - "version": "0.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "jodid25519": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "jsonify": { - "version": "0.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "jsprim": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "mime-db": { - "version": "1.27.0", - "bundled": true, - "dev": true - }, - "mime-types": { - "version": "2.1.15", - "bundled": true, - "dev": true, - "requires": { - "mime-db": "1.27.0" - } - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "node-pre-gyp": { - "version": "0.6.39", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "1.0.2", - "hawk": "3.1.3", - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", - "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" - } - }, - "npmlog": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "oauth-sign": { - "version": "0.8.2", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "performance-now": { - "version": "0.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "1.0.7", - "bundled": true, - "dev": true - }, - "punycode": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true - }, - "qs": { - "version": "6.4.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.2.9", - "bundled": true, - "dev": true, - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.1", - "util-deprecate": "1.0.2" - } - }, - "request": { - "version": "2.81.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" - } - }, - "rimraf": { - "version": "2.6.1", - "bundled": true, - "dev": true, - "requires": { - "glob": "7.1.2" - } - }, - "safe-buffer": { - "version": "5.0.1", - "bundled": true, - "dev": true - }, - "semver": { - "version": "5.3.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sntp": { - "version": "1.0.9", - "bundled": true, - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "sshpk": { - "version": "1.13.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string_decoder": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "stringstream": { - "version": "0.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "2.2.1", - "bundled": true, - "dev": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-pack": { - "version": "3.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "2.6.8", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.2.9", - "rimraf": "2.6.1", - "tar": "2.2.1", - "uid-number": "0.0.6" - } - }, - "tough-cookie": { - "version": "2.3.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "punycode": "1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "bundled": true, - "dev": true, + "@asamuzakjp/dom-selector": "^6.7.2", + "cssstyle": "^5.3.1", + "data-urls": "^6.0.0", + "decimal.js": "^10.6.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.6", + "is-potential-custom-element-name": "^1.0.1", + "parse5": "^8.0.0", + "rrweb-cssom": "^0.8.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^6.0.0", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^8.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^15.1.0", + "ws": "^8.18.3", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { "optional": true - }, - "uid-number": { - "version": "0.0.6", - "bundled": true, - "dev": true, + } + } + }, + "node_modules/jsdom/node_modules/ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { "optional": true }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "uuid": { - "version": "3.0.1", - "bundled": true, - "dev": true, + "utf-8-validate": { "optional": true - }, - "verror": { - "version": "1.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "extsprintf": "1.0.2" - } - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true } } }, - "fstream": { - "version": "1.0.11", - "resolved": "http://npm.trustu.pre/fstream/-/fstream-1.0.11/5c1fb1f117477114f0632a0eb4b71b3cb0fd3171.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz", + "integrity": "sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.2" + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" } }, - "function-bind": { - "version": "1.1.1", - "resolved": "http://npm.trustu.pre/function-bind/-/function-bind-1.1.1/a56899d3ea3c9bab874bb9773b7c5ede92f4895d.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" }, - "gauge": { - "version": "2.7.4", - "resolved": "http://npm.trustu.pre/gauge/-/gauge-2.7.4/2c03405c7538c39d7eb37b317022e325fb018bf7.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "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, - "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" } }, - "gaze": { - "version": "1.1.2", - "resolved": "http://npm.trustu.pre/gaze/-/gaze-1.1.2/847224677adb8870d679257ed3388fdb61e40105.tgz", - "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=", + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, - "optional": true, - "requires": { - "globule": "1.2.0" + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/known-css-properties": { + "version": "0.37.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.37.0.tgz", + "integrity": "sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/legacy-javascript": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/legacy-javascript/-/legacy-javascript-0.0.1.tgz", + "integrity": "sha512-lPyntS4/aS7jpuvOlitZDFifBCb4W8L/3QU0PLbUTUj+zYah8rfVjYic88yG7ZKTxhS5h9iz7duT8oUXKszLhg==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lighthouse": { + "version": "12.8.2", + "resolved": "https://registry.npmjs.org/lighthouse/-/lighthouse-12.8.2.tgz", + "integrity": "sha512-+5SKYzVaTFj22MgoYDPNrP9tlD2/Ay7j3SxPSFD9FpPyVxGr4UtOQGKyrdZ7wCmcnBaFk0mCkPfARU3CsE0nvA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@paulirish/trace_engine": "0.0.59", + "@sentry/node": "^9.28.1", + "axe-core": "^4.10.3", + "chrome-launcher": "^1.2.0", + "configstore": "^7.0.0", + "csp_evaluator": "1.1.5", + "devtools-protocol": "0.0.1507524", + "enquirer": "^2.3.6", + "http-link-header": "^1.1.1", + "intl-messageformat": "^10.5.3", + "jpeg-js": "^0.4.4", + "js-library-detector": "^6.7.0", + "lighthouse-logger": "^2.0.2", + "lighthouse-stack-packs": "1.12.2", + "lodash-es": "^4.17.21", + "lookup-closest-locale": "6.2.0", + "metaviewport-parser": "0.3.0", + "open": "^8.4.0", + "parse-cache-control": "1.0.1", + "puppeteer-core": "^24.17.1", + "robots-parser": "^3.0.1", + "speedline-core": "^1.4.3", + "third-party-web": "^0.27.0", + "tldts-icann": "^7.0.12", + "ws": "^7.0.0", + "yargs": "^17.3.1", + "yargs-parser": "^21.0.0" + }, + "bin": { + "chrome-debug": "core/scripts/manual-chrome-launcher.js", + "lighthouse": "cli/index.js", + "smokehouse": "cli/test/smokehouse/frontends/smokehouse-bin.js" + }, + "engines": { + "node": ">=18.16" + } + }, + "node_modules/lighthouse-logger": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-2.0.2.tgz", + "integrity": "sha512-vWl2+u5jgOQuZR55Z1WM0XDdrJT6mzMP8zHUct7xTlWhuQs+eV0g+QL0RQdFjT54zVmbhLCP8vIVpy1wGn/gCg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "debug": "^4.4.1", + "marky": "^1.2.2" + } + }, + "node_modules/lighthouse-stack-packs": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/lighthouse-stack-packs/-/lighthouse-stack-packs-1.12.2.tgz", + "integrity": "sha512-Ug8feS/A+92TMTCK6yHYLwaFMuelK/hAKRMdldYkMNwv+d9PtWxjXEg6rwKtsUXTADajhdrhXyuNCJ5/sfmPFw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lint-staged": { + "version": "16.2.6", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-16.2.6.tgz", + "integrity": "sha512-s1gphtDbV4bmW1eylXpVMk2u7is7YsrLl8hzrtvC70h4ByhcMLZFY01Fx05ZUDNuv1H8HO4E+e2zgejV1jVwNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^14.0.1", + "listr2": "^9.0.5", + "micromatch": "^4.0.8", + "nano-spawn": "^2.0.0", + "pidtree": "^0.6.0", + "string-argv": "^0.3.2", + "yaml": "^2.8.1" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "engines": { + "node": ">=20.17" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/lint-staged/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/lint-staged/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/lint-staged/node_modules/cli-truncate": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.1.1.tgz", + "integrity": "sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^7.1.0", + "string-width": "^8.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/cli-truncate/node_modules/string-width": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.1.0.tgz", + "integrity": "sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/listr2": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-9.0.5.tgz", + "integrity": "sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^5.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20.0.0" } }, - "generate-function": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/generate-function/-/generate-function-2.0.0/6858fe7c0969b7d4e9093337647ac79f60dfbe74.tgz", - "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", + "node_modules/lint-staged/node_modules/slice-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", + "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", "dev": true, - "optional": true + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "http://npm.trustu.pre/generate-object-property/-/generate-object-property-1.2.0/9c0e1c40308ce804f4783618b937fa88f99d50d0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "node_modules/lint-staged/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "dev": true, - "optional": true, - "requires": { - "is-property": "1.0.2" + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "get-caller-file": { - "version": "1.0.2", - "resolved": "http://npm.trustu.pre/get-caller-file/-/get-caller-file-1.0.2/f702e63127e7e231c160a80c1554acb70d5047e5.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", - "dev": true - }, - "get-pkg-repo": { - "version": "1.4.0", - "resolved": "http://npm.trustu.pre/get-pkg-repo/-/get-pkg-repo-1.4.0/c73b489c06d80cc5536c2c853f9e05232056972d.tgz", - "integrity": "sha1-xztInAbYDMVTbCyFP54FIyBWly0=", + "node_modules/lint-staged/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "dev": true, - "requires": { - "hosted-git-info": "2.5.0", - "meow": "3.7.0", - "normalize-package-data": "2.4.0", - "parse-github-repo-url": "1.4.1", - "through2": "2.0.3" + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "get-stdin": { - "version": "4.0.1", - "resolved": "http://npm.trustu.pre/get-stdin/-/get-stdin-4.0.1/b968c6b0a04384324902e8bf1a5df32579a450fe.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, - "get-stream": { - "version": "3.0.0", - "resolved": "http://npm.trustu.pre/get-stream/-/get-stream-3.0.0/8e943d1358dc37555054ecbe2edb05aa174ede14.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "http://npm.trustu.pre/getpass/-/getpass-0.1.7/5eff8e3e684d569ae4cb2b1282604e8ba62149fa.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "node_modules/listr2": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-9.0.1.tgz", + "integrity": "sha512-SL0JY3DaxylDuo/MecFeiC+7pedM0zia33zl0vcjgwcq1q1FWWF1To9EIauPbl8GbMCU0R2e0uJ8bZunhYKD2g==", "dev": true, - "requires": { - "assert-plus": "1.0.0" - }, + "license": "MIT", "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/assert-plus/-/assert-plus-1.0.0/f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } + "cli-truncate": "^4.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20.0.0" } }, - "gh-pages": { - "version": "0.12.0", - "resolved": "http://npm.trustu.pre/gh-pages/-/gh-pages-0.12.0/d951e3ed98b85699d4b0418eb1a15b1a04988dc1.tgz", - "integrity": "sha1-2VHj7Zi4VpnUsEGOsaFbGgSYjcE=", - "dev": true, - "requires": { - "async": "2.1.2", - "commander": "2.9.0", - "globby": "6.1.0", - "graceful-fs": "4.1.10", - "q": "1.4.1", - "q-io": "1.13.2", - "rimraf": "2.6.2" - }, - "dependencies": { - "async": { - "version": "2.1.2", - "resolved": "http://npm.trustu.pre/async/-/async-2.1.2/612a4ab45ef42a70cde806bad86ee6db047e8385.tgz", - "integrity": "sha1-YSpKtF70KnDN6Aa62G7m2wR+g4U=", - "dev": true, - "requires": { - "lodash": "4.17.4" - } - }, - "commander": { - "version": "2.9.0", - "resolved": "http://npm.trustu.pre/commander/-/commander-2.9.0/9c99094176e12240cb22d6c5146098400fe0f7d4.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true, - "requires": { - "graceful-readlink": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.10", - "resolved": "http://npm.trustu.pre/graceful-fs/-/graceful-fs-4.1.10/f2d720c22092f743228775c75e3612632501f131.tgz", - "integrity": "sha1-8tcgwiCS90Mih3XHXjYSYyUB8TE=", - "dev": true - }, - "q": { - "version": "1.4.1", - "resolved": "http://npm.trustu.pre/q/-/q-1.4.1/55705bcd93c5f3673530c2c2cbc0c2b3addc286e.tgz", - "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", - "dev": true - } + "node_modules/listr2/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "git-raw-commits": { - "version": "1.3.0", - "resolved": "http://npm.trustu.pre/git-raw-commits/-/git-raw-commits-1.3.0/0bc8596e90d5ffe736f7f5546bd2d12f73abaac6.tgz", - "integrity": "sha1-C8hZbpDV/+c29/VUa9LRL3OrqsY=", - "dev": true, - "requires": { - "dargs": "4.1.0", - "lodash.template": "4.4.0", - "meow": "3.7.0", - "split2": "2.2.0", - "through2": "2.0.3" - }, - "dependencies": { - "lodash.template": { - "version": "4.4.0", - "resolved": "http://npm.trustu.pre/lodash.template/-/lodash.template-4.4.0/e73a0385c8355591746e020b99679c690e68fba0.tgz", - "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=", - "dev": true, - "requires": { - "lodash._reinterpolate": "3.0.0", - "lodash.templatesettings": "4.1.0" - } - }, - "lodash.templatesettings": { - "version": "4.1.0", - "resolved": "http://npm.trustu.pre/lodash.templatesettings/-/lodash.templatesettings-4.1.0/2b4d4e95ba440d915ff08bc899e4553666713316.tgz", - "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=", - "dev": true, - "requires": { - "lodash._reinterpolate": "3.0.0" - } - } + "node_modules/listr2/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "git-remote-origin-url": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/git-remote-origin-url/-/git-remote-origin-url-2.0.0/5282659dae2107145a11126112ad3216ec5fa65f.tgz", - "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=", + "node_modules/listr2/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "dev": true, - "requires": { - "gitconfiglocal": "1.0.0", - "pify": "2.3.0" + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "git-semver-tags": { - "version": "1.2.3", - "resolved": "http://npm.trustu.pre/git-semver-tags/-/git-semver-tags-1.2.3/188b453882bf9d7a23afd31baba537dab7388d5d.tgz", - "integrity": "sha1-GItFOIK/nXojr9Mbq6U32rc4jV0=", + "node_modules/listr2/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "dev": true, - "requires": { - "meow": "3.7.0", - "semver": "5.4.1" + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "gitconfiglocal": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/gitconfiglocal/-/gitconfiglocal-1.0.0/41d045f3851a5ea88f03f24ca1c6178114464b9b.tgz", - "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=", + "node_modules/lit": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/lit/-/lit-3.2.1.tgz", + "integrity": "sha512-1BBa1E/z0O9ye5fZprPtdqnc0BFzxIxTTOO/tQFmyC/hj1O3jL4TfmLBw0WEwjAokdLwpclkvGgDJwTIh0/22w==", "dev": true, - "requires": { - "ini": "1.3.5" + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^2.0.4", + "lit-element": "^4.1.0", + "lit-html": "^3.2.0" } }, - "glob": { - "version": "7.1.2", - "resolved": "http://npm.trustu.pre/glob/-/glob-7.1.2/c19c9df9a028702d678612384a6552404c636d15.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "node_modules/lit-element": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.1.1.tgz", + "integrity": "sha512-HO9Tkkh34QkTeUmEdNYhMT8hzLid7YlMlATSi1q4q17HE5d9mrrEHJ/o8O2D0cMi182zK1F3v7x0PWFjrhXFew==", "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.2.0", + "@lit/reactive-element": "^2.0.4", + "lit-html": "^3.2.0" } }, - "glob-base": { - "version": "0.3.0", - "resolved": "http://npm.trustu.pre/glob-base/-/glob-base-0.3.0/dbb164f6221b1c0b1ccf82aea328b497df0ea3c4.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "node_modules/lit-html": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.2.1.tgz", + "integrity": "sha512-qI/3lziaPMSKsrwlxH/xMgikhQ0EGOX2ICU73Bi/YHFvz2j/yMCIrw4+puF2IpQ4+upd3EWbvnHM9+PnJn48YA==", "dev": true, - "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" - }, + "license": "BSD-3-Clause", "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/is-extglob/-/is-extglob-1.0.0/ac468177c4943405a092fc8f29760c6ffc6206c0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "http://npm.trustu.pre/is-glob/-/is-glob-2.0.1/d096f926a3ded5600f3fdfd91198cb0888c2d863.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - } + "@types/trusted-types": "^2.0.2" } }, - "glob-parent": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/glob-parent/-/glob-parent-2.0.0/81383d72db054fcccf5336daa902f182f6edbb28.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "node_modules/lmdb": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.4.2.tgz", + "integrity": "sha512-nwVGUfTBUwJKXd6lRV8pFNfnrCC1+l49ESJRM19t/tFb/97QfJEixe5DYRvug5JO7DSFKoKaVy7oGMt5rVqZvg==", "dev": true, - "requires": { - "is-glob": "2.0.1" + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "msgpackr": "^1.11.2", + "node-addon-api": "^6.1.0", + "node-gyp-build-optional-packages": "5.2.2", + "ordered-binary": "^1.5.3", + "weak-lru-cache": "^1.2.2" + }, + "bin": { + "download-lmdb-prebuilds": "bin/download-prebuilds.js" }, + "optionalDependencies": { + "@lmdb/lmdb-darwin-arm64": "3.4.2", + "@lmdb/lmdb-darwin-x64": "3.4.2", + "@lmdb/lmdb-linux-arm": "3.4.2", + "@lmdb/lmdb-linux-arm64": "3.4.2", + "@lmdb/lmdb-linux-x64": "3.4.2", + "@lmdb/lmdb-win32-arm64": "3.4.2", + "@lmdb/lmdb-win32-x64": "3.4.2" + } + }, + "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": { - "is-extglob": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/is-extglob/-/is-extglob-1.0.0/ac468177c4943405a092fc8f29760c6ffc6206c0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "http://npm.trustu.pre/is-glob/-/is-glob-2.0.1/d096f926a3ded5600f3fdfd91198cb0888c2d863.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - } + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "globals": { - "version": "9.18.0", - "resolved": "http://npm.trustu.pre/globals/-/globals-9.18.0/aa3896b3e69b487f17e31ed2143d69a8e30c2d8a.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" }, - "globby": { - "version": "6.1.0", - "resolved": "http://npm.trustu.pre/globby/-/globby-6.1.0/f5a6d70e8395e21c858fb0489d64df02424d506c.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", "dev": true, - "requires": { - "array-union": "1.0.2", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } + "license": "MIT" }, - "globule": { - "version": "1.2.0", - "resolved": "http://npm.trustu.pre/globule/-/globule-1.2.0/1dc49c6822dd9e8a2fa00ba2a295006e8664bd09.tgz", - "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=", + "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, - "optional": true, - "requires": { - "glob": "7.1.2", - "lodash": "4.17.4", - "minimatch": "3.0.4" - } + "license": "MIT" }, - "glogg": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/glogg/-/glogg-1.0.0/7fe0f199f57ac906cf512feead8f90ee4a284fc5.tgz", - "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=", + "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, - "requires": { - "sparkles": "1.0.0" - } + "license": "MIT" }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "http://npm.trustu.pre/graceful-fs/-/graceful-fs-4.1.11/0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true + "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" }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/graceful-readlink/-/graceful-readlink-1.0.1/4cafad76bc62f02fa039b2f94e9a3dd3a391a725.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "dev": true + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" }, - "gulp-util": { - "version": "3.0.7", - "resolved": "http://npm.trustu.pre/gulp-util/-/gulp-util-3.0.7/78925c4b8f8b49005ac01a011c557e6218941cbb.tgz", - "integrity": "sha1-eJJcS4+LSQBawBoBHFV+YhiUHLs=", - "dev": true, - "requires": { - "array-differ": "1.0.0", - "array-uniq": "1.0.3", - "beeper": "1.1.1", - "chalk": "1.1.3", - "dateformat": "1.0.12", - "fancy-log": "1.3.0", - "gulplog": "1.0.0", - "has-gulplog": "0.1.0", - "lodash._reescape": "3.0.0", - "lodash._reevaluate": "3.0.0", - "lodash._reinterpolate": "3.0.0", - "lodash.template": "3.6.2", - "minimist": "1.2.0", - "multipipe": "0.1.2", - "object-assign": "3.0.0", - "replace-ext": "0.0.1", - "through2": "2.0.3", - "vinyl": "0.5.3" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "http://npm.trustu.pre/ansi-styles/-/ansi-styles-2.2.1/b432dd3358b634cf75e1e4664368240533c1ddbe.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "http://npm.trustu.pre/chalk/-/chalk-1.1.3/a8115c55e4a702fe4d150abd3872822a7e09fc98.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "object-assign": { - "version": "3.0.0", - "resolved": "http://npm.trustu.pre/object-assign/-/object-assign-3.0.0/9bedd5ca0897949bca47e7ff408062d549f587f2.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/supports-color/-/supports-color-2.0.0/535d045ce6b6363fa40117084629995e9df324c7.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } + "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" }, - "gulplog": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/gulplog/-/gulplog-1.0.0/e28c4d45d05ecbbed818363ce8f9c5926229ffe5.tgz", - "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "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, - "requires": { - "glogg": "1.0.0" - } + "license": "MIT" }, - "hammerjs": { - "version": "2.0.8", - "resolved": "http://npm.trustu.pre/hammerjs/-/hammerjs-2.0.8/04ef77862cff2bb79d30f7692095930222bf60f1.tgz", - "integrity": "sha1-BO93hiz/K7edMPdpIJWTAiK/YPE=", - "dev": true + "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" }, - "handle-thing": { - "version": "1.2.5", - "resolved": "http://npm.trustu.pre/handle-thing/-/handle-thing-1.2.5/fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4.tgz", - "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=", - "dev": true + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true, + "license": "MIT" }, - "handlebars": { - "version": "4.0.11", - "resolved": "http://npm.trustu.pre/handlebars/-/handlebars-4.0.11/630a35dfe0294bc281edae6ffc5d329fc7982dcc.tgz", - "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", + "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==", "dev": true, - "requires": { - "async": "1.5.2", - "optimist": "0.6.1", - "source-map": "0.4.4", - "uglify-js": "2.8.29" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "http://npm.trustu.pre/async/-/async-1.5.2/ec6a61ae56480c0c3cb241c95618e20892f9672a.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "camelcase": { - "version": "1.2.1", - "resolved": "http://npm.trustu.pre/camelcase/-/camelcase-1.2.1/9bb5304d2e0b56698b2c758b08a3eaa9daa58a39.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true, - "optional": true - }, - "cliui": { - "version": "2.1.0", - "resolved": "http://npm.trustu.pre/cliui/-/cliui-2.1.0/4b475760ff80264c762c3a1719032e91c7fea0d1.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "optional": true, - "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", - "wordwrap": "0.0.2" - } - }, - "source-map": { - "version": "0.4.4", - "resolved": "http://npm.trustu.pre/source-map/-/source-map-0.4.4/eba4f5da9c0dc999de68032d8b4f76173652036b.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - }, - "uglify-js": { - "version": "2.8.29", - "resolved": "http://npm.trustu.pre/uglify-js/-/uglify-js-2.8.29/29c5733148057bb4e1f75df35b7a9cb72e6a59dd.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "dev": true, - "optional": true, - "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "http://npm.trustu.pre/source-map/-/source-map-0.5.7/8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "optional": true - } - } - }, - "yargs": { - "version": "3.10.0", - "resolved": "http://npm.trustu.pre/yargs/-/yargs-3.10.0/f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "optional": true, - "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "window-size": "0.1.0" - } - } - } + "license": "MIT" }, - "har-schema": { - "version": "1.0.5", - "resolved": "http://npm.trustu.pre/har-schema/-/har-schema-1.0.5/d263135f43307c02c602afc8fe95970c0151369e.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", - "dev": true + "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" }, - "har-validator": { - "version": "4.2.1", - "resolved": "http://npm.trustu.pre/har-validator/-/har-validator-4.2.1/33481d0f1bbff600dd203d75812a6a5fba002e2a.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "node_modules/log-symbols": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", + "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", "dev": true, - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - }, + "license": "MIT", "dependencies": { - "ajv": { - "version": "4.11.8", - "resolved": "http://npm.trustu.pre/ajv/-/ajv-4.11.8/82ffb02b29e662ae53bdc20af15947706739c536.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - } + "chalk": "^5.3.0", + "is-unicode-supported": "^1.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "has": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/has/-/has-1.0.1/8461733f538b0837c9361e39a9ab9e9704dc2f28.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "node_modules/log-symbols/node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", "dev": true, - "requires": { - "function-bind": "1.1.1" + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "has-ansi": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/has-ansi/-/has-ansi-2.0.0/34f5049ce1ecdf2b0649af3ef24e45ed35416d91.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "node_modules/log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", "dev": true, - "requires": { - "ansi-regex": "2.1.1" + "license": "MIT", + "dependencies": { + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "has-binary": { - "version": "0.1.7", - "resolved": "http://npm.trustu.pre/has-binary/-/has-binary-0.1.7/68e61eb16210c9545a0a5cce06a873912fe1e68c.tgz", - "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", + "node_modules/log-update/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, - "requires": { - "isarray": "0.0.1" + "license": "MIT", + "engines": { + "node": ">=12" }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "http://npm.trustu.pre/isarray/-/isarray-0.0.1/8a18acfca9a8f4177e09abfc6038939b05d1eedf.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - } + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "has-cors": { - "version": "1.1.0", - "resolved": "http://npm.trustu.pre/has-cors/-/has-cors-1.1.0/5e474793f7ea9843d1bb99c23eef49ff126fff39.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", - "dev": true - }, - "has-flag": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/has-flag/-/has-flag-2.0.0/e8207af1cc7b30d446cc70b734b5e8be18f88d51.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } }, - "has-gulplog": { - "version": "0.1.0", - "resolved": "http://npm.trustu.pre/has-gulplog/-/has-gulplog-0.1.0/6414c82913697da51590397dafb12f22967811ce.tgz", - "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", "dev": true, - "requires": { - "sparkles": "1.0.0" + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "has-unicode": { - "version": "2.0.1", - "resolved": "http://npm.trustu.pre/has-unicode/-/has-unicode-2.0.1/e0e6fe6a28cf51138855e086d1691e771de2a8b9.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true + "node_modules/log-update/node_modules/slice-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", + "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } }, - "hash-base": { - "version": "2.0.2", - "resolved": "http://npm.trustu.pre/hash-base/-/hash-base-2.0.2/66ea1d856db4e8a5470cadf6fce23ae5244ef2e1.tgz", - "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "node_modules/log-update/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "dev": true, - "requires": { - "inherits": "2.0.3" + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "hash.js": { - "version": "1.1.3", - "resolved": "http://npm.trustu.pre/hash.js/-/hash.js-1.1.3/340dedbe6290187151c1ea1d777a3448935df846.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "dev": true, - "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "hawk": { - "version": "3.1.3", - "resolved": "http://npm.trustu.pre/hawk/-/hawk-3.1.3/078444bd7c1640b0fe540d2c9b73d59678e8e1c4.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "node_modules/loglevel": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.2.tgz", + "integrity": "sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==", "dev": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/loglevel" } }, - "he": { - "version": "1.1.1", - "resolved": "http://npm.trustu.pre/he/-/he-1.1.1/93410fd21b009735151f8868c2f271f3427e23fd.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true + "node_modules/loglevel-colored-level-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/loglevel-colored-level-prefix/-/loglevel-colored-level-prefix-1.0.0.tgz", + "integrity": "sha512-u45Wcxxc+SdAlh4yeF/uKlC1SPUPCy0gullSNKXod5I4bmifzk+Q4lSLExNEVn19tGaJipbZ4V4jbFn79/6mVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^1.1.3", + "loglevel": "^1.4.1" + } }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/hmac-drbg/-/hmac-drbg-1.0.1/d2745701025a6c775a6c545793ed502fc0c649a1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "node_modules/loglevel-colored-level-prefix/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true, - "requires": { - "hash.js": "1.1.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "hoek": { - "version": "2.16.3", - "resolved": "http://npm.trustu.pre/hoek/-/hoek-2.16.3/20bb7403d3cea398e91dc4710a8ff1b8274a25ed.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true + "node_modules/loglevel-colored-level-prefix/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "homedir-polyfill": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/homedir-polyfill/-/homedir-polyfill-1.0.1/4c2bbc8a758998feebf5ed68580f76d46768b4bc.tgz", - "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", + "node_modules/loglevel-colored-level-prefix/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "dev": true, - "requires": { - "parse-passwd": "1.0.0" + "license": "MIT", + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "hosted-git-info": { - "version": "2.5.0", - "resolved": "http://npm.trustu.pre/hosted-git-info/-/hosted-git-info-2.5.0/6d60e34b3abbc8313062c3b798ef8d901a07af3c.tgz", - "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", - "dev": true + "node_modules/loglevel-colored-level-prefix/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } }, - "hpack.js": { - "version": "2.1.6", - "resolved": "http://npm.trustu.pre/hpack.js/-/hpack.js-2.1.6/87774c0949e513f42e84575b3c45681fade2a0b2.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "node_modules/loglevel-colored-level-prefix/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, - "requires": { - "inherits": "2.0.3", - "obuf": "1.1.1", - "readable-stream": "2.3.3", - "wbuf": "1.7.2" + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "html-comment-regex": { - "version": "1.1.1", - "resolved": "http://npm.trustu.pre/html-comment-regex/-/html-comment-regex-1.1.1/668b93776eaae55ebde8f3ad464b307a4963625e.tgz", - "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=", - "dev": true + "node_modules/loglevel-colored-level-prefix/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } }, - "html-entities": { - "version": "1.2.1", - "resolved": "http://npm.trustu.pre/html-entities/-/html-entities-1.2.1/0df29351f0721163515dfb9e5543e5f6eed5162f.tgz", - "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", - "dev": true + "node_modules/lookup-closest-locale": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/lookup-closest-locale/-/lookup-closest-locale-6.2.0.tgz", + "integrity": "sha512-/c2kL+Vnp1jnV6K6RpDTHK3dgg0Tu2VVp+elEiJpjfS1UyY7AjOYHohRug6wT0OpoX2qFgNORndE9RqesfVxWQ==", + "dev": true, + "license": "MIT" }, - "html-minifier": { - "version": "3.5.7", - "resolved": "http://npm.trustu.pre/html-minifier/-/html-minifier-3.5.7/511e69bb5a8e7677d1012ebe03819aa02ca06208.tgz", - "integrity": "sha512-GISXn6oKDo7+gVpKOgZJTbHMCUI2TSGfpg/8jgencWhWJsvEmsvp3M8emX7QocsXsYznWloLib3OeSfeyb/ewg==", - "dev": true, - "requires": { - "camel-case": "3.0.0", - "clean-css": "4.1.9", - "commander": "2.12.2", - "he": "1.1.1", - "ncname": "1.0.0", - "param-case": "2.1.1", - "relateurl": "0.2.7", - "uglify-js": "3.2.1" - } - }, - "html-webpack-plugin": { - "version": "2.30.1", - "resolved": "http://npm.trustu.pre/html-webpack-plugin/-/html-webpack-plugin-2.30.1/7f9c421b7ea91ec460f56527d78df484ee7537d5.tgz", - "integrity": "sha1-f5xCG36pHsRg9WUn1430hO51N9U=", - "dev": true, - "requires": { - "bluebird": "3.5.1", - "html-minifier": "3.5.7", - "loader-utils": "0.2.17", - "lodash": "4.17.4", - "pretty-error": "2.1.1", - "toposort": "1.0.6" - }, - "dependencies": { - "loader-utils": { - "version": "0.2.17", - "resolved": "http://npm.trustu.pre/loader-utils/-/loader-utils-0.2.17/f86e6374d43205a6e6c60e9196f17c0299bfb348.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", - "dev": true, - "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1", - "object-assign": "4.1.1" - } - } + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" } }, - "htmlparser2": { - "version": "3.3.0", - "resolved": "http://npm.trustu.pre/htmlparser2/-/htmlparser2-3.3.0/cc70d05a59f6542e43f0e685c982e14c924a9efe.tgz", - "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", - "dev": true, - "requires": { - "domelementtype": "1.3.0", - "domhandler": "2.1.0", - "domutils": "1.1.6", - "readable-stream": "1.0.34" - }, - "dependencies": { - "domutils": { - "version": "1.1.6", - "resolved": "http://npm.trustu.pre/domutils/-/domutils-1.1.6/bddc3de099b9a2efacc51c623f28f416ecc57485.tgz", - "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", - "dev": true, - "requires": { - "domelementtype": "1.3.0" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "http://npm.trustu.pre/isarray/-/isarray-0.0.1/8a18acfca9a8f4177e09abfc6038939b05d1eedf.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "http://npm.trustu.pre/readable-stream/-/readable-stream-1.0.34/125820e34bc842d2f2aaafafe4c2916ee32c157c.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "http://npm.trustu.pre/string_decoder/-/string_decoder-0.10.31/62e203bc41766c6c28c9fc84301dab1c5310fa94.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" } }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "http://npm.trustu.pre/http-deceiver/-/http-deceiver-1.2.7/fa7168944ab9a519d337cb0bec7284dc3e723d87.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", - "dev": true - }, - "http-errors": { - "version": "1.6.2", - "resolved": "http://npm.trustu.pre/http-errors/-/http-errors-1.6.2/0a002cc85707192a7e7946ceedc11155f60ec736.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "node_modules/magicast": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", + "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", "dev": true, - "requires": { - "depd": "1.1.1", - "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": "1.3.1" - }, + "license": "MIT", "dependencies": { - "setprototypeof": { - "version": "1.0.3", - "resolved": "http://npm.trustu.pre/setprototypeof/-/setprototypeof-1.0.3/66567e37043eeb4f04d91bd658c0cbefb55b8e04.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", - "dev": true - } + "@babel/parser": "^7.25.4", + "@babel/types": "^7.25.4", + "source-map-js": "^1.2.0" } }, - "http-parser-js": { - "version": "0.4.9", - "resolved": "http://npm.trustu.pre/http-parser-js/-/http-parser-js-0.4.9/ea1a04fb64adff0242e9974f297dd4c3cad271e1.tgz", - "integrity": "sha1-6hoE+2St/wJC6ZdPKX3Uw8rSceE=", - "dev": true + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "http-proxy": { - "version": "1.16.2", - "resolved": "http://npm.trustu.pre/http-proxy/-/http-proxy-1.16.2/06dff292952bf64dbe8471fa9df73066d4f37742.tgz", - "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", + "node_modules/make-fetch-happen": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-14.0.3.tgz", + "integrity": "sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==", "dev": true, - "requires": { - "eventemitter3": "1.2.0", - "requires-port": "1.0.0" + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^3.0.0", + "cacache": "^19.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "ssri": "^12.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "http-proxy-middleware": { - "version": "0.17.4", - "resolved": "http://npm.trustu.pre/http-proxy-middleware/-/http-proxy-middleware-0.17.4/642e8848851d66f09d4f124912846dbaeb41b833.tgz", - "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=", - "dev": true, - "requires": { - "http-proxy": "1.16.2", - "is-glob": "3.1.0", - "lodash": "4.17.4", - "micromatch": "2.3.11" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "http://npm.trustu.pre/is-glob/-/is-glob-3.1.0/7ba5ae24217804ac70707b96922567486cc3e84a.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - } + "node_modules/marky": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.3.0.tgz", + "integrity": "sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==", + "dev": true, + "license": "Apache-2.0" + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" } }, - "http-signature": { - "version": "1.1.1", - "resolved": "http://npm.trustu.pre/http-signature/-/http-signature-1.1.1/df72e267066cd0ac67fb76adf8e134a8fbcf91bf.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "node_modules/mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", "dev": true, - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.13.1" + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "https-browserify": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/https-browserify/-/https-browserify-1.0.0/ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true + "node_modules/mdn-data": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "dev": true, + "license": "CC0-1.0" }, - "https-proxy-agent": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/https-proxy-agent/-/https-proxy-agent-1.0.0/35f7da6c48ce4ddbfa264891ac593ee5ff8671e6.tgz", - "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=", + "node_modules/meow": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", + "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", "dev": true, - "requires": { - "agent-base": "2.1.1", - "debug": "2.6.9", - "extend": "3.0.1" + "license": "MIT", + "engines": { + "node": ">=16.10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "iconv-lite": { - "version": "0.4.19", - "resolved": "http://npm.trustu.pre/iconv-lite/-/iconv-lite-0.4.19/f7468f60135f5e5dad3399c0a81be9a1603a082b.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", - "dev": true - }, - "icss-replace-symbols": { - "version": "1.1.0", - "resolved": "http://npm.trustu.pre/icss-replace-symbols/-/icss-replace-symbols-1.1.0/06ea6f83679a7749e386cfe1fe812ae5db223ded.tgz", - "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", - "dev": true + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" }, - "icss-utils": { - "version": "2.1.0", - "resolved": "http://npm.trustu.pre/icss-utils/-/icss-utils-2.1.0/83f0a0ec378bf3246178b6c2ad9136f135b1c962.tgz", - "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", - "dev": true, - "requires": { - "postcss": "6.0.14" - }, - "dependencies": { - "chalk": { - "version": "2.3.0", - "resolved": "http://npm.trustu.pre/chalk/-/chalk-2.3.0/b5ea48efc9c1793dccc9b4767c93914d3f2d52ba.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - }, - "postcss": { - "version": "6.0.14", - "resolved": "http://npm.trustu.pre/postcss/-/postcss-6.0.14/5534c72114739e75d0afcf017db853099f562885.tgz", - "integrity": "sha512-NJ1z0f+1offCgadPhz+DvGm5Mkci+mmV5BqD13S992o0Xk9eElxUfPPF+t2ksH5R/17gz4xVK8KWocUQ5o3Rog==", - "dev": true, - "requires": { - "chalk": "2.3.0", - "source-map": "0.6.1", - "supports-color": "4.5.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "http://npm.trustu.pre/source-map/-/source-map-0.6.1/74722af32e9614e9c287a8d0bbde48b5e2f1a263.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" } }, - "ieee754": { - "version": "1.1.8", - "resolved": "http://npm.trustu.pre/ieee754/-/ieee754-1.1.8/be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4.tgz", - "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", - "dev": true - }, - "iferr": { - "version": "0.1.5", - "resolved": "http://npm.trustu.pre/iferr/-/iferr-0.1.5/c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true + "node_modules/metaviewport-parser": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/metaviewport-parser/-/metaviewport-parser-0.3.0.tgz", + "integrity": "sha512-EoYJ8xfjQ6kpe9VbVHvZTZHiOl4HL1Z18CrZ+qahvLXT7ZO4YTC2JMyt5FaUp9JJp6J4Ybb/z7IsCXZt86/QkQ==", + "dev": true, + "license": "MIT" }, - "image-size": { - "version": "0.5.5", - "resolved": "http://npm.trustu.pre/image-size/-/image-size-0.5.5/09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c.tgz", - "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, - "optional": true + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } }, - "immediate": { - "version": "3.0.6", - "resolved": "http://npm.trustu.pre/immediate/-/immediate-3.0.6/9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b.tgz", - "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", - "dev": true + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, - "import-local": { - "version": "0.1.1", - "resolved": "http://npm.trustu.pre/import-local/-/import-local-0.1.1/b1179572aacdc11c6a91009fb430dbcab5f668a8.tgz", - "integrity": "sha1-sReVcqrNwRxqkQCftDDbyrX2aKg=", + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "dev": true, - "requires": { - "pkg-dir": "2.0.0", - "resolve-cwd": "2.0.0" + "license": "MIT", + "engines": { + "node": ">= 0.6" } }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "http://npm.trustu.pre/imurmurhash/-/imurmurhash-0.1.4/9218b9b2b928a238b13dc4fb6b6d576f231453ea.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true + "node_modules/mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "~1.33.0" + }, + "engines": { + "node": ">= 0.6" + } }, - "in-publish": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/in-publish/-/in-publish-2.0.0/e20ff5e3a2afc2690320b6dc552682a9c7fadf51.tgz", - "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", + "node_modules/mime-types/node_modules/mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", "dev": true, - "optional": true + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "indent-string": { + "node_modules/mimic-fn": { "version": "2.1.0", - "resolved": "http://npm.trustu.pre/indent-string/-/indent-string-2.1.0/8e2d48348742121b4a8218b7a137e9a52049dc80.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, - "requires": { - "repeating": "2.0.1" + "license": "MIT", + "engines": { + "node": ">=6" } }, - "indexes-of": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/indexes-of/-/indexes-of-1.0.1/f30f716c8e2bd346c7b67d3df3915566a7c05607.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true - }, - "indexof": { - "version": "0.0.1", - "resolved": "http://npm.trustu.pre/indexof/-/indexof-0.0.1/82dc336d232b9062179d05ab3293a66059fd435d.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "inflight": { - "version": "1.0.6", - "resolved": "http://npm.trustu.pre/inflight/-/inflight-1.0.6/49bd6331d7d02d0c09bc910a1075ba8165b56df9.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "inherits": { - "version": "2.0.3", - "resolved": "http://npm.trustu.pre/inherits/-/inherits-2.0.3/633c2c83e3da42a502f52466022480f4208261de.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "ini": { - "version": "1.3.5", - "resolved": "http://npm.trustu.pre/ini/-/ini-1.3.5/eee25f56db1c9ec6085e0c22778083f596abf927.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } }, - "internal-ip": { - "version": "1.2.0", - "resolved": "http://npm.trustu.pre/internal-ip/-/internal-ip-1.2.0/ae9fbf93b984878785d50a8de1b356956058cf5c.tgz", - "integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=", + "node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", "dev": true, - "requires": { - "meow": "3.7.0" + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" } }, - "interpret": { - "version": "1.1.0", - "resolved": "http://npm.trustu.pre/interpret/-/interpret-1.1.0/7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", - "dev": true + "node_modules/minipass-fetch": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-4.0.1.tgz", + "integrity": "sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^3.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } }, - "invariant": { - "version": "2.2.2", - "resolved": "http://npm.trustu.pre/invariant/-/invariant-2.2.2/9e1f56ac0acdb6bf303306f338be3b204ae60360.tgz", - "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "dev": true, - "requires": { - "loose-envify": "1.3.1" + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" } }, - "invert-kv": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/invert-kv/-/invert-kv-1.0.0/104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "ip": { - "version": "1.1.5", - "resolved": "http://npm.trustu.pre/ip/-/ip-1.1.5/bdded70114290828c0a039e72ef25f5aaec4354a.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" }, - "ipaddr.js": { - "version": "1.5.2", - "resolved": "http://npm.trustu.pre/ipaddr.js/-/ipaddr.js-1.5.2/d4b505bde9946987ccf0fc58d9010ff9607e3fa0.tgz", - "integrity": "sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A=", - "dev": true + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } }, - "is-absolute-url": { - "version": "2.1.0", - "resolved": "http://npm.trustu.pre/is-absolute-url/-/is-absolute-url-2.1.0/50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", - "dev": true + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "http://npm.trustu.pre/is-arrayish/-/is-arrayish-0.2.1/77c99840527aa8ecb1a8ba697b80645a7a926a9d.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/is-binary-path/-/is-binary-path-1.0.1/75f16642b480f187a711c814161fd3a4a7655898.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", "dev": true, - "requires": { - "binary-extensions": "1.11.0" + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "is-buffer": { - "version": "1.1.6", - "resolved": "http://npm.trustu.pre/is-buffer/-/is-buffer-1.1.6/efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/is-builtin-module/-/is-builtin-module-1.0.0/540572d34f7ac3119f8f76c30cbc1b1e037affbe.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, - "requires": { - "builtin-modules": "1.1.1" + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "is-callable": { - "version": "1.1.3", - "resolved": "http://npm.trustu.pre/is-callable/-/is-callable-1.1.3/86eb75392805ddc33af71c92a0eedf74ee7604b2.tgz", - "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", - "dev": true + "node_modules/minipass-sized/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" }, - "is-date-object": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/is-date-object/-/is-date-object-1.0.1/9aa20eb6aeebbff77fbd33e74ca01b33581d3a16.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true + "node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } }, - "is-directory": { - "version": "0.3.1", - "resolved": "http://npm.trustu.pre/is-directory/-/is-directory-0.3.1/61339b6f2475fc772fd9c9d83f5c8575dc154ae1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "dev": true, + "license": "MIT" }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "http://npm.trustu.pre/is-dotfile/-/is-dotfile-1.0.3/a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true + "node_modules/module-details-from-path": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.4.tgz", + "integrity": "sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==", + "dev": true, + "license": "MIT" }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "http://npm.trustu.pre/is-equal-shallow/-/is-equal-shallow-0.1.3/2238098fc221de0bcfa5d9eac4c45d638aa1c534.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", "dev": true, - "requires": { - "is-primitive": "2.0.0" + "license": "MIT", + "engines": { + "node": ">=10" } }, - "is-extendable": { - "version": "0.1.1", - "resolved": "http://npm.trustu.pre/is-extendable/-/is-extendable-0.1.1/62b110e289a471418e3ec36a617d472e301dfc89.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "http://npm.trustu.pre/is-extglob/-/is-extglob-2.1.1/a88c02535791f02ed37c76a1b9ea9773c833f8c2.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, - "is-finite": { - "version": "1.0.2", - "resolved": "http://npm.trustu.pre/is-finite/-/is-finite-1.0.2/cc6677695602be550ef11e8b4aa6305342b6d0aa.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "node_modules/msgpackr": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.5.tgz", + "integrity": "sha512-UjkUHN0yqp9RWKy0Lplhh+wlpdt9oQBYgULZOiFhV3VclSF1JnSQWZ5r9gORQlNYaUKQoR8itv7g7z1xDDuACA==", "dev": true, - "requires": { - "number-is-nan": "1.0.1" + "license": "MIT", + "optional": true, + "optionalDependencies": { + "msgpackr-extract": "^3.0.2" } }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0/ef9e31386f031a7f0d643af82fde50c457ef00cb.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "node_modules/msgpackr-extract": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.3.tgz", + "integrity": "sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==", "dev": true, - "requires": { - "number-is-nan": "1.0.1" + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-gyp-build-optional-packages": "5.2.2" + }, + "bin": { + "download-msgpackr-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3" } }, - "is-glob": { - "version": "4.0.0", - "resolved": "http://npm.trustu.pre/is-glob/-/is-glob-4.0.0/9521c76845cc2610a85203ddf080a958c2ffabc0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", "dev": true, - "requires": { - "is-extglob": "2.1.1" + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "is-my-json-valid": { - "version": "2.16.1", - "resolved": "http://npm.trustu.pre/is-my-json-valid/-/is-my-json-valid-2.16.1/5a846777e2c2620d1e69104e5d3a03b1f6088f11.tgz", - "integrity": "sha512-ochPsqWS1WXj8ZnMIV0vnNXooaMhp7cyL4FMSIPKTtnV0Ha/T19G2b9kkhcNsabV9bxYkze7/aLZJb/bYuFduQ==", + "node_modules/nano-spawn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/nano-spawn/-/nano-spawn-2.0.0.tgz", + "integrity": "sha512-tacvGzUY5o2D8CBh2rrwxyNojUsZNU2zjNTzKQrkgGJQTbGAfArVWXSKMBokBeeg6C7OLRGUEyoFlYbfeWQIqw==", "dev": true, - "optional": true, - "requires": { - "generate-function": "2.0.0", - "generate-object-property": "1.2.0", - "jsonpointer": "4.0.1", - "xtend": "4.0.1" + "license": "MIT", + "engines": { + "node": ">=20.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/nano-spawn?sponsor=1" } }, - "is-number": { - "version": "2.1.0", - "resolved": "http://npm.trustu.pre/is-number/-/is-number-2.1.0/01fcbbb393463a548f2f466cce16dece49db908f.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "dev": true, - "requires": { - "kind-of": "3.2.2" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "is-obj": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/is-obj/-/is-obj-1.0.1/3e4729ac1f5fde025cd7d83a896dab9f4f67db0f.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/is-path-cwd/-/is-path-cwd-1.0.0/d225ec23132e89edd38fda767472e62e65f1106d.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" }, - "is-path-in-cwd": { + "node_modules/negotiator": { "version": "1.0.0", - "resolved": "http://npm.trustu.pre/is-path-in-cwd/-/is-path-in-cwd-1.0.0/6477582b8214d602346094567003be8a9eac04dc.tgz", - "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", "dev": true, - "requires": { - "is-path-inside": "1.0.1" + "license": "MIT", + "engines": { + "node": ">= 0.6" } }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/is-path-inside/-/is-path-inside-1.0.1/8ef5b7de50437a3fdca6b4e865ef7aa55cb48036.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "node_modules/netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", "dev": true, - "requires": { - "path-is-inside": "1.0.2" + "license": "MIT", + "engines": { + "node": ">= 0.4.0" } }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "http://npm.trustu.pre/is-plain-obj/-/is-plain-obj-1.1.0/71a50c8429dfca773c92a390a4a03b39fcd51d3e.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true + "node_modules/ng-extract-i18n-merge": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ng-extract-i18n-merge/-/ng-extract-i18n-merge-3.1.0.tgz", + "integrity": "sha512-4rJRcpTcP54xf5cjoz3S1By0T04X2RoyQcMDxr4wLdRx3fVxkeP8jeuLzmj9F4G5n0yMQb+6jhUiFERxpkfs1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/architect": "^0.2000.0", + "@angular-devkit/core": "^20.0.0", + "@angular-devkit/schematics": "^20.0.0", + "@schematics/angular": "^20.0.0", + "xmldoc": "^1.1.3" + }, + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@angular/build": "^20.0.0" + } }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "http://npm.trustu.pre/is-plain-object/-/is-plain-object-2.0.4/2c163b3fafb1b606d9d17928f05c2a1c38e07677.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "node_modules/ng-extract-i18n-merge/node_modules/@angular-devkit/architect": { + "version": "0.2000.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2000.6.tgz", + "integrity": "sha512-LvXYe7hqEgkBKzDy4VKTgCg2E2nAl8vC986n1+snzt2zMjo2l8wFl6BWal3AtaKGhPlp8/57Y53MdG2TIgUJNA==", "dev": true, - "requires": { - "isobject": "3.0.1" + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "20.0.6", + "rxjs": "7.8.2" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" } }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "http://npm.trustu.pre/is-posix-bracket/-/is-posix-bracket-0.1.1/3334dc79774368e92f016e6fbc0a88f5cd6e6bc4.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true + "node_modules/ng-extract-i18n-merge/node_modules/@angular-devkit/architect/node_modules/@angular-devkit/core": { + "version": "20.0.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.0.6.tgz", + "integrity": "sha512-kalYqR/soAMPgYdaKJL3iOMCubiq0gljpbQFzS+Uey/P1nn+MDY8V0zzc9cBNhKKkAxCXPN/NIEKC7ICOfaJbg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "8.17.1", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.3.1", + "picomatch": "4.0.2", + "rxjs": "7.8.2", + "source-map": "0.7.4" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^4.0.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } }, - "is-primitive": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/is-primitive/-/is-primitive-2.0.0/207bab91638499c07b2adf240a41a87210034575.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true + "node_modules/ngx-progressbar": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/ngx-progressbar/-/ngx-progressbar-14.0.0.tgz", + "integrity": "sha512-tDj7h5F2aSI4/XaJjs50FnELVe6qFqyz3vVq22acacd3oDW2EyJB4c+IYaxMf5972OdTw0WL4n6UwQ3dqC+gCA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/cdk": ">=17.3.0", + "@angular/common": ">=17.3.0", + "@angular/core": ">=17.3.0", + "rxjs": ">=7.0.0" + } }, - "is-property": { - "version": "1.0.2", - "resolved": "http://npm.trustu.pre/is-property/-/is-property-1.0.2/57fe1c4e48474edd65b09911f26b1cd4095dda84.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", + "node_modules/node-addon-api": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", "dev": true, + "license": "MIT", "optional": true }, - "is-regex": { - "version": "1.0.4", - "resolved": "http://npm.trustu.pre/is-regex/-/is-regex-1.0.4/5517489b547091b0930e095654ced25ee97e9491.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "node_modules/node-gyp": { + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.5.0.tgz", + "integrity": "sha512-ra7Kvlhxn5V9Slyus0ygMa2h+UqExPqUIkfk7Pc8QTLT956JLSy51uWFwHtIYy0vI8cB4BDhc/S03+880My/LQ==", "dev": true, - "requires": { - "has": "1.0.1" + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^14.0.3", + "nopt": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "tar": "^7.4.3", + "tinyglobby": "^0.2.12", + "which": "^5.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "is-stream": { - "version": "1.1.0", - "resolved": "http://npm.trustu.pre/is-stream/-/is-stream-1.1.0/12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-subset": { - "version": "0.1.1", - "resolved": "http://npm.trustu.pre/is-subset/-/is-subset-0.1.1/8a59117d932de1de00f245fcdd39ce43f1e939a6.tgz", - "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", - "dev": true - }, - "is-svg": { - "version": "2.1.0", - "resolved": "http://npm.trustu.pre/is-svg/-/is-svg-2.1.0/cf61090da0d9efbcab8722deba6f032208dbb0e9.tgz", - "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", + "node_modules/node-gyp-build-optional-packages": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz", + "integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==", "dev": true, - "requires": { - "html-comment-regex": "1.1.1" + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.1" + }, + "bin": { + "node-gyp-build-optional-packages": "bin.js", + "node-gyp-build-optional-packages-optional": "optional.js", + "node-gyp-build-optional-packages-test": "build-test.js" } }, - "is-symbol": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/is-symbol/-/is-symbol-1.0.1/3cc59f00025194b6ab2e38dbae6689256b660572.tgz", - "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", - "dev": true - }, - "is-text-path": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/is-text-path/-/is-text-path-1.0.1/4e1aa0fb51bfbcb3e92688001397202c1775b66e.tgz", - "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", + "node_modules/node-gyp/node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", "dev": true, - "requires": { - "text-extensions": "1.7.0" + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" } }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/is-typedarray/-/is-typedarray-1.0.0/e479c80858df0c1b11ddda6940f96011fcda4a9a.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true + "node_modules/node-gyp/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } }, - "is-utf8": { - "version": "0.2.1", - "resolved": "http://npm.trustu.pre/is-utf8/-/is-utf8-0.2.1/4b0da1442104d1b336340e80797e865cf39f7d72.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true + "node_modules/node-gyp/node_modules/tar": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.1.tgz", + "integrity": "sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==", + "dev": true, + "license": "ISC", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } }, - "is-wsl": { - "version": "1.1.0", - "resolved": "http://npm.trustu.pre/is-wsl/-/is-wsl-1.1.0/1f16e4aa22b04d1336b66188a66af3c600c3a66d.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true + "node_modules/node-gyp/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } }, - "isarray": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/isarray/-/isarray-1.0.0/bb935d48582cba168c06834957a54a3e07124f11.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "node_modules/node-gyp/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } }, - "isbinaryfile": { - "version": "3.0.2", - "resolved": "http://npm.trustu.pre/isbinaryfile/-/isbinaryfile-3.0.2/4a3e974ec0cba9004d3fc6cde7209ea69368a621.tgz", - "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=", - "dev": true + "node_modules/node-releases": { + "version": "2.0.26", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.26.tgz", + "integrity": "sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==", + "license": "MIT" }, - "isexe": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/isexe/-/isexe-2.0.0/e8fbf374dc556ff8947a10dcb0572d633f2cfa10.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true + "node_modules/nopt": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", + "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^3.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } }, - "isobject": { - "version": "3.0.1", - "resolved": "http://npm.trustu.pre/isobject/-/isobject-3.0.1/4e431e92b11a9731636aa1f9c8d1ccbcfdab78df.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "isstream": { - "version": "0.1.2", - "resolved": "http://npm.trustu.pre/isstream/-/isstream-0.1.2/47e63f7af55afa6f92e1500e690eb8b8529c099a.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true + "node_modules/npm-bundled": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-4.0.0.tgz", + "integrity": "sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } }, - "istanbul": { - "version": "0.4.5", - "resolved": "http://npm.trustu.pre/istanbul/-/istanbul-0.4.5/65c7d73d4c4da84d4f3ac310b918fb0b8033733b.tgz", - "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", - "dev": true, - "requires": { - "abbrev": "1.0.9", - "async": "1.5.2", - "escodegen": "1.8.1", - "esprima": "2.7.3", - "glob": "5.0.15", - "handlebars": "4.0.11", - "js-yaml": "3.7.0", - "mkdirp": "0.5.1", - "nopt": "3.0.6", - "once": "1.4.0", - "resolve": "1.1.7", - "supports-color": "3.2.3", - "which": "1.3.0", - "wordwrap": "1.0.0" - }, - "dependencies": { - "abbrev": { - "version": "1.0.9", - "resolved": "http://npm.trustu.pre/abbrev/-/abbrev-1.0.9/91b4792588a7738c25f35dd6f63752a2f8776135.tgz", - "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", - "dev": true - }, - "async": { - "version": "1.5.2", - "resolved": "http://npm.trustu.pre/async/-/async-1.5.2/ec6a61ae56480c0c3cb241c95618e20892f9672a.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "glob": { - "version": "5.0.15", - "resolved": "http://npm.trustu.pre/glob/-/glob-5.0.15/1bc936b9e02f4a603fcc222ecf7633d30b8b93b1.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/has-flag/-/has-flag-1.0.0/9d9e793165ce017a00f00418c43f942a7b1d11fa.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "nopt": { - "version": "3.0.6", - "resolved": "http://npm.trustu.pre/nopt/-/nopt-3.0.6/c6465dbf08abcd4db359317f79ac68a646b28ff9.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "requires": { - "abbrev": "1.0.9" - } - }, - "resolve": { - "version": "1.1.7", - "resolved": "http://npm.trustu.pre/resolve/-/resolve-1.1.7/203114d82ad2c5ed9e8e0411b3932875e889e97b.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "http://npm.trustu.pre/supports-color/-/supports-color-3.2.3/65ac0504b3954171d8a64946b2ae3cbb8a5f54f6.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/wordwrap/-/wordwrap-1.0.0/27584810891456a4171c8d0226441ade90cbcaeb.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - } + "node_modules/npm-install-checks": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-7.1.2.tgz", + "integrity": "sha512-z9HJBCYw9Zr8BqXcllKIs5nI+QggAImbBdHphOzVYrz2CB4iQ6FzWyKmlqDZua+51nAu7FcemlbTc9VgQN5XDQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "istanbul-api": { - "version": "1.2.1", - "resolved": "http://npm.trustu.pre/istanbul-api/-/istanbul-api-1.2.1/0c60a0515eb11c7d65c6b50bba2c6e999acd8620.tgz", - "integrity": "sha512-oFCwXvd65amgaPCzqrR+a2XjanS1MvpXN6l/MlMUTv6uiA1NOgGX+I0uyq8Lg3GDxsxPsaP1049krz3hIJ5+KA==", - "dev": true, - "requires": { - "async": "2.6.0", - "fileset": "2.0.3", - "istanbul-lib-coverage": "1.1.1", - "istanbul-lib-hook": "1.1.0", - "istanbul-lib-instrument": "1.9.1", - "istanbul-lib-report": "1.1.2", - "istanbul-lib-source-maps": "1.2.2", - "istanbul-reports": "1.1.3", - "js-yaml": "3.7.0", - "mkdirp": "0.5.1", - "once": "1.4.0" - } - }, - "istanbul-instrumenter-loader": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-2.0.0/e5492900ab0bba835efa8024cb00be9b3eea2700.tgz", - "integrity": "sha1-5UkpAKsLuoNe+oAkywC+mz7qJwA=", - "dev": true, - "requires": { - "convert-source-map": "1.5.1", - "istanbul-lib-instrument": "1.9.1", - "loader-utils": "0.2.17", - "object-assign": "4.1.1" - }, - "dependencies": { - "loader-utils": { - "version": "0.2.17", - "resolved": "http://npm.trustu.pre/loader-utils/-/loader-utils-0.2.17/f86e6374d43205a6e6c60e9196f17c0299bfb348.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", - "dev": true, - "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1", - "object-assign": "4.1.1" - } - } + "node_modules/npm-normalize-package-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz", + "integrity": "sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "istanbul-lib-coverage": { - "version": "1.1.1", - "resolved": "http://npm.trustu.pre/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1/73bfb998885299415c93d38a3e9adf784a77a9da.tgz", - "integrity": "sha512-0+1vDkmzxqJIn5rcoEqapSB4DmPxE31EtI2dF2aCkV5esN9EWHxZ0dwgDClivMXJqE7zaYQxq30hj5L0nlTN5Q==", - "dev": true + "node_modules/npm-package-arg": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-13.0.0.tgz", + "integrity": "sha512-+t2etZAGcB7TbbLHfDwooV9ppB2LhhcT6A+L9cahsf9mEUAoQ6CktLEVvEnpD0N5CkX7zJqnPGaFtoQDy9EkHQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^9.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } }, - "istanbul-lib-hook": { - "version": "1.1.0", - "resolved": "http://npm.trustu.pre/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0/8538d970372cb3716d53e55523dd54b557a8d89b.tgz", - "integrity": "sha512-U3qEgwVDUerZ0bt8cfl3dSP3S6opBoOtk3ROO5f2EfBr/SRiD9FQqzwaZBqFORu8W7O0EXpai+k7kxHK13beRg==", + "node_modules/npm-packlist": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-10.0.3.tgz", + "integrity": "sha512-zPukTwJMOu5X5uvm0fztwS5Zxyvmk38H/LfidkOMt3gbZVCyro2cD/ETzwzVPcWZA3JOyPznfUN/nkyFiyUbxg==", "dev": true, - "requires": { - "append-transform": "0.4.0" + "license": "ISC", + "dependencies": { + "ignore-walk": "^8.0.0", + "proc-log": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "istanbul-lib-instrument": { - "version": "1.9.1", - "resolved": "http://npm.trustu.pre/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1/250b30b3531e5d3251299fdd64b0b2c9db6b558e.tgz", - "integrity": "sha512-RQmXeQ7sphar7k7O1wTNzVczF9igKpaeGQAG9qR2L+BS4DCJNTI9nytRmIVYevwO0bbq+2CXvJmYDuz0gMrywA==", + "node_modules/npm-packlist/node_modules/proc-log": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.0.0.tgz", + "integrity": "sha512-KG/XsTDN901PNfPfAMmj6N/Ywg9tM+bHK8pAz+27fS4N4Pcr+4zoYBOcGSBu6ceXYNPxkLpa4ohtfxV1XcLAfA==", "dev": true, - "requires": { - "babel-generator": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "istanbul-lib-coverage": "1.1.1", - "semver": "5.4.1" + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "istanbul-lib-report": { - "version": "1.1.2", - "resolved": "http://npm.trustu.pre/istanbul-lib-report/-/istanbul-lib-report-1.1.2/922be27c13b9511b979bd1587359f69798c1d425.tgz", - "integrity": "sha512-UTv4VGx+HZivJQwAo1wnRwe1KTvFpfi/NYwN7DcsrdzMXwpRT/Yb6r4SBPoHWj4VuQPakR32g4PUUeyKkdDkBA==", + "node_modules/npm-pick-manifest": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-10.0.0.tgz", + "integrity": "sha512-r4fFa4FqYY8xaM7fHecQ9Z2nE9hgNfJR+EmoKv0+chvzWkBcORX3r0FpTByP+CbOVJDladMXnPQGVN8PBLGuTQ==", "dev": true, - "requires": { - "istanbul-lib-coverage": "1.1.1", - "mkdirp": "0.5.1", - "path-parse": "1.0.5", - "supports-color": "3.2.3" - }, + "license": "ISC", "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/has-flag/-/has-flag-1.0.0/9d9e793165ce017a00f00418c43f942a7b1d11fa.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "http://npm.trustu.pre/supports-color/-/supports-color-3.2.3/65ac0504b3954171d8a64946b2ae3cbb8a5f54f6.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } + "npm-install-checks": "^7.1.0", + "npm-normalize-package-bin": "^4.0.0", + "npm-package-arg": "^12.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "istanbul-lib-source-maps": { - "version": "1.2.2", - "resolved": "http://npm.trustu.pre/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.2/750578602435f28a0c04ee6d7d9e0f2960e62c1c.tgz", - "integrity": "sha512-8BfdqSfEdtip7/wo1RnrvLpHVEd8zMZEDmOFEnpC6dg0vXflHt9nvoAyQUzig2uMSXfF2OBEYBV3CVjIL9JvaQ==", - "dev": true, - "requires": { - "debug": "3.1.0", - "istanbul-lib-coverage": "1.1.1", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "source-map": "0.5.7" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "http://npm.trustu.pre/debug/-/debug-3.1.0/5bb5a0672628b64149566ba16819e61518c67261.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } + "node_modules/npm-pick-manifest/node_modules/hosted-git-info": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", + "integrity": "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "istanbul-reports": { - "version": "1.1.3", - "resolved": "http://npm.trustu.pre/istanbul-reports/-/istanbul-reports-1.1.3/3b9e1e8defb6d18b1d425da8e8b32c5a163f2d10.tgz", - "integrity": "sha512-ZEelkHh8hrZNI5xDaKwPMFwDsUf5wIEI2bXAFGp1e6deR2mnEKBPhLJEgr4ZBt8Gi6Mj38E/C8kcy9XLggVO2Q==", + "node_modules/npm-pick-manifest/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, - "requires": { - "handlebars": "4.0.11" - } + "license": "ISC" }, - "jasmine": { - "version": "2.8.0", - "resolved": "http://npm.trustu.pre/jasmine/-/jasmine-2.8.0/6b089c0a11576b1f16df11b80146d91d4e8b8a3e.tgz", - "integrity": "sha1-awicChFXax8W3xG4AUbZHU6Lij4=", + "node_modules/npm-pick-manifest/node_modules/npm-package-arg": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-12.0.2.tgz", + "integrity": "sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA==", "dev": true, - "requires": { - "exit": "0.1.2", - "glob": "7.1.2", - "jasmine-core": "2.8.0" + "license": "ISC", + "dependencies": { + "hosted-git-info": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^6.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "jasmine-core": { - "version": "2.8.0", - "resolved": "http://npm.trustu.pre/jasmine-core/-/jasmine-core-2.8.0/bcc979ae1f9fd05701e45e52e65d3a5d63f1a24e.tgz", - "integrity": "sha1-vMl5rh+f0FcB5F5S5l06XWPxok4=", - "dev": true - }, - "jasmine-spec-reporter": { - "version": "4.2.1", - "resolved": "http://npm.trustu.pre/jasmine-spec-reporter/-/jasmine-spec-reporter-4.2.1/1d632aec0341670ad324f92ba84b4b32b35e9e22.tgz", - "integrity": "sha512-FZBoZu7VE5nR7Nilzy+Np8KuVIOxF4oXDPDknehCYBDE080EnlPu0afdZNmpGDBRCUBv3mj5qgqCRmk6W/K8vg==", + "node_modules/npm-registry-fetch": { + "version": "18.0.2", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-18.0.2.tgz", + "integrity": "sha512-LeVMZBBVy+oQb5R6FDV9OlJCcWDU+al10oKpe+nsvcHnG24Z3uM3SvJYKfGJlfGjVU8v9liejCrUR/M5HO5NEQ==", "dev": true, - "requires": { - "colors": "1.1.2" + "license": "ISC", + "dependencies": { + "@npmcli/redact": "^3.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^14.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", + "minizlib": "^3.0.1", + "npm-package-arg": "^12.0.0", + "proc-log": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "jasminewd2": { - "version": "2.2.0", - "resolved": "http://npm.trustu.pre/jasminewd2/-/jasminewd2-2.2.0/e37cf0b17f199cce23bea71b2039395246b4ec4e.tgz", - "integrity": "sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4=", - "dev": true - }, - "js-base64": { - "version": "2.4.0", - "resolved": "http://npm.trustu.pre/js-base64/-/js-base64-2.4.0/9e566fee624751a1d720c966cd6226d29d4025aa.tgz", - "integrity": "sha512-Wehd+7Pf9tFvGb+ydPm9TjYjV8X1YHOVyG8QyELZxEMqOhemVwGRmoG8iQ/soqI3n8v4xn59zaLxiCJiaaRzKA==", - "dev": true - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "http://npm.trustu.pre/js-tokens/-/js-tokens-3.0.2/9866df395102130e38f7f996bceb65443209c25b.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "js-yaml": { - "version": "3.7.0", - "resolved": "http://npm.trustu.pre/js-yaml/-/js-yaml-3.7.0/5c967ddd837a9bfdca5f2de84253abe8a1c03b80.tgz", - "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "node_modules/npm-registry-fetch/node_modules/hosted-git-info": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", + "integrity": "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==", "dev": true, - "requires": { - "argparse": "1.0.9", - "esprima": "2.7.3" + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "http://npm.trustu.pre/jsbn/-/jsbn-0.1.1/a5e654c2e5a2deb5f201d96cefbca80c0ef2f513.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "node_modules/npm-registry-fetch/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, - "optional": true - }, - "jsesc": { - "version": "0.5.0", - "resolved": "http://npm.trustu.pre/jsesc/-/jsesc-0.5.0/e7dee66e35d6fc16f710fe91d5cf69f70f08911d.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - }, - "json-loader": { - "version": "0.5.7", - "resolved": "http://npm.trustu.pre/json-loader/-/json-loader-0.5.7/dca14a70235ff82f0ac9a3abeb60d337a365185d.tgz", - "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", - "dev": true + "license": "ISC" }, - "json-schema": { - "version": "0.2.3", - "resolved": "http://npm.trustu.pre/json-schema/-/json-schema-0.2.3/b480c892e59a2f05954ce727bd3f2a4e882f9e13.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "http://npm.trustu.pre/json-schema-traverse/-/json-schema-traverse-0.3.1/349a6d44c53a51de89b40805c5d5e59b417d3340.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/json-stable-stringify/-/json-stable-stringify-1.0.1/9a759d39c5f2ff503fd5300646ed445f88c4f9af.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "node_modules/npm-registry-fetch/node_modules/npm-package-arg": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-12.0.2.tgz", + "integrity": "sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA==", "dev": true, - "requires": { - "jsonify": "0.0.0" + "license": "ISC", + "dependencies": { + "hosted-git-info": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^6.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "http://npm.trustu.pre/json-stringify-safe/-/json-stringify-safe-5.0.1/1296a2d58fd45f19a0f6ce01d65701e2c735b6eb.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json3": { - "version": "3.3.2", - "resolved": "http://npm.trustu.pre/json3/-/json3-3.3.2/3c0434743df93e2f5c42aee7b19bcb483575f4e1.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "http://npm.trustu.pre/json5/-/json5-0.5.1/1eade7acc012034ad84e2396767ead9fa5495821.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "http://npm.trustu.pre/jsonfile/-/jsonfile-4.0.0/8771aae0799b64076b76640fca058f9c10e33ecb.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, - "requires": { - "graceful-fs": "4.1.11" + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "jsonify": { - "version": "0.0.0", - "resolved": "http://npm.trustu.pre/jsonify/-/jsonify-0.0.0/2c74b6ee41d93ca51b7b5aaee8f503631d252a73.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "http://npm.trustu.pre/jsonparse/-/jsonparse-1.3.1/3f4dae4a91fac315f71062f8521cc239f1366280.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "http://npm.trustu.pre/jsonpointer/-/jsonpointer-4.0.1/4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, - "optional": true + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "jsprim": { - "version": "1.4.1", - "resolved": "http://npm.trustu.pre/jsprim/-/jsprim-1.4.1/313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "node_modules/object-inspect": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" + "license": "MIT", + "engines": { + "node": ">= 0.4" }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/assert-plus/-/assert-plus-1.0.0/f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "jszip": { - "version": "3.1.5", - "resolved": "http://npm.trustu.pre/jszip/-/jszip-3.1.5/e3c2a6c6d706ac6e603314036d43cd40beefdf37.tgz", - "integrity": "sha512-5W8NUaFRFRqTOL7ZDDrx5qWHJyBXy6velVudIzQUSoqAAYqzSh2Z7/m0Rf1QbmQJccegD0r+YZxBjzqoBiEeJQ==", + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, - "requires": { - "core-js": "2.3.0", - "es6-promise": "3.0.2", - "lie": "3.1.1", - "pako": "1.0.6", - "readable-stream": "2.0.6" - }, + "license": "MIT", "dependencies": { - "core-js": { - "version": "2.3.0", - "resolved": "http://npm.trustu.pre/core-js/-/core-js-2.3.0/fab83fbb0b2d8dc85fa636c4b9d34c75420c6d65.tgz", - "integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU=", - "dev": true - }, - "readable-stream": { - "version": "2.0.6", - "resolved": "http://npm.trustu.pre/readable-stream/-/readable-stream-2.0.6/8f90341e68a53ccc928788dacfcd11b36eb9b78e.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "http://npm.trustu.pre/string_decoder/-/string_decoder-0.10.31/62e203bc41766c6c28c9fc84301dab1c5310fa94.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" } }, - "karma": { - "version": "1.7.1", - "resolved": "http://npm.trustu.pre/karma/-/karma-1.7.1/85cc08e9e0a22d7ce9cca37c4a1be824f6a2b1ae.tgz", - "integrity": "sha512-k5pBjHDhmkdaUccnC7gE3mBzZjcxyxYsYVaqiL2G5AqlfLyBO5nw2VdNK+O16cveEPd/gIOWULH7gkiYYwVNHg==", - "dev": true, - "requires": { - "bluebird": "3.5.1", - "body-parser": "1.18.2", - "chokidar": "1.7.0", - "colors": "1.1.2", - "combine-lists": "1.0.1", - "connect": "3.6.5", - "core-js": "2.5.1", - "di": "0.0.1", - "dom-serialize": "2.2.1", - "expand-braces": "0.1.2", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "http-proxy": "1.16.2", - "isbinaryfile": "3.0.2", - "lodash": "3.10.1", - "log4js": "0.6.38", - "mime": "1.6.0", - "minimatch": "3.0.4", - "optimist": "0.6.1", - "qjobs": "1.1.5", - "range-parser": "1.2.0", - "rimraf": "2.6.2", - "safe-buffer": "5.1.1", - "socket.io": "1.7.3", - "source-map": "0.5.7", - "tmp": "0.0.31", - "useragent": "2.2.1" - }, - "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "http://npm.trustu.pre/lodash/-/lodash-3.10.1/5bf45e8e49ba4189e17d482789dfd15bd140b7b6.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - } + "node_modules/on-headers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" } }, - "karma-chrome-launcher": { - "version": "2.2.0", - "resolved": "http://npm.trustu.pre/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0/cf1b9d07136cc18fe239327d24654c3dbc368acf.tgz", - "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, - "requires": { - "fs-access": "1.0.1", - "which": "1.3.0" + "license": "ISC", + "dependencies": { + "wrappy": "1" } }, - "karma-cli": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/karma-cli/-/karma-cli-1.0.1/ae6c3c58a313a1d00b45164c455b9b86ce17f960.tgz", - "integrity": "sha1-rmw8WKMTodALRRZMRVubhs4X+WA=", + "node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", "dev": true, - "requires": { - "resolve": "1.5.0" + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "karma-coverage-istanbul-reporter": { - "version": "1.3.0", - "resolved": "http://npm.trustu.pre/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-1.3.0/d142cd9c55731c9e363ef7374e8ef1a31bebfadb.tgz", - "integrity": "sha1-0ULNnFVzHJ42Pvc3To7xoxvr+ts=", + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dev": true, - "requires": { - "istanbul-api": "1.2.1", - "minimatch": "3.0.4" + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "karma-jasmine": { - "version": "1.1.1", - "resolved": "http://npm.trustu.pre/karma-jasmine/-/karma-jasmine-1.1.1/6fe840e75a11600c9d91e84b33c458e1c46a3529.tgz", - "integrity": "sha1-b+hA51oRYAydkehLM8RY4cRqNSk=", - "dev": true - }, - "karma-jasmine-html-reporter": { - "version": "0.2.2", - "resolved": "http://npm.trustu.pre/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-0.2.2/48a8e5ef18807617ee2b5e33c1194c35b439524c.tgz", - "integrity": "sha1-SKjl7xiAdhfuK14zwRlMNbQ5Ukw=", + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, - "requires": { - "karma-jasmine": "1.1.1" + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" } }, - "karma-remap-istanbul": { - "version": "0.6.0", - "resolved": "http://npm.trustu.pre/karma-remap-istanbul/-/karma-remap-istanbul-0.6.0/97f3b770065254f9b4724f2d9be4a3a2e1baf6fc.tgz", - "integrity": "sha1-l/O3cAZSVPm0ck8tm+SjouG69vw=", + "node_modules/ora": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz", + "integrity": "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==", "dev": true, - "requires": { - "istanbul": "0.4.5", - "remap-istanbul": "0.9.5" + "license": "MIT", + "dependencies": { + "chalk": "^5.3.0", + "cli-cursor": "^5.0.0", + "cli-spinners": "^2.9.2", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^2.0.0", + "log-symbols": "^6.0.0", + "stdin-discarder": "^0.2.2", + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "karma-source-map-support": { - "version": "1.2.0", - "resolved": "http://npm.trustu.pre/karma-source-map-support/-/karma-source-map-support-1.2.0/1bf81e7bb4b089627ab352ec4179e117c406a540.tgz", - "integrity": "sha1-G/gee7SwiWJ6s1LsQXnhF8QGpUA=", + "node_modules/ora/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, - "requires": { - "source-map-support": "0.4.18" + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "killable": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/killable/-/killable-1.0.0/da8b84bd47de5395878f95d64d02f2449fe05e6b.tgz", - "integrity": "sha1-2ouEvUfeU5WHj5XWTQLyRJ/gXms=", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "resolved": "http://npm.trustu.pre/kind-of/-/kind-of-3.2.2/31ea21a734bab9bbb0f32466d893aea51e4a3c64.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/ora/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "dev": true, - "requires": { - "is-buffer": "1.1.6" + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "lazy-cache": { - "version": "0.2.7", - "resolved": "http://npm.trustu.pre/lazy-cache/-/lazy-cache-0.2.7/7feddf2dcb6edb77d11ef1d117ab5ffdf0ab1b65.tgz", - "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=", - "dev": true + "node_modules/ordered-binary": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.6.0.tgz", + "integrity": "sha512-IQh2aMfMIDbPjI/8a3Edr+PiOpcsB7yo8NdW7aHWVaoR/pcDldunMvnnwbk/auPGqmKeAdxtZl7MHX/QmPwhvQ==", + "dev": true, + "license": "MIT", + "optional": true }, - "lcid": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/lcid/-/lcid-1.0.0/308accafa0bc483a3867b4b6f2b9506251d1b835.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "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, - "requires": { - "invert-kv": "1.0.0" + "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" } }, - "lcov-parse": { - "version": "0.0.10", - "resolved": "http://npm.trustu.pre/lcov-parse/-/lcov-parse-0.0.10/1b0b8ff9ac9c7889250582b70b71315d9da6d9a3.tgz", - "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=", - "dev": true - }, - "less": { - "version": "2.7.3", - "resolved": "http://npm.trustu.pre/less/-/less-2.7.3/cc1260f51c900a9ec0d91fb6998139e02507b63b.tgz", - "integrity": "sha512-KPdIJKWcEAb02TuJtaLrhue0krtRLoRoo7x6BNJIBelO00t/CCdJQUnHW5V34OnHMWzIktSalJxRO+FvytQlCQ==", + "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, - "requires": { - "errno": "0.1.4", - "graceful-fs": "4.1.11", - "image-size": "0.5.5", - "mime": "1.6.0", - "mkdirp": "0.5.1", - "promise": "7.3.1", - "request": "2.81.0", - "source-map": "0.5.7" + "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" } }, - "less-loader": { - "version": "4.0.5", - "resolved": "http://npm.trustu.pre/less-loader/-/less-loader-4.0.5/ae155a7406cac6acd293d785587fcff0f478c4dd.tgz", - "integrity": "sha1-rhVadAbKxqzSk9eFWH/P8PR4xN0=", + "node_modules/p-map": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", + "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==", "dev": true, - "requires": { - "clone": "2.1.1", - "loader-utils": "1.1.0", - "pify": "2.3.0" + "license": "MIT", + "engines": { + "node": ">=18" }, - "dependencies": { - "clone": { - "version": "2.1.1", - "resolved": "http://npm.trustu.pre/clone/-/clone-2.1.1/d217d1e961118e3ac9a4b8bba3285553bf647cdb.tgz", - "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", - "dev": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "levn": { - "version": "0.3.0", - "resolved": "http://npm.trustu.pre/levn/-/levn-0.3.0/3b09924edf9f083c0490fdd4c0bc4421e04764ee.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "node_modules/pac-proxy-agent": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", + "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", "dev": true, - "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" + "license": "MIT", + "dependencies": { + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.6", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" } }, - "license-webpack-plugin": { - "version": "1.1.1", - "resolved": "http://npm.trustu.pre/license-webpack-plugin/-/license-webpack-plugin-1.1.1/76b2cedccc78f139fd7877e576f756cfc141b8c2.tgz", - "integrity": "sha512-TjKOyiC0exqd4Idy/4M8/DETR22dXBZks387DuS5LbslxHiMRXGx/Q2F/j9IUtvEoH5uFvt72vRgk/G6f8j3Dg==", + "node_modules/pac-resolver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", "dev": true, - "requires": { - "ejs": "2.5.7" + "license": "MIT", + "dependencies": { + "degenerator": "^5.0.0", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">= 14" } }, - "lie": { - "version": "3.1.1", - "resolved": "http://npm.trustu.pre/lie/-/lie-3.1.1/9a436b2cc7746ca59de7a41fa469b3efb76bd87e.tgz", - "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", "dev": true, - "requires": { - "immediate": "3.0.6" + "license": "BlueOak-1.0.0" + }, + "node_modules/pacote": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-21.0.0.tgz", + "integrity": "sha512-lcqexq73AMv6QNLo7SOpz0JJoaGdS3rBFgF122NZVl1bApo2mfu+XzUBU/X/XsiJu+iUmKpekRayqQYAs+PhkA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^6.0.0", + "@npmcli/installed-package-contents": "^3.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "@npmcli/run-script": "^9.0.0", + "cacache": "^19.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^12.0.0", + "npm-packlist": "^10.0.0", + "npm-pick-manifest": "^10.0.0", + "npm-registry-fetch": "^18.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "sigstore": "^3.0.0", + "ssri": "^12.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "bin/index.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "load-json-file": { - "version": "1.1.0", - "resolved": "http://npm.trustu.pre/load-json-file/-/load-json-file-1.1.0/956905708d58b4bab4c2261b04f59f31c99374c0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "node_modules/pacote/node_modules/hosted-git-info": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", + "integrity": "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==", "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "loader-runner": { - "version": "2.3.0", - "resolved": "http://npm.trustu.pre/loader-runner/-/loader-runner-2.3.0/f482aea82d543e07921700d5a46ef26fdac6b8a2.tgz", - "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=", - "dev": true + "node_modules/pacote/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" }, - "loader-utils": { - "version": "1.1.0", - "resolved": "http://npm.trustu.pre/loader-utils/-/loader-utils-1.1.0/c98aef488bcceda2ffb5e2de646d6a754429f5cd.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "node_modules/pacote/node_modules/npm-package-arg": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-12.0.2.tgz", + "integrity": "sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA==", "dev": true, - "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1" + "license": "ISC", + "dependencies": { + "hosted-git-info": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^6.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "locate-path": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/locate-path/-/locate-path-2.0.0/2b568b265eec944c6d9c0de9c3dbbbca0354cd8e.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" - }, + "license": "MIT", "dependencies": { - "path-exists": { - "version": "3.0.0", - "resolved": "http://npm.trustu.pre/path-exists/-/path-exists-3.0.0/ce0ebeaa5f78cb18925ea7d810d7b59b010fd515.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "lodash": { - "version": "4.17.4", - "resolved": "http://npm.trustu.pre/lodash/-/lodash-4.17.4/78203a4d1c328ae1d86dca6460e369b57f4055ae.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", - "dev": true - }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "http://npm.trustu.pre/lodash._basecopy/-/lodash._basecopy-3.0.1/8da0e6a876cf344c0ad8a54882111dd3c5c7ca36.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", - "dev": true - }, - "lodash._basetostring": { - "version": "3.0.1", - "resolved": "http://npm.trustu.pre/lodash._basetostring/-/lodash._basetostring-3.0.1/d1861d877f824a52f669832dcaf3ee15566a07d5.tgz", - "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", - "dev": true - }, - "lodash._basevalues": { - "version": "3.0.0", - "resolved": "http://npm.trustu.pre/lodash._basevalues/-/lodash._basevalues-3.0.0/5b775762802bde3d3297503e26300820fdf661b7.tgz", - "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", - "dev": true - }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "http://npm.trustu.pre/lodash._getnative/-/lodash._getnative-3.9.1/570bc7dede46d61cdcde687d65d3eecbaa3aaff5.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", - "dev": true - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "http://npm.trustu.pre/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9/5203ad7ba425fae842460e696db9cf3e6aac057c.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", - "dev": true - }, - "lodash._reescape": { - "version": "3.0.0", - "resolved": "http://npm.trustu.pre/lodash._reescape/-/lodash._reescape-3.0.0/2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a.tgz", - "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", - "dev": true - }, - "lodash._reevaluate": { - "version": "3.0.0", - "resolved": "http://npm.trustu.pre/lodash._reevaluate/-/lodash._reevaluate-3.0.0/58bc74c40664953ae0b124d806996daca431e2ed.tgz", - "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", - "dev": true - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "http://npm.trustu.pre/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0/0ccf2d89166af03b3663c796538b75ac6e114d9d.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "dev": true - }, - "lodash._root": { - "version": "3.0.1", - "resolved": "http://npm.trustu.pre/lodash._root/-/lodash._root-3.0.1/fba1c4524c19ee9a5f8136b4609f017cf4ded692.tgz", - "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", + "node_modules/parse-cache-control": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", + "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==", "dev": true }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "http://npm.trustu.pre/lodash.assign/-/lodash.assign-4.2.0/0d99f3ccd7a6d261d19bdaeb9245005d285808e7.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, - "optional": true + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "http://npm.trustu.pre/lodash.camelcase/-/lodash.camelcase-4.3.0/b28aa6288a2b9fc651035c7711f65ab6190331a6.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", - "dev": true + "node_modules/parse-json/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "http://npm.trustu.pre/lodash.clonedeep/-/lodash.clonedeep-4.5.0/e23f3f9c4f8fbdde872529c1071857a086e5ccef.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true + "node_modules/parse5": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.0.tgz", + "integrity": "sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } }, - "lodash.escape": { - "version": "3.2.0", - "resolved": "http://npm.trustu.pre/lodash.escape/-/lodash.escape-3.2.0/995ee0dc18c1b48cc92effae71a10aab5b487698.tgz", - "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", + "node_modules/parse5-html-rewriting-stream": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-8.0.0.tgz", + "integrity": "sha512-wzh11mj8KKkno1pZEu+l2EVeWsuKDfR5KNWZOTsslfUX8lPDZx77m9T0kIoAVkFtD1nx6YF8oh4BnPHvxMtNMw==", "dev": true, - "requires": { - "lodash._root": "3.0.1" + "license": "MIT", + "dependencies": { + "entities": "^6.0.0", + "parse5": "^8.0.0", + "parse5-sax-parser": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "http://npm.trustu.pre/lodash.isarguments/-/lodash.isarguments-3.1.0/2f573d85c6a24289ff00663b491c1d338ff3458a.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", - "dev": true + "node_modules/parse5-html-rewriting-stream/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "http://npm.trustu.pre/lodash.isarray/-/lodash.isarray-3.0.4/79e4eb88c36a8122af86f844aa9bcd851b5fbb55.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", - "dev": true + "node_modules/parse5-sax-parser": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-8.0.0.tgz", + "integrity": "sha512-/dQ8UzHZwnrzs3EvDj6IkKrD/jIZyTlB+8XrHJvcjNgRdmWruNdN9i9RK/JtxakmlUdPwKubKPTCqvbTgzGhrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "http://npm.trustu.pre/lodash.keys/-/lodash.keys-3.1.2/4dbc0472b156be50a0b286855d1bd0b0c656098a.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "node_modules/parse5/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", "dev": true, - "requires": { - "lodash._getnative": "3.9.1", - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4" + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "http://npm.trustu.pre/lodash.memoize/-/lodash.memoize-4.1.2/bcc6c49a42a2840ed997f323eada5ecd182e0bfe.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } }, - "lodash.mergewith": { - "version": "4.6.0", - "resolved": "http://npm.trustu.pre/lodash.mergewith/-/lodash.mergewith-4.6.0/150cf0a16791f5903b8891eab154609274bdea55.tgz", - "integrity": "sha1-FQzwoWeR9ZA7iJHqsVRgknS96lU=", + "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, - "optional": true + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } }, - "lodash.restparam": { - "version": "3.6.1", - "resolved": "http://npm.trustu.pre/lodash.restparam/-/lodash.restparam-3.6.1/936a4e309ef330a7645ed4145986c85ae5b20805.tgz", - "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", - "dev": true + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "lodash.tail": { - "version": "4.1.1", - "resolved": "http://npm.trustu.pre/lodash.tail/-/lodash.tail-4.1.1/d2333a36d9e7717c8ad2f7cacafec7c32b444664.tgz", - "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=", - "dev": true + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", + "dev": true, + "license": "(WTFPL OR MIT)" }, - "lodash.template": { - "version": "3.6.2", - "resolved": "http://npm.trustu.pre/lodash.template/-/lodash.template-3.6.2/f8cdecc6169a255be9098ae8b0c53d378931d14f.tgz", - "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", - "dev": true, - "requires": { - "lodash._basecopy": "3.0.1", - "lodash._basetostring": "3.0.1", - "lodash._basevalues": "3.0.0", - "lodash._isiterateecall": "3.0.9", - "lodash._reinterpolate": "3.0.0", - "lodash.escape": "3.2.0", - "lodash.keys": "3.1.2", - "lodash.restparam": "3.6.1", - "lodash.templatesettings": "3.1.1" - } - }, - "lodash.templatesettings": { + "node_modules/path-key": { "version": "3.1.1", - "resolved": "http://npm.trustu.pre/lodash.templatesettings/-/lodash.templatesettings-3.1.1/fb307844753b66b9f1afa54e262c745307dba8e5.tgz", - "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "requires": { - "lodash._reinterpolate": "3.0.0", - "lodash.escape": "3.2.0" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "http://npm.trustu.pre/lodash.uniq/-/lodash.uniq-4.5.0/d0225373aeb652adc1bc82e4945339a842754773.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, - "log-driver": { - "version": "1.2.5", - "resolved": "http://npm.trustu.pre/log-driver/-/log-driver-1.2.5/7ae4ec257302fd790d557cb10c97100d857b0056.tgz", - "integrity": "sha1-euTsJXMC/XkNVXyxDJcQDYV7AFY=", - "dev": true + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" }, - "log4js": { - "version": "0.6.38", - "resolved": "http://npm.trustu.pre/log4js/-/log4js-0.6.38/2c494116695d6fb25480943d3fc872e662a522fd.tgz", - "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, - "requires": { - "readable-stream": "1.0.34", - "semver": "4.3.6" - }, + "license": "BlueOak-1.0.0", "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "http://npm.trustu.pre/isarray/-/isarray-0.0.1/8a18acfca9a8f4177e09abfc6038939b05d1eedf.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "http://npm.trustu.pre/readable-stream/-/readable-stream-1.0.34/125820e34bc842d2f2aaafafe4c2916ee32c157c.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "semver": { - "version": "4.3.6", - "resolved": "http://npm.trustu.pre/semver/-/semver-4.3.6/300bc6e0e86374f7ba61068b5b1ecd57fc6532da.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", - "dev": true - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "http://npm.trustu.pre/string_decoder/-/string_decoder-0.10.31/62e203bc41766c6c28c9fc84301dab1c5310fa94.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "loglevel": { - "version": "1.6.0", - "resolved": "http://npm.trustu.pre/loglevel/-/loglevel-1.6.0/ae0caa561111498c5ba13723d6fb631d24003934.tgz", - "integrity": "sha1-rgyqVhERSYxboTcj1vtjHSQAOTQ=", - "dev": true + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" }, - "longest": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/longest/-/longest-1.0.1/30a0b2da38f73770e8294a0d22e6625ed77d0097.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true + "node_modules/path-to-regexp": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz", + "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==", + "dev": true, + "license": "MIT" }, - "loose-envify": { - "version": "1.3.1", - "resolved": "http://npm.trustu.pre/loose-envify/-/loose-envify-1.3.1/d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", "dev": true, - "requires": { - "js-tokens": "3.0.2" - } + "license": "MIT" }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "http://npm.trustu.pre/loud-rejection/-/loud-rejection-1.6.0/5b46f80147edee578870f086d04821cf998e551f.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true, + "license": "MIT" + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", "dev": true, - "requires": { - "currently-unhandled": "0.4.1", - "signal-exit": "3.0.2" + "license": "ISC", + "engines": { + "node": ">=4.0.0" } }, - "lower-case": { - "version": "1.1.4", - "resolved": "http://npm.trustu.pre/lower-case/-/lower-case-1.1.4/9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", - "dev": true + "node_modules/pg-protocol": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.10.3.tgz", + "integrity": "sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==", + "dev": true, + "license": "MIT" }, - "lru-cache": { - "version": "4.1.1", - "resolved": "http://npm.trustu.pre/lru-cache/-/lru-cache-4.1.1/622e32e82488b49279114a4f9ecf45e7cd6bba55.tgz", - "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", "dev": true, - "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "license": "MIT", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" } }, - "macaddress": { - "version": "0.2.8", - "resolved": "http://npm.trustu.pre/macaddress/-/macaddress-0.2.8/5904dc537c39ec6dbefeae902327135fa8511f12.tgz", - "integrity": "sha1-WQTcU3w57G2+/q6QIycTX6hRHxI=", - "dev": true + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, - "magic-string": { - "version": "0.22.4", - "resolved": "http://npm.trustu.pre/magic-string/-/magic-string-0.22.4/31039b4e40366395618c1d6cf8193c53917475ff.tgz", - "integrity": "sha512-kxBL06p6iO2qPBHsqGK2b3cRwiRGpnmSuVWNhwHcMX7qJOUr1HvricYP1LZOCdkQBUp0jiWg2d6WJwR3vYgByw==", + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", "dev": true, - "requires": { - "vlq": "0.2.3" + "license": "MIT", + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" } }, - "make-dir": { - "version": "1.1.0", - "resolved": "http://npm.trustu.pre/make-dir/-/make-dir-1.1.0/19b4369fe48c116f53c2af95ad102c0e39e85d51.tgz", - "integrity": "sha512-0Pkui4wLJ7rxvmfUvs87skoEaxmu0hCUApF8nonzpl7q//FWp9zu8W61Scz4sd/kUiqDxvUhtoam2efDyiBzcA==", + "node_modules/piscina": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-5.1.3.tgz", + "integrity": "sha512-0u3N7H4+hbr40KjuVn2uNhOcthu/9usKhnw5vT3J7ply79v3D3M8naI00el9Klcy16x557VsEkkUQaHCWFXC/g==", "dev": true, - "requires": { - "pify": "3.0.0" + "license": "MIT", + "engines": { + "node": ">=20.x" }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "http://npm.trustu.pre/pify/-/pify-3.0.0/e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } + "optionalDependencies": { + "@napi-rs/nice": "^1.0.4" } }, - "make-error": { - "version": "1.3.0", - "resolved": "http://npm.trustu.pre/make-error/-/make-error-1.3.0/52ad3a339ccf10ce62b4040b708fe707244b8b96.tgz", - "integrity": "sha1-Uq06M5zPEM5itAQLcI/nByRLi5Y=", - "dev": true - }, - "map-obj": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/map-obj/-/map-obj-1.0.1/d933ceb9205d82bdcf4886f6742bdc2b4dea146d.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, - "math-expression-evaluator": { - "version": "1.2.17", - "resolved": "http://npm.trustu.pre/math-expression-evaluator/-/math-expression-evaluator-1.2.17/de819fdbcd84dccd8fae59c6aeb79615b9d266ac.tgz", - "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=", - "dev": true - }, - "md5": { - "version": "2.2.1", - "resolved": "http://npm.trustu.pre/md5/-/md5-2.2.1/53ab38d5fe3c8891ba465329ea23fac0540126f9.tgz", - "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=", - "dev": true, - "requires": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "1.1.6" - } - }, - "md5.js": { - "version": "1.3.4", - "resolved": "http://npm.trustu.pre/md5.js/-/md5.js-1.3.4/e9bdbde94a20a5ac18b04340fc5764d5b09d901d.tgz", - "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", - "dev": true, - "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" - }, - "dependencies": { - "hash-base": { - "version": "3.0.4", - "resolved": "http://npm.trustu.pre/hash-base/-/hash-base-3.0.4/5fc8686847ecd73499403319a6b0a3f3f6ae4918.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } - } + "node_modules/pkce-challenge": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz", + "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.20.0" } }, - "media-typer": { - "version": "0.3.0", - "resolved": "http://npm.trustu.pre/media-typer/-/media-typer-0.3.0/8710d7af0aa626f8fffa1ce00168545263255748.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true + "node_modules/playwright": { + "version": "1.56.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.56.1.tgz", + "integrity": "sha512-aFi5B0WovBHTEvpM3DzXTUaeN6eN0qWnTkKx4NQaH4Wvcmc153PdaY2UBdSYKaGYw+UyWXSVyxDUg5DoPEttjw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.56.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } }, - "mem": { - "version": "1.1.0", - "resolved": "http://npm.trustu.pre/mem/-/mem-1.1.0/5edd52b485ca1d900fe64895505399a0dfa45f76.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "node_modules/playwright-core": { + "version": "1.56.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.56.1.tgz", + "integrity": "sha512-hutraynyn31F+Bifme+Ps9Vq59hKuUCz7H1kDOcBs+2oGguKkWTU50bBWrtz34OUWmIwpBTWDxaRPXrIXkgvmQ==", "dev": true, - "requires": { - "mimic-fn": "1.1.0" + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" } }, - "memory-fs": { - "version": "0.4.1", - "resolved": "http://npm.trustu.pre/memory-fs/-/memory-fs-0.4.1/3a9a20b8462523e447cfbc7e8bb80ed667bfc552.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", "dev": true, - "requires": { - "errno": "0.1.4", - "readable-stream": "2.3.3" + "license": "MIT", + "engines": { + "node": ">=4" } }, - "meow": { - "version": "3.7.0", - "resolved": "http://npm.trustu.pre/meow/-/meow-3.7.0/72cb668b425228290abbfa856892587308a801fb.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "dev": true, - "requires": { - "camelcase-keys": "2.1.0", - "decamelize": "1.2.0", - "loud-rejection": "1.6.0", - "map-obj": "1.0.1", - "minimist": "1.2.0", - "normalize-package-data": "2.4.0", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "redent": "1.0.0", - "trim-newlines": "1.0.0" + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" } }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/merge-descriptors/-/merge-descriptors-1.0.1/b00aaa556dd8b44568150ec9d1b953f3f90cbb61.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true + "node_modules/postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", + "dev": true, + "license": "MIT" }, - "methods": { - "version": "1.1.2", - "resolved": "http://npm.trustu.pre/methods/-/methods-1.1.2/5529a4d67654134edcc5266656835b0f851afcee.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true + "node_modules/postcss-resolve-nested-selector": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz", + "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==", + "dev": true, + "license": "MIT" }, - "micromatch": { - "version": "2.3.11", - "resolved": "http://npm.trustu.pre/micromatch/-/micromatch-2.3.11/86677c97d1720b363431d04d0d15293bd38c1565.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/is-extglob/-/is-extglob-1.0.0/ac468177c4943405a092fc8f29760c6ffc6206c0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true + "node_modules/postcss-safe-parser": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", + "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" }, - "is-glob": { - "version": "2.0.1", - "resolved": "http://npm.trustu.pre/is-glob/-/is-glob-2.0.1/d096f926a3ded5600f3fdfd91198cb0888c2d863.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } + ], + "license": "MIT", + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "http://npm.trustu.pre/miller-rabin/-/miller-rabin-4.0.1/f080351c865b0dc562a8462966daa53543c78a4d.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "node_modules/postcss-scss": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz", + "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==", "dev": true, - "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-scss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.4.29" } }, - "mime": { - "version": "1.6.0", - "resolved": "http://npm.trustu.pre/mime/-/mime-1.6.0/32cd9e5c64553bd58d19a568af452acff04981b1.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "mime-db": { - "version": "1.30.0", - "resolved": "http://npm.trustu.pre/mime-db/-/mime-db-1.30.0/74c643da2dd9d6a45399963465b26d5ca7d71f01.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", - "dev": true + "node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } }, - "mime-types": { - "version": "2.1.17", - "resolved": "http://npm.trustu.pre/mime-types/-/mime-types-2.1.17/09d7a393f03e995a79f8af857b70a9e0ab16557a.tgz", - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "node_modules/postcss-sorting": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-9.1.0.tgz", + "integrity": "sha512-Mn8KJ45HNNG6JBpBizXcyf6LqY/qyqetGcou/nprDnFwBFBLGj0j/sNKV2lj2KMOVOwdXu14aEzqJv8CIV6e8g==", "dev": true, - "requires": { - "mime-db": "1.30.0" + "license": "MIT", + "peerDependencies": { + "postcss": "^8.4.20" } }, - "mimeparse": { - "version": "0.1.4", - "resolved": "http://npm.trustu.pre/mimeparse/-/mimeparse-0.1.4/dafb02752370fd226093ae3152c271af01ac254a.tgz", - "integrity": "sha1-2vsCdSNw/SJgk64xUsJxrwGsJUo=", - "dev": true + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" }, - "mimic-fn": { - "version": "1.1.0", - "resolved": "http://npm.trustu.pre/mimic-fn/-/mimic-fn-1.1.0/e667783d92e89dbd342818b5230b9d62a672ad18.tgz", - "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", - "dev": true + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } }, - "minimalistic-assert": { + "node_modules/postgres-bytea": { "version": "1.0.0", - "resolved": "http://npm.trustu.pre/minimalistic-assert/-/minimalistic-assert-1.0.0/702be2dda6b37f4836bcb3f5db56641b64a1d3d3.tgz", - "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1/f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "minimatch": { - "version": "3.0.4", - "resolved": "http://npm.trustu.pre/minimatch/-/minimatch-3.0.4/5166e286457f03306064be5497e8dbb0c3d32083.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", "dev": true, - "requires": { - "brace-expansion": "1.1.8" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "minimist": { + "node_modules/postgres-interval": { "version": "1.2.0", - "resolved": "http://npm.trustu.pre/minimist/-/minimist-1.2.0/a35008b20f41383eec1fb914f4cd5df79a264284.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "mississippi": { - "version": "1.3.0", - "resolved": "http://npm.trustu.pre/mississippi/-/mississippi-1.3.0/d201583eb12327e3c5c1642a404a9cacf94e34f5.tgz", - "integrity": "sha1-0gFYPrEjJ+PFwWQqQEqcrPlONPU=", - "dev": true, - "requires": { - "concat-stream": "1.6.0", - "duplexify": "3.5.1", - "end-of-stream": "1.4.0", - "flush-write-stream": "1.0.2", - "from2": "2.3.0", - "parallel-transform": "1.1.0", - "pump": "1.0.3", - "pumpify": "1.3.5", - "stream-each": "1.2.2", - "through2": "2.0.3" - } - }, - "mixin-object": { - "version": "2.0.1", - "resolved": "http://npm.trustu.pre/mixin-object/-/mixin-object-2.0.1/4fb949441dab182540f1fe035ba60e1947a5e57e.tgz", - "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", "dev": true, - "requires": { - "for-in": "0.1.8", - "is-extendable": "0.1.1" - }, + "license": "MIT", "dependencies": { - "for-in": { - "version": "0.1.8", - "resolved": "http://npm.trustu.pre/for-in/-/for-in-0.1.8/d8773908e31256109952b1fdb9b3fa867d2775e1.tgz", - "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=", - "dev": true - } + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "mkdirp": { - "version": "0.5.1", - "resolved": "http://npm.trustu.pre/mkdirp/-/mkdirp-0.5.1/30057438eac6cf7f8c4767f38648d6697d75c903.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "http://npm.trustu.pre/minimist/-/minimist-0.0.8/857fcabfc3397d2625b8228262e86aa7a011b05d.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } + "license": "MIT", + "engines": { + "node": ">= 0.8.0" } }, - "modify-values": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/modify-values/-/modify-values-1.0.0/e2b6cdeb9ce19f99317a53722f3dbf5df5eaaab2.tgz", - "integrity": "sha1-4rbN65zhn5kxelNyLz2/XfXqqrI=", - "dev": true - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/move-concurrently/-/move-concurrently-1.0.1/be2c005fda32e0b29af1f05d7c4b33214c701f92.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "node_modules/prettier": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, - "requires": { - "aproba": "1.2.0", - "copy-concurrently": "1.0.5", - "fs-write-stream-atomic": "1.0.10", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "ms": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/ms/-/ms-2.0.0/5608aeadfc00be6c2901df5f9861788de0d597c8.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "multicast-dns": { - "version": "6.2.1", - "resolved": "http://npm.trustu.pre/multicast-dns/-/multicast-dns-6.2.1/c5035defa9219d30640558a49298067352098060.tgz", - "integrity": "sha512-uV3/ckdsffHx9IrGQrx613mturMdMqQ06WTq+C09NsStJ9iNG6RcUWgPKs1Rfjy+idZT6tfQoXEusGNnEZhT3w==", + "node_modules/prettier-eslint": { + "version": "16.4.2", + "resolved": "https://registry.npmjs.org/prettier-eslint/-/prettier-eslint-16.4.2.tgz", + "integrity": "sha512-vtJAQEkaN8fW5QKl08t7A5KCjlZuDUNeIlr9hgolMS5s3+uzbfRHDwaRnzrdqnY2YpHDmeDS/8zY0MKQHXJtaA==", "dev": true, - "requires": { - "dns-packet": "1.2.2", - "thunky": "0.1.0" + "license": "MIT", + "dependencies": { + "@typescript-eslint/parser": "^6.21.0", + "common-tags": "^1.8.2", + "dlv": "^1.1.3", + "eslint": "^8.57.1", + "indent-string": "^4.0.0", + "lodash.merge": "^4.6.2", + "loglevel-colored-level-prefix": "^1.0.0", + "prettier": "^3.5.3", + "pretty-format": "^29.7.0", + "require-relative": "^0.8.7", + "tslib": "^2.8.1", + "vue-eslint-parser": "^9.4.3" + }, + "engines": { + "node": ">=16.10.0" + }, + "funding": { + "url": "https://opencollective.com/prettier-eslint" + }, + "peerDependencies": { + "prettier-plugin-svelte": "^3.0.0", + "svelte-eslint-parser": "*" + }, + "peerDependenciesMeta": { + "prettier-plugin-svelte": { + "optional": true + }, + "svelte-eslint-parser": { + "optional": true + } } }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "http://npm.trustu.pre/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0/899f11d9686e5e05cb91b35d5f0e63b773cfc901.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", - "dev": true - }, - "multipipe": { - "version": "0.1.2", - "resolved": "http://npm.trustu.pre/multipipe/-/multipipe-0.1.2/2a8f2ddf70eed564dff2d57f1e1a137d9f05078b.tgz", - "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", + "node_modules/prettier-eslint/node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, - "requires": { - "duplexer2": "0.0.2" + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "nan": { - "version": "2.8.0", - "resolved": "http://npm.trustu.pre/nan/-/nan-2.8.0/ed715f3fe9de02b57a5e6252d90a96675e1f085a.tgz", - "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=", + "node_modules/prettier-eslint/node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, - "optional": true + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "ncname": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/ncname/-/ncname-1.0.0/5b57ad18b1ca092864ef62b0b1ed8194f383b71c.tgz", - "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=", + "node_modules/prettier-eslint/node_modules/@eslint/eslintrc/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, - "requires": { - "xml-char-classes": "1.0.0" + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "negotiator": { - "version": "0.6.1", - "resolved": "http://npm.trustu.pre/negotiator/-/negotiator-0.6.1/2b327184e8992101177b28563fb5e7102acd0ca9.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", - "dev": true - }, - "no-case": { - "version": "2.3.2", - "resolved": "http://npm.trustu.pre/no-case/-/no-case-2.3.2/60b813396be39b3f1288a4c1ed5d1e7d28b464ac.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "node_modules/prettier-eslint/node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true, - "requires": { - "lower-case": "1.1.4" + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node-forge": { - "version": "0.6.33", - "resolved": "http://npm.trustu.pre/node-forge/-/node-forge-0.6.33/463811879f573d45155ad6a9f43dc296e8e85ebc.tgz", - "integrity": "sha1-RjgRh59XPUUVWtap9D3ClujoXrw=", - "dev": true - }, - "node-gyp": { - "version": "3.6.2", - "resolved": "http://npm.trustu.pre/node-gyp/-/node-gyp-3.6.2/9bfbe54562286284838e750eac05295853fa1c60.tgz", - "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=", + "node_modules/prettier-eslint/node_modules/@typescript-eslint/parser": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", "dev": true, - "optional": true, - "requires": { - "fstream": "1.0.11", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "nopt": "3.0.6", - "npmlog": "4.1.2", - "osenv": "0.1.4", - "request": "2.81.0", - "rimraf": "2.6.2", - "semver": "5.3.0", - "tar": "2.2.1", - "which": "1.3.0" - }, - "dependencies": { - "nopt": { - "version": "3.0.6", - "resolved": "http://npm.trustu.pre/nopt/-/nopt-3.0.6/c6465dbf08abcd4db359317f79ac68a646b28ff9.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "optional": true, - "requires": { - "abbrev": "1.1.1" - } - }, - "semver": { - "version": "5.3.0", - "resolved": "http://npm.trustu.pre/semver/-/semver-5.3.0/9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { "optional": true } } }, - "node-libs-browser": { - "version": "2.1.0", - "resolved": "http://npm.trustu.pre/node-libs-browser/-/node-libs-browser-2.1.0/5f94263d404f6e44767d726901fff05478d600df.tgz", - "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", - "dev": true, - "requires": { - "assert": "1.4.1", - "browserify-zlib": "0.2.0", - "buffer": "4.9.1", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "domain-browser": "1.1.7", - "events": "1.1.1", - "https-browserify": "1.0.0", - "os-browserify": "0.3.0", - "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.3", - "stream-browserify": "2.0.1", - "stream-http": "2.7.2", - "string_decoder": "1.0.3", - "timers-browserify": "2.0.4", - "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.3", - "vm-browserify": "0.0.4" - } - }, - "node-modules-path": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/node-modules-path/-/node-modules-path-1.0.1/40096b08ce7ad0ea14680863af449c7c75a5d1c8.tgz", - "integrity": "sha1-QAlrCM560OoUaAhjr0ScfHWl0cg=", - "dev": true - }, - "node-sass": { - "version": "4.7.2", - "resolved": "http://npm.trustu.pre/node-sass/-/node-sass-4.7.2/9366778ba1469eb01438a9e8592f4262bcb6794e.tgz", - "integrity": "sha512-CaV+wLqZ7//Jdom5aUFCpGNoECd7BbNhjuwdsX/LkXBrHl8eb1Wjw4HvWqcFvhr5KuNgAk8i/myf/MQ1YYeroA==", + "node_modules/prettier-eslint/node_modules/@typescript-eslint/scope-manager": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", "dev": true, - "optional": true, - "requires": { - "async-foreach": "0.1.3", - "chalk": "1.1.3", - "cross-spawn": "3.0.1", - "gaze": "1.1.2", - "get-stdin": "4.0.1", - "glob": "7.1.2", - "in-publish": "2.0.0", - "lodash.assign": "4.2.0", - "lodash.clonedeep": "4.5.0", - "lodash.mergewith": "4.6.0", - "meow": "3.7.0", - "mkdirp": "0.5.1", - "nan": "2.8.0", - "node-gyp": "3.6.2", - "npmlog": "4.1.2", - "request": "2.79.0", - "sass-graph": "2.2.4", - "stdout-stream": "1.4.0", - "true-case-path": "1.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "http://npm.trustu.pre/ansi-styles/-/ansi-styles-2.2.1/b432dd3358b634cf75e1e4664368240533c1ddbe.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "caseless": { - "version": "0.11.0", - "resolved": "http://npm.trustu.pre/caseless/-/caseless-0.11.0/715b96ea9841593cc33067923f5ec60ebda4f7d7.tgz", - "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", - "dev": true, - "optional": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "http://npm.trustu.pre/chalk/-/chalk-1.1.3/a8115c55e4a702fe4d150abd3872822a7e09fc98.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "har-validator": { - "version": "2.0.6", - "resolved": "http://npm.trustu.pre/har-validator/-/har-validator-2.0.6/cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d.tgz", - "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", - "dev": true, - "optional": true, - "requires": { - "chalk": "1.1.3", - "commander": "2.12.2", - "is-my-json-valid": "2.16.1", - "pinkie-promise": "2.0.1" - } - }, - "qs": { - "version": "6.3.2", - "resolved": "http://npm.trustu.pre/qs/-/qs-6.3.2/e75bd5f6e268122a2a0e0bda630b2550c166502c.tgz", - "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=", - "dev": true, - "optional": true - }, - "request": { - "version": "2.79.0", - "resolved": "http://npm.trustu.pre/request/-/request-2.79.0/4dfe5bf6be8b8cdc37fcf93e04b65577722710de.tgz", - "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", - "dev": true, - "optional": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.11.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "2.0.6", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "oauth-sign": "0.8.2", - "qs": "6.3.2", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.4.3", - "uuid": "3.1.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/supports-color/-/supports-color-2.0.0/535d045ce6b6363fa40117084629995e9df324c7.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "tunnel-agent": { - "version": "0.4.3", - "resolved": "http://npm.trustu.pre/tunnel-agent/-/tunnel-agent-0.4.3/6373db76909fe570e08d73583365ed828a74eeeb.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", - "dev": true, - "optional": true - } + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "nopt": { - "version": "4.0.1", - "resolved": "http://npm.trustu.pre/nopt/-/nopt-4.0.1/d0d4685afd5415193c8c7505602d0d17cd64474d.tgz", - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "node_modules/prettier-eslint/node_modules/@typescript-eslint/types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", "dev": true, - "requires": { - "abbrev": "1.1.1", - "osenv": "0.1.4" + "license": "MIT", + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "http://npm.trustu.pre/normalize-package-data/-/normalize-package-data-2.4.0/12f95a307d58352075a04907b84ac8be98ac012f.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "node_modules/prettier-eslint/node_modules/@typescript-eslint/typescript-estree": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", "dev": true, - "requires": { - "hosted-git-info": "2.5.0", - "is-builtin-module": "1.0.0", - "semver": "5.4.1", - "validate-npm-package-license": "3.0.1" + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "normalize-path": { - "version": "2.1.1", - "resolved": "http://npm.trustu.pre/normalize-path/-/normalize-path-2.1.1/1ab28b556e198363a8c1a6f7e6fa20137fe6aed9.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "node_modules/prettier-eslint/node_modules/@typescript-eslint/visitor-keys": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", "dev": true, - "requires": { - "remove-trailing-separator": "1.1.0" + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "normalize-range": { - "version": "0.1.2", - "resolved": "http://npm.trustu.pre/normalize-range/-/normalize-range-0.1.2/2d10c06bdfd312ea9777695a4d28439456b75942.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "dev": true - }, - "normalize-url": { - "version": "1.9.1", - "resolved": "http://npm.trustu.pre/normalize-url/-/normalize-url-1.9.1/2cc0d66b31ea23036458436e3620d85954c66c3c.tgz", - "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "node_modules/prettier-eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "requires": { - "object-assign": "4.1.1", - "prepend-http": "1.0.4", - "query-string": "4.3.4", - "sort-keys": "1.1.2" + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "http://npm.trustu.pre/npm-run-path/-/npm-run-path-2.0.2/35a9232dfa35d7067b4cb2ddf2357b1871536c5f.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "node_modules/prettier-eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "requires": { - "path-key": "2.0.1" + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "npmlog": { + "node_modules/prettier-eslint/node_modules/chalk": { "version": "4.1.2", - "resolved": "http://npm.trustu.pre/npmlog/-/npmlog-4.1.2/08a7f2a8bf734604779a9efa4ad5cc717abb954b.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "nth-check": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/nth-check/-/nth-check-1.0.1/9929acdf628fc2c41098deab82ac580cf149aae4.tgz", - "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "node_modules/prettier-eslint/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.", "dev": true, - "requires": { - "boolbase": "1.0.0" + "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" } }, - "null-check": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/null-check/-/null-check-1.0.0/977dffd7176012b9ec30d2a39db5cf72a0439edd.tgz", - "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", - "dev": true - }, - "num2fraction": { - "version": "1.2.2", - "resolved": "http://npm.trustu.pre/num2fraction/-/num2fraction-1.2.2/6f682b6a027a4e9ddfa4564cd2589d1d4e669ede.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", - "dev": true - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/number-is-nan/-/number-is-nan-1.0.1/097b602b53422a522c1afb8790318336941a011d.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "http://npm.trustu.pre/oauth-sign/-/oauth-sign-0.8.2/46a6ab7f0aead8deae9ec0565780b7d4efeb9d43.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "http://npm.trustu.pre/object-assign/-/object-assign-4.1.1/2109adc7965887cfc05cbbd442cac8bfbb360863.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-component": { - "version": "0.0.3", - "resolved": "http://npm.trustu.pre/object-component/-/object-component-0.0.3/f0c69aa50efc95b866c186f400a33769cb2f1291.tgz", - "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", - "dev": true - }, - "object-keys": { - "version": "1.0.11", - "resolved": "http://npm.trustu.pre/object-keys/-/object-keys-1.0.11/c54601778ad560f1142ce0e01bcca8b56d13426d.tgz", - "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", - "dev": true - }, - "object.omit": { - "version": "2.0.1", - "resolved": "http://npm.trustu.pre/object.omit/-/object.omit-2.0.1/1a9c744829f39dbb858c76ca3579ae2a54ebd1fa.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, - "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" - }, - "dependencies": { - "for-own": { - "version": "0.1.5", - "resolved": "http://npm.trustu.pre/for-own/-/for-own-0.1.5/5265c681a4f294dabbf17c9509b6763aa84510ce.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "requires": { - "for-in": "1.0.2" - } - } + "node_modules/prettier-eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "obuf": { - "version": "1.1.1", - "resolved": "http://npm.trustu.pre/obuf/-/obuf-1.1.1/104124b6c602c6796881a042541d36db43a5264e.tgz", - "integrity": "sha1-EEEktsYCxnlogaBCVB0220OlJk4=", - "dev": true + "node_modules/prettier-eslint/node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "on-finished": { - "version": "2.3.0", - "resolved": "http://npm.trustu.pre/on-finished/-/on-finished-2.3.0/20f1336481b083cd75337992a16971aa2d906947.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "node_modules/prettier-eslint/node_modules/eslint/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, - "requires": { - "ee-first": "1.1.1" + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "on-headers": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/on-headers/-/on-headers-1.0.1/928f5d0f470d49342651ea6794b0857c100693f7.tgz", - "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", - "dev": true + "node_modules/prettier-eslint/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } }, - "once": { - "version": "1.4.0", - "resolved": "http://npm.trustu.pre/once/-/once-1.4.0/583b1aa775961d4b113ac17d9c50baef9dd76bd1.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "node_modules/prettier-eslint/node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, - "requires": { - "wrappy": "1.0.2" + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "open": { - "version": "0.0.5", - "resolved": "http://npm.trustu.pre/open/-/open-0.0.5/42c3e18ec95466b6bf0dc42f3a2945c3f0cad8fc.tgz", - "integrity": "sha1-QsPhjslUZra/DcQvOilFw/DK2Pw=", - "dev": true - }, - "opn": { - "version": "5.1.0", - "resolved": "http://npm.trustu.pre/opn/-/opn-5.1.0/72ce2306a17dbea58ff1041853352b4a8fc77519.tgz", - "integrity": "sha512-iPNl7SyM8L30Rm1sjGdLLheyHVw5YXVfi3SKWJzBI7efxRwHojfRFjwE/OLM6qp9xJYMgab8WicTU1cPoY+Hpg==", + "node_modules/prettier-eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, - "requires": { - "is-wsl": "1.1.0" + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "optimist": { - "version": "0.6.1", - "resolved": "http://npm.trustu.pre/optimist/-/optimist-0.6.1/da3ea74686fa21a19a111c326e90eb15a0196686.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "node_modules/prettier-eslint/node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, - "requires": { - "minimist": "0.0.10", - "wordwrap": "0.0.2" - }, + "license": "MIT", "dependencies": { - "minimist": { - "version": "0.0.10", - "resolved": "http://npm.trustu.pre/minimist/-/minimist-0.0.10/de3f98543dbf96082be48ad1a0c7cda836301dcf.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", - "dev": true - } + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "optionator": { - "version": "0.8.2", - "resolved": "http://npm.trustu.pre/optionator/-/optionator-0.8.2/364c5e409d3f4d6301d6c0b4c05bba50180aeb64.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "node_modules/prettier-eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, - "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" - }, + "license": "MIT", "dependencies": { - "wordwrap": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/wordwrap/-/wordwrap-1.0.0/27584810891456a4171c8d0226441ade90cbcaeb.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - } + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "options": { - "version": "0.0.6", - "resolved": "http://npm.trustu.pre/options/-/options-0.0.6/ec22d312806bb53e731773e7cdaefcf1c643128f.tgz", - "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", - "dev": true - }, - "original": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/original/-/original-1.0.0/9147f93fa1696d04be61e01bd50baeaca656bd3b.tgz", - "integrity": "sha1-kUf5P6FpbQS+YeAb1QuurKZWvTs=", - "dev": true, - "requires": { - "url-parse": "1.0.5" - }, - "dependencies": { - "url-parse": { - "version": "1.0.5", - "resolved": "http://npm.trustu.pre/url-parse/-/url-parse-1.0.5/0854860422afdcfefeb6c965c662d4800169927b.tgz", - "integrity": "sha1-CFSGBCKv3P7+tsllxmLUgAFpkns=", - "dev": true, - "requires": { - "querystringify": "0.0.4", - "requires-port": "1.0.0" - } - } + "node_modules/prettier-eslint/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "os-browserify": { - "version": "0.3.0", - "resolved": "http://npm.trustu.pre/os-browserify/-/os-browserify-0.3.0/854373c7f5c2315914fc9bfc6bd8238fdda1ec27.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "http://npm.trustu.pre/os-homedir/-/os-homedir-1.0.2/ffbc4988336e0e833de0c168c7ef152121aa7fb3.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-locale": { - "version": "1.4.0", - "resolved": "http://npm.trustu.pre/os-locale/-/os-locale-1.4.0/20f9f17ae29ed345e8bde583b13d2009803c14d9.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "node_modules/prettier-eslint/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, - "requires": { - "lcid": "1.0.0" + "license": "MIT", + "engines": { + "node": ">= 4" } }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "http://npm.trustu.pre/os-tmpdir/-/os-tmpdir-1.0.2/bbe67406c79aa85c5cfec766fe5734555dfa1274.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true + "node_modules/prettier-eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" }, - "osenv": { - "version": "0.1.4", - "resolved": "http://npm.trustu.pre/osenv/-/osenv-0.1.4/42fe6d5953df06c8064be6f176c3d05aaaa34644.tgz", - "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", + "node_modules/prettier-eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "p-finally": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/p-finally/-/p-finally-1.0.0/3fbcfb15b899a44123b34b6dcc18b724336a2cae.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-limit": { - "version": "1.1.0", - "resolved": "http://npm.trustu.pre/p-limit/-/p-limit-1.1.0/b07ff2d9a5d88bec806035895a2bab66a27988bc.tgz", - "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=", - "dev": true - }, - "p-locate": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/p-locate/-/p-locate-2.0.0/20a0103b222a70c8fd39cc2e580680f3dde5ec43.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "node_modules/prettier-eslint/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, - "requires": { - "p-limit": "1.1.0" + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "p-map": { - "version": "1.2.0", - "resolved": "http://npm.trustu.pre/p-map/-/p-map-1.2.0/e4e94f311eabbc8633a1e79908165fca26241b6b.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", - "dev": true - }, - "pako": { - "version": "1.0.6", - "resolved": "http://npm.trustu.pre/pako/-/pako-1.0.6/0101211baa70c4bca4a0f63f2206e97b7dfaf258.tgz", - "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", - "dev": true - }, - "parallel-transform": { - "version": "1.1.0", - "resolved": "http://npm.trustu.pre/parallel-transform/-/parallel-transform-1.1.0/d410f065b05da23081fcd10f28854c29bda33b06.tgz", - "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "node_modules/prettier-eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "requires": { - "cyclist": "0.2.2", - "inherits": "2.0.3", - "readable-stream": "2.3.3" + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "param-case": { - "version": "2.1.1", - "resolved": "http://npm.trustu.pre/param-case/-/param-case-2.1.1/df94fd8cf6531ecf75e6bef9a0858fbc72be2247.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "node_modules/prettier-eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "requires": { - "no-case": "2.3.2" + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "parse-asn1": { - "version": "5.1.0", - "resolved": "http://npm.trustu.pre/parse-asn1/-/parse-asn1-5.1.0/37c4f9b7ed3ab65c74817b5f2480937fbf97c712.tgz", - "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "node_modules/prettier-eslint/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "requires": { - "asn1.js": "4.9.2", - "browserify-aes": "1.1.1", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.14" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "parse-github-repo-url": { - "version": "1.4.1", - "resolved": "http://npm.trustu.pre/parse-github-repo-url/-/parse-github-repo-url-1.4.1/9e7d8bb252a6cb6ba42595060b7bf6df3dbc1f50.tgz", - "integrity": "sha1-nn2LslKmy2ukJZUGC3v23z28H1A=", - "dev": true + "node_modules/prettier-eslint/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "parse-glob": { - "version": "3.0.4", - "resolved": "http://npm.trustu.pre/parse-glob/-/parse-glob-3.0.4/b2c376cfb11f35513badd173ef0bb6e3a388391c.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "node_modules/prettier-eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/is-extglob/-/is-extglob-1.0.0/ac468177c4943405a092fc8f29760c6ffc6206c0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "http://npm.trustu.pre/is-glob/-/is-glob-2.0.1/d096f926a3ded5600f3fdfd91198cb0888c2d863.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "parse-json": { - "version": "2.2.0", - "resolved": "http://npm.trustu.pre/parse-json/-/parse-json-2.2.0/f480f40434ef80741f8469099f8dea18f55a4dc9.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "node_modules/prettier-eslint/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, - "requires": { - "error-ex": "1.3.1" + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "parse-passwd": { + "node_modules/prettier-linter-helpers": { "version": "1.0.0", - "resolved": "http://npm.trustu.pre/parse-passwd/-/parse-passwd-1.0.0/6d5b934a456993b23d37f40a382d6f1666a8e5c6.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, - "parsejson": { - "version": "0.0.3", - "resolved": "http://npm.trustu.pre/parsejson/-/parsejson-0.0.3/ab7e3759f209ece99437973f7d0f1f64ae0e64ab.tgz", - "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "dev": true, - "requires": { - "better-assert": "1.0.2" + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" } }, - "parseqs": { - "version": "0.0.5", - "resolved": "http://npm.trustu.pre/parseqs/-/parseqs-0.0.5/d5208a3738e46766e291ba2ea173684921a8b89d.tgz", - "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, - "requires": { - "better-assert": "1.0.2" + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "parseuri": { - "version": "0.0.5", - "resolved": "http://npm.trustu.pre/parseuri/-/parseuri-0.0.5/80204a50d4dbb779bfdc6ebe2778d90e4bce320a.tgz", - "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "node_modules/proc-log": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", + "integrity": "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==", "dev": true, - "requires": { - "better-assert": "1.0.2" + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "parseurl": { - "version": "1.3.2", - "resolved": "http://npm.trustu.pre/parseurl/-/parseurl-1.3.2/fc289d4ed8993119460c156253262cdc8de65bf3.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", - "dev": true - }, - "path-browserify": { - "version": "0.0.0", - "resolved": "http://npm.trustu.pre/path-browserify/-/path-browserify-0.0.0/a0b870729aae214005b7d5032ec2cbbb0fb4451a.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", - "dev": true - }, - "path-exists": { - "version": "2.1.0", - "resolved": "http://npm.trustu.pre/path-exists/-/path-exists-2.1.0/0feb6c64f0fc518d9a754dd5efb62c7022761f4b.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, - "requires": { - "pinkie-promise": "2.0.1" + "license": "MIT", + "engines": { + "node": ">=0.4.0" } }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/path-is-absolute/-/path-is-absolute-1.0.1/174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "http://npm.trustu.pre/path-is-inside/-/path-is-inside-1.0.2/365417dede44430d1c11af61027facf074bdfc53.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { + "node_modules/promise-retry": { "version": "2.0.1", - "resolved": "http://npm.trustu.pre/path-key/-/path-key-2.0.1/411cadb574c5a140d3a4b1910d40d80cc9f40b40.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.5", - "resolved": "http://npm.trustu.pre/path-parse/-/path-parse-1.0.5/3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "http://npm.trustu.pre/path-to-regexp/-/path-to-regexp-0.1.7/df604178005f522f15eb4490e7247a1bfaa67f8c.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } }, - "path-type": { - "version": "1.1.0", - "resolved": "http://npm.trustu.pre/path-type/-/path-type-1.1.0/59c44f7ee491da704da415da5a4070ba4f8fe441.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" } }, - "pbkdf2": { - "version": "3.0.14", - "resolved": "http://npm.trustu.pre/pbkdf2/-/pbkdf2-3.0.14/a35e13c64799b06ce15320f459c230e68e73bade.tgz", - "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true, - "requires": { - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.9" + "license": "MIT", + "engines": { + "node": ">= 0.10" } }, - "performance-now": { - "version": "0.2.0", - "resolved": "http://npm.trustu.pre/performance-now/-/performance-now-0.2.0/33ef30c5c77d4ea21c5a53869d91b56d8f2555e5.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", - "dev": true + "node_modules/proxy-agent": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", + "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.6", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.1.0", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } }, - "pify": { - "version": "2.3.0", - "resolved": "http://npm.trustu.pre/pify/-/pify-2.3.0/ed141a6ac043a849ea588498e7dca8b15330e90c.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true + "node_modules/proxy-agent/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } }, - "pinkie": { - "version": "2.0.4", - "resolved": "http://npm.trustu.pre/pinkie/-/pinkie-2.0.4/72556b80cfa0d48a974e80e77248e80ed4f7f870.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true, + "license": "MIT" }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "http://npm.trustu.pre/pinkie-promise/-/pinkie-promise-2.0.1/2135d6dfa7a358c069ac9b178776288228450ffa.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", "dev": true, - "requires": { - "pinkie": "2.0.4" + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/pkg-dir/-/pkg-dir-2.0.0/f6d5d1109e19d63edf428e0bd57e12777615334b.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "node_modules/puppeteer-core": { + "version": "24.29.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.29.0.tgz", + "integrity": "sha512-WTxTpGBJMETB4tQ8heMK9XozjpmCNfoA8iov8H65upwhoQpcosZWGTZkPFNndEjILww9IKg/mbTlg8BnZ8L6wQ==", "dev": true, - "requires": { - "find-up": "2.1.0" - }, + "license": "Apache-2.0", "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "http://npm.trustu.pre/find-up/-/find-up-2.1.0/45d1b7e506c717ddd482775a2b77920a3c0c57a7.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "2.0.0" - } - } + "@puppeteer/browsers": "2.10.13", + "chromium-bidi": "10.5.1", + "debug": "^4.4.3", + "devtools-protocol": "0.0.1521046", + "typed-query-selector": "^2.12.0", + "webdriver-bidi-protocol": "0.3.8", + "ws": "^8.18.3" + }, + "engines": { + "node": ">=18" } }, - "portfinder": { - "version": "1.0.13", - "resolved": "http://npm.trustu.pre/portfinder/-/portfinder-1.0.13/bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9.tgz", - "integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=", + "node_modules/puppeteer-core/node_modules/devtools-protocol": { + "version": "0.0.1521046", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1521046.tgz", + "integrity": "sha512-vhE6eymDQSKWUXwwA37NtTTVEzjtGVfDr3pRbsWEQ5onH/Snp2c+2xZHWJJawG/0hCCJLRGt4xVtEVUVILol4w==", "dev": true, - "requires": { - "async": "1.5.2", - "debug": "2.6.9", - "mkdirp": "0.5.1" + "license": "BSD-3-Clause" + }, + "node_modules/puppeteer-core/node_modules/ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "http://npm.trustu.pre/async/-/async-1.5.2/ec6a61ae56480c0c3cb241c95618e20892f9672a.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true } } }, - "postcss": { - "version": "5.2.18", - "resolved": "http://npm.trustu.pre/postcss/-/postcss-5.2.18/badfa1497d46244f6390f58b319830d9107853c5.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "node_modules/qified": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/qified/-/qified-0.5.1.tgz", + "integrity": "sha512-+BtFN3dCP+IaFA6IYNOu/f/uK1B8xD2QWyOeCse0rjtAebBmkzgd2d1OAXi3ikAzJMIBSdzZDNZ3wZKEUDQs5w==", "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.0", - "source-map": "0.5.7", - "supports-color": "3.2.3" - }, + "license": "MIT", "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "http://npm.trustu.pre/ansi-styles/-/ansi-styles-2.2.1/b432dd3358b634cf75e1e4664368240533c1ddbe.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "http://npm.trustu.pre/chalk/-/chalk-1.1.3/a8115c55e4a702fe4d150abd3872822a7e09fc98.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/supports-color/-/supports-color-2.0.0/535d045ce6b6363fa40117084629995e9df324c7.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } + "hookified": "^1.12.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/qr-creator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/qr-creator/-/qr-creator-1.0.0.tgz", + "integrity": "sha512-C0cqfbS1P5hfqN4NhsYsUXePlk9BO+a45bAQ3xLYjBL3bOIFzoVEjs79Fado9u9BPBD3buHi3+vY+C8tHh4qMQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "has-flag": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/has-flag/-/has-flag-1.0.0/9d9e793165ce017a00f00418c43f942a7b1d11fa.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "supports-color": { - "version": "3.2.3", - "resolved": "http://npm.trustu.pre/supports-color/-/supports-color-3.2.3/65ac0504b3954171d8a64946b2ae3cbb8a5f54f6.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } + { + "type": "consulting", + "url": "https://feross.org/support" } - } + ], + "license": "MIT" }, - "postcss-calc": { - "version": "5.3.1", - "resolved": "http://npm.trustu.pre/postcss-calc/-/postcss-calc-5.3.1/77bae7ca928ad85716e2fda42f261bf7c1d65b5e.tgz", - "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true, - "requires": { - "postcss": "5.2.18", - "postcss-message-helpers": "2.0.0", - "reduce-css-calc": "1.3.0" + "license": "MIT", + "engines": { + "node": ">= 0.6" } }, - "postcss-colormin": { - "version": "2.2.2", - "resolved": "http://npm.trustu.pre/postcss-colormin/-/postcss-colormin-2.2.2/6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b.tgz", - "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, - "requires": { - "colormin": "1.1.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" } }, - "postcss-convert-values": { - "version": "2.6.1", - "resolved": "http://npm.trustu.pre/postcss-convert-values/-/postcss-convert-values-2.6.1/bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d.tgz", - "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", + "node_modules/rc/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true, - "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "license": "ISC" + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "postcss-custom-properties": { - "version": "6.2.0", - "resolved": "http://npm.trustu.pre/postcss-custom-properties/-/postcss-custom-properties-6.2.0/5d929a7f06e9b84e0f11334194c0ba9a30acfbe9.tgz", - "integrity": "sha512-eNR2h9T9ciKMoQEORrPjH33XeN/nuvVuxArOKmHtsFbGbNss631tgTrKou3/pmjAZbA4QQkhLIkPQkIk3WW+8w==", - "dev": true, - "requires": { - "balanced-match": "1.0.0", - "postcss": "6.0.14" - }, - "dependencies": { - "chalk": { - "version": "2.3.0", - "resolved": "http://npm.trustu.pre/chalk/-/chalk-2.3.0/b5ea48efc9c1793dccc9b4767c93914d3f2d52ba.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - }, - "postcss": { - "version": "6.0.14", - "resolved": "http://npm.trustu.pre/postcss/-/postcss-6.0.14/5534c72114739e75d0afcf017db853099f562885.tgz", - "integrity": "sha512-NJ1z0f+1offCgadPhz+DvGm5Mkci+mmV5BqD13S992o0Xk9eElxUfPPF+t2ksH5R/17gz4xVK8KWocUQ5o3Rog==", - "dev": true, - "requires": { - "chalk": "2.3.0", - "source-map": "0.6.1", - "supports-color": "4.5.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "http://npm.trustu.pre/source-map/-/source-map-0.6.1/74722af32e9614e9c287a8d0bbde48b5e2f1a263.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/readdirp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, - "postcss-discard-comments": { - "version": "2.0.4", - "resolved": "http://npm.trustu.pre/postcss-discard-comments/-/postcss-discard-comments-2.0.4/befe89fafd5b3dace5ccce51b76b81514be00e3d.tgz", - "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/regexp-tree": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz", + "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==", "dev": true, - "requires": { - "postcss": "5.2.18" + "license": "MIT", + "bin": { + "regexp-tree": "bin/regexp-tree" } }, - "postcss-discard-duplicates": { - "version": "2.1.0", - "resolved": "http://npm.trustu.pre/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0/b9abf27b88ac188158a5eb12abcae20263b91932.tgz", - "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", + "node_modules/registry-auth-token": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", + "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", "dev": true, - "requires": { - "postcss": "5.2.18" + "license": "MIT", + "dependencies": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" } }, - "postcss-discard-empty": { - "version": "2.1.0", - "resolved": "http://npm.trustu.pre/postcss-discard-empty/-/postcss-discard-empty-2.1.0/d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5.tgz", - "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", + "node_modules/registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==", "dev": true, - "requires": { - "postcss": "5.2.18" + "license": "MIT", + "dependencies": { + "rc": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "postcss-discard-overridden": { - "version": "0.1.1", - "resolved": "http://npm.trustu.pre/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1/8b1eaf554f686fb288cd874c55667b0aa3668d58.tgz", - "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", + "node_modules/regjsparser": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz", + "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", "dev": true, - "requires": { - "postcss": "5.2.18" + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.1.0" + }, + "bin": { + "regjsparser": "bin/parser" } }, - "postcss-discard-unused": { - "version": "2.2.3", - "resolved": "http://npm.trustu.pre/postcss-discard-unused/-/postcss-discard-unused-2.2.3/bce30b2cc591ffc634322b5fb3464b6d934f4433.tgz", - "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, - "requires": { - "postcss": "5.2.18", - "uniqs": "2.0.0" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "postcss-filter-plugins": { + "node_modules/require-from-string": { "version": "2.0.2", - "resolved": "http://npm.trustu.pre/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2/6d85862534d735ac420e4a85806e1f5d4286d84c.tgz", - "integrity": "sha1-bYWGJTTXNaxCDkqFgG4fXUKG2Ew=", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, - "requires": { - "postcss": "5.2.18", - "uniqid": "4.1.1" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "postcss-load-config": { - "version": "1.2.0", - "resolved": "http://npm.trustu.pre/postcss-load-config/-/postcss-load-config-1.2.0/539e9afc9ddc8620121ebf9d8c3673e0ce50d28a.tgz", - "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=", + "node_modules/require-in-the-middle": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.5.2.tgz", + "integrity": "sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==", "dev": true, - "requires": { - "cosmiconfig": "2.2.2", - "object-assign": "4.1.1", - "postcss-load-options": "1.2.0", - "postcss-load-plugins": "2.3.0" + "license": "MIT", + "dependencies": { + "debug": "^4.3.5", + "module-details-from-path": "^1.0.3", + "resolve": "^1.22.8" + }, + "engines": { + "node": ">=8.6.0" } }, - "postcss-load-options": { - "version": "1.2.0", - "resolved": "http://npm.trustu.pre/postcss-load-options/-/postcss-load-options-1.2.0/b098b1559ddac2df04bc0bb375f99a5cfe2b6d8c.tgz", - "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=", + "node_modules/require-relative": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", + "integrity": "sha512-AKGr4qvHiryxRb19m3PsLRGuKVAbJLUD7E6eOaHkfKhwc+vSgVOCY5xNvm9EkolBKTOf0GrQAZKLimOCz81Khg==", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "dev": true, - "requires": { - "cosmiconfig": "2.2.2", - "object-assign": "4.1.1" + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "postcss-load-plugins": { - "version": "2.3.0", - "resolved": "http://npm.trustu.pre/postcss-load-plugins/-/postcss-load-plugins-2.3.0/745768116599aca2f009fad426b00175049d8d92.tgz", - "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=", - "dev": true, - "requires": { - "cosmiconfig": "2.2.2", - "object-assign": "4.1.1" - } - }, - "postcss-loader": { - "version": "2.0.9", - "resolved": "http://npm.trustu.pre/postcss-loader/-/postcss-loader-2.0.9/001fdf7bfeeb159405ee61d1bb8e59b528dbd309.tgz", - "integrity": "sha512-sgoXPtmgVT3aBAhU47Kig8oPF+mbXl8Unjvtz1Qj1q2D2EvSVJW2mKJNzxv5y/LvA9xWwuvdysvhc7Zn80UWWw==", - "dev": true, - "requires": { - "loader-utils": "1.1.0", - "postcss": "6.0.14", - "postcss-load-config": "1.2.0", - "schema-utils": "0.3.0" - }, - "dependencies": { - "chalk": { - "version": "2.3.0", - "resolved": "http://npm.trustu.pre/chalk/-/chalk-2.3.0/b5ea48efc9c1793dccc9b4767c93914d3f2d52ba.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - }, - "postcss": { - "version": "6.0.14", - "resolved": "http://npm.trustu.pre/postcss/-/postcss-6.0.14/5534c72114739e75d0afcf017db853099f562885.tgz", - "integrity": "sha512-NJ1z0f+1offCgadPhz+DvGm5Mkci+mmV5BqD13S992o0Xk9eElxUfPPF+t2ksH5R/17gz4xVK8KWocUQ5o3Rog==", - "dev": true, - "requires": { - "chalk": "2.3.0", - "source-map": "0.6.1", - "supports-color": "4.5.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "http://npm.trustu.pre/source-map/-/source-map-0.6.1/74722af32e9614e9c287a8d0bbde48b5e2f1a263.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, - "postcss-merge-idents": { - "version": "2.1.7", - "resolved": "http://npm.trustu.pre/postcss-merge-idents/-/postcss-merge-idents-2.1.7/4c5530313c08e1d5b3bbf3d2bbc747e278eea270.tgz", - "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", "dev": true, - "requires": { - "has": "1.0.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "postcss-merge-longhand": { - "version": "2.0.2", - "resolved": "http://npm.trustu.pre/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2/23d90cd127b0a77994915332739034a1a4f3d658.tgz", - "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true, - "requires": { - "postcss": "5.2.18" + "license": "MIT", + "engines": { + "node": ">= 4" } }, - "postcss-merge-rules": { - "version": "2.1.2", - "resolved": "http://npm.trustu.pre/postcss-merge-rules/-/postcss-merge-rules-2.1.2/d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721.tgz", - "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, - "requires": { - "browserslist": "1.7.7", - "caniuse-api": "1.6.1", - "postcss": "5.2.18", - "postcss-selector-parser": "2.2.3", - "vendors": "1.0.1" + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "postcss-message-helpers": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/postcss-message-helpers/-/postcss-message-helpers-2.0.0/a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e.tgz", - "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=", - "dev": true + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" }, - "postcss-minify-font-values": { - "version": "1.0.5", - "resolved": "http://npm.trustu.pre/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5/4b58edb56641eba7c8474ab3526cafd7bbdecb69.tgz", - "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, - "requires": { - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "postcss-minify-gradients": { - "version": "1.0.5", - "resolved": "http://npm.trustu.pre/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5/5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1.tgz", - "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", + "node_modules/robots-parser": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/robots-parser/-/robots-parser-3.0.1.tgz", + "integrity": "sha512-s+pyvQeIKIZ0dx5iJiQk1tPLJAWln39+MI5jtM8wnyws+G5azk+dMnMX0qfbqNetKKNgcWWOdi0sfm+FbQbgdQ==", "dev": true, - "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "license": "MIT", + "engines": { + "node": ">=10.0.0" } }, - "postcss-minify-params": { - "version": "1.2.2", - "resolved": "http://npm.trustu.pre/postcss-minify-params/-/postcss-minify-params-1.2.2/ad2ce071373b943b3d930a3fa59a358c28d6f1f3.tgz", - "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", + "node_modules/rollup": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.3.tgz", + "integrity": "sha512-RIDh866U8agLgiIcdpB+COKnlCreHJLfIhWC3LVflku5YHfpnsIKigRZeFfMfCc4dVcqNVfQQ5gO/afOck064A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.52.3", + "@rollup/rollup-android-arm64": "4.52.3", + "@rollup/rollup-darwin-arm64": "4.52.3", + "@rollup/rollup-darwin-x64": "4.52.3", + "@rollup/rollup-freebsd-arm64": "4.52.3", + "@rollup/rollup-freebsd-x64": "4.52.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.52.3", + "@rollup/rollup-linux-arm-musleabihf": "4.52.3", + "@rollup/rollup-linux-arm64-gnu": "4.52.3", + "@rollup/rollup-linux-arm64-musl": "4.52.3", + "@rollup/rollup-linux-loong64-gnu": "4.52.3", + "@rollup/rollup-linux-ppc64-gnu": "4.52.3", + "@rollup/rollup-linux-riscv64-gnu": "4.52.3", + "@rollup/rollup-linux-riscv64-musl": "4.52.3", + "@rollup/rollup-linux-s390x-gnu": "4.52.3", + "@rollup/rollup-linux-x64-gnu": "4.52.3", + "@rollup/rollup-linux-x64-musl": "4.52.3", + "@rollup/rollup-openharmony-arm64": "4.52.3", + "@rollup/rollup-win32-arm64-msvc": "4.52.3", + "@rollup/rollup-win32-ia32-msvc": "4.52.3", + "@rollup/rollup-win32-x64-gnu": "4.52.3", + "@rollup/rollup-win32-x64-msvc": "4.52.3", + "fsevents": "~2.3.2" + } + }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", "dev": true, - "requires": { - "alphanum-sort": "1.0.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0", - "uniqs": "2.0.0" + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" } }, - "postcss-minify-selectors": { - "version": "2.1.1", - "resolved": "http://npm.trustu.pre/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1/b2c6a98c0072cf91b932d1a496508114311735bf.tgz", - "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", + "node_modules/router/node_modules/path-to-regexp": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", + "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", "dev": true, - "requires": { - "alphanum-sort": "1.0.2", - "has": "1.0.1", - "postcss": "5.2.18", - "postcss-selector-parser": "2.2.3" + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "postcss-modules-extract-imports": { - "version": "1.1.0", - "resolved": "http://npm.trustu.pre/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0/b614c9720be6816eaee35fb3a5faa1dba6a05ddb.tgz", - "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=", - "dev": true, - "requires": { - "postcss": "6.0.14" - }, - "dependencies": { - "chalk": { - "version": "2.3.0", - "resolved": "http://npm.trustu.pre/chalk/-/chalk-2.3.0/b5ea48efc9c1793dccc9b4767c93914d3f2d52ba.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - }, - "postcss": { - "version": "6.0.14", - "resolved": "http://npm.trustu.pre/postcss/-/postcss-6.0.14/5534c72114739e75d0afcf017db853099f562885.tgz", - "integrity": "sha512-NJ1z0f+1offCgadPhz+DvGm5Mkci+mmV5BqD13S992o0Xk9eElxUfPPF+t2ksH5R/17gz4xVK8KWocUQ5o3Rog==", - "dev": true, - "requires": { - "chalk": "2.3.0", - "source-map": "0.6.1", - "supports-color": "4.5.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "http://npm.trustu.pre/source-map/-/source-map-0.6.1/74722af32e9614e9c287a8d0bbde48b5e2f1a263.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } + "node_modules/rrweb-cssom": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", + "dev": true, + "license": "MIT" }, - "postcss-modules-local-by-default": { + "node_modules/run-parallel": { "version": "1.2.0", - "resolved": "http://npm.trustu.pre/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0/f7d80c398c5a393fa7964466bd19500a7d61c069.tgz", - "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", - "dev": true, - "requires": { - "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.14" - }, - "dependencies": { - "chalk": { - "version": "2.3.0", - "resolved": "http://npm.trustu.pre/chalk/-/chalk-2.3.0/b5ea48efc9c1793dccc9b4767c93914d3f2d52ba.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "postcss": { - "version": "6.0.14", - "resolved": "http://npm.trustu.pre/postcss/-/postcss-6.0.14/5534c72114739e75d0afcf017db853099f562885.tgz", - "integrity": "sha512-NJ1z0f+1offCgadPhz+DvGm5Mkci+mmV5BqD13S992o0Xk9eElxUfPPF+t2ksH5R/17gz4xVK8KWocUQ5o3Rog==", - "dev": true, - "requires": { - "chalk": "2.3.0", - "source-map": "0.6.1", - "supports-color": "4.5.0" - } + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "source-map": { - "version": "0.6.1", - "resolved": "http://npm.trustu.pre/source-map/-/source-map-0.6.1/74722af32e9614e9c287a8d0bbde48b5e2f1a263.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + { + "type": "consulting", + "url": "https://feross.org/support" } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" } }, - "postcss-modules-scope": { - "version": "1.1.0", - "resolved": "http://npm.trustu.pre/postcss-modules-scope/-/postcss-modules-scope-1.1.0/d6ea64994c79f97b62a72b426fbe6056a194bb90.tgz", - "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", - "dev": true, - "requires": { - "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.14" - }, - "dependencies": { - "chalk": { - "version": "2.3.0", - "resolved": "http://npm.trustu.pre/chalk/-/chalk-2.3.0/b5ea48efc9c1793dccc9b4767c93914d3f2d52ba.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - }, - "postcss": { - "version": "6.0.14", - "resolved": "http://npm.trustu.pre/postcss/-/postcss-6.0.14/5534c72114739e75d0afcf017db853099f562885.tgz", - "integrity": "sha512-NJ1z0f+1offCgadPhz+DvGm5Mkci+mmV5BqD13S992o0Xk9eElxUfPPF+t2ksH5R/17gz4xVK8KWocUQ5o3Rog==", - "dev": true, - "requires": { - "chalk": "2.3.0", - "source-map": "0.6.1", - "supports-color": "4.5.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "http://npm.trustu.pre/source-map/-/source-map-0.6.1/74722af32e9614e9c287a8d0bbde48b5e2f1a263.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" } }, - "postcss-modules-values": { - "version": "1.3.0", - "resolved": "http://npm.trustu.pre/postcss-modules-values/-/postcss-modules-values-1.3.0/ecffa9d7e192518389f42ad0e83f72aec456ea20.tgz", - "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", - "dev": true, - "requires": { - "icss-replace-symbols": "1.1.0", - "postcss": "6.0.14" - }, - "dependencies": { - "chalk": { - "version": "2.3.0", - "resolved": "http://npm.trustu.pre/chalk/-/chalk-2.3.0/b5ea48efc9c1793dccc9b4767c93914d3f2d52ba.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "postcss": { - "version": "6.0.14", - "resolved": "http://npm.trustu.pre/postcss/-/postcss-6.0.14/5534c72114739e75d0afcf017db853099f562885.tgz", - "integrity": "sha512-NJ1z0f+1offCgadPhz+DvGm5Mkci+mmV5BqD13S992o0Xk9eElxUfPPF+t2ksH5R/17gz4xVK8KWocUQ5o3Rog==", - "dev": true, - "requires": { - "chalk": "2.3.0", - "source-map": "0.6.1", - "supports-color": "4.5.0" - } + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "source-map": { - "version": "0.6.1", - "resolved": "http://npm.trustu.pre/source-map/-/source-map-0.6.1/74722af32e9614e9c287a8d0bbde48b5e2f1a263.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + { + "type": "consulting", + "url": "https://feross.org/support" } - } + ], + "license": "MIT" }, - "postcss-normalize-charset": { - "version": "1.1.1", - "resolved": "http://npm.trustu.pre/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1/ef9ee71212d7fe759c78ed162f61ed62b5cb93f1.tgz", - "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, - "requires": { - "postcss": "5.2.18" - } + "license": "MIT" }, - "postcss-normalize-url": { - "version": "3.0.8", - "resolved": "http://npm.trustu.pre/postcss-normalize-url/-/postcss-normalize-url-3.0.8/108f74b3f2fcdaf891a2ffa3ea4592279fc78222.tgz", - "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", + "node_modules/sass": { + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.90.0.tgz", + "integrity": "sha512-9GUyuksjw70uNpb1MTYWsH9MQHOHY6kwfnkafC24+7aOMZn9+rVMBxRbLvw756mrBFbIsFg6Xw9IkR2Fnn3k+Q==", "dev": true, - "requires": { - "is-absolute-url": "2.1.0", - "normalize-url": "1.9.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.0", + "immutable": "^5.0.2", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" } }, - "postcss-ordered-values": { - "version": "2.2.3", - "resolved": "http://npm.trustu.pre/postcss-ordered-values/-/postcss-ordered-values-2.2.3/eec6c2a67b6c412a8db2042e77fe8da43f95c11d.tgz", - "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", + "node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", "dev": true, - "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" - } + "license": "ISC" }, - "postcss-reduce-idents": { - "version": "2.4.0", - "resolved": "http://npm.trustu.pre/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0/c2c6d20cc958284f6abfbe63f7609bf409059ad3.tgz", - "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", "dev": true, - "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" } }, - "postcss-reduce-initial": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1/68f80695f045d08263a879ad240df8dd64f644ea.tgz", - "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, - "requires": { - "postcss": "5.2.18" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "postcss-reduce-transforms": { - "version": "1.0.4", - "resolved": "http://npm.trustu.pre/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4/ff76f4d8212437b31c298a42d2e1444025771ae1.tgz", - "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", + "node_modules/serve": { + "version": "14.2.5", + "resolved": "https://registry.npmjs.org/serve/-/serve-14.2.5.tgz", + "integrity": "sha512-Qn/qMkzCcMFVPb60E/hQy+iRLpiU8PamOfOSYoAHmmF+fFFmpPpqa6Oci2iWYpTdOUM3VF+TINud7CfbQnsZbA==", "dev": true, - "requires": { - "has": "1.0.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "license": "MIT", + "dependencies": { + "@zeit/schemas": "2.36.0", + "ajv": "8.12.0", + "arg": "5.0.2", + "boxen": "7.0.0", + "chalk": "5.0.1", + "chalk-template": "0.4.0", + "clipboardy": "3.0.0", + "compression": "1.8.1", + "is-port-reachable": "4.0.0", + "serve-handler": "6.1.6", + "update-check": "1.5.4" + }, + "bin": { + "serve": "build/main.js" + }, + "engines": { + "node": ">= 14" } }, - "postcss-selector-parser": { - "version": "2.2.3", - "resolved": "http://npm.trustu.pre/postcss-selector-parser/-/postcss-selector-parser-2.2.3/f9437788606c3c9acee16ffe8d8b16297f27bb90.tgz", - "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", + "node_modules/serve-handler": { + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.6.tgz", + "integrity": "sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==", "dev": true, - "requires": { - "flatten": "1.0.2", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "license": "MIT", + "dependencies": { + "bytes": "3.0.0", + "content-disposition": "0.5.2", + "mime-types": "2.1.18", + "minimatch": "3.1.2", + "path-is-inside": "1.0.2", + "path-to-regexp": "3.3.0", + "range-parser": "1.2.0" } }, - "postcss-svgo": { - "version": "2.1.6", - "resolved": "http://npm.trustu.pre/postcss-svgo/-/postcss-svgo-2.1.6/b6df18aa613b666e133f08adb5219c2684ac108d.tgz", - "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", + "node_modules/serve-handler/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, - "requires": { - "is-svg": "2.1.0", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0", - "svgo": "0.7.2" + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "postcss-unique-selectors": { - "version": "2.0.2", - "resolved": "http://npm.trustu.pre/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2/981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d.tgz", - "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", - "dev": true, - "requires": { - "alphanum-sort": "1.0.2", - "postcss": "5.2.18", - "uniqs": "2.0.0" - } - }, - "postcss-url": { - "version": "7.3.0", - "resolved": "http://npm.trustu.pre/postcss-url/-/postcss-url-7.3.0/cf2f45e06743cf43cfea25309f81cbc003dc783f.tgz", - "integrity": "sha512-VBP6uf6iL3AZra23nkPkOEkS/5azj1xf/toRrjfkolfFEgg9Gyzg9UhJZeIsz12EGKZTNVeGbPa2XtaZm/iZvg==", - "dev": true, - "requires": { - "mime": "1.6.0", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "postcss": "6.0.14", - "xxhashjs": "0.2.1" - }, - "dependencies": { - "chalk": { - "version": "2.3.0", - "resolved": "http://npm.trustu.pre/chalk/-/chalk-2.3.0/b5ea48efc9c1793dccc9b4767c93914d3f2d52ba.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - }, - "postcss": { - "version": "6.0.14", - "resolved": "http://npm.trustu.pre/postcss/-/postcss-6.0.14/5534c72114739e75d0afcf017db853099f562885.tgz", - "integrity": "sha512-NJ1z0f+1offCgadPhz+DvGm5Mkci+mmV5BqD13S992o0Xk9eElxUfPPF+t2ksH5R/17gz4xVK8KWocUQ5o3Rog==", - "dev": true, - "requires": { - "chalk": "2.3.0", - "source-map": "0.6.1", - "supports-color": "4.5.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "http://npm.trustu.pre/source-map/-/source-map-0.6.1/74722af32e9614e9c287a8d0bbde48b5e2f1a263.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "node_modules/serve-handler/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" } }, - "postcss-value-parser": { - "version": "3.3.0", - "resolved": "http://npm.trustu.pre/postcss-value-parser/-/postcss-value-parser-3.3.0/87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15.tgz", - "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", - "dev": true - }, - "postcss-zindex": { - "version": "2.2.0", - "resolved": "http://npm.trustu.pre/postcss-zindex/-/postcss-zindex-2.2.0/d2109ddc055b91af67fc4cb3b025946639d2af22.tgz", - "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", + "node_modules/serve-handler/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, - "requires": { - "has": "1.0.1", - "postcss": "5.2.18", - "uniqs": "2.0.0" + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "http://npm.trustu.pre/prelude-ls/-/prelude-ls-1.1.2/21932a549f5e52ffd9a827f570e04be62a97da54.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "http://npm.trustu.pre/prepend-http/-/prepend-http-1.0.4/d4f4562b0ce3696e41ac52d0e002e57a635dc6dc.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, - "preserve": { - "version": "0.2.0", - "resolved": "http://npm.trustu.pre/preserve/-/preserve-0.2.0/815ed1f6ebc65926f865b310c0713bcb3315ce4b.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true - }, - "pretty-error": { - "version": "2.1.1", - "resolved": "http://npm.trustu.pre/pretty-error/-/pretty-error-2.1.1/5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3.tgz", - "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", + "node_modules/serve-handler/node_modules/range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", "dev": true, - "requires": { - "renderkid": "2.0.1", - "utila": "0.4.0" + "license": "MIT", + "engines": { + "node": ">= 0.6" } }, - "process": { - "version": "0.11.10", - "resolved": "http://npm.trustu.pre/process/-/process-0.11.10/7332300e840161bda3e69a1d1d91a7d4bc16f182.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "http://npm.trustu.pre/process-nextick-args/-/process-nextick-args-1.0.7/150e20b756590ad3f91093f25a4f2ad8bff30ba3.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true + "node_modules/serve/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } }, - "promise": { - "version": "7.3.1", - "resolved": "http://npm.trustu.pre/promise/-/promise-7.3.1/064b72602b18f90f29192b8b1bc418ffd1ebd3bf.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "node_modules/serve/node_modules/chalk": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz", + "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==", "dev": true, - "optional": true, - "requires": { - "asap": "2.0.6" + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/promise-inflight/-/promise-inflight-1.0.1/98472870bf228132fcbdd868129bad12c3c029e3.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true, + "license": "ISC" }, - "protractor": { - "version": "5.2.1", - "resolved": "http://npm.trustu.pre/protractor/-/protractor-5.2.1/b4e4b6145c71f94e617b006ee353e05651eab88d.tgz", - "integrity": "sha512-oasutUD/4WUAZdQRo6EtWlVmvgwxWCkcc49XaTiETRPDffRoj8JAQg6gpv42aiP+qyUuK6qJS/XYNBI4Me44Gw==", - "dev": true, - "requires": { - "@types/node": "6.0.92", - "@types/q": "0.0.32", - "@types/selenium-webdriver": "2.53.43", - "blocking-proxy": "1.0.1", - "chalk": "1.1.3", - "glob": "7.1.2", - "jasmine": "2.8.0", - "jasminewd2": "2.2.0", - "optimist": "0.6.1", - "q": "1.4.1", - "saucelabs": "1.3.0", - "selenium-webdriver": "3.6.0", - "source-map-support": "0.4.18", - "webdriver-js-extender": "1.0.0", - "webdriver-manager": "12.0.6" - }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", "dependencies": { - "@types/node": { - "version": "6.0.92", - "resolved": "http://npm.trustu.pre/@types/node/-/node-6.0.92/e7f721ae282772e12ba2579968c00d9cce422c5d.tgz", - "integrity": "sha512-awEYSSTn7dauwVCYSx2CJaPTu0Z1Ht2oR1b2AD3CYao6ZRb+opb6EL43fzmD7eMFgMHzTBWSUzlWSD+S8xN0Nw==", - "dev": true - }, - "adm-zip": { - "version": "0.4.7", - "resolved": "http://npm.trustu.pre/adm-zip/-/adm-zip-0.4.7/8606c2cbf1c426ce8c8ec00174447fd49b6eafc1.tgz", - "integrity": "sha1-hgbCy/HEJs6MjsABdER/1Jtur8E=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "http://npm.trustu.pre/ansi-styles/-/ansi-styles-2.2.1/b432dd3358b634cf75e1e4664368240533c1ddbe.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "http://npm.trustu.pre/chalk/-/chalk-1.1.3/a8115c55e4a702fe4d150abd3872822a7e09fc98.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "del": { - "version": "2.2.2", - "resolved": "http://npm.trustu.pre/del/-/del-2.2.2/c12c981d067846c84bcaf862cff930d907ffd1a8.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "dev": true, - "requires": { - "globby": "5.0.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "2.6.2" - } - }, - "globby": { - "version": "5.0.0", - "resolved": "http://npm.trustu.pre/globby/-/globby-5.0.0/ebd84667ca0dbb330b99bcfc68eac2bc54370e0d.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true, - "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "q": { - "version": "1.4.1", - "resolved": "http://npm.trustu.pre/q/-/q-1.4.1/55705bcd93c5f3673530c2c2cbc0c2b3addc286e.tgz", - "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/supports-color/-/supports-color-2.0.0/535d045ce6b6363fa40117084629995e9df324c7.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "webdriver-manager": { - "version": "12.0.6", - "resolved": "http://npm.trustu.pre/webdriver-manager/-/webdriver-manager-12.0.6/3df1a481977010b4cbf8c9d85c7a577828c0e70b.tgz", - "integrity": "sha1-PfGkgZdwELTL+MnYXHpXeCjA5ws=", - "dev": true, - "requires": { - "adm-zip": "0.4.7", - "chalk": "1.1.3", - "del": "2.2.2", - "glob": "7.1.2", - "ini": "1.3.5", - "minimist": "1.2.0", - "q": "1.4.1", - "request": "2.81.0", - "rimraf": "2.6.2", - "semver": "5.4.1", - "xml2js": "0.4.19" - } - } + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "proxy-addr": { - "version": "2.0.2", - "resolved": "http://npm.trustu.pre/proxy-addr/-/proxy-addr-2.0.2/6571504f47bb988ec8180253f85dd7e14952bdec.tgz", - "integrity": "sha1-ZXFQT0e7mI7IGAJT+F3X4UlSvew=", + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, - "requires": { - "forwarded": "0.1.2", - "ipaddr.js": "1.5.2" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "prr": { - "version": "0.0.0", - "resolved": "http://npm.trustu.pre/prr/-/prr-0.0.0/1a84b85908325501411853d0081ee3fa86e2926a.tgz", - "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "http://npm.trustu.pre/pseudomap/-/pseudomap-1.0.2/f052a28da70e618917ef0a8ac34c1ae5a68286b3.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true + "node_modules/shimmer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", + "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==", + "dev": true, + "license": "BSD-2-Clause" }, - "public-encrypt": { - "version": "4.0.0", - "resolved": "http://npm.trustu.pre/public-encrypt/-/public-encrypt-4.0.0/39f699f3a46560dd5ebacbca693caf7c65c18cc6.tgz", - "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dev": true, - "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "parse-asn1": "5.1.0", - "randombytes": "2.0.5" + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "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" } }, - "pump": { - "version": "1.0.3", - "resolved": "http://npm.trustu.pre/pump/-/pump-1.0.3/5dfe8311c33bbf6fc18261f9f34702c47c08a954.tgz", - "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", + "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==", "dev": true, - "requires": { - "end-of-stream": "1.4.0", - "once": "1.4.0" + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "pumpify": { - "version": "1.3.5", - "resolved": "http://npm.trustu.pre/pumpify/-/pumpify-1.3.5/1b671c619940abcaeac0ad0e3a3c164be760993b.tgz", - "integrity": "sha1-G2ccYZlAq8rqwK0OOjwWS+dgmTs=", + "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==", "dev": true, - "requires": { - "duplexify": "3.5.1", - "inherits": "2.0.3", - "pump": "1.0.3" + "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" } }, - "punycode": { - "version": "1.4.1", - "resolved": "http://npm.trustu.pre/punycode/-/punycode-1.4.1/c0d5a63b2718800ad8e1eb0fa5269c84dd41845e.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "q": { - "version": "1.5.1", - "resolved": "http://npm.trustu.pre/q/-/q-1.5.1/7e32f75b41381291d04611f1bf14109ac00651d7.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true - }, - "q-io": { - "version": "1.13.2", - "resolved": "http://npm.trustu.pre/q-io/-/q-io-1.13.2/eea130d481ddb5e1aa1bc5a66855f7391d06f003.tgz", - "integrity": "sha1-7qEw1IHdteGqG8WmaFX3OR0G8AM=", - "dev": true, - "requires": { - "collections": "0.2.2", - "mime": "1.6.0", - "mimeparse": "0.1.4", - "q": "1.5.1", - "qs": "1.2.2", - "url2": "0.0.0" - }, - "dependencies": { - "qs": { - "version": "1.2.2", - "resolved": "http://npm.trustu.pre/qs/-/qs-1.2.2/19b57ff24dc2a99ce1f8bdf6afcda59f8ef61f88.tgz", - "integrity": "sha1-GbV/8k3CqZzh+L32r82ln472H4g=", - "dev": true - } + "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==", + "dev": true, + "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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "qjobs": { - "version": "1.1.5", - "resolved": "http://npm.trustu.pre/qjobs/-/qjobs-1.1.5/659de9f2cf8dcc27a1481276f205377272382e73.tgz", - "integrity": "sha1-ZZ3p8s+NzCehSBJ28gU3cnI4LnM=", - "dev": true - }, - "qs": { - "version": "6.4.0", - "resolved": "http://npm.trustu.pre/qs/-/qs-6.4.0/13e26d28ad6b0ffaa91312cd3bf708ed351e7233.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", - "dev": true + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" }, - "query-string": { - "version": "4.3.4", - "resolved": "http://npm.trustu.pre/query-string/-/query-string-4.3.4/bbb693b9ca915c232515b228b1a02b609043dbeb.tgz", - "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "requires": { - "object-assign": "4.1.1", - "strict-uri-encode": "1.1.0" + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "querystring": { - "version": "0.2.0", - "resolved": "http://npm.trustu.pre/querystring/-/querystring-0.2.0/b209849203bb25df820da756e747005878521620.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "http://npm.trustu.pre/querystring-es3/-/querystring-es3-0.2.1/9ec61f79049875707d69414596fd907a4d711e73.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, - "querystringify": { - "version": "0.0.4", - "resolved": "http://npm.trustu.pre/querystringify/-/querystringify-0.0.4/0cf7f84f9463ff0ae51c4c4b142d95be37724d9c.tgz", - "integrity": "sha1-DPf4T5Rj/wrlHExLFC2VvjdyTZw=", - "dev": true - }, - "randomatic": { - "version": "1.1.7", - "resolved": "http://npm.trustu.pre/randomatic/-/randomatic-1.1.7/c7abe9cc8b87c0baa876b19fde83fd464797e38c.tgz", - "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", - "dev": true, - "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "http://npm.trustu.pre/is-number/-/is-number-3.0.0/24fd6201a4782cf50561c810276afc7d12d71195.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "http://npm.trustu.pre/kind-of/-/kind-of-3.2.2/31ea21a734bab9bbb0f32466d893aea51e4a3c64.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "http://npm.trustu.pre/kind-of/-/kind-of-4.0.0/20813df3d712928b207378691a45066fae72dd57.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } + "node_modules/sigstore": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-3.1.0.tgz", + "integrity": "sha512-ZpzWAFHIFqyFE56dXqgX/DkDRZdz+rRcjoIk/RQU4IX0wiCv1l8S7ZrXDHcCc+uaf+6o7w3h2l3g6GYG5TKN9Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^3.1.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.4.0", + "@sigstore/sign": "^3.1.0", + "@sigstore/tuf": "^3.1.0", + "@sigstore/verify": "^2.1.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "randombytes": { - "version": "2.0.5", - "resolved": "http://npm.trustu.pre/randombytes/-/randombytes-2.0.5/dc009a246b8d09a177b4b7a0ae77bc570f4b1b79.tgz", - "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, - "requires": { - "safe-buffer": "5.1.1" + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "randomfill": { - "version": "1.0.3", - "resolved": "http://npm.trustu.pre/randomfill/-/randomfill-1.0.3/b96b7df587f01dd91726c418f30553b1418e3d62.tgz", - "integrity": "sha512-YL6GrhrWoic0Eq8rXVbMptH7dAxCs0J+mh5Y0euNekPPYaxEmdVGim6GdoxoRzKW2yJoU8tueifS7mYxvcFDEQ==", + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, - "requires": { - "randombytes": "2.0.5", - "safe-buffer": "5.1.1" + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "range-parser": { - "version": "1.2.0", - "resolved": "http://npm.trustu.pre/range-parser/-/range-parser-1.2.0/f49be6b487894ddc40dcc94a322f611092e00d5e.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", - "dev": true - }, - "raw-body": { - "version": "2.3.2", - "resolved": "http://npm.trustu.pre/raw-body/-/raw-body-2.3.2/bcd60c77d3eb93cde0050295c3f379389bc88f89.tgz", - "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true, - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", - "unpipe": "1.0.0" + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" } }, - "raw-loader": { - "version": "0.5.1", - "resolved": "http://npm.trustu.pre/raw-loader/-/raw-loader-0.5.1/0c3d0beaed8a01c966d9787bf778281252a979aa.tgz", - "integrity": "sha1-DD0L6u2KAclm2Xh793goElKpeao=", - "dev": true - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "http://npm.trustu.pre/read-pkg/-/read-pkg-1.1.0/f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "node_modules/socks": { + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", "dev": true, - "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" + "license": "MIT", + "dependencies": { + "ip-address": "^10.0.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" } }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/read-pkg-up/-/read-pkg-up-1.0.1/9d63c13276c065918d57f002a57f40a1b643fb02.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", "dev": true, - "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" } }, - "readable-stream": { - "version": "2.3.3", - "resolved": "http://npm.trustu.pre/readable-stream/-/readable-stream-2.3.3/368f2512d79f9d46fdfc71349ae7878bbc1eb95c.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" } }, - "readdirp": { - "version": "2.1.0", - "resolved": "http://npm.trustu.pre/readdirp/-/readdirp-2.1.0/4ed0ad060df3073300c48440373f72d1cc642d78.tgz", - "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "readable-stream": "2.3.3", - "set-immediate-shim": "1.0.1" + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" } }, - "redent": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/redent/-/redent-1.0.0/cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, - "requires": { - "indent-string": "2.1.0", - "strip-indent": "1.0.1" + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "reduce-css-calc": { - "version": "1.3.0", - "resolved": "http://npm.trustu.pre/reduce-css-calc/-/reduce-css-calc-1.3.0/747c914e049614a4c9cfbba629871ad1d2927716.tgz", - "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "requires": { - "balanced-match": "0.4.2", - "math-expression-evaluator": "1.2.17", - "reduce-function-call": "1.0.2" - }, - "dependencies": { - "balanced-match": { - "version": "0.4.2", - "resolved": "http://npm.trustu.pre/balanced-match/-/balanced-match-0.4.2/cb3f3e3c732dc0f01ee70b403f302e61d7709838.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", - "dev": true - } + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" } }, - "reduce-function-call": { - "version": "1.0.2", - "resolved": "http://npm.trustu.pre/reduce-function-call/-/reduce-function-call-1.0.2/5a200bf92e0e37751752fe45b0ab330fd4b6be99.tgz", - "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, - "requires": { - "balanced-match": "0.4.2" - }, + "license": "Apache-2.0", "dependencies": { - "balanced-match": { - "version": "0.4.2", - "resolved": "http://npm.trustu.pre/balanced-match/-/balanced-match-0.4.2/cb3f3e3c732dc0f01ee70b403f302e61d7709838.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", - "dev": true - } + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "reflect-metadata": { - "version": "0.1.10", - "resolved": "http://npm.trustu.pre/reflect-metadata/-/reflect-metadata-0.1.10/b4f83704416acad89988c9b15635d47e03b9344a.tgz", - "integrity": "sha1-tPg3BEFqytiZiMmxVjXUfgO5NEo=", - "dev": true + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true, + "license": "CC-BY-3.0" }, - "regenerate": { - "version": "1.3.3", - "resolved": "http://npm.trustu.pre/regenerate/-/regenerate-1.3.3/0c336d3980553d755c39b586ae3b20aa49c82b7f.tgz", - "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==", - "dev": true + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } }, - "regenerator-runtime": { - "version": "0.11.0", - "resolved": "http://npm.trustu.pre/regenerator-runtime/-/regenerator-runtime-0.11.0/7e54fe5b5ccd5d6624ea6255c3473be090b802e1.tgz", - "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", - "dev": true + "node_modules/spdx-license-ids": { + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", + "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", + "dev": true, + "license": "CC0-1.0" }, - "regex-cache": { - "version": "0.4.4", - "resolved": "http://npm.trustu.pre/regex-cache/-/regex-cache-0.4.4/75bdc58a2a1496cec48a12835bc54c8d562336dd.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "node_modules/speedline-core": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/speedline-core/-/speedline-core-1.4.3.tgz", + "integrity": "sha512-DI7/OuAUD+GMpR6dmu8lliO2Wg5zfeh+/xsdyJZCzd8o5JgFUjCeLsBDuZjIQJdwXS3J0L/uZYrELKYqx+PXog==", "dev": true, - "requires": { - "is-equal-shallow": "0.1.3" + "license": "MIT", + "dependencies": { + "@types/node": "*", + "image-ssim": "^0.2.0", + "jpeg-js": "^0.4.1" + }, + "engines": { + "node": ">=8.0" } }, - "regexpu-core": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/regexpu-core/-/regexpu-core-1.0.0/86a763f58ee4d7c2f6b102e4764050de7ed90c6b.tgz", - "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", "dev": true, - "requires": { - "regenerate": "1.3.3", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" + "license": "ISC", + "engines": { + "node": ">= 10.x" } }, - "regjsgen": { - "version": "0.2.0", - "resolved": "http://npm.trustu.pre/regjsgen/-/regjsgen-0.2.0/6c016adeac554f75823fe37ac05b92d5a4edb1f7.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", - "dev": true - }, - "regjsparser": { - "version": "0.1.5", - "resolved": "http://npm.trustu.pre/regjsparser/-/regjsparser-0.1.5/7ee8f84dc6fa792d3fd0ae228d24bd949ead205c.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "node_modules/ssri": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-12.0.0.tgz", + "integrity": "sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==", "dev": true, - "requires": { - "jsesc": "0.5.0" + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "relateurl": { - "version": "0.2.7", - "resolved": "http://npm.trustu.pre/relateurl/-/relateurl-0.2.7/54dbf377e51440aca90a4cd274600d3ff2d888a9.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", - "dev": true + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" }, - "remap-istanbul": { - "version": "0.9.5", - "resolved": "http://npm.trustu.pre/remap-istanbul/-/remap-istanbul-0.9.5/a18617b1f31eec5a7dbee77538298b775606aaa8.tgz", - "integrity": "sha1-oYYXsfMe7Fp9vud1OCmLd1YGqqg=", - "dev": true, - "requires": { - "amdefine": "1.0.1", - "gulp-util": "3.0.7", - "istanbul": "0.4.5", - "minimatch": "3.0.4", - "source-map": "0.5.7", - "through2": "2.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.0.6", - "resolved": "http://npm.trustu.pre/readable-stream/-/readable-stream-2.0.6/8f90341e68a53ccc928788dacfcd11b36eb9b78e.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "http://npm.trustu.pre/string_decoder/-/string_decoder-0.10.31/62e203bc41766c6c28c9fc84301dab1c5310fa94.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "through2": { - "version": "2.0.1", - "resolved": "http://npm.trustu.pre/through2/-/through2-2.0.1/384e75314d49f32de12eebb8136b8eb6b5d59da9.tgz", - "integrity": "sha1-OE51MU1J8y3hLuu4E2uOtrXVnak=", - "dev": true, - "requires": { - "readable-stream": "2.0.6", - "xtend": "4.0.1" - } - } + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" } }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "http://npm.trustu.pre/remove-trailing-separator/-/remove-trailing-separator-1.1.0/c24bce2a283adad5bc3f58e0d48249b92379d8ef.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true + "node_modules/std-env": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "dev": true, + "license": "MIT" }, - "renderkid": { - "version": "2.0.1", - "resolved": "http://npm.trustu.pre/renderkid/-/renderkid-2.0.1/898cabfc8bede4b7b91135a3ffd323e58c0db319.tgz", - "integrity": "sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=", - "dev": true, - "requires": { - "css-select": "1.2.0", - "dom-converter": "0.1.4", - "htmlparser2": "3.3.0", - "strip-ansi": "3.0.1", - "utila": "0.3.3" - }, - "dependencies": { - "utila": { - "version": "0.3.3", - "resolved": "http://npm.trustu.pre/utila/-/utila-0.3.3/d7e8e7d7e309107092b05f8d9688824d633a4226.tgz", - "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", - "dev": true - } + "node_modules/stdin-discarder": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", + "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "repeat-element": { - "version": "1.1.2", - "resolved": "http://npm.trustu.pre/repeat-element/-/repeat-element-1.1.2/ef089a178d1483baae4d93eb98b4f9e4e11d990a.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "http://npm.trustu.pre/repeat-string/-/repeat-string-1.6.1/8dcae470e1c88abc2d600fff4a776286da75e637.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true + "node_modules/streamx": { + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz", + "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "events-universal": "^1.0.0", + "fast-fifo": "^1.3.2", + "text-decoder": "^1.1.0" + } }, - "repeating": { - "version": "2.0.1", - "resolved": "http://npm.trustu.pre/repeating/-/repeating-2.0.1/5214c53a926d3552707527fbab415dbc08d06dda.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", "dev": true, - "requires": { - "is-finite": "1.0.2" + "license": "MIT", + "engines": { + "node": ">=0.6.19" } }, - "replace-ext": { - "version": "0.0.1", - "resolved": "http://npm.trustu.pre/replace-ext/-/replace-ext-0.0.1/29bbd92078a739f0bcce2b4ee41e837953522924.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", - "dev": true + "node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "request": { - "version": "2.81.0", - "resolved": "http://npm.trustu.pre/request/-/request-2.81.0/c6928946a0e06c5f8d6f8a9333469ffda46298a0.tgz", - "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", - "dev": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.1.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.6.0", - "uuid": "3.1.0" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "http://npm.trustu.pre/require-directory/-/require-directory-2.1.1/8c64ad5fd30dab1c976e2344ffe7f792a6a6df42.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } }, - "require-from-string": { - "version": "1.2.1", - "resolved": "http://npm.trustu.pre/require-from-string/-/require-from-string-1.2.1/529c9ccef27380adfec9a2f965b649bbee636418.tgz", - "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", - "dev": true + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/require-main-filename/-/require-main-filename-1.0.1/97f717b69d48784f5f526a6c5aa8ffdda055a4d1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true + "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "requires-port": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/requires-port/-/requires-port-1.0.0/925d2601d39ac485e091cf0da5c6e694dc3dcaff.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } }, - "resolve": { - "version": "1.5.0", - "resolved": "http://npm.trustu.pre/resolve/-/resolve-1.5.0/1f09acce796c9a762579f31b2c1cc4c3cddf9f36.tgz", - "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", - "dev": true, - "requires": { - "path-parse": "1.0.5" + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/resolve-cwd/-/resolve-cwd-2.0.0/00a9f7387556e27038eae232caa372a6a59b665a.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "requires": { - "resolve-from": "3.0.0" + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "resolve-from": { - "version": "3.0.0", - "resolved": "http://npm.trustu.pre/resolve-from/-/resolve-from-3.0.0/b22c7af7d9d6881bc8b6e653335eebcb0a188748.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - }, - "right-align": { - "version": "0.1.3", - "resolved": "http://npm.trustu.pre/right-align/-/right-align-0.1.3/61339b722fe6a3515689210d24e14c96148613ef.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "requires": { - "align-text": "0.1.4" + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "rimraf": { - "version": "2.6.2", - "resolved": "http://npm.trustu.pre/rimraf/-/rimraf-2.6.2/2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, - "requires": { - "glob": "7.1.2" + "license": "MIT", + "engines": { + "node": ">=6" } }, - "ripemd160": { - "version": "2.0.1", - "resolved": "http://npm.trustu.pre/ripemd160/-/ripemd160-2.0.1/0f4584295c53a3628af7e6d79aca21ce57d1c6e7.tgz", - "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "node_modules/strip-indent": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.1.1.tgz", + "integrity": "sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==", "dev": true, - "requires": { - "hash-base": "2.0.2", - "inherits": "2.0.3" + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "run-queue": { - "version": "1.0.3", - "resolved": "http://npm.trustu.pre/run-queue/-/run-queue-1.0.3/e848396f057d223f24386924618e25694161ec47.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, - "requires": { - "aproba": "1.2.0" + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "rxjs": { - "version": "5.5.5", - "resolved": "http://npm.trustu.pre/rxjs/-/rxjs-5.5.5/e164f11d38eaf29f56f08c3447f74ff02dd84e97.tgz", - "integrity": "sha512-D/MfQnPMBk8P8gfwGxvCkuaWBcG58W7dUMT//URPoYzIbDEKT0GezdirkK5whMgKFBATfCoTpxO8bJQGJ04W5A==", - "requires": { - "symbol-observable": "1.0.1" + "node_modules/stubborn-fs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stubborn-fs/-/stubborn-fs-2.0.0.tgz", + "integrity": "sha512-Y0AvSwDw8y+nlSNFXMm2g6L51rBGdAQT20J3YSOqxC53Lo3bjWRtr2BKcfYoAf352WYpsZSTURrA0tqhfgudPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "stubborn-utils": "^1.0.1" } }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "http://npm.trustu.pre/safe-buffer/-/safe-buffer-5.1.1/893312af69b2123def71f57889001671eeb2c853.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true + "node_modules/stubborn-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stubborn-utils/-/stubborn-utils-1.0.2.tgz", + "integrity": "sha512-zOh9jPYI+xrNOyisSelgym4tolKTJCQd5GBhK0+0xJvcYDcwlOoxF/rnFKQ2KRZknXSG9jWAp66fwP6AxN9STg==", + "dev": true, + "license": "MIT" }, - "sass-graph": { - "version": "2.2.4", - "resolved": "http://npm.trustu.pre/sass-graph/-/sass-graph-2.2.4/13fbd63cd1caf0908b9fd93476ad43a51d1e0b49.tgz", - "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", + "node_modules/stylelint": { + "version": "16.25.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.25.0.tgz", + "integrity": "sha512-Li0avYWV4nfv1zPbdnxLYBGq4z8DVZxbRgx4Kn6V+Uftz1rMoF1qiEI3oL4kgWqyYgCgs7gT5maHNZ82Gk03vQ==", "dev": true, - "optional": true, - "requires": { - "glob": "7.1.2", - "lodash": "4.17.4", - "scss-tokenizer": "0.2.3", - "yargs": "7.1.0" - } - }, - "sass-loader": { - "version": "6.0.6", - "resolved": "http://npm.trustu.pre/sass-loader/-/sass-loader-6.0.6/e9d5e6c1f155faa32a4b26d7a9b7107c225e40f9.tgz", - "integrity": "sha512-c3/Zc+iW+qqDip6kXPYLEgsAu2lf4xz0EZDplB7EmSUMda12U1sGJPetH55B/j9eu0bTtKzKlNPWWyYC7wFNyQ==", - "dev": true, - "requires": { - "async": "2.6.0", - "clone-deep": "0.3.0", - "loader-utils": "1.1.0", - "lodash.tail": "4.1.1", - "pify": "3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "http://npm.trustu.pre/pify/-/pify-3.0.0/e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + }, + { + "type": "github", + "url": "https://github.com/sponsors/stylelint" } + ], + "license": "MIT", + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/media-query-list-parser": "^4.0.3", + "@csstools/selector-specificity": "^5.0.0", + "@dual-bundle/import-meta-resolve": "^4.2.1", + "balanced-match": "^2.0.0", + "colord": "^2.9.3", + "cosmiconfig": "^9.0.0", + "css-functions-list": "^3.2.3", + "css-tree": "^3.1.0", + "debug": "^4.4.3", + "fast-glob": "^3.3.3", + "fastest-levenshtein": "^1.0.16", + "file-entry-cache": "^10.1.4", + "global-modules": "^2.0.0", + "globby": "^11.1.0", + "globjoin": "^0.1.4", + "html-tags": "^3.3.1", + "ignore": "^7.0.5", + "imurmurhash": "^0.1.4", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.37.0", + "mathml-tag-names": "^2.1.3", + "meow": "^13.2.0", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.5.6", + "postcss-resolve-nested-selector": "^0.1.6", + "postcss-safe-parser": "^7.0.1", + "postcss-selector-parser": "^7.1.0", + "postcss-value-parser": "^4.2.0", + "resolve-from": "^5.0.0", + "string-width": "^4.2.3", + "supports-hyperlinks": "^3.2.0", + "svg-tags": "^1.0.0", + "table": "^6.9.0", + "write-file-atomic": "^5.0.1" + }, + "bin": { + "stylelint": "bin/stylelint.mjs" + }, + "engines": { + "node": ">=18.12.0" } }, - "saucelabs": { - "version": "1.3.0", - "resolved": "http://npm.trustu.pre/saucelabs/-/saucelabs-1.3.0/d240e8009df7fa87306ec4578a69ba3b5c424fee.tgz", - "integrity": "sha1-0kDoAJ33+ocwbsRXimm6O1xCT+4=", + "node_modules/stylelint-config-recess-order": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recess-order/-/stylelint-config-recess-order-7.4.0.tgz", + "integrity": "sha512-W3G517cBaMDYRX5Fzhro4fhRkkLafLgVSPfQnhxbiLyMnbLq47RMF/NRaOJ4OQsKWYhsIHOIc2Q3VL0X3Q7oPg==", "dev": true, - "requires": { - "https-proxy-agent": "1.0.0" + "license": "ISC", + "peerDependencies": { + "stylelint": ">=16.18", + "stylelint-order": ">=7" } }, - "sax": { - "version": "1.2.4", - "resolved": "http://npm.trustu.pre/sax/-/sax-1.2.4/2816234e2378bddc4e5354fab5caa895df7100d9.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "schema-utils": { - "version": "0.3.0", - "resolved": "http://npm.trustu.pre/schema-utils/-/schema-utils-0.3.0/f5877222ce3e931edae039f17eb3716e7137f8cf.tgz", - "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", + "node_modules/stylelint-config-recommended": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-17.0.0.tgz", + "integrity": "sha512-WaMSdEiPfZTSFVoYmJbxorJfA610O0tlYuU2aEwY33UQhSPgFbClrVJYWvy3jGJx+XW37O+LyNLiZOEXhKhJmA==", "dev": true, - "requires": { - "ajv": "5.5.1" + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + }, + { + "type": "github", + "url": "https://github.com/sponsors/stylelint" + } + ], + "license": "MIT", + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "stylelint": "^16.23.0" } }, - "scss-tokenizer": { - "version": "0.2.3", - "resolved": "http://npm.trustu.pre/scss-tokenizer/-/scss-tokenizer-0.2.3/8eb06db9a9723333824d3f5530641149847ce5d1.tgz", - "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "node_modules/stylelint-config-recommended-scss": { + "version": "16.0.2", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-16.0.2.tgz", + "integrity": "sha512-aUTHhPPWCvFyWaxtckJlCPaXTDFsp4pKO8evXNCsW9OwsaUWyMd6jvcUhSmfGWPrTddvzNqK4rS/UuSLcbVGdQ==", "dev": true, - "optional": true, - "requires": { - "js-base64": "2.4.0", - "source-map": "0.4.4" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "http://npm.trustu.pre/source-map/-/source-map-0.4.4/eba4f5da9c0dc999de68032d8b4f76173652036b.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "optional": true, - "requires": { - "amdefine": "1.0.1" - } + "license": "MIT", + "dependencies": { + "postcss-scss": "^4.0.9", + "stylelint-config-recommended": "^17.0.0", + "stylelint-scss": "^6.12.1" + }, + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "postcss": "^8.3.3", + "stylelint": "^16.24.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true } } }, - "select-hose": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/select-hose/-/select-hose-2.0.0/625d8658f865af43ec962bfc376a37359a4994ca.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", - "dev": true - }, - "selenium-webdriver": { - "version": "3.6.0", - "resolved": "http://npm.trustu.pre/selenium-webdriver/-/selenium-webdriver-3.6.0/2ba87a1662c020b8988c981ae62cb2a01298eafc.tgz", - "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==", - "dev": true, - "requires": { - "jszip": "3.1.5", - "rimraf": "2.6.2", - "tmp": "0.0.30", - "xml2js": "0.4.19" - }, - "dependencies": { - "tmp": { - "version": "0.0.30", - "resolved": "http://npm.trustu.pre/tmp/-/tmp-0.0.30/72419d4a8be7d6ce75148fd8b324e593a711c2ed.tgz", - "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2" - } + "node_modules/stylelint-config-standard": { + "version": "39.0.1", + "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-39.0.1.tgz", + "integrity": "sha512-b7Fja59EYHRNOTa3aXiuWnhUWXFU2Nfg6h61bLfAb5GS5fX3LMUD0U5t4S8N/4tpHQg3Acs2UVPR9jy2l1g/3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + }, + { + "type": "github", + "url": "https://github.com/sponsors/stylelint" } + ], + "license": "MIT", + "dependencies": { + "stylelint-config-recommended": "^17.0.0" + }, + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "stylelint": "^16.23.0" } }, - "selfsigned": { - "version": "1.10.1", - "resolved": "http://npm.trustu.pre/selfsigned/-/selfsigned-1.10.1/bf8cb7b83256c4551e31347c6311778db99eec52.tgz", - "integrity": "sha1-v4y3uDJWxFUeMTR8YxF3jbme7FI=", + "node_modules/stylelint-config-standard-scss": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-16.0.0.tgz", + "integrity": "sha512-/FHECLUu+med/e6OaPFpprG86ShC4SYT7Tzb2PTVdDjJsehhFBOioSlWqYFqJxmGPIwO3AMBxNo+kY3dxrbczA==", "dev": true, - "requires": { - "node-forge": "0.6.33" + "license": "MIT", + "dependencies": { + "stylelint-config-recommended-scss": "^16.0.1", + "stylelint-config-standard": "^39.0.0" + }, + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "postcss": "^8.3.3", + "stylelint": "^16.23.1" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + } } }, - "semver": { - "version": "5.4.1", - "resolved": "http://npm.trustu.pre/semver/-/semver-5.4.1/e059c09d8571f0540823733433505d3a2f00b18e.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", - "dev": true - }, - "semver-dsl": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/semver-dsl/-/semver-dsl-1.0.1/d3678de5555e8a61f629eed025366ae5f27340a0.tgz", - "integrity": "sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA=", + "node_modules/stylelint-order": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-7.0.0.tgz", + "integrity": "sha512-rSWxx0KscYfxU02wEskKXES9lkRzuuONMMNkZ7SUc6uiF3tDKm7e+sE0Ax/SBlG4TUf1sp1R6f3/SlsPGmzthg==", "dev": true, - "requires": { - "semver": "5.4.1" + "license": "MIT", + "dependencies": { + "postcss": "^8.5.3", + "postcss-sorting": "^9.1.0" + }, + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "stylelint": "^16.18.0" } }, - "send": { - "version": "0.16.1", - "resolved": "http://npm.trustu.pre/send/-/send-0.16.1/a70e1ca21d1382c11d0d9f6231deb281080d7ab3.tgz", - "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", + "node_modules/stylelint-scss": { + "version": "6.12.1", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.12.1.tgz", + "integrity": "sha512-UJUfBFIvXfly8WKIgmqfmkGKPilKB4L5j38JfsDd+OCg2GBdU0vGUV08Uw82tsRZzd4TbsUURVVNGeOhJVF7pA==", "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "1.1.1", - "destroy": "1.0.4", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "etag": "1.8.1", - "fresh": "0.5.2", - "http-errors": "1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.3.1" - }, - "dependencies": { - "mime": { - "version": "1.4.1", - "resolved": "http://npm.trustu.pre/mime/-/mime-1.4.1/121f9ebc49e3766f311a76e1fa1c8003c4b03aa6.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", - "dev": true - } + "license": "MIT", + "dependencies": { + "css-tree": "^3.0.1", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.36.0", + "mdn-data": "^2.21.0", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.6", + "postcss-selector-parser": "^7.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "stylelint": "^16.0.2" } }, - "serve-index": { - "version": "1.9.1", - "resolved": "http://npm.trustu.pre/serve-index/-/serve-index-1.9.1/d3768d69b1e7d82e5ce050fff5b453bea12a9239.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "node_modules/stylelint-scss/node_modules/known-css-properties": { + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.36.0.tgz", + "integrity": "sha512-A+9jP+IUmuQsNdsLdcg6Yt7voiMF/D4K83ew0OpJtpu+l34ef7LaohWV0Rc6KNvzw6ZDizkqfyB5JznZnzuKQA==", "dev": true, - "requires": { - "accepts": "1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "1.0.3", - "http-errors": "1.6.2", - "mime-types": "2.1.17", - "parseurl": "1.3.2" - } + "license": "MIT" }, - "serve-static": { - "version": "1.13.1", - "resolved": "http://npm.trustu.pre/serve-static/-/serve-static-1.13.1/4c57d53404a761d8f2e7c1e8a18a47dbf278a719.tgz", - "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", + "node_modules/stylelint-scss/node_modules/mdn-data": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.24.0.tgz", + "integrity": "sha512-i97fklrJl03tL1tdRVw0ZfLLvuDsdb6wxL+TrJ+PKkCbLrp2PCu2+OYdCKychIUm19nSM/35S6qz7pJpnXttoA==", "dev": true, - "requires": { - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "parseurl": "1.3.2", - "send": "0.16.1" - } + "license": "CC0-1.0" }, - "set-blocking": { + "node_modules/stylelint/node_modules/balanced-match": { "version": "2.0.0", - "resolved": "http://npm.trustu.pre/set-blocking/-/set-blocking-2.0.0/045f9782d011ae9a6803ddd382b24392b3d890f7.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/set-immediate-shim/-/set-immediate-shim-1.0.1/4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "dev": true - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "http://npm.trustu.pre/setimmediate/-/setimmediate-1.0.5/290cbb232e306942d7d7ea9b83732ab7856f8285.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "http://npm.trustu.pre/setprototypeof/-/setprototypeof-1.1.0/d0bd85536887b6fe7c0d818cb962d9d91c54e656.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", + "dev": true, + "license": "MIT" }, - "sha.js": { - "version": "2.4.9", - "resolved": "http://npm.trustu.pre/sha.js/-/sha.js-2.4.9/98f64880474b74f4a38b8da9d3c0f2d104633e7d.tgz", - "integrity": "sha512-G8zektVqbiPHrylgew9Zg1VRB1L/DtXNUVAM6q4QLy8NE3qtHlFXTf8VLL4k1Yl6c7NMjtZUTdXV+X44nFaT6A==", + "node_modules/stylelint/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } + "license": "MIT" }, - "shallow-clone": { - "version": "0.1.2", - "resolved": "http://npm.trustu.pre/shallow-clone/-/shallow-clone-0.1.2/5909e874ba77106d73ac414cfec1ffca87d97060.tgz", - "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=", + "node_modules/stylelint/node_modules/file-entry-cache": { + "version": "10.1.4", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.1.4.tgz", + "integrity": "sha512-5XRUFc0WTtUbjfGzEwXc42tiGxQHBmtbUG1h9L2apu4SulCGN3Hqm//9D6FAolf8MYNL7f/YlJl9vy08pj5JuA==", "dev": true, - "requires": { - "is-extendable": "0.1.1", - "kind-of": "2.0.1", - "lazy-cache": "0.2.7", - "mixin-object": "2.0.1" - }, + "license": "MIT", "dependencies": { - "kind-of": { - "version": "2.0.1", - "resolved": "http://npm.trustu.pre/kind-of/-/kind-of-2.0.1/018ec7a4ce7e3a86cb9141be519d24c8faa981b5.tgz", - "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } + "flat-cache": "^6.1.13" } }, - "shebang-command": { - "version": "1.2.0", - "resolved": "http://npm.trustu.pre/shebang-command/-/shebang-command-1.2.0/44aac65b695b03398968c39f363fee5deafdf1ea.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "node_modules/stylelint/node_modules/flat-cache": { + "version": "6.1.18", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.18.tgz", + "integrity": "sha512-JUPnFgHMuAVmLmoH9/zoZ6RHOt5n9NlUw/sDXsTbROJ2SFoS2DS4s+swAV6UTeTbGH/CAsZIE6M8TaG/3jVxgQ==", "dev": true, - "requires": { - "shebang-regex": "1.0.0" + "license": "MIT", + "dependencies": { + "cacheable": "^2.1.0", + "flatted": "^3.3.3", + "hookified": "^1.12.0" } }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/shebang-regex/-/shebang-regex-1.0.0/da42f49740c0b42db2ca9728571cb190c98efea3.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "http://npm.trustu.pre/signal-exit/-/signal-exit-3.0.2/b5fdc08f1287ea1178628e415e25132b73646c6d.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "silent-error": { - "version": "1.1.0", - "resolved": "http://npm.trustu.pre/silent-error/-/silent-error-1.1.0/2209706f1c850a9f1d10d0d840918b46f26e1bc9.tgz", - "integrity": "sha1-IglwbxyFCp8dENDYQJGLRvJuG8k=", + "node_modules/stylelint/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, - "requires": { - "debug": "2.6.9" + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "sntp": { - "version": "1.0.9", - "resolved": "http://npm.trustu.pre/sntp/-/sntp-1.0.9/6541184cc90aeea6c6e7b35e2659082443c66198.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "node_modules/stylelint/node_modules/globby/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, - "requires": { - "hoek": "2.16.3" + "license": "MIT", + "engines": { + "node": ">= 4" } }, - "socket.io": { - "version": "1.7.3", - "resolved": "http://npm.trustu.pre/socket.io/-/socket.io-1.7.3/b8af9caba00949e568e369f1327ea9be9ea2461b.tgz", - "integrity": "sha1-uK+cq6AJSeVo42nxMn6pvp6iRhs=", - "dev": true, - "requires": { - "debug": "2.3.3", - "engine.io": "1.8.3", - "has-binary": "0.1.7", - "object-assign": "4.1.0", - "socket.io-adapter": "0.5.0", - "socket.io-client": "1.7.3", - "socket.io-parser": "2.3.1" - }, - "dependencies": { - "debug": { - "version": "2.3.3", - "resolved": "http://npm.trustu.pre/debug/-/debug-2.3.3/40c453e67e6e13c901ddec317af8986cda9eff8c.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "http://npm.trustu.pre/ms/-/ms-0.7.2/ae25cf2512b3885a1d95d7f037868d8431124765.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - }, - "object-assign": { - "version": "4.1.0", - "resolved": "http://npm.trustu.pre/object-assign/-/object-assign-4.1.0/7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0.tgz", - "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", - "dev": true - } + "node_modules/stylelint/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, - "socket.io-adapter": { - "version": "0.5.0", - "resolved": "http://npm.trustu.pre/socket.io-adapter/-/socket.io-adapter-0.5.0/cb6d4bb8bec81e1078b99677f9ced0046066bb8b.tgz", - "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", + "node_modules/stylelint/node_modules/meow": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", "dev": true, - "requires": { - "debug": "2.3.3", - "socket.io-parser": "2.3.1" + "license": "MIT", + "engines": { + "node": ">=18" }, - "dependencies": { - "debug": { - "version": "2.3.3", - "resolved": "http://npm.trustu.pre/debug/-/debug-2.3.3/40c453e67e6e13c901ddec317af8986cda9eff8c.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "http://npm.trustu.pre/ms/-/ms-0.7.2/ae25cf2512b3885a1d95d7f037868d8431124765.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "socket.io-client": { - "version": "1.7.3", - "resolved": "http://npm.trustu.pre/socket.io-client/-/socket.io-client-1.7.3/b30e86aa10d5ef3546601c09cde4765e381da377.tgz", - "integrity": "sha1-sw6GqhDV7zVGYBwJzeR2Xjgdo3c=", - "dev": true, - "requires": { - "backo2": "1.0.2", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "2.3.3", - "engine.io-client": "1.8.3", - "has-binary": "0.1.7", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseuri": "0.0.5", - "socket.io-parser": "2.3.1", - "to-array": "0.1.4" - }, - "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "http://npm.trustu.pre/component-emitter/-/component-emitter-1.2.1/137918d6d78283f7df7a6b7c5a63e140e69425e6.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "debug": { - "version": "2.3.3", - "resolved": "http://npm.trustu.pre/debug/-/debug-2.3.3/40c453e67e6e13c901ddec317af8986cda9eff8c.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "http://npm.trustu.pre/ms/-/ms-0.7.2/ae25cf2512b3885a1d95d7f037868d8431124765.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - } + "node_modules/stylelint/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, - "socket.io-parser": { - "version": "2.3.1", - "resolved": "http://npm.trustu.pre/socket.io-parser/-/socket.io-parser-2.3.1/dd532025103ce429697326befd64005fcfe5b4a0.tgz", - "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", - "dev": true, - "requires": { - "component-emitter": "1.1.2", - "debug": "2.2.0", - "isarray": "0.0.1", - "json3": "3.3.2" - }, - "dependencies": { - "debug": { - "version": "2.2.0", - "resolved": "http://npm.trustu.pre/debug/-/debug-2.2.0/f87057e995b1a1f6ae6a4960664137bc56f039da.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true, - "requires": { - "ms": "0.7.1" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "http://npm.trustu.pre/isarray/-/isarray-0.0.1/8a18acfca9a8f4177e09abfc6038939b05d1eedf.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "ms": { - "version": "0.7.1", - "resolved": "http://npm.trustu.pre/ms/-/ms-0.7.1/9cd13c03adbff25b65effde7ce864ee952017098.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", - "dev": true - } + "node_modules/stylelint/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, - "sockjs": { - "version": "0.3.18", - "resolved": "http://npm.trustu.pre/sockjs/-/sockjs-0.3.18/d9b289316ca7df77595ef299e075f0f937eb4207.tgz", - "integrity": "sha1-2bKJMWyn33dZXvKZ4HXw+TfrQgc=", + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "requires": { - "faye-websocket": "0.10.0", - "uuid": "2.0.3" - }, + "license": "MIT", "dependencies": { - "uuid": { - "version": "2.0.3", - "resolved": "http://npm.trustu.pre/uuid/-/uuid-2.0.3/67e2e863797215530dff318e5bf9dcebfd47b21a.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", - "dev": true - } + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "sockjs-client": { - "version": "1.1.4", - "resolved": "http://npm.trustu.pre/sockjs-client/-/sockjs-client-1.1.4/5babe386b775e4cf14e7520911452654016c8b12.tgz", - "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=", + "node_modules/supports-hyperlinks": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz", + "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==", "dev": true, - "requires": { - "debug": "2.6.9", - "eventsource": "0.1.6", - "faye-websocket": "0.11.1", - "inherits": "2.0.3", - "json3": "3.3.2", - "url-parse": "1.2.0" - }, - "dependencies": { - "faye-websocket": { - "version": "0.11.1", - "resolved": "http://npm.trustu.pre/faye-websocket/-/faye-websocket-0.11.1/f0efe18c4f56e4f40afc7e06c719fd5ee6188f38.tgz", - "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", - "dev": true, - "requires": { - "websocket-driver": "0.7.0" - } - } + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=14.18" + }, + "funding": { + "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1" } }, - "sort-keys": { - "version": "1.1.2", - "resolved": "http://npm.trustu.pre/sort-keys/-/sort-keys-1.1.2/441b6d4d346798f1b4e49e8920adfba0e543f9ad.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, - "requires": { - "is-plain-obj": "1.1.0" + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "source-list-map": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/source-list-map/-/source-list-map-2.0.0/aaa47403f7b245a92fbc97ea08f250d6087ed085.tgz", - "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==", + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", "dev": true }, - "source-map": { - "version": "0.5.7", - "resolved": "http://npm.trustu.pre/source-map/-/source-map-0.5.7/8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "license": "MIT" }, - "source-map-explorer": { - "version": "1.5.0", - "resolved": "http://npm.trustu.pre/source-map-explorer/-/source-map-explorer-1.5.0/654e2ba0db158fecfc99b9cefdf891b755b767d1.tgz", - "integrity": "sha512-skfca9IJvJKsI+J3sWFQ+hCqUDmZxhGgM20/L7PpNGRnQSVyXPYi7U0TDw0eNj5Yhtsm//psmNkxQmHuEJJ6FA==", + "node_modules/synckit": { + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz", + "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==", "dev": true, - "requires": { - "btoa": "1.1.2", - "convert-source-map": "1.5.1", - "docopt": "0.6.2", - "glob": "7.1.2", - "open": "0.0.5", - "source-map": "0.5.7", - "temp": "0.8.3", - "underscore": "1.8.3" + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.2.9" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/synckit" } }, - "source-map-loader": { - "version": "0.2.3", - "resolved": "http://npm.trustu.pre/source-map-loader/-/source-map-loader-0.2.3/d4b0c8cd47d54edce3e6bfa0f523f452b5b0e521.tgz", - "integrity": "sha512-MYbFX9DYxmTQFfy2v8FC1XZwpwHKYxg3SK8Wb7VPBKuhDjz8gi9re2819MsG4p49HDyiOSUKlmZ+nQBArW5CGw==", - "dev": true, - "requires": { - "async": "2.6.0", - "loader-utils": "0.2.17", - "source-map": "0.6.1" - }, - "dependencies": { - "loader-utils": { - "version": "0.2.17", - "resolved": "http://npm.trustu.pre/loader-utils/-/loader-utils-0.2.17/f86e6374d43205a6e6c60e9196f17c0299bfb348.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", - "dev": true, - "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1", - "object-assign": "4.1.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "http://npm.trustu.pre/source-map/-/source-map-0.6.1/74722af32e9614e9c287a8d0bbde48b5e2f1a263.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "node_modules/table": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", + "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" } }, - "source-map-support": { - "version": "0.4.18", - "resolved": "http://npm.trustu.pre/source-map-support/-/source-map-support-0.4.18/0286a6de8be42641338594e97ccea75f0a2c585f.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "node_modules/table/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "requires": { - "source-map": "0.5.7" + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "sparkles": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/sparkles/-/sparkles-1.0.0/1acbbfb592436d10bbe8f785b7cc6f82815012c3.tgz", - "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=", - "dev": true + "node_modules/table/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" }, - "spdx-correct": { - "version": "1.0.2", - "resolved": "http://npm.trustu.pre/spdx-correct/-/spdx-correct-1.0.2/4b3073d933ff51f3912f03ac5519498a4150db40.tgz", - "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "node_modules/table/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "requires": { - "spdx-license-ids": "1.2.2" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "spdx-expression-parse": { - "version": "1.0.4", - "resolved": "http://npm.trustu.pre/spdx-expression-parse/-/spdx-expression-parse-1.0.4/9bdf2f20e1f40ed447fbe273266191fced51626c.tgz", - "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", - "dev": true + "node_modules/table/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } }, - "spdx-license-ids": { - "version": "1.2.2", - "resolved": "http://npm.trustu.pre/spdx-license-ids/-/spdx-license-ids-1.2.2/c9df7a3424594ade6bd11900d596696dc06bac57.tgz", - "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", - "dev": true + "node_modules/table/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } }, - "spdy": { - "version": "3.4.7", - "resolved": "http://npm.trustu.pre/spdy/-/spdy-3.4.7/42ff41ece5cc0f99a3a6c28aabb73f5c3b03acbc.tgz", - "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, - "requires": { - "debug": "2.6.9", - "handle-thing": "1.2.5", - "http-deceiver": "1.2.7", - "safe-buffer": "5.1.1", - "select-hose": "2.0.0", - "spdy-transport": "2.0.20" + "license": "MIT", + "engines": { + "node": ">=6" } }, - "spdy-transport": { - "version": "2.0.20", - "resolved": "http://npm.trustu.pre/spdy-transport/-/spdy-transport-2.0.20/735e72054c486b2354fe89e702256004a39ace4d.tgz", - "integrity": "sha1-c15yBUxIayNU/onnAiVgBKOazk0=", + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dev": true, - "requires": { - "debug": "2.6.9", - "detect-node": "2.0.3", - "hpack.js": "2.1.6", - "obuf": "1.1.1", - "readable-stream": "2.3.3", - "safe-buffer": "5.1.1", - "wbuf": "1.7.2" + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "split": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/split/-/split-1.0.1/605bd9be303aa59fb35f9229fbea0ddec9ea07d9.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "node_modules/tar-fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.1.tgz", + "integrity": "sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==", "dev": true, - "requires": { - "through": "2.3.8" + "license": "MIT", + "dependencies": { + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^4.0.1", + "bare-path": "^3.0.0" } }, - "split2": { - "version": "2.2.0", - "resolved": "http://npm.trustu.pre/split2/-/split2-2.2.0/186b2575bcf83e85b7d18465756238ee4ee42493.tgz", - "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==", + "node_modules/tar-stream": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", "dev": true, - "requires": { - "through2": "2.0.3" + "license": "MIT", + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" } }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "http://npm.trustu.pre/sprintf-js/-/sprintf-js-1.0.3/04e6926f662895354f3dd015203633b857297e2c.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } }, - "sshpk": { - "version": "1.13.1", - "resolved": "http://npm.trustu.pre/sshpk/-/sshpk-1.13.1/512df6da6287144316dc4c18fe1cf1d940739be3.tgz", - "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", - "dev": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/assert-plus/-/assert-plus-1.0.0/f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "ssri": { + "node_modules/tar/node_modules/minipass": { "version": "5.0.0", - "resolved": "http://npm.trustu.pre/ssri/-/ssri-5.0.0/13c19390b606c821f2a10d02b351c1729b94d8cf.tgz", - "integrity": "sha512-728D4yoQcQm1ooZvSbywLkV1RjfITZXh0oWrhM/lnsx3nAHx7LsRGJWB/YyvoceAYRq98xqbstiN4JBv1/wNHg==", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true, - "requires": { - "safe-buffer": "5.1.1" + "license": "ISC", + "engines": { + "node": ">=8" } }, - "standard-version": { - "version": "4.2.0", - "resolved": "http://npm.trustu.pre/standard-version/-/standard-version-4.2.0/3017e8c5ced2a92db7501790255c3ba85157375d.tgz", - "integrity": "sha1-MBfoxc7SqS23UBeQJVw7qFFXN10=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "conventional-changelog": "1.1.7", - "conventional-recommended-bump": "1.0.3", - "figures": "1.7.0", - "fs-access": "1.0.1", - "semver": "5.4.1", - "yargs": "8.0.2" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "http://npm.trustu.pre/ansi-regex/-/ansi-regex-3.0.0/ed0317c322064f79466c02966bddb605ab37d998.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "http://npm.trustu.pre/ansi-styles/-/ansi-styles-2.2.1/b432dd3358b634cf75e1e4664368240533c1ddbe.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "camelcase": { - "version": "4.1.0", - "resolved": "http://npm.trustu.pre/camelcase/-/camelcase-4.1.0/d545635be1e33c542649c69173e5de6acfae34dd.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "http://npm.trustu.pre/chalk/-/chalk-1.1.3/a8115c55e4a702fe4d150abd3872822a7e09fc98.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "http://npm.trustu.pre/find-up/-/find-up-2.1.0/45d1b7e506c717ddd482775a2b77920a3c0c57a7.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "2.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0/a3b30a5c4f199183167aaab93beefae3ddfb654f.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/load-json-file/-/load-json-file-2.0.0/7947e42149af80d696cbf797bcaabcfe1fe29ca8.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" - } - }, - "os-locale": { - "version": "2.1.0", - "resolved": "http://npm.trustu.pre/os-locale/-/os-locale-2.1.0/42bc2900a6b5b8bd17376c8e882b65afccf24bf2.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", - "dev": true, - "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" - } - }, - "path-type": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/path-type/-/path-type-2.0.0/f012ccb8415b7096fc2daa1054c3d72389594c73.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "2.3.0" - } - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/read-pkg/-/read-pkg-2.0.0/8ef1c0623c6a6db0dc6713c4bfac46332b2368f8.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", - "path-type": "2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/read-pkg-up/-/read-pkg-up-2.0.0/6b72a8048984e0c41e79510fd5e9fa99b3b549be.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "http://npm.trustu.pre/string-width/-/string-width-2.1.1/ab93f27a8dc13d28cac815c462143a6d9012ae9e.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "4.0.0", - "resolved": "http://npm.trustu.pre/strip-ansi/-/strip-ansi-4.0.0/a8479022eb1ac368a871389b635262c505ee368f.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - } - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "http://npm.trustu.pre/strip-bom/-/strip-bom-3.0.0/2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/supports-color/-/supports-color-2.0.0/535d045ce6b6363fa40117084629995e9df324c7.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "which-module": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/which-module/-/which-module-2.0.0/d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "yargs": { - "version": "8.0.2", - "resolved": "http://npm.trustu.pre/yargs/-/yargs-8.0.2/6299a9055b1cefc969ff7e79c1d918dceb22c360.tgz", - "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", - "dev": true, - "requires": { - "camelcase": "4.1.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "read-pkg-up": "2.0.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "7.0.0" - } - }, - "yargs-parser": { - "version": "7.0.0", - "resolved": "http://npm.trustu.pre/yargs-parser/-/yargs-parser-7.0.0/8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9.tgz", - "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", - "dev": true, - "requires": { - "camelcase": "4.1.0" - } - } + "node_modules/tar/node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" } }, - "statuses": { - "version": "1.3.1", - "resolved": "http://npm.trustu.pre/statuses/-/statuses-1.3.1/faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", - "dev": true + "node_modules/tar/node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "stdout-stream": { - "version": "1.4.0", - "resolved": "http://npm.trustu.pre/stdout-stream/-/stdout-stream-1.4.0/a2c7c8587e54d9427ea9edb3ac3f2cd522df378b.tgz", - "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=", + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, - "optional": true, - "requires": { - "readable-stream": "2.3.3" + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" } }, - "stream-browserify": { - "version": "2.0.1", - "resolved": "http://npm.trustu.pre/stream-browserify/-/stream-browserify-2.0.1/66266ee5f9bdb9940a4e4514cafb43bb71e5c9db.tgz", - "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/text-decoder": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", + "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "b4a": "^1.6.4" + } + }, + "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", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/third-party-web": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/third-party-web/-/third-party-web-0.27.0.tgz", + "integrity": "sha512-h0JYX+dO2Zr3abCQpS6/uFjujaOjA1DyDzGQ41+oFn9VW/ARiq9g5ln7qEP9+BTzDpOMyIfsfj4OvfgXAsMUSA==", + "dev": true, + "license": "MIT" + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "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, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3" + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" } }, - "stream-each": { - "version": "1.2.2", - "resolved": "http://npm.trustu.pre/stream-each/-/stream-each-1.2.2/8e8c463f91da8991778765873fe4d960d8f616bd.tgz", - "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", + "node_modules/tinyrainbow": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.0.3.tgz", + "integrity": "sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==", "dev": true, - "requires": { - "end-of-stream": "1.4.0", - "stream-shift": "1.0.0" + "license": "MIT", + "engines": { + "node": ">=14.0.0" } }, - "stream-http": { - "version": "2.7.2", - "resolved": "http://npm.trustu.pre/stream-http/-/stream-http-2.7.2/40a050ec8dc3b53b33d9909415c02c0bf1abfbad.tgz", - "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", + "node_modules/tldts": { + "version": "7.0.17", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.17.tgz", + "integrity": "sha512-Y1KQBgDd/NUc+LfOtKS6mNsC9CCaH+m2P1RoIZy7RAPo3C3/t8X45+zgut31cRZtZ3xKPjfn3TkGTrctC2TQIQ==", "dev": true, - "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" + "license": "MIT", + "dependencies": { + "tldts-core": "^7.0.17" + }, + "bin": { + "tldts": "bin/cli.js" } }, - "stream-shift": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/stream-shift/-/stream-shift-1.0.0/d5c752825e5367e786f78e18e445ea223a155952.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", - "dev": true - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "http://npm.trustu.pre/strict-uri-encode/-/strict-uri-encode-1.1.0/279b225df1d582b1f54e65addd4352e18faa0713.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", - "dev": true + "node_modules/tldts-core": { + "version": "7.0.17", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.17.tgz", + "integrity": "sha512-DieYoGrP78PWKsrXr8MZwtQ7GLCUeLxihtjC1jZsW1DnvSMdKPitJSe8OSYDM2u5H6g3kWJZpePqkp43TfLh0g==", + "dev": true, + "license": "MIT" }, - "string-width": { - "version": "1.0.2", - "resolved": "http://npm.trustu.pre/string-width/-/string-width-1.0.2/118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "node_modules/tldts-icann": { + "version": "7.0.17", + "resolved": "https://registry.npmjs.org/tldts-icann/-/tldts-icann-7.0.17.tgz", + "integrity": "sha512-up4oFDoumyz2RscRxoYRxf+2OvIKUHjh7rUvuGWI0PZ/47k35sadoi2JyKR0AIfTw09qcfix8bUxXFQhY1QZIQ==", "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "license": "MIT", + "dependencies": { + "tldts-core": "^7.0.17" } }, - "string_decoder": { - "version": "1.0.3", - "resolved": "http://npm.trustu.pre/string_decoder/-/string_decoder-1.0.3/0fc67d7c141825de94282dd536bec6b9bce860ab.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "requires": { - "safe-buffer": "5.1.1" + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "stringstream": { - "version": "0.0.5", - "resolved": "http://npm.trustu.pre/stringstream/-/stringstream-0.0.5/4e484cd4de5a0bbbee18e46307710a8a81621878.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "http://npm.trustu.pre/strip-ansi/-/strip-ansi-3.0.1/6a385fb8853d952d5ff05d0e8aaf94278dc63dcf.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, - "requires": { - "ansi-regex": "2.1.1" + "license": "MIT", + "engines": { + "node": ">=0.6" } }, - "strip-bom": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/strip-bom/-/strip-bom-2.0.0/6219a85616520491f35788bdbf1447a99c7e6b0e.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "node_modules/tough-cookie": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.0.tgz", + "integrity": "sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==", "dev": true, - "requires": { - "is-utf8": "0.2.1" + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^7.0.5" + }, + "engines": { + "node": ">=16" } }, - "strip-eof": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/strip-eof/-/strip-eof-1.0.0/bb43ff5598a6eb05d89b59fcd129c983313606bf.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-indent": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/strip-indent/-/strip-indent-1.0.1/0c7962a6adefa7bbd4ac366460a638552ae1a0a2.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "node_modules/tr46": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-6.0.0.tgz", + "integrity": "sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==", "dev": true, - "requires": { - "get-stdin": "4.0.1" + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=20" } }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "http://npm.trustu.pre/strip-json-comments/-/strip-json-comments-2.0.1/3c531942e908c2697c0ec344858c286c7ca0a60a.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "style-loader": { - "version": "0.13.2", - "resolved": "http://npm.trustu.pre/style-loader/-/style-loader-0.13.2/74533384cf698c7104c7951150b49717adc2f3bb.tgz", - "integrity": "sha1-dFMzhM9pjHEEx5URULSXF63C87s=", + "node_modules/tr46/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, - "requires": { - "loader-utils": "1.1.0" + "license": "MIT", + "engines": { + "node": ">=6" } }, - "stylus": { - "version": "0.54.5", - "resolved": "http://npm.trustu.pre/stylus/-/stylus-0.54.5/42b9560931ca7090ce8515a798ba9e6aa3d6dc79.tgz", - "integrity": "sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk=", + "node_modules/ts-api-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", + "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", "dev": true, - "requires": { - "css-parse": "1.7.0", - "debug": "2.6.9", - "glob": "7.0.6", - "mkdirp": "0.5.1", - "sax": "0.5.8", - "source-map": "0.1.43" - }, - "dependencies": { - "glob": { - "version": "7.0.6", - "resolved": "http://npm.trustu.pre/glob/-/glob-7.0.6/211bafaf49e525b8cd93260d14ab136152b3f57a.tgz", - "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "sax": { - "version": "0.5.8", - "resolved": "http://npm.trustu.pre/sax/-/sax-0.5.8/d472db228eb331c2506b0e8c15524adb939d12c1.tgz", - "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=", - "dev": true - }, - "source-map": { - "version": "0.1.43", - "resolved": "http://npm.trustu.pre/source-map/-/source-map-0.1.43/c24bc146ca517c1471f5dacbe2571b2b7f9e3346.tgz", - "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" } }, - "stylus-loader": { - "version": "3.0.1", - "resolved": "http://npm.trustu.pre/stylus-loader/-/stylus-loader-3.0.1/77f4b34fd030d25b2617bcf5513db5b0730c4089.tgz", - "integrity": "sha1-d/SzT9Aw0lsmF7z1UT21sHMMQIk=", + "node_modules/ts-loader": { + "version": "9.5.4", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.4.tgz", + "integrity": "sha512-nCz0rEwunlTZiy6rXFByQU1kVVpCIgUpc/psFiKVrUwrizdnIbRFu8w7bxhUF0X613DYwT4XzrZHpVyMe758hQ==", "dev": true, - "requires": { - "loader-utils": "1.1.0", - "lodash.clonedeep": "4.5.0", - "when": "3.6.4" + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4", + "source-map": "^0.7.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" } }, - "supports-color": { - "version": "4.5.0", - "resolved": "http://npm.trustu.pre/supports-color/-/supports-color-4.5.0/be7a0de484dec5c5cddf8b3d59125044912f635b.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "node_modules/ts-loader/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "requires": { - "has-flag": "2.0.0" + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "svgo": { - "version": "0.7.2", - "resolved": "http://npm.trustu.pre/svgo/-/svgo-0.7.2/9f5772413952135c6fefbf40afe6a4faa88b4bb5.tgz", - "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", + "node_modules/ts-loader/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "requires": { - "coa": "1.0.4", - "colors": "1.1.2", - "csso": "2.3.2", - "js-yaml": "3.7.0", - "mkdirp": "0.5.1", - "sax": "1.2.4", - "whet.extend": "0.9.9" + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "symbol-observable": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/symbol-observable/-/symbol-observable-1.0.1/8340fc4702c3122df5d22288f88283f513d3fdd4.tgz", - "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=" - }, - "tapable": { - "version": "0.2.8", - "resolved": "http://npm.trustu.pre/tapable/-/tapable-0.2.8/99372a5c999bf2df160afc0d74bed4f47948cd22.tgz", - "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=", - "dev": true + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, - "tar": { - "version": "2.2.1", - "resolved": "http://npm.trustu.pre/tar/-/tar-2.2.1/8e4d2a256c0e2185c6b18ad694aec968b83cb1d1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "node_modules/tuf-js": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-3.1.0.tgz", + "integrity": "sha512-3T3T04WzowbwV2FDiGXBbr81t64g1MUGGJRgT4x5o97N+8ArdhVCAF9IxFrxuSJmM3E5Asn7nKHkao0ibcZXAg==", "dev": true, - "optional": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" + "license": "MIT", + "dependencies": { + "@tufjs/models": "3.0.1", + "debug": "^4.4.1", + "make-fetch-happen": "^14.0.3" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "temp": { - "version": "0.8.3", - "resolved": "http://npm.trustu.pre/temp/-/temp-0.8.3/e0c6bc4d26b903124410e4fed81103014dfc1f59.tgz", - "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=", + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "requires": { - "os-tmpdir": "1.0.2", - "rimraf": "2.2.8" - }, + "license": "MIT", "dependencies": { - "rimraf": { - "version": "2.2.8", - "resolved": "http://npm.trustu.pre/rimraf/-/rimraf-2.2.8/e439be2aaee327321952730f99a8929e4fc50582.tgz", - "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", - "dev": true - } + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" } }, - "text-extensions": { - "version": "1.7.0", - "resolved": "http://npm.trustu.pre/text-extensions/-/text-extensions-1.7.0/faaaba2625ed746d568a23e4d0aacd9bf08a8b39.tgz", - "integrity": "sha512-AKXZeDq230UaSzaO5s3qQUZOaC7iKbzq0jOFL614R7d9R593HLqAOL0cYoqLdkNrjBSOdmoQI06yigq1TSBXAg==", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "http://npm.trustu.pre/through/-/through-2.3.8/0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "2.0.3", - "resolved": "http://npm.trustu.pre/through2/-/through2-2.0.3/0004569b37c7c74ba39c43f3ced78d1ad94140be.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", "dev": true, - "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "thunky": { - "version": "0.1.0", - "resolved": "http://npm.trustu.pre/thunky/-/thunky-0.1.0/bf30146824e2b6e67b0f2d7a4ac8beb26908684e.tgz", - "integrity": "sha1-vzAUaCTituZ7Dy16Ssi+smkIaE4=", - "dev": true - }, - "time-stamp": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/time-stamp/-/time-stamp-2.0.0/95c6a44530e15ba8d6f4a3ecb8c3a3fac46da357.tgz", - "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=", - "dev": true + "node_modules/typed-query-selector": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.0.tgz", + "integrity": "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==", + "dev": true, + "license": "MIT" }, - "timers-browserify": { - "version": "2.0.4", - "resolved": "http://npm.trustu.pre/timers-browserify/-/timers-browserify-2.0.4/96ca53f4b794a5e7c0e1bd7cc88a372298fa01e6.tgz", - "integrity": "sha512-uZYhyU3EX8O7HQP+J9fTVYwsq90Vr68xPEFo7yrVImIxYvHgukBEgOB/SgGoorWVTzGM/3Z+wUNnboA4M8jWrg==", + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, - "requires": { - "setimmediate": "1.0.5" + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" } }, - "tmp": { - "version": "0.0.31", - "resolved": "http://npm.trustu.pre/tmp/-/tmp-0.0.31/8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7.tgz", - "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", + "node_modules/typescript-eslint": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.46.2.tgz", + "integrity": "sha512-vbw8bOmiuYNdzzV3lsiWv6sRwjyuKJMQqWulBOU7M0RrxedXledX8G8kBbQeiOYDnTfiXz0Y4081E1QMNB6iQg==", "dev": true, - "requires": { - "os-tmpdir": "1.0.2" + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.46.2", + "@typescript-eslint/parser": "8.46.2", + "@typescript-eslint/typescript-estree": "8.46.2", + "@typescript-eslint/utils": "8.46.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, - "to-array": { - "version": "0.1.4", - "resolved": "http://npm.trustu.pre/to-array/-/to-array-0.1.4/17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", - "dev": true - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/to-arraybuffer/-/to-arraybuffer-1.0.1/7d229b1fcc637e466ca081180836a7aabff83f43.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, - "to-fast-properties": { - "version": "1.0.3", - "resolved": "http://npm.trustu.pre/to-fast-properties/-/to-fast-properties-1.0.3/b83571fa4d8c25b82e231b06e3a3055de4ca1a47.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "dev": true, + "license": "MIT" }, - "toposort": { - "version": "1.0.6", - "resolved": "http://npm.trustu.pre/toposort/-/toposort-1.0.6/c31748e55d210effc00fdcdc7d6e68d7d7bb9cec.tgz", - "integrity": "sha1-wxdI5V0hDv/AD9zcfW5o19e7nOw=", - "dev": true + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "tough-cookie": { - "version": "2.3.3", - "resolved": "http://npm.trustu.pre/tough-cookie/-/tough-cookie-2.3.3/0b618a5565b6dea90bf3425d04d55edc475a7561.tgz", - "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", + "node_modules/unique-filename": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-4.0.0.tgz", + "integrity": "sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==", "dev": true, - "requires": { - "punycode": "1.4.1" + "license": "ISC", + "dependencies": { + "unique-slug": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "tree-kill": { - "version": "1.2.0", - "resolved": "http://npm.trustu.pre/tree-kill/-/tree-kill-1.2.0/5846786237b4239014f05db156b643212d4c6f36.tgz", - "integrity": "sha512-DlX6dR0lOIRDFxI0mjL9IYg6OTncLm/Zt+JiBhE5OlFcAR8yc9S7FFXU9so0oda47frdM/JFsk7UjNt9vscKcg==", - "dev": true + "node_modules/unique-slug": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-5.0.0.tgz", + "integrity": "sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } }, - "trim-newlines": { + "node_modules/unpipe": { "version": "1.0.0", - "resolved": "http://npm.trustu.pre/trim-newlines/-/trim-newlines-1.0.0/5887966bb582a4503a41eb524f7d35011815a613.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true - }, - "trim-off-newlines": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/trim-off-newlines/-/trim-off-newlines-1.0.1/9f9ba9d9efa8764c387698bcbfeb2c848f11adb3.tgz", - "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=", - "dev": true - }, - "trim-right": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/trim-right/-/trim-right-1.0.1/cb2e1203067e0c8de1f614094b9fe45704ea6003.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, - "true-case-path": { - "version": "1.0.2", - "resolved": "http://npm.trustu.pre/true-case-path/-/true-case-path-1.0.2/7ec91130924766c7f573be3020c34f8fdfd00d62.tgz", - "integrity": "sha1-fskRMJJHZsf1c74wIMNPj9/QDWI=", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true, - "optional": true, - "requires": { - "glob": "6.0.4" - }, - "dependencies": { - "glob": { - "version": "6.0.4", - "resolved": "http://npm.trustu.pre/glob/-/glob-6.0.4/0f08860f6a155127b2fadd4f9ce24b1aab6e4d22.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "dev": true, - "optional": true, - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", + "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "ts-helpers": { - "version": "1.1.2", - "resolved": "http://npm.trustu.pre/ts-helpers/-/ts-helpers-1.1.2/fc69be9f1f3baed01fb1a0ef8d4cfe748814d835.tgz", - "integrity": "sha1-/Gm+nx87rtAfsaDvjUz+dIgU2DU=", - "dev": true + "node_modules/update-check": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/update-check/-/update-check-1.5.4.tgz", + "integrity": "sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "registry-auth-token": "3.3.2", + "registry-url": "3.1.0" + } }, - "ts-node": { - "version": "3.3.0", - "resolved": "http://npm.trustu.pre/ts-node/-/ts-node-3.3.0/c13c6a3024e30be1180dd53038fc209289d4bf69.tgz", - "integrity": "sha1-wTxqMCTjC+EYDdUwOPwgkonUv2k=", - "dev": true, - "requires": { - "arrify": "1.0.1", - "chalk": "2.2.2", - "diff": "3.4.0", - "make-error": "1.3.0", - "minimist": "1.2.0", - "mkdirp": "0.5.1", - "source-map-support": "0.4.18", - "tsconfig": "6.0.0", - "v8flags": "3.0.1", - "yn": "2.0.0" - } - }, - "tsconfig": { - "version": "6.0.0", - "resolved": "http://npm.trustu.pre/tsconfig/-/tsconfig-6.0.0/6b0e8376003d7af1864f8df8f89dd0059ffcd032.tgz", - "integrity": "sha1-aw6DdgA9evGGT434+J3QBZ/80DI=", + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, - "requires": { - "strip-bom": "3.0.0", - "strip-json-comments": "2.0.1" - }, + "license": "BSD-2-Clause", "dependencies": { - "strip-bom": { - "version": "3.0.0", - "resolved": "http://npm.trustu.pre/strip-bom/-/strip-bom-3.0.0/2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } + "punycode": "^2.1.0" } }, - "tsickle": { - "version": "0.25.5", - "resolved": "http://npm.trustu.pre/tsickle/-/tsickle-0.25.5/2891d29f97c4aab1306e06378d8496d1765a4bfe.tgz", - "integrity": "sha512-CgOT/1WqOKtE1fyvqB+kTJ7bizE33xj1TyUIzGbxJBGCbQmknCrZbb35DtxMiK6pJo4CrPyoS8iGFddfHKtSNA==", + "node_modules/uri-js/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, - "requires": { - "minimist": "1.2.0", - "mkdirp": "0.5.1", - "source-map": "0.5.7", - "source-map-support": "0.4.18" + "license": "MIT", + "engines": { + "node": ">=6" } }, - "tslib": { - "version": "1.8.1", - "resolved": "http://npm.trustu.pre/tslib/-/tslib-1.8.1/6946af2d1d651a7b1863b531d6e5afa41aa44eac.tgz", - "integrity": "sha1-aUavLR1lGnsYY7Ux1uWvpBqkTqw=" - }, - "tslint": { - "version": "5.8.0", - "resolved": "http://npm.trustu.pre/tslint/-/tslint-5.8.0/1f49ad5b2e77c76c3af4ddcae552ae4e3612eb13.tgz", - "integrity": "sha1-H0mtWy53x2w69N3K5VKuTjYS6xM=", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "builtin-modules": "1.1.1", - "chalk": "2.2.2", - "commander": "2.12.2", - "diff": "3.4.0", - "glob": "7.1.2", - "minimatch": "3.0.4", - "resolve": "1.5.0", - "semver": "5.4.1", - "tslib": "1.8.1", - "tsutils": "2.13.0" - } - }, - "tsutils": { - "version": "2.13.0", - "resolved": "http://npm.trustu.pre/tsutils/-/tsutils-2.13.0/0f52b6aabbc4216e72796b66db028c6cf173e144.tgz", - "integrity": "sha512-FuWzNJbMsp3gcZMbI3b5DomhW4Ia41vMxjN63nKWI0t7f+I3UmHfRl0TrXJTwI2LUduDG+eR1Mksp3pvtlyCFQ==", - "dev": true, - "requires": { - "tslib": "1.8.1" - } - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "http://npm.trustu.pre/tty-browserify/-/tty-browserify-0.0.0/a157ba402da24e9bf957f9aa69d524eed42901a6.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "http://npm.trustu.pre/tunnel-agent/-/tunnel-agent-0.6.0/27a5dea06b36b04a0a9966774b290868f0fc40fd.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, - "requires": { - "safe-buffer": "5.1.1" + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "http://npm.trustu.pre/tweetnacl/-/tweetnacl-0.14.5/5ae68177f192d4456269d108afa93ff8743f4f64.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "node_modules/validate-npm-package-name": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-6.0.2.tgz", + "integrity": "sha512-IUoow1YUtvoBBC06dXs8bR8B9vuA3aJfmQNKMoaPG/OFsPmoQvw8xh+6Ye25Gx9DQhoEom3Pcu9MKHerm/NpUQ==", "dev": true, - "optional": true + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } }, - "type-check": { - "version": "0.3.2", - "resolved": "http://npm.trustu.pre/type-check/-/type-check-0.3.2/5884cab512cf1d355e3fb784f30804b2b520db72.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true, - "requires": { - "prelude-ls": "1.1.2" + "license": "MIT", + "engines": { + "node": ">= 0.8" } }, - "type-is": { - "version": "1.6.15", - "resolved": "http://npm.trustu.pre/type-is/-/type-is-1.6.15/cab10fb4909e441c82842eafe1ad646c81804410.tgz", - "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", + "node_modules/vite": { + "version": "7.1.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.11.tgz", + "integrity": "sha512-uzcxnSDVjAopEUjljkWh8EIrg6tlzrjFUfMcR1EVsRDGwf/ccef0qQPRyOrROwhrTDaApueq+ja+KLPlzR/zdg==", "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "2.1.17" + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } } }, - "typedarray": { - "version": "0.0.6", - "resolved": "http://npm.trustu.pre/typedarray/-/typedarray-0.0.6/867ac74e3864187b1d3d47d996a78ec5c8830777.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true + "node_modules/vite/node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } }, - "typescript": { - "version": "2.4.2", - "resolved": "http://npm.trustu.pre/typescript/-/typescript-2.4.2/f8395f85d459276067c988aa41837a8f82870844.tgz", - "integrity": "sha1-+DlfhdRZJ2BnyYiqQYN6j4KHCEQ=", - "dev": true + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, - "uglify-js": { - "version": "3.2.1", - "resolved": "http://npm.trustu.pre/uglify-js/-/uglify-js-3.2.1/d6427fd45a25fefc5d196689c0c772a6915e10fe.tgz", - "integrity": "sha512-BhZTJPmOKPSUcjnx2nlfaOQKHLyjjT4HFyzFWF1BUErx9knJNpdW94ql5o8qVxeNL+8IAWjEjnPvASH2yZnkMg==", + "node_modules/vite/node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "dev": true, - "requires": { - "commander": "2.12.2", - "source-map": "0.6.1" + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/vitest": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.4.tgz", + "integrity": "sha512-hV31h0/bGbtmDQc0KqaxsTO1v4ZQeF8ojDFuy4sZhFadwAqqvJA0LDw68QUocctI5EDpFMql/jVWKuPYHIf2Ew==", + "dev": true, + "license": "MIT", "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "http://npm.trustu.pre/source-map/-/source-map-0.6.1/74722af32e9614e9c287a8d0bbde48b5e2f1a263.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "@vitest/expect": "4.0.4", + "@vitest/mocker": "4.0.4", + "@vitest/pretty-format": "4.0.4", + "@vitest/runner": "4.0.4", + "@vitest/snapshot": "4.0.4", + "@vitest/spy": "4.0.4", + "@vitest/utils": "4.0.4", + "debug": "^4.4.3", + "es-module-lexer": "^1.7.0", + "expect-type": "^1.2.2", + "magic-string": "^0.30.19", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "std-env": "^3.9.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.0.3", + "vite": "^6.0.0 || ^7.0.0", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/debug": "^4.1.12", + "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", + "@vitest/browser-playwright": "4.0.4", + "@vitest/browser-preview": "4.0.4", + "@vitest/browser-webdriverio": "4.0.4", + "@vitest/ui": "4.0.4", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/debug": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser-playwright": { + "optional": true + }, + "@vitest/browser-preview": { + "optional": true + }, + "@vitest/browser-webdriverio": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true } } }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "http://npm.trustu.pre/uglify-to-browserify/-/uglify-to-browserify-1.0.2/6e0924d6bda6b5afe349e39a6d632850a0f882b7.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "node_modules/vitest/node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", "dev": true, - "optional": true + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } }, - "uglifyjs-webpack-plugin": { - "version": "1.1.2", - "resolved": "http://npm.trustu.pre/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.1.2/8a9abc238d01a33daaf86fa9a84c7ebc1e67b0f9.tgz", - "integrity": "sha512-k07cmJTj+8vZMSc3BaQ9uW7qVl2MqDts4ti4KaNACXEcXSw2vQM2S8olSk/CODxvcSFGvUHzNSqA8JQlhgUJPw==", - "dev": true, - "requires": { - "cacache": "10.0.1", - "find-cache-dir": "1.0.0", - "schema-utils": "0.3.0", - "source-map": "0.6.1", - "uglify-es": "3.2.1", - "webpack-sources": "1.1.0", - "worker-farm": "1.5.2" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "http://npm.trustu.pre/source-map/-/source-map-0.6.1/74722af32e9614e9c287a8d0bbde48b5e2f1a263.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "uglify-es": { - "version": "3.2.1", - "resolved": "http://npm.trustu.pre/uglify-es/-/uglify-es-3.2.1/93de0aad8a1bb629c8a316f686351bc4d6ece687.tgz", - "integrity": "sha512-c+Fy4VuGvPmT7mj7vEPjRR/iNFuXuOAkufhCtCvTGX0Hr4gCM9YwCnLgHkxr1ngqSODQaDObU3g8SF8uE/tY1w==", - "dev": true, - "requires": { - "commander": "2.12.2", - "source-map": "0.6.1" - } - } + "node_modules/vitest/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "ultron": { - "version": "1.0.2", - "resolved": "http://npm.trustu.pre/ultron/-/ultron-1.0.2/ace116ab557cd197386a4e88f4685378c8b2e4fa.tgz", - "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", - "dev": true + "node_modules/vitest/node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } }, - "underscore": { - "version": "1.8.3", - "resolved": "http://npm.trustu.pre/underscore/-/underscore-1.8.3/4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022.tgz", - "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", - "dev": true + "node_modules/vue-eslint-parser": { + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", + "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } }, - "uniq": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/uniq/-/uniq-1.0.1/b31c5ae8254844a3a8281541ce2b04b865a734ff.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true + "node_modules/vue-eslint-parser/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } }, - "uniqid": { - "version": "4.1.1", - "resolved": "http://npm.trustu.pre/uniqid/-/uniqid-4.1.1/89220ddf6b751ae52b5f72484863528596bb84c1.tgz", - "integrity": "sha1-iSIN32t1GuUrX3JISGNShZa7hME=", + "node_modules/vue-eslint-parser/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, - "requires": { - "macaddress": "0.2.8" + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "uniqs": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/uniqs/-/uniqs-2.0.0/ffede4b36b25290696e6e165d4a59edb998e6b02.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", - "dev": true - }, - "unique-filename": { - "version": "1.1.0", - "resolved": "http://npm.trustu.pre/unique-filename/-/unique-filename-1.1.0/d05f2fe4032560871f30e93cbe735eea201514f3.tgz", - "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", "dev": true, - "requires": { - "unique-slug": "2.0.0" + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" } }, - "unique-slug": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/unique-slug/-/unique-slug-2.0.0/db6676e7c7cc0629878ff196097c78855ae9f4ab.tgz", - "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", + "node_modules/watchpack": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", + "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", "dev": true, - "requires": { - "imurmurhash": "0.1.4" + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" } }, - "universalify": { - "version": "0.1.1", - "resolved": "http://npm.trustu.pre/universalify/-/universalify-0.1.1/fa71badd4437af4c148841e3b3b165f9e9e590b7.tgz", - "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=", - "dev": true + "node_modules/weak-lru-cache": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", + "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", + "dev": true, + "license": "MIT", + "optional": true }, - "unpipe": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/unpipe/-/unpipe-1.0.0/b2bf4ee8514aae6165b4817829d21b2ef49904ec.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true + "node_modules/webdriver-bidi-protocol": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.3.8.tgz", + "integrity": "sha512-21Yi2GhGntMc671vNBCjiAeEVknXjVRoyu+k+9xOMShu+ZQfpGQwnBqbNz/Sv4GXZ6JmutlPAi2nIJcrymAWuQ==", + "dev": true, + "license": "Apache-2.0" }, - "upper-case": { - "version": "1.1.3", - "resolved": "http://npm.trustu.pre/upper-case/-/upper-case-1.1.3/f6b4501c2ec4cdd26ba78be7222961de77621598.tgz", - "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", - "dev": true + "node_modules/webidl-conversions": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-8.0.0.tgz", + "integrity": "sha512-n4W4YFyz5JzOfQeA8oN7dUYpR+MBP3PIUsn2jLjWXwK5ASUzt0Jc/A5sAUZoCYFJRGF0FBKJ+1JjN43rNdsQzA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=20" + } }, - "url": { - "version": "0.11.0", - "resolved": "http://npm.trustu.pre/url/-/url-0.11.0/3838e97cfc60521eb73c525a8e55bfdd9e2e28f1.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "http://npm.trustu.pre/punycode/-/punycode-1.3.2/9653a036fb7c1ee42342f2325cceefea3926c48d.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "url-loader": { - "version": "0.6.2", - "resolved": "http://npm.trustu.pre/url-loader/-/url-loader-0.6.2/a007a7109620e9d988d14bce677a1decb9a993f7.tgz", - "integrity": "sha512-h3qf9TNn53BpuXTTcpC+UehiRrl0Cv45Yr/xWayApjw6G8Bg2dGke7rIwDQ39piciWCWrC+WiqLjOh3SUp9n0Q==", + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", "dev": true, - "requires": { - "loader-utils": "1.1.0", - "mime": "1.6.0", - "schema-utils": "0.3.0" + "license": "MIT", + "engines": { + "node": ">=18" } }, - "url-parse": { - "version": "1.2.0", - "resolved": "http://npm.trustu.pre/url-parse/-/url-parse-1.2.0/3a19e8aaa6d023ddd27dcc44cb4fc8f7fec23986.tgz", - "integrity": "sha512-DT1XbYAfmQP65M/mE6OALxmXzZ/z1+e5zk2TcSKe/KiYbNGZxgtttzC0mR/sjopbpOXcbniq7eIKmocJnUWlEw==", + "node_modules/whatwg-url": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-15.1.0.tgz", + "integrity": "sha512-2ytDk0kiEj/yu90JOAp44PVPUkO9+jVhyf+SybKlRHSDlvOOZhdPIrr7xTH64l4WixO2cP+wQIcgujkGBPPz6g==", "dev": true, - "requires": { - "querystringify": "1.0.0", - "requires-port": "1.0.0" - }, + "license": "MIT", "dependencies": { - "querystringify": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/querystringify/-/querystringify-1.0.0/6286242112c5b712fa654e526652bf6a13ff05cb.tgz", - "integrity": "sha1-YoYkIRLFtxL6ZU5SZlK/ahP/Bcs=", - "dev": true - } + "tr46": "^6.0.0", + "webidl-conversions": "^8.0.0" + }, + "engines": { + "node": ">=20" } }, - "url2": { - "version": "0.0.0", - "resolved": "http://npm.trustu.pre/url2/-/url2-0.0.0/4eaabd1d5c3ac90d62ab4485c998422865a04b1a.tgz", - "integrity": "sha1-Tqq9HVw6yQ1iq0SFyZhCKGWgSxo=", - "dev": true + "node_modules/when-exit": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/when-exit/-/when-exit-2.1.5.tgz", + "integrity": "sha512-VGkKJ564kzt6Ms1dbgPP/yuIoQCrsFAnRbptpC5wOEsDaNsbCB2bnfnaA8i/vRs5tjUSEOtIuvl9/MyVsvQZCg==", + "dev": true, + "license": "MIT" }, - "useragent": { - "version": "2.2.1", - "resolved": "http://npm.trustu.pre/useragent/-/useragent-2.2.1/cf593ef4f2d175875e8bb658ea92e18a4fd06d8e.tgz", - "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=", + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "requires": { - "lru-cache": "2.2.4", - "tmp": "0.0.31" - }, + "license": "ISC", "dependencies": { - "lru-cache": { - "version": "2.2.4", - "resolved": "http://npm.trustu.pre/lru-cache/-/lru-cache-2.2.4/6c658619becf14031d0d0b594b16042ce4dc063d.tgz", - "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=", - "dev": true - } + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "util": { - "version": "0.10.3", - "resolved": "http://npm.trustu.pre/util/-/util-0.10.3/7afb1afe50805246489e3db7fe0ed379336ac0f9.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", "dev": true, - "requires": { - "inherits": "2.0.1" - }, + "license": "MIT", "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "http://npm.trustu.pre/inherits/-/inherits-2.0.1/b17d08d326b4423e568eff719f91b0b1cbdf69f1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - } + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" } }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "http://npm.trustu.pre/util-deprecate/-/util-deprecate-1.0.2/450d4dc9fa70de732762fbd2d4a28981419a0ccf.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "utila": { - "version": "0.4.0", - "resolved": "http://npm.trustu.pre/utila/-/utila-0.4.0/8a16a05d445657a3aea5eecc5b12a4fa5379772c.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/utils-merge/-/utils-merge-1.0.1/9f95710f50a267947b2ccc124741c1028427e713.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, - "uuid": { - "version": "3.1.0", - "resolved": "http://npm.trustu.pre/uuid/-/uuid-3.1.0/3dd3d3e790abc24d7b0d3a034ffababe28ebbc04.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", - "dev": true - }, - "v8flags": { - "version": "3.0.1", - "resolved": "http://npm.trustu.pre/v8flags/-/v8flags-3.0.1/dce8fc379c17d9f2c9e9ed78d89ce00052b1b76b.tgz", - "integrity": "sha1-3Oj8N5wX2fLJ6e142JzgAFKxt2s=", + "node_modules/widest-line": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", + "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", "dev": true, - "requires": { - "homedir-polyfill": "1.0.1" + "license": "MIT", + "dependencies": { + "string-width": "^5.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "validate-npm-package-license": { - "version": "3.0.1", - "resolved": "http://npm.trustu.pre/validate-npm-package-license/-/validate-npm-package-license-3.0.1/2804babe712ad3379459acfbe24746ab2c303fbc.tgz", - "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "node_modules/widest-line/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, - "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "vary": { - "version": "1.1.2", - "resolved": "http://npm.trustu.pre/vary/-/vary-1.1.2/2299f02c6ded30d4a5961b0b9f74524a18f634fc.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true - }, - "vendors": { - "version": "1.0.1", - "resolved": "http://npm.trustu.pre/vendors/-/vendors-1.0.1/37ad73c8ee417fb3d580e785312307d274847f22.tgz", - "integrity": "sha1-N61zyO5Bf7PVgOeFMSMH0nSEfyI=", - "dev": true + "node_modules/widest-line/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" }, - "verror": { - "version": "1.10.0", - "resolved": "http://npm.trustu.pre/verror/-/verror-1.10.0/3a105ca17053af55d6e270c1f8288682e18da400.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "node_modules/widest-line/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, - "requires": { - "assert-plus": "1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "1.3.0" - }, + "license": "MIT", "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/assert-plus/-/assert-plus-1.0.0/f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "vinyl": { - "version": "0.5.3", - "resolved": "http://npm.trustu.pre/vinyl/-/vinyl-0.5.3/b0455b38fc5e0cf30d4325132e461970c2091cde.tgz", - "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", + "node_modules/widest-line/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "dev": true, - "requires": { - "clone": "1.0.3", - "clone-stats": "0.0.1", - "replace-ext": "0.0.1" + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "vlq": { - "version": "0.2.3", - "resolved": "http://npm.trustu.pre/vlq/-/vlq-0.2.3/8f3e4328cf63b1540c0d67e1b2778386f8975b26.tgz", - "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", - "dev": true - }, - "vm-browserify": { - "version": "0.0.4", - "resolved": "http://npm.trustu.pre/vm-browserify/-/vm-browserify-0.0.4/5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, - "requires": { - "indexof": "0.0.1" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "void-elements": { - "version": "2.0.1", - "resolved": "http://npm.trustu.pre/void-elements/-/void-elements-2.0.1/c066afb582bb1cb4128d60ea92392e94d5e9dbec.tgz", - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", - "dev": true - }, - "watchpack": { - "version": "1.4.0", - "resolved": "http://npm.trustu.pre/watchpack/-/watchpack-1.4.0/4a1472bcbb952bd0a9bb4036801f954dfb39faac.tgz", - "integrity": "sha1-ShRyvLuVK9Cpu0A2gB+VTfs5+qw=", + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, - "requires": { - "async": "2.6.0", - "chokidar": "1.7.0", - "graceful-fs": "4.1.11" + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" } }, - "wbuf": { - "version": "1.7.2", - "resolved": "http://npm.trustu.pre/wbuf/-/wbuf-1.7.2/d697b99f1f59512df2751be42769c1580b5801fe.tgz", - "integrity": "sha1-1pe5nx9ZUS3ydRvkJ2nBWAtYAf4=", + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "requires": { - "minimalistic-assert": "1.0.0" + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "weak-map": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/weak-map/-/weak-map-1.0.0/b66e56a9df0bd25a76bbf1b514db129080614a37.tgz", - "integrity": "sha1-tm5Wqd8L0lp2u/G1FNsSkIBhSjc=", - "dev": true - }, - "webdriver-js-extender": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/webdriver-js-extender/-/webdriver-js-extender-1.0.0/81c533a9e33d5bfb597b4e63e2cdb25b54777515.tgz", - "integrity": "sha1-gcUzqeM9W/tZe05j4s2yW1R3dRU=", + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "requires": { - "@types/selenium-webdriver": "2.53.43", - "selenium-webdriver": "2.53.3" - }, + "license": "MIT", "dependencies": { - "sax": { - "version": "0.6.1", - "resolved": "http://npm.trustu.pre/sax/-/sax-0.6.1/563b19c7c1de892e09bfc4f2fc30e3c27f0952b9.tgz", - "integrity": "sha1-VjsZx8HeiS4Jv8Ty/DDjwn8JUrk=", - "dev": true - }, - "selenium-webdriver": { - "version": "2.53.3", - "resolved": "http://npm.trustu.pre/selenium-webdriver/-/selenium-webdriver-2.53.3/d29ff5a957dff1a1b49dc457756e4e4bfbdce085.tgz", - "integrity": "sha1-0p/1qVff8aG0ncRXdW5OS/vc4IU=", - "dev": true, - "requires": { - "adm-zip": "0.4.4", - "rimraf": "2.6.2", - "tmp": "0.0.24", - "ws": "1.1.2", - "xml2js": "0.4.4" - } - }, - "tmp": { - "version": "0.0.24", - "resolved": "http://npm.trustu.pre/tmp/-/tmp-0.0.24/d6a5e198d14a9835cc6f2d7c3d9e302428c8cf12.tgz", - "integrity": "sha1-1qXhmNFKmDXMby18PZ4wJCjIzxI=", - "dev": true - }, - "xml2js": { - "version": "0.4.4", - "resolved": "http://npm.trustu.pre/xml2js/-/xml2js-0.4.4/3111010003008ae19240eba17497b57c729c555d.tgz", - "integrity": "sha1-MREBAAMAiuGSQOuhdJe1fHKcVV0=", - "dev": true, - "requires": { - "sax": "0.6.1", - "xmlbuilder": "9.0.4" - } - } + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "webpack": { - "version": "3.10.0", - "resolved": "http://npm.trustu.pre/webpack/-/webpack-3.10.0/5291b875078cf2abf42bdd23afe3f8f96c17d725.tgz", - "integrity": "sha512-fxxKXoicjdXNUMY7LIdY89tkJJJ0m1Oo8PQutZ5rLgWbV5QVKI15Cn7+/IHnRTd3vfKfiwBx6SBqlorAuNA8LA==", - "dev": true, - "requires": { - "acorn": "5.2.1", - "acorn-dynamic-import": "2.0.2", - "ajv": "5.5.1", - "ajv-keywords": "2.1.1", - "async": "2.6.0", - "enhanced-resolve": "3.4.1", - "escope": "3.6.0", - "interpret": "1.1.0", - "json-loader": "0.5.7", - "json5": "0.5.1", - "loader-runner": "2.3.0", - "loader-utils": "1.1.0", - "memory-fs": "0.4.1", - "mkdirp": "0.5.1", - "node-libs-browser": "2.1.0", - "source-map": "0.5.7", - "supports-color": "4.5.0", - "tapable": "0.2.8", - "uglifyjs-webpack-plugin": "0.4.6", - "watchpack": "1.4.0", - "webpack-sources": "1.1.0", - "yargs": "8.0.2" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "http://npm.trustu.pre/ansi-regex/-/ansi-regex-3.0.0/ed0317c322064f79466c02966bddb605ab37d998.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "camelcase": { - "version": "1.2.1", - "resolved": "http://npm.trustu.pre/camelcase/-/camelcase-1.2.1/9bb5304d2e0b56698b2c758b08a3eaa9daa58a39.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true - }, - "cliui": { - "version": "2.1.0", - "resolved": "http://npm.trustu.pre/cliui/-/cliui-2.1.0/4b475760ff80264c762c3a1719032e91c7fea0d1.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", - "wordwrap": "0.0.2" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "http://npm.trustu.pre/find-up/-/find-up-2.1.0/45d1b7e506c717ddd482775a2b77920a3c0c57a7.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "2.0.0" - } - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/load-json-file/-/load-json-file-2.0.0/7947e42149af80d696cbf797bcaabcfe1fe29ca8.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" - } - }, - "os-locale": { - "version": "2.1.0", - "resolved": "http://npm.trustu.pre/os-locale/-/os-locale-2.1.0/42bc2900a6b5b8bd17376c8e882b65afccf24bf2.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", - "dev": true, - "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" - } - }, - "path-type": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/path-type/-/path-type-2.0.0/f012ccb8415b7096fc2daa1054c3d72389594c73.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "2.3.0" - } - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/read-pkg/-/read-pkg-2.0.0/8ef1c0623c6a6db0dc6713c4bfac46332b2368f8.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", - "path-type": "2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/read-pkg-up/-/read-pkg-up-2.0.0/6b72a8048984e0c41e79510fd5e9fa99b3b549be.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "http://npm.trustu.pre/string-width/-/string-width-2.1.1/ab93f27a8dc13d28cac815c462143a6d9012ae9e.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0/a3b30a5c4f199183167aaab93beefae3ddfb654f.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "http://npm.trustu.pre/strip-ansi/-/strip-ansi-4.0.0/a8479022eb1ac368a871389b635262c505ee368f.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - } - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "http://npm.trustu.pre/strip-bom/-/strip-bom-3.0.0/2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "uglify-js": { - "version": "2.8.29", - "resolved": "http://npm.trustu.pre/uglify-js/-/uglify-js-2.8.29/29c5733148057bb4e1f75df35b7a9cb72e6a59dd.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "dev": true, - "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" - }, - "dependencies": { - "yargs": { - "version": "3.10.0", - "resolved": "http://npm.trustu.pre/yargs/-/yargs-3.10.0/f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "window-size": "0.1.0" - } - } - } - }, - "uglifyjs-webpack-plugin": { - "version": "0.4.6", - "resolved": "http://npm.trustu.pre/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6/b951f4abb6bd617e66f63eb891498e391763e309.tgz", - "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", - "dev": true, - "requires": { - "source-map": "0.5.7", - "uglify-js": "2.8.29", - "webpack-sources": "1.1.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/which-module/-/which-module-2.0.0/d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "yargs": { - "version": "8.0.2", - "resolved": "http://npm.trustu.pre/yargs/-/yargs-8.0.2/6299a9055b1cefc969ff7e79c1d918dceb22c360.tgz", - "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", - "dev": true, - "requires": { - "camelcase": "4.1.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "read-pkg-up": "2.0.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "7.0.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "http://npm.trustu.pre/camelcase/-/camelcase-4.1.0/d545635be1e33c542649c69173e5de6acfae34dd.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "http://npm.trustu.pre/cliui/-/cliui-3.2.0/120601537a916d29940f934da3b48d585a39213d.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": "http://npm.trustu.pre/string-width/-/string-width-1.0.2/118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } - } - } - } - }, - "yargs-parser": { - "version": "7.0.0", - "resolved": "http://npm.trustu.pre/yargs-parser/-/yargs-parser-7.0.0/8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9.tgz", - "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", - "dev": true, - "requires": { - "camelcase": "4.1.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "http://npm.trustu.pre/camelcase/-/camelcase-4.1.0/d545635be1e33c542649c69173e5de6acfae34dd.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - } - } - } + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, - "webpack-concat-plugin": { - "version": "1.4.2", - "resolved": "http://npm.trustu.pre/webpack-concat-plugin/-/webpack-concat-plugin-1.4.2/b60bbb626ce5001911809d6e2329fa32f4978a88.tgz", - "integrity": "sha512-HdV2xOq4twtL2ThR9NSCCQ888v1JBMpJfm3k2mA1I5LkS2+/6rv8q/bb9yTSaR0fVaMtANZi4Wkz0xc33MAt6w==", + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "requires": { - "md5": "2.2.1", - "uglify-js": "2.8.29" - }, + "license": "MIT", "dependencies": { - "camelcase": { - "version": "1.2.1", - "resolved": "http://npm.trustu.pre/camelcase/-/camelcase-1.2.1/9bb5304d2e0b56698b2c758b08a3eaa9daa58a39.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true - }, - "cliui": { - "version": "2.1.0", - "resolved": "http://npm.trustu.pre/cliui/-/cliui-2.1.0/4b475760ff80264c762c3a1719032e91c7fea0d1.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", - "wordwrap": "0.0.2" - } - }, - "uglify-js": { - "version": "2.8.29", - "resolved": "http://npm.trustu.pre/uglify-js/-/uglify-js-2.8.29/29c5733148057bb4e1f75df35b7a9cb72e6a59dd.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "dev": true, - "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" - } - }, - "yargs": { - "version": "3.10.0", - "resolved": "http://npm.trustu.pre/yargs/-/yargs-3.10.0/f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "window-size": "0.1.0" - } - } + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, - "webpack-core": { - "version": "0.6.9", - "resolved": "http://npm.trustu.pre/webpack-core/-/webpack-core-0.6.9/fc571588c8558da77be9efb6debdc5a3b172bdc2.tgz", - "integrity": "sha1-/FcViMhVjad76e+23r3Fo7FyvcI=", + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "requires": { - "source-list-map": "0.1.8", - "source-map": "0.4.4" - }, + "license": "MIT", "dependencies": { - "source-list-map": { - "version": "0.1.8", - "resolved": "http://npm.trustu.pre/source-list-map/-/source-list-map-0.1.8/c550b2ab5427f6b3f21f5afead88c4f5587b2106.tgz", - "integrity": "sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY=", - "dev": true - }, - "source-map": { - "version": "0.4.4", - "resolved": "http://npm.trustu.pre/source-map/-/source-map-0.4.4/eba4f5da9c0dc999de68032d8b4f76173652036b.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "webpack-dev-middleware": { - "version": "1.12.2", - "resolved": "http://npm.trustu.pre/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2/f8fc1120ce3b4fc5680ceecb43d777966b21105e.tgz", - "integrity": "sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==", - "dev": true, - "requires": { - "memory-fs": "0.4.1", - "mime": "1.6.0", - "path-is-absolute": "1.0.1", - "range-parser": "1.2.0", - "time-stamp": "2.0.0" - } - }, - "webpack-dev-server": { - "version": "2.9.7", - "resolved": "http://npm.trustu.pre/webpack-dev-server/-/webpack-dev-server-2.9.7/100ad6a14775478924d417ca6dcfb9d52a98faed.tgz", - "integrity": "sha512-Pu7uoQFgQj5RE5wmlfkpYSzihMKxulwEuO2xCsaMnAnyRSApwoVi3B8WCm9XbigyWTHaIMzYGkB90Vr6leAeTQ==", - "dev": true, - "requires": { - "ansi-html": "0.0.7", - "array-includes": "3.0.3", - "bonjour": "3.5.0", - "chokidar": "1.7.0", - "compression": "1.7.1", - "connect-history-api-fallback": "1.5.0", - "debug": "3.1.0", - "del": "3.0.0", - "express": "4.16.2", - "html-entities": "1.2.1", - "http-proxy-middleware": "0.17.4", - "import-local": "0.1.1", - "internal-ip": "1.2.0", - "ip": "1.1.5", - "killable": "1.0.0", - "loglevel": "1.6.0", - "opn": "5.1.0", - "portfinder": "1.0.13", - "selfsigned": "1.10.1", - "serve-index": "1.9.1", - "sockjs": "0.3.18", - "sockjs-client": "1.1.4", - "spdy": "3.4.7", - "strip-ansi": "3.0.1", - "supports-color": "4.5.0", - "webpack-dev-middleware": "1.12.2", - "yargs": "6.6.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "http://npm.trustu.pre/camelcase/-/camelcase-3.0.0/32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - }, - "debug": { - "version": "3.1.0", - "resolved": "http://npm.trustu.pre/debug/-/debug-3.1.0/5bb5a0672628b64149566ba16819e61518c67261.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "yargs": { - "version": "6.6.0", - "resolved": "http://npm.trustu.pre/yargs/-/yargs-6.6.0/782ec21ef403345f830a808ca3d513af56065208.tgz", - "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", - "dev": true, - "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "y18n": "3.2.1", - "yargs-parser": "4.2.1" - } - }, - "yargs-parser": { - "version": "4.2.1", - "resolved": "http://npm.trustu.pre/yargs-parser/-/yargs-parser-4.2.1/29cceac0dc4f03c6c87b4a9f217dd18c9f74871c.tgz", - "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", - "dev": true, - "requires": { - "camelcase": "3.0.0" - } - } - } + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" }, - "webpack-merge": { - "version": "4.1.1", - "resolved": "http://npm.trustu.pre/webpack-merge/-/webpack-merge-4.1.1/f1197a0a973e69c6fbeeb6d658219aa8c0c13555.tgz", - "integrity": "sha512-geQsZ86YkXOVOjvPC5yv3JSNnL6/X3Kzh935AQ/gJNEYXEfJDQFu/sdFuktS9OW2JcH/SJec8TGfRdrpHshH7A==", + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "requires": { - "lodash": "4.17.4" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "webpack-sources": { - "version": "1.1.0", - "resolved": "http://npm.trustu.pre/webpack-sources/-/webpack-sources-1.1.0/a101ebae59d6507354d71d8013950a3a8b7a5a54.tgz", - "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "requires": { - "source-list-map": "2.0.0", - "source-map": "0.6.1" + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "dev": true, + "license": "ISC", "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "http://npm.trustu.pre/source-map/-/source-map-0.6.1/74722af32e9614e9c287a8d0bbde48b5e2f1a263.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "webpack-subresource-integrity": { - "version": "1.0.3", - "resolved": "http://npm.trustu.pre/webpack-subresource-integrity/-/webpack-subresource-integrity-1.0.3/c0606d40090b070cde428bec8df3603216e472eb.tgz", - "integrity": "sha1-wGBtQAkLBwzeQovsjfNgMhbkcus=", + "node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "dev": true, - "requires": { - "webpack-core": "0.6.9" + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "websocket-driver": { - "version": "0.7.0", - "resolved": "http://npm.trustu.pre/websocket-driver/-/websocket-driver-0.7.0/0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb.tgz", - "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", + "node_modules/xdg-basedir": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", + "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", "dev": true, - "requires": { - "http-parser-js": "0.4.9", - "websocket-extensions": "0.1.3" + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "websocket-extensions": { - "version": "0.1.3", - "resolved": "http://npm.trustu.pre/websocket-extensions/-/websocket-extensions-0.1.3/5d2ff22977003ec687a4b87073dfbbac146ccf29.tgz", - "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", - "dev": true + "node_modules/xhr2": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.2.1.tgz", + "integrity": "sha512-sID0rrVCqkVNUn8t6xuv9+6FViXjUVXq8H5rWOH2rz9fDNQEd4g0EA2XlcEdJXRz5BMEn4O1pJFdT+z4YHhoWw==", + "license": "MIT", + "engines": { + "node": ">= 6" + } }, - "when": { - "version": "3.6.4", - "resolved": "http://npm.trustu.pre/when/-/when-3.6.4/473b517ec159e2b85005497a13983f095412e34e.tgz", - "integrity": "sha1-RztRfsFZ4rhQBUl6E5g/CVQS404=", - "dev": true + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } }, - "whet.extend": { - "version": "0.9.9", - "resolved": "http://npm.trustu.pre/whet.extend/-/whet.extend-0.9.9/f877d5bf648c97e5aa542fadc16d6a259b9c11a1.tgz", - "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=", - "dev": true + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "license": "MIT" }, - "which": { + "node_modules/xmldoc": { "version": "1.3.0", - "resolved": "http://npm.trustu.pre/which/-/which-1.3.0/ff04bdfc010ee547d780bec38e1ac1c2777d253a.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.3.0.tgz", + "integrity": "sha512-y7IRWW6PvEnYQZNZFMRLNJw+p3pezM4nKYPfr15g4OOW9i8VpeydycFuipE2297OvZnh3jSb2pxOt9QpkZUVng==", "dev": true, - "requires": { - "isexe": "2.0.0" + "license": "MIT", + "dependencies": { + "sax": "^1.2.4" } }, - "which-module": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/which-module/-/which-module-1.0.0/bba63ca861948994ff307736089e3b96026c2a4f.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true - }, - "wide-align": { - "version": "1.1.2", - "resolved": "http://npm.trustu.pre/wide-align/-/wide-align-1.1.2/571e0f1b0604636ebc0dfc21b0339bbe31341710.tgz", - "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, - "requires": { - "string-width": "1.0.2" + "license": "MIT", + "engines": { + "node": ">=0.4" } }, - "window-size": { - "version": "0.1.0", - "resolved": "http://npm.trustu.pre/window-size/-/window-size-0.1.0/5438cd2ea93b202efa3a19fe8887aee7c94f9c9d.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "dev": true + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } }, - "wordwrap": { - "version": "0.0.2", - "resolved": "http://npm.trustu.pre/wordwrap/-/wordwrap-0.0.2/b79669bb42ecb409f83d583cad52ca17eaa1643f.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", + "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + } }, - "worker-farm": { - "version": "1.5.2", - "resolved": "http://npm.trustu.pre/worker-farm/-/worker-farm-1.5.2/32b312e5dc3d5d45d79ef44acc2587491cd729ae.tgz", - "integrity": "sha512-XxiQ9kZN5n6mmnW+mFJ+wXjNNI/Nx4DIdaAKLX1Bn6LYBWlN/zaBhu34DQYPZ1AJobQuu67S2OfDdNSVULvXkQ==", + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, - "requires": { - "errno": "0.1.4", - "xtend": "4.0.1" + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" } }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "http://npm.trustu.pre/wrap-ansi/-/wrap-ansi-2.1.0/d8fc3d284dd05794fe84973caecdd1cf824fdd85.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "license": "ISC", + "engines": { + "node": ">=12" } }, - "wrappy": { - "version": "1.0.2", - "resolved": "http://npm.trustu.pre/wrappy/-/wrappy-1.0.2/b5243d8f3ec1aa35f1364605bc0d1036e30ab69f.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" }, - "ws": { - "version": "1.1.2", - "resolved": "http://npm.trustu.pre/ws/-/ws-1.1.2/8a244fa052401e08c9886cf44a85189e1fd4067f.tgz", - "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=", + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "requires": { - "options": "0.0.6", - "ultron": "1.0.2" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "wtf-8": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/wtf-8/-/wtf-8-1.0.0/392d8ba2d0f1c34d1ee2d630f15d0efb68e1048a.tgz", - "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=", - "dev": true - }, - "xhr2": { - "version": "0.1.4", - "resolved": "http://npm.trustu.pre/xhr2/-/xhr2-0.1.4/7f87658847716db5026323812f818cadab387a5f.tgz", - "integrity": "sha1-f4dliEdxbbUCYyOBL4GMras4el8=", - "dev": true - }, - "xml-char-classes": { - "version": "1.0.0", - "resolved": "http://npm.trustu.pre/xml-char-classes/-/xml-char-classes-1.0.0/64657848a20ffc5df583a42ad8a277b4512bbc4d.tgz", - "integrity": "sha1-ZGV4SKIP/F31g6Qq2KJ3tFErvE0=", - "dev": true - }, - "xml2js": { - "version": "0.4.19", - "resolved": "http://npm.trustu.pre/xml2js/-/xml2js-0.4.19/686c20f213209e94abf0d1bcf1efaa291c7827a7.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "requires": { - "sax": "1.2.4", - "xmlbuilder": "9.0.4" + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, - "xmlbuilder": { - "version": "9.0.4", - "resolved": "http://npm.trustu.pre/xmlbuilder/-/xmlbuilder-9.0.4/519cb4ca686d005a8420d3496f3f0caeecca580f.tgz", - "integrity": "sha1-UZy0ymhtAFqEINNJbz8MruzKWA8=", - "dev": true - }, - "xmlhttprequest-ssl": { - "version": "1.5.3", - "resolved": "http://npm.trustu.pre/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3/185a888c04eca46c3e4070d99f7b49de3528992d.tgz", - "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=", - "dev": true - }, - "xtend": { - "version": "4.0.1", - "resolved": "http://npm.trustu.pre/xtend/-/xtend-4.0.1/a5c6d532be656e23db820efb943a1f04998d63af.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true - }, - "xxhashjs": { - "version": "0.2.1", - "resolved": "http://npm.trustu.pre/xxhashjs/-/xxhashjs-0.2.1/9bbe9be896142976dfa34c061b2d068c43d30de0.tgz", - "integrity": "sha1-m76b6JYUKXbfo0wGGy0GjEPTDeA=", + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, - "requires": { - "cuint": "0.2.2" + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" } }, - "y18n": { - "version": "3.2.1", - "resolved": "http://npm.trustu.pre/y18n/-/y18n-3.2.1/6d15fba884c08679c0d77e88e7759e811e07fa41.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "http://npm.trustu.pre/yallist/-/yallist-2.1.2/1c11f9218f076089a47dd512f93c6699a6a81d52.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "yargs": { - "version": "7.1.0", - "resolved": "http://npm.trustu.pre/yargs/-/yargs-7.1.0/6ba318eb16961727f5d284f8ea003e8d6154d0c8.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "node_modules/yocto-queue": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", + "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", "dev": true, - "optional": true, - "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "y18n": "3.2.1", - "yargs-parser": "5.0.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "http://npm.trustu.pre/camelcase/-/camelcase-3.0.0/32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true, - "optional": true - } + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "yargs-parser": { - "version": "5.0.0", - "resolved": "http://npm.trustu.pre/yargs-parser/-/yargs-parser-5.0.0/275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "node_modules/yoctocolors-cjs": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", + "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==", "dev": true, - "optional": true, - "requires": { - "camelcase": "3.0.0" + "license": "MIT", + "engines": { + "node": ">=18" }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "http://npm.trustu.pre/camelcase/-/camelcase-3.0.0/32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true, - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "yeast": { - "version": "0.1.2", - "resolved": "http://npm.trustu.pre/yeast/-/yeast-0.1.2/008e06d8094320c372dbc2f8ed76a0ca6c8ac419.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", - "dev": true - }, - "yn": { - "version": "2.0.0", - "resolved": "http://npm.trustu.pre/yn/-/yn-2.0.0/e5adabc8acf408f6385fc76495684c88e6af689a.tgz", - "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", - "dev": true + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } }, - "zone.js": { - "version": "0.8.18", - "resolved": "http://npm.trustu.pre/zone.js/-/zone.js-0.8.18/8cecb3977fcd1b3090562ff4570e2847e752b48d.tgz", - "integrity": "sha512-knKOBQM0oea3/x9pdyDuDi7RhxDlJhOIkeixXSiTKWLgs4LpK37iBc+1HaHwzlciHUKT172CymJFKo8Xgh+44Q==" + "node_modules/zod-to-json-schema": { + "version": "3.24.6", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.6.tgz", + "integrity": "sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==", + "dev": true, + "license": "ISC", + "peerDependencies": { + "zod": "^3.24.1" + } } } } diff --git a/package.json b/package.json old mode 100644 new mode 100755 index 85c7111b..8fad5817 --- a/package.json +++ b/package.json @@ -1,72 +1,91 @@ { - "name": "angular-example-app", - "version": "5.1.0", - "license": "MIT", + "name": "angularexampleapp", + "version": "19.1.0", "scripts": { - "start": "ng serve", - "build": "ng build --prod", - "deploy": "ng build --prod --base-href / && angular-cli-ghpages", - "test": "ng test --watch=false --code-coverage", - "e2e": "ng e2e --prod", - "e2e:home": "ng e2e --serve false --prod --specs=./e2e/home/**/*.e2e-spec.ts", - "e2e:heroeslist": "ng e2e --serve false --prod --specs=./e2e/heroes-list/**/*.e2e-spec.ts", - "lint": "ng lint", - "ci": "npm run lint && npm run test && npm run e2e", - "sme": "ng build && source-map-explorer dist/main.bundle.js", - "release": "standard-version && git push --follow-tags origin master", - "docker": "docker build -t angularexampleapp . && docker run -d -p 4200:80 angularexampleapp" - }, - "private": true, - "engines": { - "node": ">= 6.9.0", - "npm": ">= 3.0.0" + "prepare": "npx husky", + "start": "ng serve --configuration=development-en --open", + "start:es": "ng serve --configuration=development-es --open", + "extract": "ng extract-i18n --format=xlf --output-path=src/locale", + "format:check": "prettier --check \"**/*.{ts,js,json,html,css,scss,md,mdx}\"", + "format:fix": "prettier --write \"**/*.{ts,js,json,html,css,scss,md,mdx}\"", + "lint": "ng lint && npm run stylelint", + "stylelint": "npx stylelint \"**/*.{css,scss}\"", + "test": "ng test --no-code-coverage --no-watch", + "test:watch": "ng test --no-code-coverage", + "e2e:local": "BASE_URL=http://localhost:4200 npx playwright test --project=chromium", + "e2e:pro": "npx playwright test --project=chromium", + "playwright:install": "npx playwright install && npx playwright install-deps", + "build": "ng build", + "build:stats": "ng build --configuration=production-sourcemaps --stats-json", + "lighthouse": "node scripts/lighthouse.mjs", + "verify": "npm run extract && npm run lint && npm run test && npm run build:stats && npm run lighthouse" }, "dependencies": { - "@angular/animations": "5.1.0", - "@angular/common": "5.1.0", - "@angular/compiler": "5.1.0", - "@angular/core": "5.1.0", - "@angular/flex-layout": "2.0.0-beta.10-4905443", - "@angular/forms": "5.1.0", - "@angular/http": "5.1.0", - "@angular/platform-browser": "5.1.0", - "@angular/platform-browser-dynamic": "5.1.0", - "@angular/router": "5.1.0", - "classlist.js": "1.1.20150312", - "core-js": "2.5.1", - "rxjs": "5.5.5", - "zone.js": "0.8.18" + "@angular/animations": "20.3.7", + "@angular/common": "20.3.7", + "@angular/compiler": "20.3.7", + "@angular/core": "20.3.7", + "@angular/forms": "20.3.7", + "@angular/localize": "20.3.7", + "@angular/platform-browser": "20.3.7", + "@angular/platform-browser-dynamic": "20.3.7", + "@angular/platform-server": "20.3.7", + "@angular/router": "20.3.7", + "@angular/ssr": "20.3.7", + "ngx-progressbar": "14.0.0", + "rxjs": "7.8.2", + "tslib": "2.8.1" }, "devDependencies": { - "@angular/cdk": "5.0.0", - "@angular/cli": "1.6.0", - "@angular/compiler-cli": "5.1.0", - "@angular/material": "5.0.0", - "@angular/platform-server": "5.1.0", - "@ngx-translate/core": "9.0.1", - "@ngx-translate/http-loader": "2.0.0", - "@types/jasmine": "2.8.2", - "@types/jasminewd2": "2.0.3", - "@types/node": "8.0.56", - "angular-cli-ghpages": "0.5.2", - "codelyzer": "4.0.1", - "coveralls": "3.0.0", - "hammerjs": "2.0.8", - "jasmine-core": "2.8.0", - "jasmine-spec-reporter": "4.2.1", - "karma": "1.7.1", - "karma-chrome-launcher": "2.2.0", - "karma-cli": "1.0.1", - "karma-coverage-istanbul-reporter": "1.3.0", - "karma-jasmine": "1.1.1", - "karma-jasmine-html-reporter": "0.2.2", - "karma-remap-istanbul": "0.6.0", - "protractor": "5.2.1", - "source-map-explorer": "1.5.0", - "standard-version": "4.2.0", - "ts-helpers": "1.1.2", - "ts-node": "3.3.0", - "tslint": "5.8.0", - "typescript": "2.4.2" - } + "@angular-eslint/builder": "20.5.0", + "@angular-eslint/eslint-plugin": "20.5.0", + "@angular-eslint/eslint-plugin-template": "20.5.0", + "@angular-eslint/schematics": "20.5.0", + "@angular-eslint/template-parser": "20.5.0", + "@angular/build": "20.3.7", + "@angular/cli": "20.3.7", + "@angular/compiler-cli": "20.3.7", + "@commitlint/cli": "20.1.0", + "@commitlint/config-conventional": "20.0.0", + "@eslint/js": "9.38.0", + "@ngrx/component": "20.1.0", + "@playwright/test": "1.56.1", + "@shoelace-style/shoelace": "2.20.1", + "@types/express": "4.17.17", + "@types/node": "24.9.2", + "@types/validator": "13.15.4", + "@typescript-eslint/eslint-plugin": "8.46.2", + "@typescript-eslint/parser": "8.46.2", + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/utils": "8.46.2", + "@vitest/coverage-v8": "4.0.4", + "angular-eslint": "20.5.0", + "axe-core": "4.11.0", + "chrome-launcher": "1.2.1", + "eslint": "9.38.0", + "eslint-config-prettier": "10.1.8", + "eslint-plugin-eslint-comments": "3.2.0", + "eslint-plugin-prettier": "5.5.4", + "eslint-plugin-promise": "7.2.1", + "eslint-plugin-unicorn": "62.0.0", + "husky": "9.1.7", + "jsdom": "27.0.1", + "lighthouse": "12.8.2", + "lint-staged": "16.2.6", + "ng-extract-i18n-merge": "3.1.0", + "playwright": "1.56.1", + "postcss-scss": "4.0.9", + "prettier": "3.6.2", + "prettier-eslint": "16.4.2", + "serve": "14.2.5", + "stylelint": "16.25.0", + "stylelint-config-recess-order": "7.4.0", + "stylelint-config-standard-scss": "16.0.0", + "stylelint-order": "7.0.0", + "ts-loader": "9.5.4", + "typescript": "5.9.3", + "typescript-eslint": "8.46.2", + "vitest": "4.0.4" + }, + "private": true } diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 00000000..dcf2c4d2 --- /dev/null +++ b/playwright.config.ts @@ -0,0 +1,24 @@ +import { defineConfig, devices } from '@playwright/test'; + +export default defineConfig({ + testDir: './e2e/tests', + timeout: 30_000, + expect: { + timeout: 5_000, + }, + fullyParallel: true, + reporter: [['list'], ['html', { open: 'never' }]], + use: { + baseURL: process.env['BASE_URL'] || 'https://angular-example-app.netlify.app/', + headless: true, + screenshot: 'only-on-failure', + video: 'retain-on-failure', + trace: 'on-first-retry', + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], +}); diff --git a/protractor.conf.js b/protractor.conf.js deleted file mode 100644 index ef1510e4..00000000 --- a/protractor.conf.js +++ /dev/null @@ -1,28 +0,0 @@ -const {SpecReporter} = require('jasmine-spec-reporter'); - -exports.config = { - allScriptsTimeout: 11000, - specs: [ - './e2e/**/*.e2e-spec.ts' - ], - capabilities: { - 'browserName': 'chrome' - }, - directConnect: true, - baseUrl: 'http://localhost:4200/', - framework: 'jasmine', - jasmineNodeOpts: { - showColors: true, - defaultTimeoutInterval: 30000, - print: function () { - } - }, - beforeLaunch: function () { - require('ts-node').register({ - project: 'e2e/tsconfig.e2e.json' - }); - }, - onPrepare() { - jasmine.getEnv().addReporter(new SpecReporter({spec: {displayStacktrace: true}})); - } -}; diff --git a/public/_redirects b/public/_redirects new file mode 100755 index 00000000..7f4ecb23 --- /dev/null +++ b/public/_redirects @@ -0,0 +1,3 @@ +/es /es/index.html 200 +/es/* /es 200 +/* /index.html 200 diff --git a/public/robots.txt b/public/robots.txt new file mode 100755 index 00000000..eb053628 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: diff --git a/scripts/lighthouse.mjs b/scripts/lighthouse.mjs new file mode 100644 index 00000000..0f5f0ca2 --- /dev/null +++ b/scripts/lighthouse.mjs @@ -0,0 +1,69 @@ +import lighthouse from 'lighthouse'; +import * as chromeLauncher from 'chrome-launcher'; +import { spawn } from 'child_process'; +import fs from 'fs'; +import path from 'node:path'; + +const CONFIG_PATH = path.resolve('lighthouse.config.json'); +if (!fs.existsSync(CONFIG_PATH)) { + console.error('❌ No se encontró el archivo lighthouse.config.json'); + process.exit(1); +} + +const config = JSON.parse(fs.readFileSync(CONFIG_PATH, 'utf8')); +const { distPath, reportPath, port, thresholds } = config; + +const URL = `http://localhost:${port}`; + +(async () => { + console.log(`🚀 Sirviendo build desde ${distPath}...`); + const server = spawn('npx', ['serve', distPath, '-l', port], { stdio: 'inherit' }); + + // wait for server to be ready + await new Promise((res) => setTimeout(res, 3000)); + + const chrome = await chromeLauncher.launch({ chromeFlags: ['--headless'] }); + + const options = { + port: chrome.port, + output: 'html', + logLevel: 'info', + onlyCategories: Object.keys(thresholds), + }; + + const runnerResult = await lighthouse(URL, options); + + if (!runnerResult || !runnerResult.lhr) { + console.error('❌ No se pudo ejecutar Lighthouse correctamente.'); + await chrome.kill(); + server.kill(); + process.exit(1); + } + + fs.writeFileSync(reportPath, runnerResult.report); + console.log(`\n✅ Informe guardado en ${reportPath}`); + + const categories = runnerResult.lhr.categories; + console.log('📊 Resultados:'); + for (const key of Object.keys(categories)) { + const category = categories[key]; + const score = (category.score ?? 0) * 100; + console.log(` ${category.title}: ${score.toFixed(0)} / 100`); + } + + const failed = Object.entries(thresholds) + .filter(([key, min]) => (categories[key]?.score ?? 0) * 100 < min) + .map(([key]) => `${categories[key]?.title ?? key} (<${(thresholds[key] * 100).toFixed(0)}%)`); + + await chrome.kill(); + server.kill(); + + if (failed.length > 0) { + console.error( + `\n❌ Las siguientes categorías no alcanzaron su umbral:\n ${failed.join('\n ')}`, + ); + process.exit(1); + } + + console.log('\n🎉 Todas las categorías superaron los umbrales configurados ✅'); +})(); diff --git a/src/CNAME b/src/CNAME deleted file mode 100644 index d48e7e06..00000000 --- a/src/CNAME +++ /dev/null @@ -1 +0,0 @@ -angularexampleapp.com \ No newline at end of file diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts deleted file mode 100644 index 744e5799..00000000 --- a/src/app/app-routing.module.ts +++ /dev/null @@ -1,28 +0,0 @@ -import {NgModule} from '@angular/core'; -import {RouterModule, Routes} from '@angular/router'; - -import {HeroTopComponent} from './heroes/hero-top/hero-top.component'; -import {AppConfig} from './config/app.config'; -import {Error404Component} from './core/error404/error-404.component'; - -const routes: Routes = [ - {path: '', redirectTo: '/', pathMatch: 'full'}, - {path: '', component: HeroTopComponent}, - {path: AppConfig.routes.heroes, loadChildren: 'app/heroes/heroes.module#HeroesModule'}, - {path: AppConfig.routes.error404, component: Error404Component}, - - // otherwise redirect to 404 - {path: '**', redirectTo: '/' + AppConfig.routes.error404} -]; - -@NgModule({ - imports: [ - RouterModule.forRoot(routes) - ], - exports: [ - RouterModule - ] -}) - -export class AppRoutingModule { -} diff --git a/src/app/app.component.html b/src/app/app.component.html old mode 100644 new mode 100755 index d7d573d0..129149d6 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -1,5 +1,13 @@ -
- - + + + +
+ +
+ + +
+
- \ No newline at end of file diff --git a/src/app/app.component.scss b/src/app/app.component.scss new file mode 100755 index 00000000..f48e07c9 --- /dev/null +++ b/src/app/app.component.scss @@ -0,0 +1,41 @@ +@use 'base/media-queries' as mq; + +$page-max-width: 2560px; + +:host { + display: flex; + flex-direction: row; + align-items: flex-start; + min-height: 100vh; + margin-inline: auto; + + .app__main-container { + display: flex; + flex-direction: column; + width: 100%; + min-height: 100vh; + + .app__page-container { + display: grid; + } + } + + .app__content-skip-button { + position: absolute; + top: var(--spacing-r-md); + left: var(--spacing-r-md); + z-index: var(--z-index-skip-button); + padding: var(--spacing-r-md); + font-size: var(--font-size-xs); + color: var(--page-background); + background: var(--primary-contrast); + border: 1px solid var(--brand-color-tertiary); + border-radius: var(--border-radius-sm); + transform: translateY(-150%); + transition: transform 0.3s ease-out; + + &:focus { + transform: translateY(0); + } + } +} diff --git a/src/app/app.component.spec.ts b/src/app/app.component.spec.ts old mode 100755 new mode 100644 index 161138de..38b5f4f5 --- a/src/app/app.component.spec.ts +++ b/src/app/app.component.spec.ts @@ -1,54 +1,70 @@ -import {async, TestBed} from '@angular/core/testing'; -import {AppComponent} from './app.component'; -import {APP_BASE_HREF} from '@angular/common'; -import {TestsModule} from './shared/modules/tests.module'; -import {TranslateModule} from '@ngx-translate/core'; -import {AppRoutingModule} from './app-routing.module'; -import {HeroTopComponent} from './heroes/hero-top/hero-top.component'; -import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core'; -import {APP_CONFIG, AppConfig} from './config/app.config'; -import {HeroService} from './heroes/shared/hero.service'; -import {Error404Component} from './core/error404/error-404.component'; +import type { ComponentFixture } from '@angular/core/testing'; +import { TestBed } from '@angular/core/testing'; +import { AppComponent } from './app.component'; +import { ChangeDetectionStrategy, Component, provideZonelessChangeDetection } from '@angular/core'; +import { HeaderService } from '~core/services/ui/header.service'; +import { ENVIRONMENT } from '~core/tokens/environment.token'; +import { provideHttpClientTesting } from '@angular/common/http/testing'; +import { provideHttpClient } from '@angular/common/http'; +import { HeaderComponent } from '~shared/components/header/header.component'; +import type { Mock } from 'vitest'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import axe from 'axe-core'; + +@Component({ + selector: 'app-header', + template: '', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +class HeaderStubComponent {} describe('AppComponent', () => { - let fixture; - let component; + let component: AppComponent; + let fixture: ComponentFixture; + let setCanonicalSpy: Mock<(absolutePath: string) => void>; - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [ - TestsModule, - TranslateModule.forRoot(), - AppRoutingModule - ], - declarations: [ - AppComponent, - HeroTopComponent, - Error404Component - ], + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [AppComponent], providers: [ - {provide: APP_CONFIG, useValue: AppConfig}, - {provide: APP_BASE_HREF, useValue: '/'}, - HeroService + provideZonelessChangeDetection(), + provideHttpClient(), + provideHttpClientTesting(), + { provide: ENVIRONMENT, useValue: { domain: 'localhost' } }, + HeaderService, ], - schemas: [CUSTOM_ELEMENTS_SCHEMA] - }).compileComponents(); + }) + .overrideComponent(AppComponent, { + remove: { + imports: [HeaderComponent], + }, + add: { + imports: [HeaderStubComponent], + }, + }) + .compileComponents(); fixture = TestBed.createComponent(AppComponent); - fixture.detectChanges(); - component = fixture.debugElement.componentInstance; - })); + fixture.autoDetectChanges(); + component = fixture.componentInstance; - it('should create the app', (() => { - expect(component).toBeTruthy(); - })); + const headerService = TestBed.inject(HeaderService); + setCanonicalSpy = vi.spyOn(headerService, 'setCanonical').mockReturnValue(); + await fixture.whenStable(); + }); - it('should change title meta tag in root path', async(() => { - fixture.detectChanges(); - expect(component.title.getTitle()).toBe('Angular Example App'); - })); + it('should create', () => { + expect(component).toBeDefined(); + expect(setCanonicalSpy).not.toHaveBeenCalled(); + }); - it('should check browser features', (() => { - expect(component.checkBrowserFeatures()).toBeTruthy(); - })); + it('should have no accessibility violations', async () => { + const results = await axe.run(document, { + rules: { + 'html-has-lang': { enabled: false }, + 'region': { enabled: false }, + }, + }); + expect(results.violations.length).toBe(0); + }); }); diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 85172a72..51f0bb82 100755 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -1,70 +1,79 @@ -import {Component} from '@angular/core'; -import {TranslateService} from '@ngx-translate/core'; -import {Meta, Title} from '@angular/platform-browser'; - -import {NavigationEnd, Router} from '@angular/router'; -import {AppConfig} from './config/app.config'; -import {MatSnackBar} from '@angular/material'; - -declare const Modernizr; +import { ChangeDetectionStrategy, Component, DOCUMENT, effect, inject } from '@angular/core'; +import { translations } from '../locale/translations'; +import { NavigationEnd, Router, RouterOutlet } from '@angular/router'; +import { Meta, Title } from '@angular/platform-browser'; +import { HeaderComponent } from '~shared/components/header/header.component'; +import { FooterComponent } from '~shared/components/footer/footer.component'; +import { filter, map } from 'rxjs'; +import { HeaderService } from '~core/services/ui/header.service'; +import { ProgressBarComponent } from '~shared/components/progress-bar/progress-bar.component'; +import { CookiePopupComponent } from '~shared/components/cookie-popup/cookie-popup.component'; +import { toSignal } from '@angular/core/rxjs-interop'; +import { ToastStackComponent } from '~shared/components/toast-stack/toast-stack.component'; @Component({ selector: 'app-root', - templateUrl: './app.component.html' + imports: [ + RouterOutlet, + HeaderComponent, + FooterComponent, + ProgressBarComponent, + CookiePopupComponent, + ToastStackComponent, + ], + templateUrl: './app.component.html', + styleUrl: './app.component.scss', + changeDetection: ChangeDetectionStrategy.OnPush, }) - export class AppComponent { + private readonly document = inject(DOCUMENT); + private readonly router = inject(Router); + private readonly titleService = inject(Title); + private readonly headerService = inject(HeaderService); + private readonly metaService = inject(Meta); - constructor(private translateService: TranslateService, - private title: Title, - private meta: Meta, - private snackBar: MatSnackBar, - private router: Router) { + readonly currentUrl = toSignal( + this.router.events.pipe( + filter((event): event is NavigationEnd => event instanceof NavigationEnd), + map((event) => event.urlAfterRedirects), + ), + { initialValue: this.router.url }, + ); - this.translateService = translateService; - this.translateService.setDefaultLang('en'); - this.translateService.use('en'); + constructor() { + this._setMetaTags(); - this.title.setTitle('Angular Example App'); - this.router.events.subscribe((event: any) => { - if (event instanceof NavigationEnd) { - switch (event.urlAfterRedirects) { - case '/': - this.meta.updateTag({ - name: 'description', - content: 'Angular Example app with Angular CLI, Angular Material and more' - }); - break; - case '/' + AppConfig.routes.heroes: - this.title.setTitle('Heroes list'); - this.meta.updateTag({ - name: 'description', - content: 'List of super-heroes' - }); - break; - } - } + effect(() => { + const url = this.currentUrl(); + this.headerService.setCanonical(url); }); - - this.checkBrowserFeatures(); } - checkBrowserFeatures() { - let supported = true; - for (const feature in Modernizr) { - if (Modernizr.hasOwnProperty(feature) && - typeof Modernizr[feature] === 'boolean' && Modernizr[feature] === false) { - supported = false; - break; - } - } - - if (!supported) { - this.translateService.get(['updateBrowser']).subscribe((texts) => { - this.snackBar.open(texts['updateBrowser'], 'OK'); - }); - } + private _setMetaTags(): void { + const { seoTitle, seoDescription } = translations; + this.titleService.setTitle(seoTitle); + this.metaService.addTags([ + { + name: 'og:title', + content: seoTitle, + }, + { + name: 'twitter:title', + content: seoTitle, + }, + { + name: 'og:description', + content: seoDescription, + }, + { + name: 'twitter:description', + content: seoDescription, + }, + ]); + } - return supported; + focusFirstHeading(): void { + const h1 = this.document.querySelector('h1'); + h1?.focus(); } } diff --git a/src/app/app.config.server.ts b/src/app/app.config.server.ts new file mode 100644 index 00000000..0b0921f8 --- /dev/null +++ b/src/app/app.config.server.ts @@ -0,0 +1,11 @@ +import { provideServerRendering, withRoutes } from '@angular/ssr'; +import type { ApplicationConfig } from '@angular/core'; +import { mergeApplicationConfig } from '@angular/core'; +import { appConfig } from './app.config'; +import { serverRoutes } from './app.routes.server'; + +const serverConfig: ApplicationConfig = { + providers: [provideServerRendering(withRoutes(serverRoutes))], +}; + +export const config = mergeApplicationConfig(appConfig, serverConfig); diff --git a/src/app/app.config.ts b/src/app/app.config.ts new file mode 100644 index 00000000..a97bb4c8 --- /dev/null +++ b/src/app/app.config.ts @@ -0,0 +1,74 @@ +import type { ApplicationConfig } from '@angular/core'; +import { + inject, + provideBrowserGlobalErrorListeners, + provideZonelessChangeDetection, +} from '@angular/core'; +import { + createUrlTreeFromSnapshot, + PreloadAllModules, + provideRouter, + Router, + withComponentInputBinding, + withInMemoryScrolling, + withPreloading, + withRouterConfig, + withViewTransitions, +} from '@angular/router'; +import { provideHttpClient, withFetch, withInterceptors } from '@angular/common/http'; +import { cachingInterceptor } from '~core/interceptors/caching.interceptor'; +import { appRoutes } from './app.routes'; +import { provideAnimationsAsync } from '@angular/platform-browser/animations/async'; +import { authenticationInterceptor } from '~core/interceptors/authentication.interceptor'; +import { provideCloudinaryLoader } from '@angular/common'; +import { ENVIRONMENT } from '~core/tokens/environment.token'; +import { environment } from '~environments/environment'; +import { + provideClientHydration, + withEventReplay, + withI18nSupport, + withIncrementalHydration, +} from '@angular/platform-browser'; + +export const appConfig: ApplicationConfig = { + providers: [ + { + provide: ENVIRONMENT, + useValue: environment, + }, + provideZonelessChangeDetection(), + provideBrowserGlobalErrorListeners(), + provideRouter( + appRoutes, + withInMemoryScrolling(), + withViewTransitions({ + onViewTransitionCreated: ({ transition, to }) => { + const router = inject(Router); + const toTree = createUrlTreeFromSnapshot(to, []); + // Skip the transition if the only thing changing is the fragment and queryParams + if ( + router.isActive(toTree, { + paths: 'exact', + matrixParams: 'exact', + fragment: 'ignored', + queryParams: 'ignored', + }) + ) { + transition.skipTransition(); + } + }, + }), + withComponentInputBinding(), + withRouterConfig({ paramsInheritanceStrategy: 'always', onSameUrlNavigation: 'reload' }), + withPreloading(PreloadAllModules), + ), + provideHttpClient( + withFetch(), + withInterceptors([authenticationInterceptor, cachingInterceptor]), + ), + // eslint-disable-next-line @typescript-eslint/no-deprecated + provideAnimationsAsync(), + provideCloudinaryLoader('https://res.cloudinary.com/ismaestro/'), + provideClientHydration(withEventReplay(), withI18nSupport(), withIncrementalHydration()), + ], +}; diff --git a/src/app/app.module.ts b/src/app/app.module.ts deleted file mode 100755 index d6f0cc68..00000000 --- a/src/app/app.module.ts +++ /dev/null @@ -1,51 +0,0 @@ -import {NgModule} from '@angular/core'; -import {BrowserModule} from '@angular/platform-browser'; -import {FormsModule} from '@angular/forms'; - -import {APP_CONFIG, AppConfig} from './config/app.config'; - -import {AppRoutingModule} from './app-routing.module'; -import {SharedModule} from './shared/modules/shared.module'; -import {CoreModule} from './core/core.module'; - -import {AppComponent} from './app.component'; -import {BrowserAnimationsModule} from '@angular/platform-browser/animations'; -import {HTTP_INTERCEPTORS, HttpClient, HttpClientModule} from '@angular/common/http'; -import {TranslateLoader, TranslateModule} from '@ngx-translate/core'; -import {HttpLoaderFactory} from './app.translate.factory'; -import {HeroTopComponent} from './heroes/hero-top/hero-top.component'; -import {ProgressBarService} from './core/progress-bar.service'; -import {ProgressInterceptor} from './shared/interceptors/progress.interceptor'; -import {TimingInterceptor} from './shared/interceptors/timing.interceptor'; - -@NgModule({ - imports: [ - BrowserModule, - BrowserAnimationsModule, - FormsModule, - HttpClientModule, - TranslateModule.forRoot({ - loader: { - provide: TranslateLoader, - useFactory: HttpLoaderFactory, - deps: [HttpClient] - } - }), - SharedModule.forRoot(), - CoreModule, - AppRoutingModule - ], - declarations: [ - AppComponent, - HeroTopComponent - ], - providers: [ - {provide: APP_CONFIG, useValue: AppConfig}, - {provide: HTTP_INTERCEPTORS, useClass: ProgressInterceptor, multi: true, deps: [ProgressBarService]}, - {provide: HTTP_INTERCEPTORS, useClass: TimingInterceptor, multi: true} - ], - bootstrap: [AppComponent] -}) - -export class AppModule { -} diff --git a/src/app/app.routes.server.ts b/src/app/app.routes.server.ts new file mode 100644 index 00000000..4c0e4c70 --- /dev/null +++ b/src/app/app.routes.server.ts @@ -0,0 +1,25 @@ +import type { ServerRoute } from '@angular/ssr'; +import { RenderMode } from '@angular/ssr'; +import { inject } from '@angular/core'; +import { PokemonService } from '~features/pokemon/services/pokemon.service'; +import { firstValueFrom } from 'rxjs'; + +export const serverRoutes: ServerRoute[] = [ + { + path: '', + renderMode: RenderMode.Prerender, + }, + { + path: 'pokemon/:pokemonId', + renderMode: RenderMode.Prerender, + async getPrerenderParams() { + const pokemonService = inject(PokemonService); + const pokemonIds = await firstValueFrom(pokemonService.getLastUpdatedPokemonIds()); + return pokemonIds.map((pokemonId) => ({ pokemonId })); + }, + }, + { + path: '**', + renderMode: RenderMode.Client, + }, +]; diff --git a/src/app/app.routes.ts b/src/app/app.routes.ts new file mode 100644 index 00000000..7b1b4bf8 --- /dev/null +++ b/src/app/app.routes.ts @@ -0,0 +1,32 @@ +import { AUTHENTICATION_PATHS, POKEMON_PATHS, ROOT_PATHS } from '~core/constants/paths.constants'; +import { Error404Component } from '~shared/components/error-404/error-404.component'; +import type { Route } from '@angular/router'; +import { HomeComponent } from '~features/home/home.component'; +import { MyPokemonComponent } from '~features/pokemon/pages/my-pokemon/my-pokemon.component'; +import { authenticationGuard } from '~core/guards/authentication.guard'; + +export const appRoutes: Route[] = [ + { + path: ROOT_PATHS.home, + component: HomeComponent, + }, + { + path: AUTHENTICATION_PATHS.base, + loadChildren: async () => + import('./features/authentication/authentication.routes').then( + (module_) => module_.AUTHENTICATION_ROUTES, + ), + }, + { + path: ROOT_PATHS.myPokemon, + component: MyPokemonComponent, + canActivate: [authenticationGuard], + }, + { + path: POKEMON_PATHS.base, + loadChildren: async () => + import('./features/pokemon/pokemon.routes').then((module_) => module_.POKEMON_ROUTES), + }, + { path: '404', component: Error404Component }, + { path: '**', redirectTo: '404' }, +]; diff --git a/src/app/app.translate.factory.ts b/src/app/app.translate.factory.ts deleted file mode 100644 index 1d420d15..00000000 --- a/src/app/app.translate.factory.ts +++ /dev/null @@ -1,6 +0,0 @@ -import {TranslateHttpLoader} from '@ngx-translate/http-loader'; -import {HttpClient} from '@angular/common/http'; - -export function HttpLoaderFactory(http: HttpClient) { - return new TranslateHttpLoader(http); -} diff --git a/src/app/config/app.config.ts b/src/app/config/app.config.ts deleted file mode 100644 index 13f2ea5b..00000000 --- a/src/app/config/app.config.ts +++ /dev/null @@ -1,19 +0,0 @@ -import {InjectionToken} from '@angular/core'; - -import {IAppConfig} from './iapp.config'; - -export let APP_CONFIG = new InjectionToken('app.config'); - -export const AppConfig: IAppConfig = { - routes: { - heroes: 'heroes', - error404: '404' - }, - endpoints: { - heroes: 'https://nodejs-example-app.herokuapp.com/heroes' - }, - votesLimit: 3, - topHeroesLimit: 4, - snackBarDuration: 3000, - repositoryURL: 'https://github.com/Ismaestro/angular5-example-app' -}; diff --git a/src/app/config/iapp.config.ts b/src/app/config/iapp.config.ts deleted file mode 100644 index 8a5380be..00000000 --- a/src/app/config/iapp.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -export interface IAppConfig { - routes: any; - endpoints: any; - votesLimit: number; - topHeroesLimit: number; - snackBarDuration: number; - repositoryURL: string; -} diff --git a/src/app/core/constants/alerts.constants.ts b/src/app/core/constants/alerts.constants.ts new file mode 100644 index 00000000..2688f22c --- /dev/null +++ b/src/app/core/constants/alerts.constants.ts @@ -0,0 +1,12 @@ +export enum AlertType { + SUCCESS = 'success', + ERROR = 'error', +} + +export type Alert = { + id: string; + message: string; + type: AlertType; + hasCountdown?: boolean; + duration?: number; +}; diff --git a/src/app/core/constants/api-error-codes.constants.ts b/src/app/core/constants/api-error-codes.constants.ts new file mode 100644 index 00000000..c32745e4 --- /dev/null +++ b/src/app/core/constants/api-error-codes.constants.ts @@ -0,0 +1,3 @@ +export const API_ERROR_CODES = { + INVALID_CREDENTIALS_CODE: 2002, +}; diff --git a/src/app/core/constants/endpoints.constants.ts b/src/app/core/constants/endpoints.constants.ts new file mode 100644 index 00000000..bcb8334c --- /dev/null +++ b/src/app/core/constants/endpoints.constants.ts @@ -0,0 +1,42 @@ +import { inject } from '@angular/core'; +import type { Environment } from '~core/tokens/environment.token'; +import { ENVIRONMENT } from '~core/tokens/environment.token'; + +const getAuthEndpoints = (baseUrl: string) => ({ + v1: { + authentication: `${baseUrl}/v1/authentication`, + login: `${baseUrl}/v1/authentication/login`, + refreshToken: `${baseUrl}/v1/authentication/token/refresh`, + }, +}); + +const getUserEndpoints = (baseUrl: string) => ({ + v1: { + user: `${baseUrl}/v1/user`, + pokemonCatch: `${baseUrl}/v1/user/pokemon/catch`, + }, +}); + +const getPokemonEndpoints = (baseUrl: string, host: string) => ({ + v1: { + pokemon: (pokemonIdOrName: string | number) => `${host}/v2/pokemon/${pokemonIdOrName}`, + lastUpdated: `${baseUrl}/v1/pokemon/last-updated`, + }, +}); + +const getAnalyticsEndpoints = (baseUrl: string) => ({ + v1: { + realtimeUsers: `${baseUrl}/v1/analytics/realtime-users`, + }, +}); + +export const getEndpoints = () => { + const environment = inject(ENVIRONMENT); + const POKEMON_API_HOST = 'https://pokeapi.co/api'; + return { + auth: getAuthEndpoints(environment.apiBaseUrl), + user: getUserEndpoints(environment.apiBaseUrl), + pokemon: getPokemonEndpoints(environment.apiBaseUrl, POKEMON_API_HOST), + analytics: getAnalyticsEndpoints(environment.apiBaseUrl), + } as const; +}; diff --git a/src/app/core/constants/language.constants.ts b/src/app/core/constants/language.constants.ts new file mode 100644 index 00000000..21eb32c2 --- /dev/null +++ b/src/app/core/constants/language.constants.ts @@ -0,0 +1,3 @@ +import { Locale } from '~core/enums/locale.enum'; + +export const DEFAULT_LOCALE = Locale.EN; diff --git a/src/app/core/constants/paths.constants.ts b/src/app/core/constants/paths.constants.ts new file mode 100644 index 00000000..20822fc9 --- /dev/null +++ b/src/app/core/constants/paths.constants.ts @@ -0,0 +1,16 @@ +export const ROOT_PATHS = { + home: '', + myPokemon: 'my-pokemon', + error404: '404', +}; + +export const AUTHENTICATION_PATHS = { + base: 'auth', + logIn: 'log-in', + register: 'register', + myAccount: 'my-account', +}; + +export const POKEMON_PATHS = { + base: 'pokemon', +}; diff --git a/src/app/core/constants/urls.constants.ts b/src/app/core/constants/urls.constants.ts new file mode 100644 index 00000000..5f54d20e --- /dev/null +++ b/src/app/core/constants/urls.constants.ts @@ -0,0 +1,17 @@ +import { AUTHENTICATION_PATHS, POKEMON_PATHS, ROOT_PATHS } from '~core/constants/paths.constants'; + +export const ROOT_URLS = { + home: `/${ROOT_PATHS.home}`, + myPokedex: `/${ROOT_PATHS.myPokemon}`, + error404: `/${ROOT_PATHS.error404}`, +}; + +export const AUTH_URLS = { + logIn: `/${AUTHENTICATION_PATHS.base}/${AUTHENTICATION_PATHS.logIn}`, + register: `/${AUTHENTICATION_PATHS.base}/${AUTHENTICATION_PATHS.register}`, + myAccount: `/${AUTHENTICATION_PATHS.base}/${AUTHENTICATION_PATHS.myAccount}`, +}; + +export const POKEMON_URLS = { + detail: (id: string) => `/${POKEMON_PATHS.base}/${id}`, +}; diff --git a/src/app/core/core.module.ts b/src/app/core/core.module.ts deleted file mode 100644 index 5b112e36..00000000 --- a/src/app/core/core.module.ts +++ /dev/null @@ -1,45 +0,0 @@ -import {NgModule, Optional, SkipSelf} from '@angular/core'; -import {CommonModule} from '@angular/common'; -import {FormsModule, ReactiveFormsModule} from '@angular/forms'; - -import {throwIfAlreadyLoaded} from './module-import-guard'; -import {LoggerService} from './logger.service'; - -import {NavComponent} from './nav/nav.component'; -import {FooterComponent} from './footer/footer.component'; -import {SharedModule} from '../shared/modules/shared.module'; -import {RouterModule} from '@angular/router'; -import {SearchBarComponent} from './search-bar/search-bar.component'; -import {Error404Component} from './error404/error-404.component'; -import {ProgressBarService} from './progress-bar.service'; - - -@NgModule({ - imports: [ - CommonModule, - FormsModule, - RouterModule, - SharedModule, - ReactiveFormsModule - ], - exports: [ - NavComponent, - FooterComponent - ], - declarations: [ - NavComponent, - FooterComponent, - SearchBarComponent, - Error404Component - ], - providers: [ - LoggerService, - ProgressBarService - ] -}) - -export class CoreModule { - constructor(@Optional() @SkipSelf() parentModule: CoreModule) { - throwIfAlreadyLoaded(parentModule, 'CoreModule'); - } -} diff --git a/src/app/core/enums/app-error.enum.ts b/src/app/core/enums/app-error.enum.ts new file mode 100644 index 00000000..73ab001d --- /dev/null +++ b/src/app/core/enums/app-error.enum.ts @@ -0,0 +1,7 @@ +export enum AppError { + // Token Errors (3000–3999) + ACCESS_TOKEN_NOT_FOUND = 3000, + REFRESH_TOKEN_NOT_FOUND = 3001, + ACCESS_TOKEN_EXPIRED = 3002, + REFRESH_TOKEN_EXPIRED = 3003, +} diff --git a/src/app/core/enums/language.enum.ts b/src/app/core/enums/language.enum.ts new file mode 100644 index 00000000..5cf7dc1f --- /dev/null +++ b/src/app/core/enums/language.enum.ts @@ -0,0 +1,4 @@ +export enum Language { + EN_US = 'en-US', + ES_ES = 'es-ES', +} diff --git a/src/app/core/enums/locale.enum.ts b/src/app/core/enums/locale.enum.ts new file mode 100644 index 00000000..98f6ef65 --- /dev/null +++ b/src/app/core/enums/locale.enum.ts @@ -0,0 +1,4 @@ +export enum Locale { + EN = 'en', + ES = 'es', +} diff --git a/src/app/core/error404/error-404.component.html b/src/app/core/error404/error-404.component.html deleted file mode 100644 index c534e0a5..00000000 --- a/src/app/core/error404/error-404.component.html +++ /dev/null @@ -1,3 +0,0 @@ -

{{'error404' | translate}}

-

{{'mayTheForce' | translate}}

- \ No newline at end of file diff --git a/src/app/core/error404/error-404.component.scss b/src/app/core/error404/error-404.component.scss deleted file mode 100755 index 4f14b84e..00000000 --- a/src/app/core/error404/error-404.component.scss +++ /dev/null @@ -1,11 +0,0 @@ -img { - margin: 0 auto; - display: block; -} - -.explanation { - margin: 1em 0; - text-align: center; - font-size: 1.2em; - font-weight: 300; -} \ No newline at end of file diff --git a/src/app/core/error404/error-404.component.spec.ts b/src/app/core/error404/error-404.component.spec.ts deleted file mode 100755 index 522fd43c..00000000 --- a/src/app/core/error404/error-404.component.spec.ts +++ /dev/null @@ -1,43 +0,0 @@ -import {async, TestBed} from '@angular/core/testing'; -import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core'; -import {TranslateModule} from '@ngx-translate/core'; -import {APP_CONFIG, AppConfig} from '../../config/app.config'; -import {HeroService} from '../../heroes/shared/hero.service'; -import {MaterialModule} from '../../shared/modules/material.module'; -import {ProgressBarService} from '../progress-bar.service'; -import {TestsModule} from '../../shared/modules/tests.module'; -import {Error404Component} from './error-404.component'; - -describe('Error404Component', () => { - let fixture; - let component; - let progressBarService; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [ - TestsModule, - TranslateModule.forRoot(), - MaterialModule - ], - declarations: [ - Error404Component - ], - providers: [ - {provide: APP_CONFIG, useValue: AppConfig}, - HeroService, - ProgressBarService - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA] - }).compileComponents(); - - fixture = TestBed.createComponent(Error404Component); - fixture.detectChanges(); - component = fixture.debugElement.componentInstance; - progressBarService = TestBed.get(ProgressBarService); - })); - - it('should create nav component', (() => { - expect(component).toBeTruthy(); - })); -}); diff --git a/src/app/core/error404/error-404.component.ts b/src/app/core/error404/error-404.component.ts deleted file mode 100644 index 846679e4..00000000 --- a/src/app/core/error404/error-404.component.ts +++ /dev/null @@ -1,12 +0,0 @@ -import {Component} from '@angular/core'; - -@Component({ - selector: 'app-error-404', - templateUrl: './error-404.component.html', - styleUrls: ['./error-404.component.scss'] -}) - -export class Error404Component { - constructor() { - } -} diff --git a/src/app/core/footer/footer.component.html b/src/app/core/footer/footer.component.html deleted file mode 100644 index 0a4ca3b0..00000000 --- a/src/app/core/footer/footer.component.html +++ /dev/null @@ -1,11 +0,0 @@ -
-
-
- {{ 'angularExampleApp' | translate }} 2017 -
-
- -
-
-
diff --git a/src/app/core/footer/footer.component.scss b/src/app/core/footer/footer.component.scss deleted file mode 100755 index e9866077..00000000 --- a/src/app/core/footer/footer.component.scss +++ /dev/null @@ -1,17 +0,0 @@ -footer { - padding: 8px 16px; - color: white; - background: #3f51b5; - margin-top: 2em; - position: sticky; - top: 100%; - - img { - width: 25%; - } -} - -.footer-xs { - text-align: center; - padding-top: 1em; -} diff --git a/src/app/core/footer/footer.component.spec.ts b/src/app/core/footer/footer.component.spec.ts deleted file mode 100755 index 1513a990..00000000 --- a/src/app/core/footer/footer.component.spec.ts +++ /dev/null @@ -1,29 +0,0 @@ -import {async, TestBed} from '@angular/core/testing'; -import {FooterComponent} from './footer.component'; -import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core'; -import {TranslateModule} from '@ngx-translate/core'; - -describe('FooterComponent', () => { - let fixture; - let component; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [ - TranslateModule.forRoot() - ], - declarations: [ - FooterComponent - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA] - }).compileComponents(); - - fixture = TestBed.createComponent(FooterComponent); - fixture.detectChanges(); - component = fixture.debugElement.componentInstance; - })); - - it('should create footer component', (() => { - expect(component).toBeTruthy(); - })); -}); diff --git a/src/app/core/footer/footer.component.ts b/src/app/core/footer/footer.component.ts deleted file mode 100644 index d1efb5ab..00000000 --- a/src/app/core/footer/footer.component.ts +++ /dev/null @@ -1,10 +0,0 @@ -import {Component} from '@angular/core'; - -@Component({ - selector: 'app-footer', - templateUrl: './footer.component.html', - styleUrls: ['./footer.component.scss'] -}) - -export class FooterComponent { -} diff --git a/src/app/core/guards/authentication.guard.ts b/src/app/core/guards/authentication.guard.ts new file mode 100755 index 00000000..1c21e637 --- /dev/null +++ b/src/app/core/guards/authentication.guard.ts @@ -0,0 +1,16 @@ +import { inject } from '@angular/core'; +import { Router } from '@angular/router'; +import { AUTH_URLS } from '~core/constants/urls.constants'; +import { AuthenticationService } from '~features/authentication/services/authentication.service'; + +export function authenticationGuard(): boolean { + const authenticationService = inject(AuthenticationService); + const router = inject(Router); + + if (authenticationService.authState().isLoggedIn) { + return true; + } + + void router.navigate([AUTH_URLS.logIn]); + return false; +} diff --git a/src/app/core/guards/no-authentication.guard.ts b/src/app/core/guards/no-authentication.guard.ts new file mode 100644 index 00000000..178fb560 --- /dev/null +++ b/src/app/core/guards/no-authentication.guard.ts @@ -0,0 +1,16 @@ +import { inject } from '@angular/core'; +import { Router } from '@angular/router'; +import { AuthenticationService } from '~features/authentication/services/authentication.service'; +import { ROOT_PATHS } from '~core/constants/paths.constants'; + +export function noAuthenticationGuard(): boolean { + const authenticationService = inject(AuthenticationService); + const router = inject(Router); + + if (authenticationService.authState().isLoggedIn) { + void router.navigate([ROOT_PATHS.home]); + return false; + } + + return true; +} diff --git a/src/app/core/interceptors/authentication.interceptor.ts b/src/app/core/interceptors/authentication.interceptor.ts new file mode 100644 index 00000000..142bdf24 --- /dev/null +++ b/src/app/core/interceptors/authentication.interceptor.ts @@ -0,0 +1,187 @@ +import type { + HttpErrorResponse, + HttpEvent, + HttpHandlerFn, + HttpRequest, +} from '@angular/common/http'; +import type { Observable } from 'rxjs'; +import { BehaviorSubject, throwError } from 'rxjs'; +import { catchError, filter, switchMap, take } from 'rxjs/operators'; +import { inject } from '@angular/core'; +import { Router } from '@angular/router'; +import { + ACCESS_TOKEN_KEY, + AuthenticationService, +} from '~features/authentication/services/authentication.service'; +import { AppError } from '~core/enums/app-error.enum'; +import { AUTH_URLS } from '~core/constants/urls.constants'; +import { LOCAL_STORAGE } from '~core/providers/local-storage'; +import { translations } from '../../../locale/translations'; +import { AlertService } from '~core/services/ui/alert.service'; + +const isRefreshing = new BehaviorSubject(false); + +export function authenticationInterceptor( + request: HttpRequest, + next: HttpHandlerFn, +): Observable> { + const authenticationService = inject(AuthenticationService); + const alertService = inject(AlertService); + const storageService = inject(LOCAL_STORAGE); + const router = inject(Router); + + const clonedRequest = attachAccessToken(request, storageService); + return handleRequest({ + request: clonedRequest, + next, + authenticationService, + alertService, + storageService, + router, + }); +} + +function attachAccessToken( + request: HttpRequest, + storageService: Storage | null, +): HttpRequest { + const accessToken = storageService?.getItem(ACCESS_TOKEN_KEY); + if (accessToken) { + return request.clone({ + setHeaders: { Authorization: `Bearer ${accessToken}` }, + }); + } + return request; +} + +function handleRequest(parameters: { + request: HttpRequest; + next: HttpHandlerFn; + authenticationService: AuthenticationService; + alertService: AlertService; + storageService: Storage | null; + router: Router; +}): Observable> { + return parameters.next(parameters.request).pipe( + catchError((errorResponse: HttpErrorResponse) => + handleErrors({ + errorResponse, + ...parameters, + }), + ), + ); +} + +function handleErrors(parameters: { + request: HttpRequest; + next: HttpHandlerFn; + authenticationService: AuthenticationService; + alertService: AlertService; + storageService: Storage | null; + router: Router; + errorResponse: HttpErrorResponse; +}): Observable> { + if (isAccessTokenError(parameters.errorResponse)) { + return tryRefreshToken(parameters); + } + + if (isRefreshTokenError(parameters.errorResponse)) { + parameters.authenticationService.logOut(); + void parameters.router.navigate([AUTH_URLS.logIn]); + return throwError(() => new Error('Session expired. Please log in again.')); + } + + return throwError(() => parameters.errorResponse); +} + +function isAccessTokenError(errorResponse: HttpErrorResponse): boolean { + return ( + errorResponse.status === 401 && + [AppError.ACCESS_TOKEN_NOT_FOUND, AppError.ACCESS_TOKEN_EXPIRED].includes( + errorResponse.error.internalCode, + ) + ); +} + +function isRefreshTokenError(errorResponse: HttpErrorResponse): boolean { + return ( + errorResponse.status === 401 && + [AppError.REFRESH_TOKEN_NOT_FOUND, AppError.REFRESH_TOKEN_EXPIRED].includes( + errorResponse.error.internalCode, + ) + ); +} + +function tryRefreshToken(parameters: { + request: HttpRequest; + next: HttpHandlerFn; + authenticationService: AuthenticationService; + alertService: AlertService; + storageService: Storage | null; + router: Router; +}): Observable> { + if (!isRefreshing.getValue()) { + return handleTokenRefresh(parameters); + } + + return waitForTokenRefresh(parameters); +} + +function handleTokenRefresh(parameters: { + request: HttpRequest; + next: HttpHandlerFn; + authenticationService: AuthenticationService; + alertService: AlertService; + storageService: Storage | null; + router: Router; +}): Observable> { + isRefreshing.next(true); + + return parameters.authenticationService.refreshToken().pipe( + switchMap(() => { + isRefreshing.next(false); + return retryRequestWithRefreshedToken(parameters); + }), + catchError((error: HttpErrorResponse) => { + isRefreshing.next(false); + handleRefreshError(parameters); + return throwError(() => error); + }), + ); +} + +function waitForTokenRefresh(parameters: { + request: HttpRequest; + next: HttpHandlerFn; + storageService: Storage | null; +}): Observable> { + return isRefreshing.pipe( + filter((refreshing) => !refreshing), + take(1), + switchMap(() => retryRequestWithRefreshedToken(parameters)), + ); +} + +function retryRequestWithRefreshedToken(parameters: { + request: HttpRequest; + next: HttpHandlerFn; + storageService: Storage | null; +}): Observable> { + const refreshedToken = parameters.storageService?.getItem(ACCESS_TOKEN_KEY); + const clonedRequest = refreshedToken + ? parameters.request.clone({ + setHeaders: { Authorization: `Bearer ${refreshedToken}` }, + }) + : parameters.request; + return parameters.next(clonedRequest); +} + +function handleRefreshError(parameters: { + authenticationService: AuthenticationService; + alertService: AlertService; + router: Router; +}): void { + parameters.authenticationService.logOut(); + parameters.alertService.createErrorAlert(translations.sessionExpired); + void parameters.router.navigate([AUTH_URLS.logIn]); +} diff --git a/src/app/core/interceptors/caching.interceptor.ts b/src/app/core/interceptors/caching.interceptor.ts new file mode 100644 index 00000000..d09a7a1c --- /dev/null +++ b/src/app/core/interceptors/caching.interceptor.ts @@ -0,0 +1,34 @@ +import type { HttpEvent, HttpHandlerFn, HttpRequest } from '@angular/common/http'; +import { HttpContextToken, HttpResponse } from '@angular/common/http'; +import type { Observable } from 'rxjs'; +import { of, tap } from 'rxjs'; + +export const CACHING_ENABLED = new HttpContextToken(() => false); + +const cache = new Map>(); + +export function cachingInterceptor( + request: HttpRequest, + next: HttpHandlerFn, +): Observable> { + if (request.context.get(CACHING_ENABLED)) { + const cachedResponse = cache.get(request.urlWithParams); + if (cachedResponse) { + return of(cachedResponse.clone()); + } + + return next(request).pipe( + tap((event) => { + if (event instanceof HttpResponse) { + cache.set(request.urlWithParams, event.clone()); + } + }), + ); + } + + return next(request); +} + +export function clearCache() { + cache.clear(); +} diff --git a/src/app/core/logger.service.spec.ts b/src/app/core/logger.service.spec.ts deleted file mode 100755 index bff9d153..00000000 --- a/src/app/core/logger.service.spec.ts +++ /dev/null @@ -1,21 +0,0 @@ -import {TestBed} from '@angular/core/testing'; -import {LoggerService} from './logger.service'; - -describe('LoggerService', () => { - let loggerService; - beforeEach(() => { - TestBed.configureTestingModule({ - providers: [ - LoggerService - ] - }); - - loggerService = TestBed.get(LoggerService); - }); - - it('should log without errors', (() => { - expect(loggerService).toBeDefined(); - expect(LoggerService.error('This is an error')).toBeUndefined(); - expect(LoggerService.log('This is a log')).toBeUndefined(); - })); -}); diff --git a/src/app/core/logger.service.ts b/src/app/core/logger.service.ts deleted file mode 100644 index a148fc5e..00000000 --- a/src/app/core/logger.service.ts +++ /dev/null @@ -1,12 +0,0 @@ -import {Injectable} from '@angular/core'; - -@Injectable() -export class LoggerService { - static log(msg: string): void { - console.log(msg); - } - - static error(msg: string, obj = {}): void { - console.error(msg, obj); - } -} diff --git a/src/app/core/module-import-guard.ts b/src/app/core/module-import-guard.ts deleted file mode 100644 index 445640c4..00000000 --- a/src/app/core/module-import-guard.ts +++ /dev/null @@ -1,5 +0,0 @@ -export function throwIfAlreadyLoaded(parentModule: any, moduleName: string) { - if (parentModule) { - throw new Error(`${moduleName} has already been loaded. Import Core modules in the AppModule only.`); - } -} diff --git a/src/app/core/nav/nav.component.html b/src/app/core/nav/nav.component.html deleted file mode 100644 index 6afeb5fa..00000000 --- a/src/app/core/nav/nav.component.html +++ /dev/null @@ -1,46 +0,0 @@ -
- -
- - -
-
diff --git a/src/app/core/nav/nav.component.scss b/src/app/core/nav/nav.component.scss deleted file mode 100755 index 9a069a59..00000000 --- a/src/app/core/nav/nav.component.scss +++ /dev/null @@ -1,73 +0,0 @@ -:host(app-nav) { - padding-top: 0; - padding-bottom: 5em; - display: grid; - - header { - position: fixed; - z-index: 999; - width: 100%; - - nav { - display: flex; - flex-wrap: wrap; - align-items: center; - padding: 8px 16px; - color: white; - height: 4em; - background: #3f51b5; - - .mat-raised-button { - color: #3f51b5; - margin-right: 1em; - } - - .progress-bar { - display: flex; - align-content: center; - align-items: center; - height: 5px; - } - - .image-icon { - width: 20px; - height: 20px; - } - - img { - vertical-align: middle; - } - } - } -} - -@media (max-width: 680px) { - :host(app-nav) { - padding-top: 0; - padding-bottom: 1em; - - header { - position: relative; - - nav { - height: 7em; - display: flex; - padding: 1em 2em 0; - } - } - } -} - -@media (max-width: 425px) { - :host(app-nav) { - padding-bottom: 0; - - header { - nav { - app-search-bar { - width: 75%; - } - } - } - } -} diff --git a/src/app/core/nav/nav.component.spec.ts b/src/app/core/nav/nav.component.spec.ts deleted file mode 100755 index d5b96088..00000000 --- a/src/app/core/nav/nav.component.spec.ts +++ /dev/null @@ -1,61 +0,0 @@ -import {async, TestBed} from '@angular/core/testing'; -import {NavComponent} from './nav.component'; -import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core'; -import {TranslateModule, TranslateService} from '@ngx-translate/core'; -import {APP_CONFIG, AppConfig} from '../../config/app.config'; -import {HeroService} from '../../heroes/shared/hero.service'; -import {MaterialModule} from '../../shared/modules/material.module'; -import {ProgressBarService} from '../progress-bar.service'; -import {TestsModule} from '../../shared/modules/tests.module'; - -describe('NavComponent', () => { - let fixture; - let component; - let progressBarService; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [ - TestsModule, - TranslateModule.forRoot(), - MaterialModule - ], - declarations: [ - NavComponent - ], - providers: [ - {provide: APP_CONFIG, useValue: AppConfig}, - HeroService, - ProgressBarService - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA] - }).compileComponents(); - - fixture = TestBed.createComponent(NavComponent); - fixture.detectChanges(); - component = fixture.debugElement.componentInstance; - progressBarService = TestBed.get(ProgressBarService); - })); - - it('should create nav component with constructor', (() => { - const translateService = TestBed.get(TranslateService); - const instance = new NavComponent(AppConfig, progressBarService, translateService); - expect(instance).toBeTruthy(); - })); - - it('should create nav component', (() => { - expect(component).toBeTruthy(); - })); - - it('should update progress bar', (() => { - expect(component.progressBarMode).toBeUndefined(); - progressBarService.updateProgressBar$.emit('query'); - expect(component.progressBarMode).toBe('query'); - })); - - it('should change language to spanish', (() => { - expect(component.translateService.currentLang).toBeUndefined(); - component.changeLanguage('es'); - expect(component.translateService.currentLang).toBe('es'); - })); -}); diff --git a/src/app/core/nav/nav.component.ts b/src/app/core/nav/nav.component.ts deleted file mode 100644 index b9c0f790..00000000 --- a/src/app/core/nav/nav.component.ts +++ /dev/null @@ -1,47 +0,0 @@ -import {Component, Inject} from '@angular/core'; -import {TranslateService} from '@ngx-translate/core'; - -import {APP_CONFIG, AppConfig} from '../../config/app.config'; -import {IAppConfig} from '../../config/iapp.config'; -import {ProgressBarService} from '../progress-bar.service'; - -@Component({ - selector: 'app-nav', - templateUrl: './nav.component.html', - styleUrls: ['./nav.component.scss'] -}) - -export class NavComponent { - appConfig: any; - menuItems: any[]; - progressBarMode: string; - - private translateService: TranslateService; - - constructor(@Inject(APP_CONFIG) appConfig: IAppConfig, - private progressBarService: ProgressBarService, - translateService: TranslateService) { - this.appConfig = appConfig; - this.translateService = translateService; - this.loadMenus(); - - this.progressBarService.updateProgressBar$.subscribe((mode: string) => { - this.progressBarMode = mode; - }); - } - - changeLanguage(language: string): void { - this.translateService.use(language).subscribe(() => { - this.loadMenus(); - }); - } - - private loadMenus(): void { - this.translateService.get(['home', 'heroesList'], {}).subscribe((texts: any) => { - this.menuItems = [ - {link: '/', name: texts['home']}, - {link: '/' + AppConfig.routes.heroes, name: texts['heroesList']} - ]; - }); - } -} diff --git a/src/app/core/progress-bar.service.spec.ts b/src/app/core/progress-bar.service.spec.ts deleted file mode 100644 index edbf8c01..00000000 --- a/src/app/core/progress-bar.service.spec.ts +++ /dev/null @@ -1,49 +0,0 @@ -import {TestBed} from '@angular/core/testing'; -import {ProgressBarService} from './progress-bar.service'; -import {HeroService} from '../heroes/shared/hero.service'; -import {TestsModule} from '../shared/modules/tests.module'; -import {TranslateModule} from '@ngx-translate/core'; -import {APP_CONFIG, AppConfig} from '../config/app.config'; - -describe('ProgressBarService', () => { - let progressBarService; - let heroService; - - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [ - TestsModule, - TranslateModule.forRoot(), - ], - providers: [ - {provide: APP_CONFIG, useValue: AppConfig}, - ProgressBarService, - HeroService - ] - }); - - progressBarService = TestBed.get(ProgressBarService); - heroService = TestBed.get(HeroService); - }); - - it('should not be requestsRunning', (() => { - const instance = new ProgressBarService(); - expect(instance).toBeTruthy(); - })); - - it('should not be requestsRunning', (() => { - expect(progressBarService.requestsRunning).toBe(0); - })); - - it('should increase and decrease the counter of requests running', (() => { - progressBarService.increase(); - progressBarService.increase(); - expect(progressBarService.requestsRunning).toBe(2); - progressBarService.decrease(); - expect(progressBarService.requestsRunning).toBe(1); - progressBarService.decrease(); - expect(progressBarService.requestsRunning).toBe(0); - progressBarService.decrease(); - expect(progressBarService.requestsRunning).toBe(0); - })); -}); diff --git a/src/app/core/progress-bar.service.ts b/src/app/core/progress-bar.service.ts deleted file mode 100644 index d1c404ed..00000000 --- a/src/app/core/progress-bar.service.ts +++ /dev/null @@ -1,32 +0,0 @@ -import {EventEmitter, Injectable} from '@angular/core'; - -@Injectable() -export class ProgressBarService { - public updateProgressBar$: EventEmitter; - - private requestsRunning = 0; - - constructor() { - this.updateProgressBar$ = new EventEmitter(); - } - - public list(): number { - return this.requestsRunning; - } - - public increase(): void { - this.requestsRunning++; - if (this.requestsRunning === 1) { - this.updateProgressBar$.emit('query'); - } - } - - public decrease(): void { - if (this.requestsRunning > 0) { - this.requestsRunning--; - if (this.requestsRunning === 0) { - this.updateProgressBar$.emit('none'); - } - } - } -} diff --git a/src/app/core/providers/local-storage.ts b/src/app/core/providers/local-storage.ts new file mode 100644 index 00000000..f8e0166d --- /dev/null +++ b/src/app/core/providers/local-storage.ts @@ -0,0 +1,64 @@ +import { isPlatformBrowser } from '@angular/common'; +import { inject, InjectionToken, PLATFORM_ID } from '@angular/core'; + +/** + * LocalStorage is wrapper class for localStorage, operations can fail due to various reasons, + * such as browser restrictions or storage limits being exceeded. A wrapper is providing error handling. + */ +class LocalStorage implements Storage { + get length(): number { + try { + return localStorage.length; + } catch { + return 0; + } + } + + clear(): void { + try { + localStorage.clear(); + } catch { + /* Empty */ + } + } + + getItem(key: string): string | null { + try { + return localStorage.getItem(key); + } catch { + return null; + } + } + + key(index: number): string | null { + try { + return localStorage.key(index); + } catch { + return null; + } + } + + removeItem(key: string): void { + try { + localStorage.removeItem(key); + } catch { + /* Empty */ + } + } + + setItem(key: string, value: string): void { + try { + localStorage.setItem(key, value); + } catch { + /* Empty */ + } + } +} + +const getStorage = (platformId: object): Storage | null => + isPlatformBrowser(platformId) ? new LocalStorage() : null; + +export const LOCAL_STORAGE = new InjectionToken('LOCAL_STORAGE', { + providedIn: 'root', + factory: () => getStorage(inject(PLATFORM_ID)), +}); diff --git a/src/app/core/search-bar/search-bar.component.html b/src/app/core/search-bar/search-bar.component.html deleted file mode 100644 index b44b5d21..00000000 --- a/src/app/core/search-bar/search-bar.component.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - {{hero.name}} - - diff --git a/src/app/core/search-bar/search-bar.component.scss b/src/app/core/search-bar/search-bar.component.scss deleted file mode 100644 index efc97e7e..00000000 --- a/src/app/core/search-bar/search-bar.component.scss +++ /dev/null @@ -1,15 +0,0 @@ -:host(app-search-bar) { - /deep/ .mat-input-placeholder { - font-weight: 100; - color: white; - } - - /deep/ .mat-input-underline { - background-color: white; - bottom: 1.5em; - } - - /deep/ .mat-input-infix { - border-top: 1.2em solid transparent; - } -} diff --git a/src/app/core/search-bar/search-bar.component.spec.ts b/src/app/core/search-bar/search-bar.component.spec.ts deleted file mode 100755 index 820f0d7d..00000000 --- a/src/app/core/search-bar/search-bar.component.spec.ts +++ /dev/null @@ -1,75 +0,0 @@ -import {async, fakeAsync, TestBed, tick} from '@angular/core/testing'; -import {HeroService} from '../../heroes/shared/hero.service'; -import {SearchBarComponent} from './search-bar.component'; -import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core'; -import {TranslateModule} from '@ngx-translate/core'; -import {APP_CONFIG, AppConfig} from '../../config/app.config'; -import {AppRoutingModule} from '../../app-routing.module'; -import {HeroTopComponent} from '../../heroes/hero-top/hero-top.component'; -import {APP_BASE_HREF} from '@angular/common'; -import {TestsModule} from '../../shared/modules/tests.module'; -import {Error404Component} from '../error404/error-404.component'; - -describe('SearchBarComponent', () => { - let fixture; - let component; - let heroService; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [ - TestsModule, - TranslateModule.forRoot(), - AppRoutingModule - ], - declarations: [ - SearchBarComponent, - HeroTopComponent, - Error404Component - ], - providers: [ - {provide: APP_CONFIG, useValue: AppConfig}, - {provide: APP_BASE_HREF, useValue: '/'}, - HeroService - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA] - }).compileComponents(); - - fixture = TestBed.createComponent(SearchBarComponent); - fixture.detectChanges(); - component = fixture.debugElement.componentInstance; - heroService = TestBed.get(HeroService); - })); - - it('should create hero search component', (() => { - expect(component).toBeTruthy(); - })); - - it('should get all heroes', fakeAsync(() => { - spyOn(heroService, 'getAllHeroes').and.returnValue(Promise.resolve(true)); - tick(); - fixture.detectChanges(); - expect(component.defaultHeroes.length).toBeGreaterThan(0); - for (const hero of component.defaultHeroes) { - expect(hero.default).toBe(true); - } - })); - - it('should filter heroes array', (() => { - component.defaultHeroes = [ - { - 'id': 1, - 'name': 'batman', - 'default': true - }, - { - 'id': 2, - 'name': 'spiderman', - 'default': false - } - ]; - expect(component.filterHeroes('batman').length).toBe(1); - expect(component.filterHeroes('spiderman').length).toBe(0); - expect(component.filterHeroes().length).toBe(2); - })); -}); diff --git a/src/app/core/search-bar/search-bar.component.ts b/src/app/core/search-bar/search-bar.component.ts deleted file mode 100644 index fa5c174f..00000000 --- a/src/app/core/search-bar/search-bar.component.ts +++ /dev/null @@ -1,49 +0,0 @@ -import {Component} from '@angular/core'; -import {LoggerService} from '../logger.service'; -import {Hero} from '../../heroes/shared/hero.model'; -import {FormControl} from '@angular/forms'; -import {HeroService} from '../../heroes/shared/hero.service'; -import {Router} from '@angular/router'; -import {AppConfig} from '../../config/app.config'; - -@Component({ - selector: 'app-search-bar', - templateUrl: './search-bar.component.html', - styleUrls: ['./search-bar.component.scss'], - providers: [ - LoggerService - ] -}) - -export class SearchBarComponent { - defaultHeroes: Array = []; - heroFormControl: FormControl; - filteredHeroes: any; - heroesAutocomplete: any; - - constructor(private heroService: HeroService, - private router: Router) { - this.heroFormControl = new FormControl(); - - this.heroService.getAllHeroes().subscribe((heroes: Array) => { - this.defaultHeroes = heroes.filter(hero => hero['default']); - - this.heroFormControl.valueChanges - .startWith(null) - .map(value => this.filterHeroes(value)) - .subscribe(heroesFiltered => { - this.filteredHeroes = heroesFiltered; - }); - }); - } - - filterHeroes(val: string): Hero[] { - return val ? this.defaultHeroes.filter(hero => hero.name.toLowerCase().indexOf(val.toLowerCase()) === 0 && hero['default']) - : this.defaultHeroes; - } - - searchHero(hero: Hero): Promise { - LoggerService.log('Moved to hero with id: ' + hero.id); - return this.router.navigate([AppConfig.routes.heroes + '/' + hero.id]); - } -} diff --git a/src/app/core/services/analytics.service.ts b/src/app/core/services/analytics.service.ts new file mode 100644 index 00000000..5269dad4 --- /dev/null +++ b/src/app/core/services/analytics.service.ts @@ -0,0 +1,19 @@ +import { Injectable } from '@angular/core'; +import { httpResource, type HttpResourceRef } from '@angular/common/http'; +import { getEndpoints } from '~core/constants/endpoints.constants'; + +@Injectable({ + providedIn: 'root', +}) +export class AnalyticsService { + private readonly endpoints = getEndpoints(); + + getRealtimeUsersResource(): HttpResourceRef<{ activeUsers: number }> { + return httpResource<{ activeUsers: number }>( + () => ({ url: this.endpoints.analytics.v1.realtimeUsers }), + { + defaultValue: { activeUsers: 1 }, + }, + ); + } +} diff --git a/src/app/core/services/language.service.ts b/src/app/core/services/language.service.ts new file mode 100644 index 00000000..fd5194ab --- /dev/null +++ b/src/app/core/services/language.service.ts @@ -0,0 +1,46 @@ +import { inject, Injectable, LOCALE_ID } from '@angular/core'; +import { Router } from '@angular/router'; +import { Language } from '~core/enums/language.enum'; +import { Locale } from '~core/enums/locale.enum'; +import { DEFAULT_LOCALE } from '~core/constants/language.constants'; + +@Injectable({ + providedIn: 'root', +}) +export class LanguageService { + private readonly localeId = inject(LOCALE_ID); + private readonly router = inject(Router); + + convertLocaleToAcceptLanguage(): Language { + if (this.localeId === (Locale.ES as string)) { + return Language.ES_ES; + } + return Language.EN_US; + } + + navigateWithUserLanguage(language: Language, pathToRedirect: string) { + if (this.doesLocaleMatchLanguage(language)) { + void this.router.navigate([pathToRedirect]); + } else { + const localeToRedirect = this.getLocaleFromLanguage(language); + window.location.href = + localeToRedirect === DEFAULT_LOCALE + ? pathToRedirect + : `/${localeToRedirect}${pathToRedirect}`; + } + } + + private doesLocaleMatchLanguage(language: Language) { + if (this.localeId === (Locale.ES as string)) { + return language === Language.ES_ES; + } + return language === Language.EN_US; + } + + private getLocaleFromLanguage(language: Language): Locale { + if (language === Language.ES_ES) { + return Locale.ES; + } + return DEFAULT_LOCALE; + } +} diff --git a/src/app/core/services/storage/cookie-consent.service.ts b/src/app/core/services/storage/cookie-consent.service.ts new file mode 100644 index 00000000..c9f13abb --- /dev/null +++ b/src/app/core/services/storage/cookie-consent.service.ts @@ -0,0 +1,74 @@ +import { inject, Injectable } from '@angular/core'; +import { LOCAL_STORAGE } from '~core/providers/local-storage'; + +declare const window: Window & + // eslint-disable-next-line @typescript-eslint/max-params + typeof globalThis & { gtag?: (a: string, b: string, o: object) => void }; + +const CONSENT_COOKIE_KEY = 'isCookiesConsentAccepted'; +const CONSENT_COOKIE_VALUE = 'true'; + +export enum ConsentState { + DENIED = 'denied', + GRANTED = 'granted', +} + +@Injectable({ + providedIn: 'root', +}) +export class CookieConsentService { + private readonly localStorage: Storage | null = inject(LOCAL_STORAGE); + + setCookieConsent(state: ConsentState): boolean { + if (!this.setConsentInLocalStorage()) { + return false; + } + return this.updateGtagConsent(state); + } + + getCookieState(): boolean { + try { + return this.localStorage?.getItem(CONSENT_COOKIE_KEY) === CONSENT_COOKIE_VALUE; + } catch { + return false; + } + } + + private setConsentInLocalStorage(): boolean { + try { + this.localStorage?.setItem(CONSENT_COOKIE_KEY, CONSENT_COOKIE_VALUE); + return true; + } catch { + return false; + } + } + + private updateGtagConsent(state: ConsentState): boolean { + try { + if (window.gtag) { + const consentOptions = { + /* eslint-disable camelcase*/ + ad_user_data: state, + ad_personalization: state, + ad_storage: state, + analytics_storage: state, + }; + + if (state === ConsentState.DENIED) { + window.gtag('consent', 'default', { + ...consentOptions, + wait_for_update: 500, + /* eslint-enable camelcase*/ + }); + } else { + window.gtag('consent', 'update', { + ...consentOptions, + }); + } + } + return true; + } catch { + return false; + } + } +} diff --git a/src/app/core/services/storage/file.service.ts b/src/app/core/services/storage/file.service.ts new file mode 100644 index 00000000..4db54d23 --- /dev/null +++ b/src/app/core/services/storage/file.service.ts @@ -0,0 +1,14 @@ +import { HttpClient } from '@angular/common/http'; +import { inject, Injectable } from '@angular/core'; +import type { Observable } from 'rxjs'; + +@Injectable({ + providedIn: 'root', +}) +export class FileService { + private readonly httpClient = inject(HttpClient); + + getFileAsText(fileUrl: string): Observable { + return this.httpClient.get(fileUrl, { responseType: 'text' }); + } +} diff --git a/src/app/core/services/ui/alert.service.ts b/src/app/core/services/ui/alert.service.ts new file mode 100644 index 00000000..b9de75c2 --- /dev/null +++ b/src/app/core/services/ui/alert.service.ts @@ -0,0 +1,36 @@ +import { Injectable, signal } from '@angular/core'; +import type { Alert } from '~core/constants/alerts.constants'; +import { AlertType } from '~core/constants/alerts.constants'; + +@Injectable({ providedIn: 'root' }) +export class AlertService { + private readonly _alerts = signal([]); + + readonly alerts = this._alerts.asReadonly(); + + createSuccessAlert(message: string) { + this.createAlert({ + id: this.generateAlertId(), + message, + type: AlertType.SUCCESS, + duration: 7000, + hasCountdown: true, + }); + } + + createErrorAlert(message: string) { + this.createAlert({ id: this.generateAlertId(), message, type: AlertType.ERROR }); + } + + removeAlert(alertToRemove: Alert) { + this._alerts.update((alerts) => alerts.filter((alert) => alert !== alertToRemove)); + } + + private createAlert(alert: Alert) { + this._alerts.update((alerts) => [...alerts, alert]); + } + + private generateAlertId(): string { + return Math.random().toString(36).slice(2, 9) + Date.now().toString(36); + } +} diff --git a/src/app/core/services/ui/header.service.ts b/src/app/core/services/ui/header.service.ts new file mode 100644 index 00000000..34819896 --- /dev/null +++ b/src/app/core/services/ui/header.service.ts @@ -0,0 +1,24 @@ +import { inject, Injectable, DOCUMENT } from '@angular/core'; +import type { Environment } from '~core/tokens/environment.token'; +import { ENVIRONMENT } from '~core/tokens/environment.token'; + +@Injectable({ + providedIn: 'root', +}) +export class HeaderService { + private readonly environment = inject(ENVIRONMENT); + private readonly document = inject(DOCUMENT); + + setCanonical(absolutePath: string): void { + const [pathWithoutFragment] = HeaderService.normalizePath(absolutePath).split('#'), + fullPath = `${this.environment.domain}/${pathWithoutFragment}`; + this.document.querySelector('link[rel=canonical]')?.setAttribute('href', fullPath); + } + + private static normalizePath(path: string): string { + if (path.startsWith('/')) { + return path.slice(1); + } + return path; + } +} diff --git a/src/app/core/services/ui/theme-manager.service.ts b/src/app/core/services/ui/theme-manager.service.ts new file mode 100644 index 00000000..ba19856f --- /dev/null +++ b/src/app/core/services/ui/theme-manager.service.ts @@ -0,0 +1,49 @@ +import { inject, Injectable, signal, DOCUMENT } from '@angular/core'; +import { LOCAL_STORAGE } from '~core/providers/local-storage'; + +// Keep these constants in sync with the code in index.html +const DARK_THEME_CLASS_NAME = 'theme-dark--mode', + LIGHT_THEME_CLASS_NAME = 'theme-light--mode', + THEME_SELECTED_LOCAL_STORAGE_KEY = 'theme'; + +export enum Theme { + DARK = 'dark', + LIGHT = 'light', +} + +@Injectable({ + providedIn: 'root', +}) +export class ThemeManagerService { + private readonly document = inject(DOCUMENT); + private readonly localStorage: Storage | null = inject(LOCAL_STORAGE); + private readonly _themeSelected = signal(Theme.DARK); + + readonly themeSelected = this._themeSelected.asReadonly(); + + constructor() { + const themeFromLocalStorage = this.localStorage?.getItem( + THEME_SELECTED_LOCAL_STORAGE_KEY, + ) as Theme | null; + if (themeFromLocalStorage) { + this.setTheme(themeFromLocalStorage); + } + } + + setTheme(theme: Theme): void { + this._themeSelected.set(theme); + this.localStorage?.setItem(THEME_SELECTED_LOCAL_STORAGE_KEY, this.themeSelected()); + this.setBodyClasses(); + } + + private setBodyClasses(): void { + const documentClassList = this.document.documentElement.classList; + if (this.themeSelected() === Theme.DARK) { + documentClassList.add(DARK_THEME_CLASS_NAME); + documentClassList.remove(LIGHT_THEME_CLASS_NAME); + } else { + documentClassList.add(LIGHT_THEME_CLASS_NAME); + documentClassList.remove(DARK_THEME_CLASS_NAME); + } + } +} diff --git a/src/app/core/tokens/environment.token.ts b/src/app/core/tokens/environment.token.ts new file mode 100644 index 00000000..5cd92ff3 --- /dev/null +++ b/src/app/core/tokens/environment.token.ts @@ -0,0 +1,8 @@ +import { InjectionToken } from '@angular/core'; + +export type Environment = { + apiBaseUrl: string; + domain: boolean; +}; + +export const ENVIRONMENT = new InjectionToken('Environment Configuration'); diff --git a/src/app/features/authentication/authentication.routes.ts b/src/app/features/authentication/authentication.routes.ts new file mode 100755 index 00000000..4db17039 --- /dev/null +++ b/src/app/features/authentication/authentication.routes.ts @@ -0,0 +1,25 @@ +import { LogInComponent } from '~features/authentication/pages/log-in/log-in.component'; +import { RegisterComponent } from '~features/authentication/pages/register/register.component'; +import { noAuthenticationGuard } from '~core/guards/no-authentication.guard'; +import { AUTHENTICATION_PATHS, ROOT_PATHS } from '~core/constants/paths.constants'; +import { authenticationGuard } from '~core/guards/authentication.guard'; +import { MyAccountComponent } from '~features/authentication/pages/my-account/my-account.component'; + +export const AUTHENTICATION_ROUTES = [ + { + path: AUTHENTICATION_PATHS.logIn, + component: LogInComponent, + canActivate: [noAuthenticationGuard], + }, + { + path: AUTHENTICATION_PATHS.register, + component: RegisterComponent, + canActivate: [noAuthenticationGuard], + }, + { + path: AUTHENTICATION_PATHS.myAccount, + component: MyAccountComponent, + canActivate: [authenticationGuard], + }, + { path: '**', redirectTo: ROOT_PATHS.error404 }, +]; diff --git a/src/app/features/authentication/pages/log-in/log-in-form.types.ts b/src/app/features/authentication/pages/log-in/log-in-form.types.ts new file mode 100644 index 00000000..2e3112d4 --- /dev/null +++ b/src/app/features/authentication/pages/log-in/log-in-form.types.ts @@ -0,0 +1,11 @@ +import type { FormControl, FormGroup } from '@angular/forms'; + +export type LogInFormGroup = FormGroup<{ + email: FormControl; + password: FormControl; +}>; + +export type LogInFormState = { + isLoading: boolean; + isSubmitted: boolean; +}; diff --git a/src/app/features/authentication/pages/log-in/log-in.component.html b/src/app/features/authentication/pages/log-in/log-in.component.html new file mode 100755 index 00000000..b00295e0 --- /dev/null +++ b/src/app/features/authentication/pages/log-in/log-in.component.html @@ -0,0 +1,72 @@ +
+

¡Welcome back!

+ +
diff --git a/src/app/features/authentication/pages/log-in/log-in.component.scss b/src/app/features/authentication/pages/log-in/log-in.component.scss new file mode 100755 index 00000000..c5b271c8 --- /dev/null +++ b/src/app/features/authentication/pages/log-in/log-in.component.scss @@ -0,0 +1,36 @@ +@use 'base/media-queries' as mq; +@use 'components/pages'; + +$login-form-max-width: 400px; + +:host { + @include pages.read-page; + + text-align: center; + + .login__form { + max-width: $login-form-max-width; + + .form-footer__paragraph { + padding-block-end: 1rem; + } + + .login__image-container { + position: relative; + + .login__image { + position: absolute; + right: 7px; + bottom: -52px; + width: 55px; + height: auto; + + @include mq.for-tablet-up { + right: -6px; + bottom: -65px; + width: 75px; + } + } + } + } +} diff --git a/src/app/features/authentication/pages/log-in/log-in.component.ts b/src/app/features/authentication/pages/log-in/log-in.component.ts new file mode 100755 index 00000000..d00c2cb8 --- /dev/null +++ b/src/app/features/authentication/pages/log-in/log-in.component.ts @@ -0,0 +1,122 @@ +import { + ChangeDetectionStrategy, + Component, + CUSTOM_ELEMENTS_SCHEMA, + DestroyRef, + inject, + signal, +} from '@angular/core'; +import { FormBuilder, FormControl, ReactiveFormsModule, Validators } from '@angular/forms'; +import { RouterModule } from '@angular/router'; +import { NgOptimizedImage } from '@angular/common'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; +import { catchError, EMPTY, finalize } from 'rxjs'; +import { emailValidator } from '~shared/validators/email.validator'; +import { AUTH_URLS, ROOT_URLS } from '~core/constants/urls.constants'; +import { passwordValidator } from '~shared/validators/password.validator'; +import { SlInputIconFocusDirective } from '~shared/directives/sl-input-icon-focus.directive'; +import { LowercaseDirective } from '~shared/directives/lowercase.directive'; +import { TrimDirective } from '~shared/directives/trim.directive'; +import type { ApiErrorResponse } from '~shared/types/api-response.types'; +import { API_ERROR_CODES } from '~core/constants/api-error-codes.constants'; +import { AlertService } from '~core/services/ui/alert.service'; +import { LanguageService } from '~core/services/language.service'; +import { AuthenticationService } from '../../services/authentication.service'; +import type { User } from '~features/authentication/types/user.type'; +import type { + LogInFormGroup, + LogInFormState, +} from '~features/authentication/pages/log-in/log-in-form.types'; +import { translations } from '../../../../../locale/translations'; + +import '@shoelace-style/shoelace/dist/components/button/button.js'; +import '@shoelace-style/shoelace/dist/components/input/input.js'; +import '@shoelace-style/shoelace/dist/components/icon/icon.js'; + +@Component({ + selector: 'app-log-in', + imports: [ + ReactiveFormsModule, + RouterModule, + SlInputIconFocusDirective, + NgOptimizedImage, + LowercaseDirective, + TrimDirective, + ], + templateUrl: './log-in.component.html', + styleUrl: './log-in.component.scss', + changeDetection: ChangeDetectionStrategy.OnPush, + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class LogInComponent { + private readonly alertService = inject(AlertService); + private readonly formBuilder = inject(FormBuilder); + private readonly authService = inject(AuthenticationService); + private readonly languageService = inject(LanguageService); + private readonly destroyRef = inject(DestroyRef); + + readonly translations = translations; + readonly authUrls = AUTH_URLS; + readonly logInForm = this.createLoginForm(); + readonly formControls = { + email: this.logInForm.get('email') as FormControl, + password: this.logInForm.get('password') as FormControl, + }; + readonly formState = signal({ + isLoading: false, + isSubmitted: false, + }); + + sendForm(): void { + this.updateFormState({ isSubmitted: true }); + + if (this.logInForm.invalid) { + this.logInForm.markAllAsTouched(); + return; + } + + this.updateFormState({ isLoading: true }); + this.authService + .logIn(this.logInForm.getRawValue()) + .pipe( + takeUntilDestroyed(this.destroyRef), + finalize(() => { + this.updateFormState({ isLoading: false }); + }), + catchError((error: ApiErrorResponse) => { + this.handleLoginError(error); + return EMPTY; + }), + ) + .subscribe({ + next: (user: User) => { + this.languageService.navigateWithUserLanguage(user.language, ROOT_URLS.myPokedex); + }, + }); + } + + private createLoginForm(): LogInFormGroup { + return this.formBuilder.group({ + email: new FormControl('', { + validators: [Validators.required, Validators.minLength(4), emailValidator()], + nonNullable: true, + }), + password: new FormControl('', { + validators: [Validators.required, Validators.minLength(6), passwordValidator()], + nonNullable: true, + }), + }); + } + + private handleLoginError(response: ApiErrorResponse): void { + const errorMessage = + response.error.internalCode === API_ERROR_CODES.INVALID_CREDENTIALS_CODE + ? translations.loginCredentialsError + : translations.genericErrorAlert; + this.alertService.createErrorAlert(errorMessage); + } + + private updateFormState(updates: Partial): void { + this.formState.update((state) => ({ ...state, ...updates })); + } +} diff --git a/src/app/features/authentication/pages/my-account/my-account.component.html b/src/app/features/authentication/pages/my-account/my-account.component.html new file mode 100755 index 00000000..32cb0ad3 --- /dev/null +++ b/src/app/features/authentication/pages/my-account/my-account.component.html @@ -0,0 +1,87 @@ +
+

My account

+
+
+ +
+
+ + + +
+
+ + + +
+
+ + English (US) + Español (España) + +
+
+

Your favourite pokemon is:

+ @if (pokemonImage()) { +
+ +
+ } +
+
+ + Save + +
+
+
+ ash standing +
+
diff --git a/src/app/features/authentication/pages/my-account/my-account.component.scss b/src/app/features/authentication/pages/my-account/my-account.component.scss new file mode 100755 index 00000000..52c5d9dc --- /dev/null +++ b/src/app/features/authentication/pages/my-account/my-account.component.scss @@ -0,0 +1,62 @@ +@use 'base/media-queries' as mq; +@use 'components/pages'; + +$update-user-form-max-width: 400px; +$decorative-image-width: 200px; + +:host { + @include pages.read-page; + + text-align: center; + + .update-user__form { + position: relative; + max-width: $update-user-form-max-width; + padding: var(--spacing-r-4xl) var(--spacing-r-xl); + margin-block-end: var(--spacing-r-4xl); + + @include mq.for-tablet-up { + padding: var(--spacing-r-4xl) var(--spacing-r-xl); + } + + .theme-button__container { + position: absolute; + top: var(--spacing-r-lg); + right: var(--spacing-r-lg); + } + + .form-control__container:last-of-type { + margin: 0; + } + + .favourite-pokemon__container { + display: flex; + flex-direction: column; + align-items: center; + + .favourite-pokemon__image-container { + width: 20%; + height: auto; + + @include mq.for-tablet-up { + width: 15%; + } + } + } + } + + .decorative__container { + position: relative; + + .decorative__image { + width: $decorative-image-width; + height: auto; + + @include mq.for-tablet-landscape-up { + position: absolute; + right: -55px; + bottom: 26px; + } + } + } +} diff --git a/src/app/features/authentication/pages/my-account/my-account.component.ts b/src/app/features/authentication/pages/my-account/my-account.component.ts new file mode 100755 index 00000000..690ebc4d --- /dev/null +++ b/src/app/features/authentication/pages/my-account/my-account.component.ts @@ -0,0 +1,141 @@ +import type { OnInit } from '@angular/core'; +import { + ChangeDetectionStrategy, + Component, + CUSTOM_ELEMENTS_SCHEMA, + DestroyRef, + inject, + signal, +} from '@angular/core'; +import { FormBuilder, FormControl, ReactiveFormsModule, Validators } from '@angular/forms'; +import { RouterModule } from '@angular/router'; +import { translations } from '../../../../../locale/translations'; +import { UserService } from '~features/authentication/services/user.service'; +import { Language } from '~core/enums/language.enum'; +import { SlInputIconFocusDirective } from '~shared/directives/sl-input-icon-focus.directive'; +import type { User } from '~features/authentication/types/user.type'; +import { PokemonService } from '~features/pokemon/services/pokemon.service'; +import type { Pokemon } from '~features/pokemon/types/pokemon.type'; +import { PokemonImageComponent } from '~features/pokemon/components/pokemon-image/pokemon-image.component'; +import { AppSlSelectControlDirective } from '~shared/directives/sl-select-control.directive'; +import { ThemeButtonComponent } from '~shared/components/theme-button/theme-button.component'; +import { NgOptimizedImage } from '@angular/common'; +import { AlertService } from '~core/services/ui/alert.service'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; +import { LanguageService } from '~core/services/language.service'; +import { AUTH_URLS } from '~core/constants/urls.constants'; + +import '@shoelace-style/shoelace/dist/components/button/button.js'; +import '@shoelace-style/shoelace/dist/components/input/input.js'; +import '@shoelace-style/shoelace/dist/components/icon/icon.js'; +import '@shoelace-style/shoelace/dist/components/select/select.js'; +import '@shoelace-style/shoelace/dist/components/option/option.js'; +import { TrimDirective } from '~shared/directives/trim.directive'; + +@Component({ + selector: 'app-my-account', + imports: [ + RouterModule, + ReactiveFormsModule, + SlInputIconFocusDirective, + PokemonImageComponent, + AppSlSelectControlDirective, + ThemeButtonComponent, + NgOptimizedImage, + TrimDirective, + ], + templateUrl: './my-account.component.html', + styleUrl: './my-account.component.scss', + changeDetection: ChangeDetectionStrategy.OnPush, + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class MyAccountComponent implements OnInit { + private readonly formBuilder = inject(FormBuilder); + private readonly userService = inject(UserService); + private readonly pokemonService = inject(PokemonService); + private readonly alertService = inject(AlertService); + private readonly destroyRef = inject(DestroyRef); + private readonly languageService = inject(LanguageService); + + readonly isButtonUpdateUserFormLoading = signal(false); + readonly pokemonImage = signal(''); + + translations = translations; + user: User | undefined; + userFavouritePokemon: Pokemon | undefined; + name = new FormControl('', [Validators.required, Validators.minLength(2)]); + email = new FormControl(''); + language = new FormControl(Language.EN_US, [Validators.required]); + updateUserForm = this.formBuilder.group({ + name: this.name, + language: this.language, + email: this.email, + }); + + ngOnInit() { + this.email.disable(); + this.loadUserInfo(); + } + + loadUserInfo() { + this.userService + .getMe() + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe({ + next: (user: User) => { + this.user = user; + this.name.setValue(this.user.name); + this.email.setValue(this.user.email); + this.language.setValue(this.user.language); + this.loadPokemonImage(); + }, + error: () => { + this.alertService.createErrorAlert(translations.genericErrorAlert); + }, + }); + } + + loadPokemonImage() { + this.pokemonService + .getPokemon(this.user!.favouritePokemonId) + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe({ + next: (pokemon) => { + this.userFavouritePokemon = pokemon; + this.pokemonImage.set(this.userFavouritePokemon.sprites.front_default); + }, + error: () => { + this.alertService.createErrorAlert(translations.genericErrorAlert); + }, + }); + } + + sendForm() { + this.updateUserForm.markAllAsTouched(); + if (this.updateUserForm.valid) { + this.isButtonUpdateUserFormLoading.set(true); + this.updateUser(); + } + } + + updateUser() { + const formValue = this.updateUserForm.getRawValue(); + this.userService + .updateUser({ + name: formValue.name!, + language: formValue.language!, + }) + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe({ + next: () => { + this.alertService.createSuccessAlert(translations.myAccountSuccessAlert); + this.languageService.navigateWithUserLanguage(formValue.language!, AUTH_URLS.myAccount); + this.isButtonUpdateUserFormLoading.set(false); + }, + error: () => { + this.isButtonUpdateUserFormLoading.set(false); + this.alertService.createErrorAlert(translations.genericErrorAlert); + }, + }); + } +} diff --git a/src/app/features/authentication/pages/register/register-form.types.ts b/src/app/features/authentication/pages/register/register-form.types.ts new file mode 100644 index 00000000..df873aed --- /dev/null +++ b/src/app/features/authentication/pages/register/register-form.types.ts @@ -0,0 +1,28 @@ +import type { FormControl, FormGroup } from '@angular/forms'; +import type { WritableSignal } from '@angular/core'; + +export type RegisterFormGroup = FormGroup<{ + name: FormControl; + email: FormControl; + password: FormControl; + confirmPassword: FormControl; + favouritePokemonId: FormControl; + terms: FormControl; +}>; + +export type RegisterFormValue = { + name: string; + email: string; + password: string; + confirmPassword: string; + favouritePokemonId: number; + terms: boolean; +}; + +export type RegisterFormState = { + isLoading: boolean; + isSubmitted: boolean; + isRegistrationCompleted: boolean; + passwordsMatch: boolean; + isPokemonValidating: WritableSignal; +}; diff --git a/src/app/features/authentication/pages/register/register.component.html b/src/app/features/authentication/pages/register/register.component.html new file mode 100755 index 00000000..76ce0e37 --- /dev/null +++ b/src/app/features/authentication/pages/register/register.component.html @@ -0,0 +1,151 @@ +
+

+ ¡Register and complete your Pokédex! +

+
+ pokemon haunter +
+ + + +
+
+ + + +
+
+ + + +
+
+ + + +
+
+ + + @if (formState().isPokemonValidating()) { + pokeball + } + +
+
+ + I’ve caught 'em all (the terms and privacy policy) and I’m cool with them! + +
+
+ + Create account + +
+ +
+
diff --git a/src/app/features/authentication/pages/register/register.component.scss b/src/app/features/authentication/pages/register/register.component.scss new file mode 100755 index 00000000..ae8dc543 --- /dev/null +++ b/src/app/features/authentication/pages/register/register.component.scss @@ -0,0 +1,71 @@ +@use 'base/media-queries' as mq; +@use 'components/pages'; + +$register-form-max-width: 400px; + +:host { + @include pages.read-page; + + text-align: center; + + .register__form { + position: relative; + max-width: $register-form-max-width; + padding: var(--spacing-r-7xl) var(--spacing-r-xl); + margin-block-start: var(--spacing-r-6xl); + + @include mq.for-tablet-up { + padding: var(--spacing-r-8xl) var(--spacing-r-xl); + margin-block-start: var(--spacing-r-7xl); + } + + .register-form__image { + position: absolute; + top: -37px; + left: -19px; + width: 82px; + height: auto; + opacity: 0; + animation: fade-in 5s forwards; + + &:hover { + opacity: 1; + animation: fade-out 1s forwards; + } + + @include mq.for-tablet-up { + top: -42px; + left: -40px; + width: 95px; + } + } + + .button--primary.pokemon-appear { + border-radius: var(--border-radius-max); + animation: flash 0.7s infinite; + } + } +} + +@keyframes fade-in { + to { + opacity: 1; + } +} + +@keyframes fade-out { + to { + opacity: 0; + } +} + +@keyframes flash { + 0%, + 100% { + background-color: white; + } + + 50% { + background-color: black; + } +} diff --git a/src/app/features/authentication/pages/register/register.component.ts b/src/app/features/authentication/pages/register/register.component.ts new file mode 100755 index 00000000..de233ff0 --- /dev/null +++ b/src/app/features/authentication/pages/register/register.component.ts @@ -0,0 +1,200 @@ +import type { OnInit } from '@angular/core'; +import { + ChangeDetectionStrategy, + Component, + CUSTOM_ELEMENTS_SCHEMA, + DestroyRef, + inject, + signal, +} from '@angular/core'; +import { FormBuilder, FormControl, ReactiveFormsModule, Validators } from '@angular/forms'; +import { Router, RouterModule } from '@angular/router'; +import { NgOptimizedImage } from '@angular/common'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; +import { catchError, EMPTY, merge } from 'rxjs'; +import { AUTH_URLS, POKEMON_URLS, ROOT_URLS } from '~core/constants/urls.constants'; +import { emailValidator } from '~shared/validators/email.validator'; +import { passwordValidator } from '~shared/validators/password.validator'; +import { SlInputIconFocusDirective } from '~shared/directives/sl-input-icon-focus.directive'; +import { AppSlCheckboxControlDirective } from '~shared/directives/sl-checkbox-control.directive'; +import { LowercaseDirective } from '~shared/directives/lowercase.directive'; +import { TrimDirective } from '~shared/directives/trim.directive'; +import { AlertService } from '~core/services/ui/alert.service'; +import { AuthenticationService } from '../../services/authentication.service'; +import type { + RegisterFormGroup, + RegisterFormState, + RegisterFormValue, +} from './register-form.types'; +import { translations } from '../../../../../locale/translations'; +import { PokemonValidator } from '~features/pokemon/validators/pokemon.validator'; + +import '@shoelace-style/shoelace/dist/components/button/button.js'; +import '@shoelace-style/shoelace/dist/components/input/input.js'; +import '@shoelace-style/shoelace/dist/components/icon/icon.js'; +import '@shoelace-style/shoelace/dist/components/checkbox/checkbox.js'; + +@Component({ + selector: 'app-register', + imports: [ + RouterModule, + ReactiveFormsModule, + NgOptimizedImage, + SlInputIconFocusDirective, + AppSlCheckboxControlDirective, + LowercaseDirective, + TrimDirective, + ], + templateUrl: './register.component.html', + styleUrl: './register.component.scss', + changeDetection: ChangeDetectionStrategy.OnPush, + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class RegisterComponent implements OnInit { + private readonly router = inject(Router); + private readonly formBuilder = inject(FormBuilder); + private readonly authService = inject(AuthenticationService); + private readonly alertService = inject(AlertService); + private readonly pokemonValidator = inject(PokemonValidator); + private readonly destroyRef = inject(DestroyRef); + + private readonly pokemonAppearAudio = new Audio( + 'https://res.cloudinary.com/ismaestro/video/upload/v1735370897/angularexampleapp/assets/sounds/battle-effect_gqckbf.mp3', + ); + + readonly translations = translations; + readonly authUrls = AUTH_URLS; + readonly registerForm = this.createRegisterForm(); + readonly formControls = { + name: this.registerForm.get('name') as FormControl, + email: this.registerForm.get('email') as FormControl, + password: this.registerForm.get('password') as FormControl, + confirmPassword: this.registerForm.get('confirmPassword') as FormControl, + favouritePokemonId: this.registerForm.get('favouritePokemonId') as FormControl, + terms: this.registerForm.get('terms') as FormControl, + }; + readonly formState = signal({ + isLoading: false, + isSubmitted: false, + isRegistrationCompleted: false, + passwordsMatch: false, + isPokemonValidating: this.pokemonValidator.isPokemonValidating, + }); + + constructor() { + this.pokemonAppearAudio.volume = 0.1; + this.formControls.favouritePokemonId.setErrors({ pokemonName: true }); + } + + ngOnInit() { + merge(this.formControls.password.valueChanges, this.formControls.confirmPassword.valueChanges) + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(() => { + this.checkPasswords(); + }); + } + + sendForm(): void { + this.updateFormState({ isSubmitted: true }); + + if (this.registerForm.invalid) { + this.registerForm.markAllAsTouched(); + return; + } + + this.updateFormState({ isLoading: true }); + + this.authService + .register({ + ...this.registerForm.getRawValue(), + favouritePokemonId: this.pokemonValidator.pokemonId() satisfies number, + } as RegisterFormValue) + .pipe( + takeUntilDestroyed(this.destroyRef), + catchError(() => { + this.handleRegistrationError(); + return EMPTY; + }), + ) + .subscribe(() => { + this.handleRegistrationSuccess(); + }); + } + + // eslint-disable-next-line max-lines-per-function + private createRegisterForm(): RegisterFormGroup { + return this.formBuilder.group({ + name: new FormControl('', { + validators: [Validators.required, Validators.minLength(2)], + nonNullable: true, + }), + email: new FormControl('', { + validators: [Validators.required, Validators.minLength(4), emailValidator()], + nonNullable: true, + }), + password: new FormControl('', { + validators: [Validators.required, passwordValidator()], + updateOn: 'change', + nonNullable: true, + }), + confirmPassword: new FormControl('', { + validators: [Validators.required, passwordValidator()], + updateOn: 'change', + nonNullable: true, + }), + favouritePokemonId: new FormControl('', { + validators: [Validators.required, Validators.minLength(2)], + asyncValidators: [this.pokemonValidator.validate.bind(this.pokemonValidator)], + updateOn: 'change', + nonNullable: true, + }), + terms: new FormControl(null, { + validators: [Validators.requiredTrue], + }), + }); + } + + private checkPasswords(): void { + if (this.formControls.password.value === this.formControls.confirmPassword.value) { + this.updateFormState({ passwordsMatch: true }); + this.formControls.confirmPassword.setErrors(null); + } else { + this.updateFormState({ + passwordsMatch: false, + }); + this.formControls.confirmPassword.setErrors({ notEqual: true }); + } + } + + private handleRegistrationSuccess() { + this.pokemonAppearAudio + .play() + .then(() => { + this.updateFormState({ isRegistrationCompleted: true }); + const ANIMATION_END_TIME = 2300; + setTimeout(() => { + const LAST_POKEMON_ID = 1025; + void this.router.navigate([ + POKEMON_URLS.detail(String(this.getRandomNumber(1, LAST_POKEMON_ID))), + ]); + }, ANIMATION_END_TIME); + return true; + }) + .catch(() => { + void this.router.navigate([ROOT_URLS.myPokedex]); + }); + } + + private getRandomNumber(min: number, max: number): number { + return Math.floor(Math.random() * (max - min + 1)) + min; + } + + private handleRegistrationError(): void { + this.alertService.createErrorAlert(translations.genericErrorAlert); + this.updateFormState({ isLoading: false }); + } + + private updateFormState(updates: Partial): void { + this.formState.update((state) => ({ ...state, ...updates })); + } +} diff --git a/src/app/features/authentication/services/authentication.service.ts b/src/app/features/authentication/services/authentication.service.ts new file mode 100755 index 00000000..33b44584 --- /dev/null +++ b/src/app/features/authentication/services/authentication.service.ts @@ -0,0 +1,125 @@ +import { inject, Injectable, signal, linkedSignal } from '@angular/core'; +import { LOCAL_STORAGE } from '~core/providers/local-storage'; +import { HttpClient } from '@angular/common/http'; +import type { Observable } from 'rxjs'; +import { map } from 'rxjs'; +import type { LoginRequest } from '~features/authentication/types/login-request.type'; +import type { LoginResponse } from '~features/authentication/types/login-response.type'; +import type { + RefreshTokenResponse, + RefreshTokenResponseData, +} from '~features/authentication/types/refresh-token.response.type'; +import type { + RegisterResponse, + RegisterResponseData, +} from '~features/authentication/types/register-response.type'; +import { LanguageService } from '~core/services/language.service'; +import type { User } from '~features/authentication/types/user.type'; +import { clearCache } from '~core/interceptors/caching.interceptor'; +import { getEndpoints } from '~core/constants/endpoints.constants'; +import type { RegisterFormValue } from '~features/authentication/pages/register/register-form.types'; + +export const ACCESS_TOKEN_KEY = 'access-token'; +export const REFRESH_TOKEN_KEY = 'refresh-token'; + +@Injectable({ + providedIn: 'root', +}) +export class AuthenticationService { + private readonly endpoints = getEndpoints(); + private readonly storageService = inject(LOCAL_STORAGE); + private readonly httpClient = inject(HttpClient); + private readonly languageService = inject(LanguageService); + + private readonly authTokens = signal<{ accessToken?: string; refreshToken?: string }>({ + accessToken: this.storageService?.getItem(ACCESS_TOKEN_KEY) ?? undefined, + refreshToken: this.storageService?.getItem(REFRESH_TOKEN_KEY) ?? undefined, + }); + + readonly authState = linkedSignal({ + source: this.authTokens, + computation: (tokens) => ({ + isLoggedIn: !!tokens.accessToken, + hasRefreshToken: !!tokens.refreshToken, + accessToken: tokens.accessToken, + refreshToken: tokens.refreshToken, + }), + }); + + register(registerRequest: RegisterFormValue): Observable { + return this.httpClient + .post( + this.endpoints.auth.v1.authentication, + { + email: registerRequest.email.toLowerCase(), + password: registerRequest.password, + name: registerRequest.name, + favouritePokemonId: registerRequest.favouritePokemonId, + terms: registerRequest.terms, + }, + { + headers: { + 'Accept-Language': this.languageService.convertLocaleToAcceptLanguage(), + }, + }, + ) + .pipe( + map((response: RegisterResponse) => { + const { data } = response; + this.saveTokens(data); + return data; + }), + ); + } + + logIn(loginRequest: LoginRequest): Observable { + return this.httpClient + .post(this.endpoints.auth.v1.login, { + email: loginRequest.email.toLowerCase(), + password: loginRequest.password, + }) + .pipe( + map((response: LoginResponse) => { + const { data } = response; + this.saveTokens(data); + return data.user; + }), + ); + } + + refreshToken(): Observable { + return this.httpClient + .post(this.endpoints.auth.v1.refreshToken, { + refreshToken: this.storageService?.getItem(REFRESH_TOKEN_KEY), + }) + .pipe( + map((response: RefreshTokenResponse) => { + const { data } = response; + this.saveTokens(data); + return data; + }), + ); + } + + logOut() { + clearCache(); + this.removeTokens(); + } + + private saveTokens(data: { accessToken: string; refreshToken?: string }) { + this.storageService?.setItem(ACCESS_TOKEN_KEY, data.accessToken); + if (data.refreshToken) { + this.storageService?.setItem(REFRESH_TOKEN_KEY, data.refreshToken); + } + this.authTokens.set({ + accessToken: data.accessToken, + refreshToken: data.refreshToken, + }); + } + + private removeTokens() { + this.storageService?.removeItem(ACCESS_TOKEN_KEY); + this.storageService?.removeItem(REFRESH_TOKEN_KEY); + this.authTokens.set({}); + } +} diff --git a/src/app/features/authentication/services/user.service.ts b/src/app/features/authentication/services/user.service.ts new file mode 100755 index 00000000..bdb77848 --- /dev/null +++ b/src/app/features/authentication/services/user.service.ts @@ -0,0 +1,56 @@ +import { inject, Injectable } from '@angular/core'; +import { HttpClient, HttpContext } from '@angular/common/http'; +import type { Observable } from 'rxjs'; +import { map } from 'rxjs'; +import { CACHING_ENABLED } from '~core/interceptors/caching.interceptor'; +import type { GetMeResponse } from '~features/authentication/types/get-me-response.type'; +import type { User } from '~features/authentication/types/user.type'; +import type { UpdateUserRequest } from '~features/authentication/types/update-user-request.type'; +import type { UpdateUserResponse } from '~features/authentication/types/update-user-response.type'; +import type { CatchPokemonRequest } from '~features/authentication/types/catch-pokemon-request.type'; +import type { CatchPokemonResponse } from '~features/authentication/types/catch-pokemon-response.type'; +import { getEndpoints } from '~core/constants/endpoints.constants'; + +@Injectable({ + providedIn: 'root', +}) +export class UserService { + private readonly endpoints = getEndpoints(); + private readonly httpClient = inject(HttpClient); + + getMe(options?: { cache: boolean }): Observable { + const { cache = true } = options ?? {}; + return this.httpClient + .get(this.endpoints.user.v1.user, { + context: new HttpContext().set(CACHING_ENABLED, cache), + }) + .pipe( + map((response: GetMeResponse) => { + const { data } = response; + return data.user; + }), + ); + } + + updateUser(updateUserRequest: UpdateUserRequest): Observable { + return this.httpClient + .patch(this.endpoints.user.v1.user, updateUserRequest) + .pipe( + map((response: UpdateUserResponse) => { + const { data } = response; + return data.user; + }), + ); + } + + catchPokemon(catchPokemonRequest: CatchPokemonRequest): Observable { + return this.httpClient + .post(this.endpoints.user.v1.pokemonCatch, catchPokemonRequest) + .pipe( + map((response: CatchPokemonResponse) => { + const { data } = response; + return data.user; + }), + ); + } +} diff --git a/src/app/features/authentication/types/catch-pokemon-request.type.ts b/src/app/features/authentication/types/catch-pokemon-request.type.ts new file mode 100644 index 00000000..bd828e9f --- /dev/null +++ b/src/app/features/authentication/types/catch-pokemon-request.type.ts @@ -0,0 +1,3 @@ +export type CatchPokemonRequest = { + pokemonId: number; +}; diff --git a/src/app/features/authentication/types/catch-pokemon-response.type.ts b/src/app/features/authentication/types/catch-pokemon-response.type.ts new file mode 100644 index 00000000..7a50c5ea --- /dev/null +++ b/src/app/features/authentication/types/catch-pokemon-response.type.ts @@ -0,0 +1,8 @@ +import type { User } from '~features/authentication/types/user.type'; +import type { ApiResponse } from '~shared/types/api-response.types'; + +export type CatchPokemonResponseData = { + user: User; +}; + +export type CatchPokemonResponse = ApiResponse; diff --git a/src/app/features/authentication/types/get-me-response.type.ts b/src/app/features/authentication/types/get-me-response.type.ts new file mode 100644 index 00000000..3c04f9d9 --- /dev/null +++ b/src/app/features/authentication/types/get-me-response.type.ts @@ -0,0 +1,8 @@ +import type { User } from '~features/authentication/types/user.type'; +import type { ApiResponse } from '~shared/types/api-response.types'; + +export type GetMeResponseData = { + user: User; +}; + +export type GetMeResponse = ApiResponse; diff --git a/src/app/features/authentication/types/login-request.type.ts b/src/app/features/authentication/types/login-request.type.ts new file mode 100644 index 00000000..4625b36a --- /dev/null +++ b/src/app/features/authentication/types/login-request.type.ts @@ -0,0 +1,4 @@ +export type LoginRequest = { + email: string; + password: string; +}; diff --git a/src/app/features/authentication/types/login-response.type.ts b/src/app/features/authentication/types/login-response.type.ts new file mode 100644 index 00000000..526c5b32 --- /dev/null +++ b/src/app/features/authentication/types/login-response.type.ts @@ -0,0 +1,10 @@ +import type { User } from '~features/authentication/types/user.type'; +import type { ApiResponse } from '~shared/types/api-response.types'; + +export type LoginResponseData = { + accessToken: string; + refreshToken: string; + user: User; +}; + +export type LoginResponse = ApiResponse; diff --git a/src/app/features/authentication/types/refresh-token.response.type.ts b/src/app/features/authentication/types/refresh-token.response.type.ts new file mode 100644 index 00000000..6e760772 --- /dev/null +++ b/src/app/features/authentication/types/refresh-token.response.type.ts @@ -0,0 +1,7 @@ +import type { ApiResponse } from '~shared/types/api-response.types'; + +export type RefreshTokenResponseData = { + accessToken: string; +}; + +export type RefreshTokenResponse = ApiResponse; diff --git a/src/app/features/authentication/types/register-request.type.ts b/src/app/features/authentication/types/register-request.type.ts new file mode 100644 index 00000000..6f46b9cb --- /dev/null +++ b/src/app/features/authentication/types/register-request.type.ts @@ -0,0 +1,7 @@ +export type RegisterRequest = { + email: string; + password: string; + name: string; + favouritePokemonId: number; + terms: boolean; +}; diff --git a/src/app/features/authentication/types/register-response.type.ts b/src/app/features/authentication/types/register-response.type.ts new file mode 100644 index 00000000..30e8af65 --- /dev/null +++ b/src/app/features/authentication/types/register-response.type.ts @@ -0,0 +1,10 @@ +import type { User } from '~features/authentication/types/user.type'; +import type { ApiResponse } from '~shared/types/api-response.types'; + +export type RegisterResponseData = { + accessToken: string; + refreshToken: string; + user: User; +}; + +export type RegisterResponse = ApiResponse; diff --git a/src/app/features/authentication/types/update-user-request.type.ts b/src/app/features/authentication/types/update-user-request.type.ts new file mode 100644 index 00000000..c7b91e32 --- /dev/null +++ b/src/app/features/authentication/types/update-user-request.type.ts @@ -0,0 +1,6 @@ +import type { Language } from '~core/enums/language.enum'; + +export type UpdateUserRequest = { + name?: string; + language?: Language; +}; diff --git a/src/app/features/authentication/types/update-user-response.type.ts b/src/app/features/authentication/types/update-user-response.type.ts new file mode 100644 index 00000000..e3ae9e81 --- /dev/null +++ b/src/app/features/authentication/types/update-user-response.type.ts @@ -0,0 +1,8 @@ +import type { User } from '~features/authentication/types/user.type'; +import type { ApiResponse } from '~shared/types/api-response.types'; + +export type UpdateUserResponseData = { + user: User; +}; + +export type UpdateUserResponse = ApiResponse; diff --git a/src/app/features/authentication/types/user.type.ts b/src/app/features/authentication/types/user.type.ts new file mode 100644 index 00000000..379fdc94 --- /dev/null +++ b/src/app/features/authentication/types/user.type.ts @@ -0,0 +1,12 @@ +import type { Language } from '~core/enums/language.enum'; + +export type User = { + id: string; + createdAt: string; + updatedAt: string; + email: string; + name: string; + language: Language; + favouritePokemonId: number; + caughtPokemonIds: number[]; +}; diff --git a/src/app/features/home/home.component.html b/src/app/features/home/home.component.html new file mode 100755 index 00000000..23005ce2 --- /dev/null +++ b/src/app/features/home/home.component.html @@ -0,0 +1,133 @@ +
+ +

+ Angular
+ Example App +

+
+ +

+ This project is a modern, real-world application designed as a foundation for creating new + Angular-based projects and also a practical resource for learning. +

+ +

+ It comes with features like internationalization, standalone components, a more logical folder + structure, etc, making it a great starting point for building scalable Angular apps. +

+ +

+ Whether you’re looking for a boilerplate or a solid base project, this setup is designed to help + you create clean, maintainable code with ease. +

+ +

+ This project leverages the PokeAPI to provide fun and practical examples, making it + easier to understand key concepts in Angular development. By using data from the Pokémon + universe, it offers a familiar and engaging way to showcase features like fetching data, + handling API calls, and displaying dynamic content. +

+ +
+ ash and pikachu +
+ + @defer (on viewport) { +

Key features

+ +
+ + +

Angular Signals

+
+ +

Unlock reactivity with Angular Signals.

+

+ Signals provide a declarative way to manage state and reactivity in your application, + simplifying data flow and improving performance. +

+
+ Learn more about Signals +
+ + +

Internationalization

+
+ +

Build apps for a global audience.

+

+ Angular’s internationalization tools make it seamless to localize your app, handle + translations, and format dates, numbers, and currencies for any locale. +

+
+ Explore Internationalization +
+ + +

Reactive Forms

+
+ +

Effortless form handling and validation.

+

+ Reactive Forms empower you to create robust, dynamic forms with a model-driven approach, + making validation, dynamic updates, and testing a breeze. +

+
+ Start with Reactive Forms +
+ + +

Animations

+
+ +

Bring your UI to life with Angular Animations.

+

+ Create smooth transitions and engaging effects with Angular’s powerful animation API, + making your application visually appealing and interactive. +

+
+ Discover Angular Animations +
+
+
+ pokemon charizard +
+
+ pokemon blastoise +
+
+

Users seeing this page: {{ activeUsersResource.value().activeUsers }}

+
+ } @placeholder { +
+

Loading...

+
+ } +
diff --git a/src/app/features/home/home.component.scss b/src/app/features/home/home.component.scss new file mode 100755 index 00000000..2255c856 --- /dev/null +++ b/src/app/features/home/home.component.scss @@ -0,0 +1,126 @@ +@use 'base/media-queries' as mq; +@use 'components/pages'; + +$separator-image-width: 130px; +$separator-margin: 0 10px 35px 0; + +:host { + @include pages.read-page; + + .home__heading-kbd { + margin: var(--spacing-r-md) 0; + } + + .separator__container { + text-align: center; + border-bottom: 1px solid var(--septenary-contrast); + + img { + width: $separator-image-width; + height: auto; + margin: $separator-margin; + } + } + + .cards__grid-container { + display: grid; + grid-template-columns: repeat(1, 1fr); + gap: var(--spacing-r-xxl); + margin-block: var(--spacing-r-xl); + margin-block-end: var(--spacing-r-5xl); + + @include mq.for-tablet-portrait-up { + grid-template-columns: repeat(2, 1fr); + } + } + + .real-time__container { + margin-block-start: var(--spacing-r-5xl); + + p { + text-align: center; + } + } + + .decorative-image__container-1 { + text-align: right; + + img { + width: 230px; + height: auto; + } + + @media (width >= 1200px) { + position: absolute; + right: 10px; + bottom: 80px; + + img { + width: 200px; + height: auto; + } + } + + @media (width >= 1300px) { + img { + width: 250px; + } + } + + @media (width >= 1330px) { + right: 30px; + + img { + width: 250px; + } + } + + @media (width >= 1490px) { + img { + width: 330px; + } + } + } + + .decorative-image__container-2 { + text-align: left; + + img { + width: 200px; + height: auto; + } + + @media (width >= 1200px) { + position: absolute; + bottom: -300px; + left: 10px; + + img { + width: 180px; + height: auto; + } + } + + @media (width >= 1300px) { + left: 40px; + + img { + width: 220px; + } + } + + @media (width >= 1330px) { + img { + width: 220px; + } + } + + @media (width >= 1490px) { + left: 60px; + + img { + width: 270px; + } + } + } +} diff --git a/src/app/features/home/home.component.ts b/src/app/features/home/home.component.ts new file mode 100755 index 00000000..7f479820 --- /dev/null +++ b/src/app/features/home/home.component.ts @@ -0,0 +1,31 @@ +import { ChangeDetectionStrategy, Component, effect, inject } from '@angular/core'; +import { NgOptimizedImage } from '@angular/common'; +import { DecorativeHeaderComponent } from '~shared/components/decorative-header/decorative-header.component'; +import { CardComponent } from '~shared/components/card/card.component'; +import { interval } from 'rxjs'; +import { AnalyticsService } from '~core/services/analytics.service'; + +@Component({ + selector: 'app-home', + imports: [DecorativeHeaderComponent, NgOptimizedImage, CardComponent], + standalone: true, + templateUrl: './home.component.html', + styleUrl: './home.component.scss', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class HomeComponent { + private readonly analyticsService = inject(AnalyticsService); + readonly activeUsersResource = this.analyticsService.getRealtimeUsersResource(); + + constructor() { + this.activeUsersResource.reload(); + effect(() => { + const sub = interval(5000).subscribe(() => { + this.activeUsersResource.reload(); + }); + return () => { + sub.unsubscribe(); + }; + }); + } +} diff --git a/src/app/features/pokemon/components/catch-animation/catch-animation.component.html b/src/app/features/pokemon/components/catch-animation/catch-animation.component.html new file mode 100755 index 00000000..43a12234 --- /dev/null +++ b/src/app/features/pokemon/components/catch-animation/catch-animation.component.html @@ -0,0 +1,22 @@ +@if (pokemonState() !== 'disappear') { +
+ +
+} + + +Pokeball diff --git a/src/app/features/pokemon/components/catch-animation/catch-animation.component.scss b/src/app/features/pokemon/components/catch-animation/catch-animation.component.scss new file mode 100644 index 00000000..746c715b --- /dev/null +++ b/src/app/features/pokemon/components/catch-animation/catch-animation.component.scss @@ -0,0 +1,22 @@ +@use 'base/media-queries' as mq; + +:host { + .pokemon__container { + position: absolute; + right: 45px; + bottom: -105px; + + @include mq.for-tablet-up { + right: 130px; + bottom: -170px; + } + } + + .pokeball__image { + position: absolute; + top: 161px; + left: 96px; + width: 20px; + height: auto; + } +} diff --git a/src/app/features/pokemon/components/catch-animation/catch-animation.component.ts b/src/app/features/pokemon/components/catch-animation/catch-animation.component.ts new file mode 100755 index 00000000..65100f98 --- /dev/null +++ b/src/app/features/pokemon/components/catch-animation/catch-animation.component.ts @@ -0,0 +1,115 @@ +import type { OnInit } from '@angular/core'; +import { + ChangeDetectionStrategy, + Component, + DOCUMENT, + effect, + inject, + input, + signal, + type WritableSignal, +} from '@angular/core'; +import { NgOptimizedImage, NgStyle } from '@angular/common'; +import { BattleEvent } from '~features/pokemon/components/pokedex/enums/pokedex-action.enum'; +import { catchAnimations } from '~features/pokemon/components/catch-animation/catch.animations'; + +enum PokeballState { + Idle = 'idle', + Catching = 'catching', + Falling = 'falling', + Shaking = 'shaking', + Shining = 'shining', +} + +enum PokemonState { + Idle = 'idle', + Shining = 'shining', + Disappear = 'disappear', +} + +@Component({ + selector: 'app-catch-animation', + imports: [NgOptimizedImage, NgStyle], + templateUrl: './catch-animation.component.html', + styleUrl: './catch-animation.component.scss', + changeDetection: ChangeDetectionStrategy.OnPush, + host: { + '(window:resize)': 'loadAnimationPositions()', + }, + animations: [catchAnimations], +}) +export class CatchAnimationComponent implements OnInit { + private readonly document = inject(DOCUMENT); + + readonly pokemonBattleEvent = input.required>(); + readonly pokeballStartingPoint = signal(''); + readonly pokeballPokemonXPoint = signal(''); + readonly pokeballPokemonYPoint = signal(''); + readonly pokeballGroundYPoint = signal(''); + readonly pokeballState = signal(PokeballState.Idle); + readonly pokemonState = signal(PokemonState.Idle); + + constructor() { + effect(() => { + const pokemonBattleEvent = this.pokemonBattleEvent(); + if (pokemonBattleEvent() === BattleEvent.THROW_POKEBALL) { + this.startCatchAnimation(); + } + if ( + pokemonBattleEvent() === BattleEvent.POKEMON_LOADED || + pokemonBattleEvent() === BattleEvent.RESET_BATTLE + ) { + this.pokeballState.set(PokeballState.Idle); + this.pokemonState.set(PokemonState.Idle); + } + }); + } + + ngOnInit() { + this.loadAnimationPositions(); + } + + startCatchAnimation() { + this.pokeballState.set(PokeballState.Catching); + + setTimeout(() => { + this.pokemonState.set(PokemonState.Shining); + }, 500); + setTimeout(() => { + this.pokemonState.set(PokemonState.Disappear); + }, 1500); + setTimeout(() => { + this.pokeballState.set(PokeballState.Falling); + }, 1700); + setTimeout(() => { + this.pokeballState.set(PokeballState.Shaking); + }, 3000); + setTimeout(() => { + this.pokeballState.set(PokeballState.Shining); + this.pokemonBattleEvent().set(BattleEvent.CATCH_ANIMATION_ENDED); + }, 6500); + } + + loadAnimationPositions() { + const innerWidth = this.document.defaultView?.innerWidth; + if (innerWidth && innerWidth <= 768) { + this.setMobilePositions(); + } else { + this.setDesktopPositions(); + } + } + + private setMobilePositions() { + this.pokeballStartingPoint.set('0px, -80px'); + this.pokeballPokemonXPoint.set('105px'); + this.pokeballPokemonYPoint.set('-140px'); + this.pokeballGroundYPoint.set('-80px'); + } + + private setDesktopPositions() { + this.pokeballStartingPoint.set('80px, 15px'); + this.pokeballPokemonXPoint.set('260px'); + this.pokeballPokemonYPoint.set('-100px'); + this.pokeballGroundYPoint.set('-10px'); + } +} diff --git a/src/app/features/pokemon/components/catch-animation/catch.animations.ts b/src/app/features/pokemon/components/catch-animation/catch.animations.ts new file mode 100644 index 00000000..9a2156f2 --- /dev/null +++ b/src/app/features/pokemon/components/catch-animation/catch.animations.ts @@ -0,0 +1,193 @@ +import { animate, keyframes, state, style, transition, trigger } from '@angular/animations'; + +/* eslint-disable @typescript-eslint/no-deprecated */ +export const catchAnimations = [ + trigger('pokeballAnimation', [ + state( + 'idle', + style({ + opacity: 0, + transform: `translate(var(--pokeball-starting-point))`, + filter: 'brightness(1)', + }), + ), + state( + 'catching', + style({ + transform: `translate(var(--pokeball-pokemon-x-point), var(--pokeball-pokemon-y-point))`, + }), + ), + state( + 'falling', + style({ + transform: `translate(var(--pokeball-pokemon-x-point), var(--pokeball-ground-y-point))`, + }), + ), + state( + 'shaking', + style({ + transform: `translate(var(--pokeball-pokemon-x-point), var(--pokeball-ground-y-point)) translateX(0) rotate(0deg)`, + }), + ), + state( + 'shining', + style({ + transform: `translate(var(--pokeball-pokemon-x-point), var(--pokeball-ground-y-point))`, + filter: 'brightness(2) scale(1.1)', + }), + ), + transition('idle => catching', [ + animate( + '1s ease-in-out', + keyframes([ + style({ transform: `translate(var(--pokeball-starting-point))`, offset: 0 }), + style({ opacity: 0.5, offset: 0.6 }), + style({ + transform: `translate(var(--pokeball-pokemon-x-point), var(--pokeball-pokemon-y-point))`, + offset: 1, + }), + ]), + ), + ]), + transition('catching => falling', [ + animate( + '0.3s ease-out', + keyframes([ + style({ + transform: `translate(var(--pokeball-pokemon-x-point), var(--pokeball-pokemon-y-point))`, + offset: 0, + }), + style({ + transform: `translate(var(--pokeball-pokemon-x-point), var(--pokeball-ground-y-point))`, + offset: 1, + }), + ]), + ), + ]), + transition('falling => shaking', [ + animate( + '3s ease-out', + keyframes([ + style({ + transform: `translate(var(--pokeball-pokemon-x-point), var(--pokeball-ground-y-point)) translateX(0) rotate(0deg)`, + offset: 0, + }), + style({ + transform: `translate(var(--pokeball-pokemon-x-point), var(--pokeball-ground-y-point)) translateX(-3px) rotate(-10deg)`, + offset: 0.1, + }), + style({ + transform: `translate(var(--pokeball-pokemon-x-point), var(--pokeball-ground-y-point)) translateX(3px) rotate(10deg)`, + offset: 0.2, + }), + style({ + transform: `translate(var(--pokeball-pokemon-x-point), var(--pokeball-ground-y-point)) translateX(-3px) rotate(-5deg)`, + offset: 0.3, + }), + style({ + transform: `translate(var(--pokeball-pokemon-x-point), var(--pokeball-ground-y-point)) translateX(0) rotate(0deg)`, + offset: 0.35, + }), + style({ + transform: `translate(var(--pokeball-pokemon-x-point), var(--pokeball-ground-y-point)) translateX(0) rotate(0deg)`, + offset: 0.6, + }), + style({ + transform: `translate(var(--pokeball-pokemon-x-point), var(--pokeball-ground-y-point)) translateX(-3px) rotate(-10deg)`, + offset: 0.7, + }), + style({ + transform: `translate(var(--pokeball-pokemon-x-point), var(--pokeball-ground-y-point)) translateX(3px) rotate(10deg)`, + offset: 0.8, + }), + style({ + transform: `translate(var(--pokeball-pokemon-x-point), var(--pokeball-ground-y-point)) translateX(-3px) rotate(-5deg)`, + offset: 0.9, + }), + style({ + transform: `translate(var(--pokeball-pokemon-x-point), var(--pokeball-ground-y-point)) translateX(0) rotate(0deg)`, + offset: 1, + }), + ]), + ), + ]), + transition('shaking => shining', [ + animate( + '2s ease-out', + keyframes([ + style({ + transform: `translate(var(--pokeball-pokemon-x-point), var(--pokeball-ground-y-point)) scale(1)`, + filter: 'brightness(1)', + offset: 0, + }), + style({ + transform: `translate(var(--pokeball-pokemon-x-point), var(--pokeball-ground-y-point)) scale(1.1)`, + filter: 'brightness(1.5)', + offset: 0.2, + }), + style({ + transform: `translate(var(--pokeball-pokemon-x-point), var(--pokeball-ground-y-point)) scale(1)`, + filter: 'brightness(1)', + offset: 1, + }), + ]), + ), + ]), + ]), + trigger('pokemonAnimation', [ + state( + 'idle', + style({ + opacity: 1, + filter: 'brightness(1)', + transform: 'scale(1) translate(0, 0)', + }), + ), + state( + 'shining', + style({ + opacity: 1, + filter: 'brightness(2)', + }), + ), + state( + 'disappear', + style({ + opacity: 1, + transform: 'scale(1) translate(0, 0)', + }), + ), + transition('idle => shining', [ + animate( + '2s ease-in-out', + keyframes([ + style({ filter: 'brightness(1.2)', offset: 0.3 }), + style({ filter: 'brightness(2)', offset: 0.6 }), + style({ filter: 'brightness(1.5)', offset: 1 }), + ]), + ), + ]), + transition('shining => disappear', [ + animate( + '1s ease-out', + keyframes([ + style({ + opacity: 1, + transform: 'scale(1) translate(0, 0)', + offset: 0, + }), + style({ + opacity: 0.7, + transform: 'scale(0.6) translate(0, -200px)', + offset: 0.5, + }), + style({ + opacity: 0, + transform: 'scale(0) translate(0, -300px)', + offset: 1, + }), + ]), + ), + ]), + ]), +]; diff --git a/src/app/features/pokemon/components/pokedex/enums/pokedex-action.enum.ts b/src/app/features/pokemon/components/pokedex/enums/pokedex-action.enum.ts new file mode 100644 index 00000000..2f514aee --- /dev/null +++ b/src/app/features/pokemon/components/pokedex/enums/pokedex-action.enum.ts @@ -0,0 +1,6 @@ +export enum BattleEvent { + RESET_BATTLE = 'RESET_BATTLE', + POKEMON_LOADED = 'POKEMON_LOADED', + THROW_POKEBALL = 'THROW_POKEBALL', + CATCH_ANIMATION_ENDED = 'CATCH_ANIMATION_ENDED', +} diff --git a/src/app/features/pokemon/components/pokedex/pokedex-pads.component.scss b/src/app/features/pokemon/components/pokedex/pokedex-pads.component.scss new file mode 100644 index 00000000..9d0cf600 --- /dev/null +++ b/src/app/features/pokemon/components/pokedex/pokedex-pads.component.scss @@ -0,0 +1,201 @@ +@use 'base/media-queries' as mq; + +$pokedex-red: #cd112f; +$pokedex-black: #000; +$pokedex-dark-gray: #222; +$pokedex-light-gray: #dedede; +$pokedex-green: #52af5f; +$pokedex-blue: #08cbf8; +$pokedex-white: #fff; +$pokedex-text-dark: #032d28; + +:host { + .pokedex__joystick-container { + position: absolute; + left: 0; + z-index: 1; + width: 100px; + height: 100px; + margin-top: -130px; + margin-left: 300px; + content: ' '; + background: $pokedex-dark-gray; + border: var(--spacing-xs) solid $pokedex-black; + border-top-right-radius: 50px; + border-bottom-right-radius: 50px; + transition: left 1s ease; + + @include mq.for-phone-only { + display: none; + } + + .pokedex__joystick-tracker { + width: 90px; + height: 90px; + margin: 3px; + background: $pokedex-light-gray; + border: var(--spacing-xs) solid $pokedex-black; + border-radius: 50%; + + &::before, + &::after { + position: absolute; + content: ' '; + } + + &::before { + width: 70px; + height: 70px; + margin-top: var(--spacing-md); + margin-left: var(--spacing-md); + border: 2px solid $pokedex-dark-gray; + border-radius: 50%; + } + + &::after { + width: 10px; + height: 10px; + margin-top: -2px; + margin-left: 20px; + background: $pokedex-dark-gray; + border-radius: 50%; + } + } + + .pokedex__joystick-button { + width: 50px; + height: 50px; + margin-top: 18px; + margin-left: 18px; + background: $pokedex-blue; + border: var(--spacing-xs) solid $pokedex-dark-gray; + border-radius: 50%; + } + } + + .pokedex__top-data-container, + .pokedex__bottom-data-container { + height: 100px; + padding: var(--spacing-md); + margin: 12px 12px 12px 34px; + border: var(--spacing-sm) solid $pokedex-black; + border-radius: var(--spacing-md); + } + + .pokedex__top-data-container { + display: flex; + flex-direction: row; + gap: var(--spacing-lg); + margin-left: var(--spacing-3xl); + color: $pokedex-text-dark; + background: $pokedex-white; + + .pokedex__pokemon-image-container { + display: flex; + align-items: center; + max-width: 60px; + + .pokedex__pokemon-image { + width: 100px; + height: auto; + } + } + + .pokedex__top-text-container { + display: flex; + flex-direction: column; + justify-content: center; + + .pokemon__name-text { + font-weight: var(--font-weight-bold); + } + + p { + margin-bottom: var(--spacing-r-sm); + font-size: var(--font-size-xs); + font-weight: var(--font-weight-light); + line-height: var(--line-height-xs); + } + } + } + + .pokedex__bottom-data-container { + display: flex; + flex: 1; + flex-direction: column; + justify-content: center; + color: white; + background: $pokedex-text-dark; + + p { + margin-bottom: var(--spacing-md); + font-size: var(--font-size-xs); + font-weight: var(--font-weight-light); + line-height: var(--line-height-md); + text-align: center; + } + + .pokedex-actions__container { + width: auto; + padding: 0 var(--spacing-xxl); + text-align: center; + } + } + + .pokedex__pad-container { + width: 66px; + background: $pokedex-dark-gray; + border-right: var(--spacing-sm) solid $pokedex-black; + border-top-left-radius: 75px; + border-bottom-left-radius: 75px; + + &::before { + position: absolute; + width: 12px; + height: 6px; + margin-top: 70px; + content: ' '; + background: $pokedex-green; + border: var(--spacing-xs) solid $pokedex-black; + border-left-width: 0; + } + + .pokedex__pad { + position: absolute; + width: 85px; + height: 85px; + margin-top: 30px; + margin-left: 17px; + background: $pokedex-light-gray; + border: var(--spacing-xs) solid $pokedex-black; + border-right-width: 0; + border-top-left-radius: 41px; + border-bottom-left-radius: 41px; + + &::before, + &::after { + position: absolute; + width: 50px; + height: 15px; + margin-top: 35px; + margin-left: var(--spacing-xxl); + content: ' '; + background: $pokedex-dark-gray; + } + + &::after { + transform: rotate(90deg); + } + } + + .pokedex__pad-circle { + position: absolute; + width: 65px; + height: 65px; + margin-top: 40px; + margin-left: 30px; + border: var(--spacing-xs) solid $pokedex-light-gray; + border-radius: 50%; + } + } +} diff --git a/src/app/features/pokemon/components/pokedex/pokedex.component.html b/src/app/features/pokemon/components/pokedex/pokedex.component.html new file mode 100644 index 00000000..827c772b --- /dev/null +++ b/src/app/features/pokemon/components/pokedex/pokedex.component.html @@ -0,0 +1,61 @@ +
+
+
+
+
+
+
+ +
+
+ @if (pokemon()) { +

{{pokemon()?.name | firstTitleCase}}

+

N.º: {{pokemon()?.order}}

+

Height: {{pokemon()?.height}} dm

+

Weight: {{pokemon()?.weight}} hg

+ } +
+
+
+
+
+
+
+
+
+
+
+
+ @if (userHasCaught()) { +

+ 🎯 Nice catch, {{user?.name}}! You’re one step closer to being a Pokémon Master—keep it + up! 🌟 +

+ } @else if (userHasPokemon()) { +

Already got this one, keep going!

+ } @else { +

Still gotta catch 'em all, this one's missing from your Pokédex!

+
+ + POKEBALL + +
+ } +
+
+
+
+
+
+
+
diff --git a/src/app/features/pokemon/components/pokedex/pokedex.component.scss b/src/app/features/pokemon/components/pokedex/pokedex.component.scss new file mode 100644 index 00000000..4489c26f --- /dev/null +++ b/src/app/features/pokemon/components/pokedex/pokedex.component.scss @@ -0,0 +1,117 @@ +@use 'base/media-queries' as mq; + +$pokedex-red: #cd112f; +$pokedex-black: #000; +$pokedex-dark-gray: #222; +$pokedex-light-gray: #dedede; +$pokedex-green: #52af5f; +$pokedex-blue: #08cbf8; +$pokedex-white: #fff; +$pokedex-text-dark: #032d28; + +:host { + .pokedex__container { + position: relative; + + &.closed { + .pokedex__flap-container { + transform: rotateX(180deg) translate(0, -14px); + } + + .pokedex__joystick-container { + left: -100px; + } + + .pokedex__pad-container::before { + background: $pokedex-black; + } + } + + .pokedex__separator, + .pokedex__bottom-part-container { + background: $pokedex-red; + border: var(--spacing-xs) solid $pokedex-black; + } + + .pokedex__flap-container { + position: absolute; + width: 100%; + height: 100%; + transform: rotateX(360deg); + transform-origin: 0 100%; + transform-style: preserve-3d; + transition: transform 1s; + + figure { + position: absolute; + display: block; + width: 100%; + height: 100%; + margin: 0; + backface-visibility: hidden; + } + + .pokedex__flap-front, + .pokedex__flap-back { + background: $pokedex-red; + border: var(--spacing-xs) solid $pokedex-black; + } + + .pokedex__flap-front { + border-bottom-right-radius: var(--spacing-3xl); + border-bottom-left-radius: var(--spacing-3xl); + transform: rotateX(180deg); + } + + .pokedex__flap-back { + border-top-left-radius: 10px; + border-top-right-radius: var(--spacing-3xl); + + &::before { + position: absolute; + width: 50px; + height: 100px; + margin-top: 23px; + margin-left: -52px; + content: ' '; + background: $pokedex-red; + border: var(--spacing-sx) solid $pokedex-black; + border-right-width: 0; + border-top-left-radius: 50px; + border-bottom-left-radius: 50px; + } + } + } + + .pokedex__top-part-container { + position: relative; + z-index: 11; + width: 230px; + height: 150px; + margin-left: 70px; + cursor: pointer; + perspective: 800px; + } + + .pokedex__separator { + position: relative; + z-index: 10; + width: 230px; + height: 10px; + margin-left: 70px; + border-bottom-width: 0; + } + + .pokedex__bottom-part-container { + position: relative; + z-index: 10; + display: flex; + flex-direction: row; + width: 300px; + height: 150px; + border-top-left-radius: 75px; + border-bottom-right-radius: var(--spacing-3xl); + border-bottom-left-radius: 75px; + } + } +} diff --git a/src/app/features/pokemon/components/pokedex/pokedex.component.ts b/src/app/features/pokemon/components/pokedex/pokedex.component.ts new file mode 100644 index 00000000..9a78793e --- /dev/null +++ b/src/app/features/pokemon/components/pokedex/pokedex.component.ts @@ -0,0 +1,154 @@ +import type { OnInit, WritableSignal } from '@angular/core'; +import { + ChangeDetectionStrategy, + Component, + CUSTOM_ELEMENTS_SCHEMA, + DestroyRef, + effect, + inject, + input, + signal, +} from '@angular/core'; +import type { Pokemon } from '~features/pokemon/types/pokemon.type'; +import { PokemonImageComponent } from '~features/pokemon/components/pokemon-image/pokemon-image.component'; +import { FirstTitleCasePipe } from '~shared/pipes/first-title-case.pipe'; +import { UserService } from '~features/authentication/services/user.service'; +import type { User } from '~features/authentication/types/user.type'; +import { BattleEvent } from '~features/pokemon/components/pokedex/enums/pokedex-action.enum'; +import { AlertService } from '~core/services/ui/alert.service'; +import { translations } from '../../../../../locale/translations'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; +import { AuthenticationService } from '~features/authentication/services/authentication.service'; + +@Component({ + selector: 'app-pokedex', + imports: [PokemonImageComponent, FirstTitleCasePipe], + templateUrl: './pokedex.component.html', + styleUrls: ['./pokedex.component.scss', './pokedex-pads.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class PokedexComponent implements OnInit { + private readonly userService = inject(UserService); + private readonly alertService = inject(AlertService); + private readonly destroyRef = inject(DestroyRef); + private readonly authenticationService = inject(AuthenticationService); + + readonly pokemonBattleEvent = input.required>(); + readonly pokemon = input(); + readonly isPokedexClosed = signal(true); + readonly pokemonImage = signal(''); + readonly userHasCaught = signal(false); + readonly userHasPokemon = signal(true); + readonly isPokedexButtonDisabled = signal(false); + readonly isUserLoggedIn = () => this.authenticationService.authState().isLoggedIn; + + translations = translations; + user: User | undefined; + updatedUser: User | undefined; + + constructor() { + effect(() => { + this.updatePokemonState(); + this.handleBattleEvents(); + }); + } + + ngOnInit() { + const pokemonValue = this.pokemon(); + if (pokemonValue) { + if (this.isUserLoggedIn()) { + this.userService + .getMe({ cache: false }) + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe({ + next: (user: User) => { + this.user = user; + this.pokemonImage.set(pokemonValue.sprites.front_default); + this.userHasPokemon.set(user.caughtPokemonIds.includes(pokemonValue.id)); + setTimeout(() => { + this.isPokedexClosed.set(false); + }, 300); + }, + error: () => { + this.alertService.createErrorAlert(translations.genericErrorAlert); + }, + }); + } else { + this.userHasPokemon.set(false); + this.pokemonImage.set(pokemonValue.sprites.front_default); + setTimeout(() => { + this.isPokedexClosed.set(false); + }, 300); + } + } + } + + togglePokedex() { + this.isPokedexClosed.set(!this.isPokedexClosed()); + } + + notifyBattlefield() { + this.isPokedexButtonDisabled.set(true); + (this.pokemonBattleEvent() as unknown as WritableSignal).set( + BattleEvent.THROW_POKEBALL, + ); + } + + catchPokemon() { + this.userHasCaught.set(false); + const pokemonId = this.pokemon()?.id; + if (pokemonId) { + this.userService + .catchPokemon({ pokemonId }) + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe({ + next: (user) => { + this.notifyBattlefield(); + this.updatedUser = user; + }, + }); + } + } + + private updatePokemonState(): void { + const pokemonValue = this.pokemon(); + if (pokemonValue) { + this.pokemonImage.set(pokemonValue.sprites.front_default); + this.userHasPokemon.set(this.user?.caughtPokemonIds.includes(pokemonValue.id) ?? false); + } + } + + private handleBattleEvents(): void { + const event = this.pokemonBattleEvent()(); + switch (event as unknown as BattleEvent) { + case BattleEvent.CATCH_ANIMATION_ENDED: { + this.handleCatchAnimationEnded(); + break; + } + case BattleEvent.RESET_BATTLE: { + this.handleResetBattle(); + break; + } + default: { + break; + } + } + } + + private handleCatchAnimationEnded(): void { + if (this.updatedUser) { + this.user = this.updatedUser; + this.userHasCaught.set(true); + } + } + + private handleResetBattle(): void { + this.userHasCaught.set(false); + this.isPokedexButtonDisabled.set(false); + const pokemonValue = this.pokemon(); + const pokemonId = pokemonValue?.id; + const caughtPokemonIds = this.user?.caughtPokemonIds ?? []; + this.userHasPokemon.set(pokemonId ? caughtPokemonIds.includes(pokemonId) : true); + } +} diff --git a/src/app/features/pokemon/components/pokemon-battlefield/pokemon-battlefield.component.html b/src/app/features/pokemon/components/pokemon-battlefield/pokemon-battlefield.component.html new file mode 100755 index 00000000..5e236716 --- /dev/null +++ b/src/app/features/pokemon/components/pokemon-battlefield/pokemon-battlefield.component.html @@ -0,0 +1,48 @@ +
+
+ Trainer frame 1 + Trainer frame 2 + Trainer frame 3 + Trainer frame 4 +
+
+ + + + + +
+
diff --git a/src/app/features/pokemon/components/pokemon-battlefield/pokemon-battlefield.component.scss b/src/app/features/pokemon/components/pokemon-battlefield/pokemon-battlefield.component.scss new file mode 100644 index 00000000..879fd9a7 --- /dev/null +++ b/src/app/features/pokemon/components/pokemon-battlefield/pokemon-battlefield.component.scss @@ -0,0 +1,101 @@ +@use 'base/media-queries' as mq; +@use 'components/pages'; + +$battle-terrain-container-border-color: #444; + +:host { + .pokemon-battlefield__container { + position: relative; + width: 285px; + height: 160px; + background-image: url('https://res.cloudinary.com/ismaestro/image/upload/angularexampleapp/assets/images/battle-grass.png'); + background-repeat: no-repeat; + background-position: center; + background-size: cover; + border: 3px solid $battle-terrain-container-border-color; + border-radius: var(--border-radius-lg); + box-shadow: 0 var(--spacing-sm) var(--spacing-md) rgb(0 0 0 / 30%); + + @include mq.for-tablet-up { + width: 512px; + height: 288px; + } + + .pokemon-battlefield__trainer-container { + .pokemon-battlefield__trainer-image { + position: absolute; + bottom: 0; + left: 70px; + width: 45px; + height: auto; + opacity: 0; + transition: opacity 1s ease-in-out; + + @include mq.for-tablet-up { + bottom: 0; + left: 150px; + width: 65px; + } + } + + .trainer-1 { + opacity: 1; + } + + &.animate .trainer-1 { + animation: + trainer-throw-pokeball 0s 0.3s forwards, + stay-visible 0s 0.9s forwards; + } + + &.animate .trainer-2 { + animation: trainer-throw-pokeball 0.3s 0.4s forwards; + } + + &.animate .trainer-3 { + animation: trainer-throw-pokeball 0.3s 0.4s forwards; + } + + &.animate .trainer-4 { + animation: trainer-throw-pokeball 0.3s 0.6s forwards; + } + } + + .pokemon-battlefield__pokemon-image-container { + opacity: 0; + transform: translateY(30px); + transition: + opacity 0.5s ease-in-out, + transform 0.5s ease-in-out; + + &.loaded { + opacity: 1; + transform: translateY(-5px); + } + } + } +} + +@keyframes trainer-throw-pokeball { + 0% { + opacity: 1; + } + + 50% { + opacity: 1; + } + + 100% { + opacity: 0; + } +} + +@keyframes stay-visible { + 0% { + opacity: 1; + } + + 100% { + opacity: 1; + } +} diff --git a/src/app/features/pokemon/components/pokemon-battlefield/pokemon-battlefield.component.ts b/src/app/features/pokemon/components/pokemon-battlefield/pokemon-battlefield.component.ts new file mode 100755 index 00000000..1819a127 --- /dev/null +++ b/src/app/features/pokemon/components/pokemon-battlefield/pokemon-battlefield.component.ts @@ -0,0 +1,58 @@ +import type { OnInit, WritableSignal } from '@angular/core'; +import { ChangeDetectionStrategy, Component, effect, input, signal } from '@angular/core'; +import type { Pokemon } from '~features/pokemon/types/pokemon.type'; +import { PokemonImageComponent } from '~features/pokemon/components/pokemon-image/pokemon-image.component'; +import { NgOptimizedImage } from '@angular/common'; +import { BattleEvent } from '~features/pokemon/components/pokedex/enums/pokedex-action.enum'; +import { CatchAnimationComponent } from '~features/pokemon/components/catch-animation/catch-animation.component'; + +@Component({ + selector: 'app-pokemon-battlefield', + imports: [PokemonImageComponent, CatchAnimationComponent, NgOptimizedImage], + templateUrl: './pokemon-battlefield.component.html', + styleUrl: './pokemon-battlefield.component.scss', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class PokemonBattlefieldComponent implements OnInit { + readonly pokemonBattleEvent = input.required>(); + readonly pokemon = input(); + readonly pokemonImage = signal(''); + readonly startCatchAnimation = signal(false); + readonly pokemonImageLoaded = signal(false); + + constructor() { + effect(() => { + this.updatePokemonImage(); + this.handleThrowPokeballEvent(); + this.handleResetBattleEvent(); + }); + } + + ngOnInit(): void { + this.pokemonImage.set(this.pokemon()?.sprites.front_default ?? ''); + } + + startPokemonInitialAnimation(loaded: boolean) { + this.pokemonImageLoaded.set(loaded); + } + + private updatePokemonImage(): void { + const pokemonValue = this.pokemon(); + if (pokemonValue) { + this.pokemonImage.set(pokemonValue.sprites.front_default); + } + } + + private handleThrowPokeballEvent(): void { + if ((this.pokemonBattleEvent()() as unknown as BattleEvent) === BattleEvent.THROW_POKEBALL) { + this.startCatchAnimation.set(true); + } + } + + private handleResetBattleEvent(): void { + if ((this.pokemonBattleEvent()() as unknown as BattleEvent) === BattleEvent.RESET_BATTLE) { + this.startCatchAnimation.set(false); + this.pokemonImageLoaded.set(false); + } + } +} diff --git a/src/app/features/pokemon/components/pokemon-card/pokemon-card.component.html b/src/app/features/pokemon/components/pokemon-card/pokemon-card.component.html new file mode 100755 index 00000000..4824ca1d --- /dev/null +++ b/src/app/features/pokemon/components/pokemon-card/pokemon-card.component.html @@ -0,0 +1,30 @@ +@if (!loading()) { + + +

{{ pokemon()?.name | firstTitleCase }}

+
+ +
+ + pokemon +
+

N.º: {{pokemon()?.order}}

+

Height: {{pokemon()?.height}} dm

+

Weight: {{pokemon()?.weight}} hg

+
+
+} @else { + + + + + +
+ +
+

+

+

+
+
+} diff --git a/src/app/features/pokemon/components/pokemon-card/pokemon-card.component.scss b/src/app/features/pokemon/components/pokemon-card/pokemon-card.component.scss new file mode 100755 index 00000000..cb3b468e --- /dev/null +++ b/src/app/features/pokemon/components/pokemon-card/pokemon-card.component.scss @@ -0,0 +1,24 @@ +@use 'base/media-queries' as mq; + +$pokemon-image-size: 100px; + +:host { + .card__heading { + margin-block: 0; + font-size: var(--font-size-lg); + } + + .pokemon__image-container { + width: $pokemon-image-size; + height: $pokemon-image-size; + margin: 0 auto var(--spacing-r-xl); + + img { + height: 100%; + } + } + + p { + margin-bottom: var(--spacing-r-sm); + } +} diff --git a/src/app/features/pokemon/components/pokemon-card/pokemon-card.component.ts b/src/app/features/pokemon/components/pokemon-card/pokemon-card.component.ts new file mode 100755 index 00000000..d2f261d6 --- /dev/null +++ b/src/app/features/pokemon/components/pokemon-card/pokemon-card.component.ts @@ -0,0 +1,26 @@ +import type { OnInit } from '@angular/core'; +import { ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA, input } from '@angular/core'; +import type { Pokemon } from '~features/pokemon/types/pokemon.type'; +import { CardComponent } from '~shared/components/card/card.component'; +import { FirstTitleCasePipe } from '~shared/pipes/first-title-case.pipe'; + +import '@shoelace-style/shoelace/dist/components/skeleton/skeleton.js'; + +@Component({ + selector: 'app-pokemon-card', + imports: [CardComponent, FirstTitleCasePipe], + templateUrl: './pokemon-card.component.html', + styleUrl: './pokemon-card.component.scss', + changeDetection: ChangeDetectionStrategy.OnPush, + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class PokemonCardComponent implements OnInit { + readonly pokemon = input(); + readonly loading = input(); + + pokemonImage: string | undefined; + + ngOnInit() { + this.pokemonImage = this.pokemon()?.sprites.front_default; + } +} diff --git a/src/app/features/pokemon/components/pokemon-image/pokemon-image.component.html b/src/app/features/pokemon/components/pokemon-image/pokemon-image.component.html new file mode 100755 index 00000000..7e62799a --- /dev/null +++ b/src/app/features/pokemon/components/pokemon-image/pokemon-image.component.html @@ -0,0 +1,11 @@ + +@if (croppedBase64Image()) { + + pokemon image +} diff --git a/src/app/features/pokemon/components/pokemon-image/pokemon-image.component.scss b/src/app/features/pokemon/components/pokemon-image/pokemon-image.component.scss new file mode 100755 index 00000000..77312bef --- /dev/null +++ b/src/app/features/pokemon/components/pokemon-image/pokemon-image.component.scss @@ -0,0 +1,15 @@ +@use 'base/media-queries' as mq; + +:host { + .pokemon__image { + height: auto; + + @include mq.for-phone-only { + width: 100% !important; + } + } + + canvas { + display: none; + } +} diff --git a/src/app/features/pokemon/components/pokemon-image/pokemon-image.component.ts b/src/app/features/pokemon/components/pokemon-image/pokemon-image.component.ts new file mode 100755 index 00000000..d9cb73a4 --- /dev/null +++ b/src/app/features/pokemon/components/pokemon-image/pokemon-image.component.ts @@ -0,0 +1,65 @@ +import { + type AfterViewInit, + ChangeDetectionStrategy, + Component, + effect, + type ElementRef, + inject, + input, + output, + signal, + type Signal, + viewChild, +} from '@angular/core'; +import { NgStyle } from '@angular/common'; +import { CropImageService } from '~features/pokemon/services/crop-image.service'; + +@Component({ + selector: 'app-pokemon-image', + imports: [NgStyle], + templateUrl: './pokemon-image.component.html', + styleUrl: './pokemon-image.component.scss', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class PokemonImageComponent implements AfterViewInit { + private readonly cropImageService = inject(CropImageService); + + readonly loaded = output(); + readonly canvas: Signal | undefined> = viewChild('canvas'); + readonly image = input(); + readonly imageWidth = input('100%'); + readonly croppedBase64Image = signal(''); + readonly croppedImageLoaded = signal(false); + + constructor() { + effect(() => { + this.resetState(); + if (this.canvas()) { + this.loadCroppedImage(); + } + }); + } + + ngAfterViewInit() { + this.loadCroppedImage(); + } + + loadCroppedImage() { + const canvasElement = this.canvas(); + const imageValue = this.image(); + if (canvasElement && imageValue) { + void this.cropImageService + .getCroppedImageURL(canvasElement.nativeElement, imageValue) + .then((base64Image) => { + this.croppedBase64Image.set(base64Image); + this.loaded.emit(true); + return base64Image; + }); + } + } + + private resetState() { + this.croppedBase64Image.set(''); + this.croppedImageLoaded.set(false); + } +} diff --git a/src/app/features/pokemon/components/pokemon-search-input/pokemon-search-input.component.html b/src/app/features/pokemon/components/pokemon-search-input/pokemon-search-input.component.html new file mode 100755 index 00000000..05ee9c84 --- /dev/null +++ b/src/app/features/pokemon/components/pokemon-search-input/pokemon-search-input.component.html @@ -0,0 +1,31 @@ +
+ + + + + @if (searchState().showButton) { + + pokeball + + } +
diff --git a/src/app/features/pokemon/components/pokemon-search-input/pokemon-search-input.component.scss b/src/app/features/pokemon/components/pokemon-search-input/pokemon-search-input.component.scss new file mode 100755 index 00000000..142de85a --- /dev/null +++ b/src/app/features/pokemon/components/pokemon-search-input/pokemon-search-input.component.scss @@ -0,0 +1,20 @@ +$pokemon-search-input-width: 230px; +$pokemon-search-loading-image-size: 20px; + +:host { + width: $pokemon-search-input-width; + + .search__container { + display: flex; + align-items: center; + + .search__input.has-action { + margin-right: var(--spacing-lg); + } + + .search__loading-image { + width: $pokemon-search-loading-image-size; + height: $pokemon-search-loading-image-size; + } + } +} diff --git a/src/app/features/pokemon/components/pokemon-search-input/pokemon-search-input.component.ts b/src/app/features/pokemon/components/pokemon-search-input/pokemon-search-input.component.ts new file mode 100755 index 00000000..a93d083f --- /dev/null +++ b/src/app/features/pokemon/components/pokemon-search-input/pokemon-search-input.component.ts @@ -0,0 +1,72 @@ +import { + ChangeDetectionStrategy, + Component, + computed, + CUSTOM_ELEMENTS_SCHEMA, + DestroyRef, + inject, + input, + signal, +} from '@angular/core'; +import { PokemonService } from '~features/pokemon/services/pokemon.service'; +import { SlInputIconFocusDirective } from '~shared/directives/sl-input-icon-focus.directive'; +import { POKEMON_URLS } from '~core/constants/urls.constants'; +import { Router } from '@angular/router'; +import { NgOptimizedImage } from '@angular/common'; +import { translations } from '../../../../../locale/translations'; +import { AlertService } from '~core/services/ui/alert.service'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; +import { TrimDirective } from '~shared/directives/trim.directive'; + +import '@shoelace-style/shoelace/dist/components/button/button.js'; +import '@shoelace-style/shoelace/dist/components/input/input.js'; +import '@shoelace-style/shoelace/dist/components/icon/icon.js'; + +@Component({ + selector: 'app-pokemon-search-input', + imports: [SlInputIconFocusDirective, NgOptimizedImage, TrimDirective], + templateUrl: './pokemon-search-input.component.html', + styleUrl: './pokemon-search-input.component.scss', + changeDetection: ChangeDetectionStrategy.OnPush, + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class PokemonSearchInputComponent { + private readonly router = inject(Router); + private readonly pokemonService = inject(PokemonService); + private readonly alertService = inject(AlertService); + private readonly destroyRef = inject(DestroyRef); + + readonly title = input(translations.findPokemon); + readonly termValue = signal(''); + readonly pokemonLoading = signal(false); + readonly searchState = computed(() => ({ + isLoading: this.termValue() ? this.pokemonLoading() : false, + showButton: this.termValue() && this.pokemonLoading(), + })); + + searchPokemon() { + const pokemonName = this.termValue().toLowerCase(); + if (pokemonName) { + this.pokemonLoading.set(true); + this.pokemonService + .getPokemon(pokemonName) + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe({ + next: (pokemon) => { + this.pokemonLoading.set(false); + this.termValue.set(''); + void this.router.navigate([POKEMON_URLS.detail(pokemon.name)]); + }, + error: () => { + this.pokemonLoading.set(false); + this.alertService.createErrorAlert(translations.pokemonNotFoundError); + }, + }); + } + } + + assignInputValue(event: Event) { + const inputEvent = event as CustomEvent; + this.termValue.set((inputEvent.target as HTMLInputElement).value); + } +} diff --git a/src/app/features/pokemon/pages/my-pokemon/my-pokemon.component.html b/src/app/features/pokemon/pages/my-pokemon/my-pokemon.component.html new file mode 100755 index 00000000..5e6dbc5c --- /dev/null +++ b/src/app/features/pokemon/pages/my-pokemon/my-pokemon.component.html @@ -0,0 +1,52 @@ +
+

My Pokemon

+ +
+ +
+ + @if (!userPokemons?.length) { +
+
+

+ Uh-oh, it looks like you haven’t caught any Pokémon yet! Need help finding a pokemon? + Try using the search bar to track them down. Gotta catch ‘em all! +

+
+
+ ash jumping with a pokeball +
+
+ } @else { +
    + @for (pokemon of userPokemons$ | ngrxPush; track pokemon.id) { +
  • + +
  • + } +
+ } +
+ +
    +
  • + +
  • +
  • + +
  • +
  • + +
  • +
+
+
diff --git a/src/app/features/pokemon/pages/my-pokemon/my-pokemon.component.scss b/src/app/features/pokemon/pages/my-pokemon/my-pokemon.component.scss new file mode 100644 index 00000000..0ca45125 --- /dev/null +++ b/src/app/features/pokemon/pages/my-pokemon/my-pokemon.component.scss @@ -0,0 +1,43 @@ +@use '../../../../../styles/base/media-queries' as mq; +@use '../../../../../styles/components/pages'; + +$grid-columns: 3; +$empty-image-width: 200px; + +:host { + @include pages.read-page; + + text-align: center; + + .my-pokemon__search-container { + display: flex; + justify-content: center; + margin-block-end: var(--spacing-r-5xl); + } + + .my-pokemon__grid { + display: grid; + grid-template-columns: 1fr; + gap: var(--spacing-r-xl); + + @include mq.for-tablet-up { + grid-template-columns: repeat($grid-columns, 1fr); + } + } + + .pokemons-empty__container { + display: flex; + flex-direction: column; + gap: var(--spacing-r-4xl); + align-items: center; + + @include mq.for-tablet-up { + margin-left: 60px; + } + + .pokemons-empty__image { + width: $empty-image-width; + height: auto; + } + } +} diff --git a/src/app/features/pokemon/pages/my-pokemon/my-pokemon.component.ts b/src/app/features/pokemon/pages/my-pokemon/my-pokemon.component.ts new file mode 100755 index 00000000..dfaf4a55 --- /dev/null +++ b/src/app/features/pokemon/pages/my-pokemon/my-pokemon.component.ts @@ -0,0 +1,44 @@ +import { ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA, inject } from '@angular/core'; +import { UserService } from '~features/authentication/services/user.service'; +import { PokemonCardComponent } from '~features/pokemon/components/pokemon-card/pokemon-card.component'; +import { PokemonService } from '~features/pokemon/services/pokemon.service'; +import { NgOptimizedImage } from '@angular/common'; +import { translations } from '../../../../../locale/translations'; +import { AlertService } from '~core/services/ui/alert.service'; +import { catchError, of, switchMap } from 'rxjs'; +import { LetDirective, PushPipe } from '@ngrx/component'; +import { PokemonSearchInputComponent } from '~features/pokemon/components/pokemon-search-input/pokemon-search-input.component'; + +@Component({ + selector: 'app-my-pokemon', + imports: [ + PokemonCardComponent, + NgOptimizedImage, + PushPipe, + LetDirective, + PokemonSearchInputComponent, + ], + templateUrl: './my-pokemon.component.html', + styleUrl: './my-pokemon.component.scss', + changeDetection: ChangeDetectionStrategy.OnPush, + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class MyPokemonComponent { + private readonly userService = inject(UserService); + private readonly pokemonService = inject(PokemonService); + private readonly alertService = inject(AlertService); + + readonly translations = translations; + readonly userPokemons$ = this.userService.getMe({ cache: false }).pipe( + switchMap((user) => { + if (user.caughtPokemonIds.length === 0) { + return of([]); + } + return this.pokemonService.getPokemonByIds(user.caughtPokemonIds); + }), + catchError(() => { + this.alertService.createErrorAlert(translations.genericErrorAlert); + return of([]); + }), + ); +} diff --git a/src/app/features/pokemon/pages/pokemon-detail/pokemon-detail.component.html b/src/app/features/pokemon/pages/pokemon-detail/pokemon-detail.component.html new file mode 100755 index 00000000..d8f590be --- /dev/null +++ b/src/app/features/pokemon/pages/pokemon-detail/pokemon-detail.component.html @@ -0,0 +1,7 @@ +@let pokemon = pokemonResource.value(); +@if (pokemon) { + +
+ +
+} diff --git a/src/app/features/pokemon/pages/pokemon-detail/pokemon-detail.component.scss b/src/app/features/pokemon/pages/pokemon-detail/pokemon-detail.component.scss new file mode 100755 index 00000000..49ba4564 --- /dev/null +++ b/src/app/features/pokemon/pages/pokemon-detail/pokemon-detail.component.scss @@ -0,0 +1,18 @@ +@use 'base/media-queries' as mq; +@use 'components/pages'; + +$pokedex-container-offset: 60px; + +:host { + @include pages.read-page; + + align-items: center; + + .pokedex__container { + margin: var(--spacing-r-4xl) 0; + + @include mq.for-tablet-up { + margin: var(--spacing-r-4xl) $pokedex-container-offset 0 0; + } + } +} diff --git a/src/app/features/pokemon/pages/pokemon-detail/pokemon-detail.component.ts b/src/app/features/pokemon/pages/pokemon-detail/pokemon-detail.component.ts new file mode 100755 index 00000000..98a05bdc --- /dev/null +++ b/src/app/features/pokemon/pages/pokemon-detail/pokemon-detail.component.ts @@ -0,0 +1,57 @@ +import { + ChangeDetectionStrategy, + Component, + CUSTOM_ELEMENTS_SCHEMA, + effect, + inject, + PLATFORM_ID, + signal, +} from '@angular/core'; +import { PokemonService } from '~features/pokemon/services/pokemon.service'; +import type { Pokemon } from '~features/pokemon/types/pokemon.type'; +import { ActivatedRoute } from '@angular/router'; +import { PokemonBattlefieldComponent } from '~features/pokemon/components/pokemon-battlefield/pokemon-battlefield.component'; +import { PokedexComponent } from '~features/pokemon/components/pokedex/pokedex.component'; +import { BattleEvent } from '~features/pokemon/components/pokedex/enums/pokedex-action.enum'; +import { translations } from '../../../../../locale/translations'; +import { AlertService } from '~core/services/ui/alert.service'; +import { toSignal } from '@angular/core/rxjs-interop'; +import { map } from 'rxjs'; +import { isPlatformBrowser } from '@angular/common'; + +@Component({ + selector: 'app-pokemon-detail', + imports: [PokemonBattlefieldComponent, PokedexComponent], + templateUrl: './pokemon-detail.component.html', + styleUrl: './pokemon-detail.component.scss', + changeDetection: ChangeDetectionStrategy.OnPush, + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class PokemonDetailComponent { + private readonly activatedRoute = inject(ActivatedRoute); + private readonly pokemonService = inject(PokemonService); + private readonly alertService = inject(AlertService); + private readonly platformId = inject(PLATFORM_ID); + + readonly isBrowser = isPlatformBrowser(this.platformId); + readonly pokemonId = toSignal( + this.activatedRoute.paramMap.pipe(map((parameters) => parameters.get('pokemonId') ?? '')), + { initialValue: '' }, + ); + readonly pokemonResource = this.pokemonService.getPokemonResource(this.pokemonId); + readonly pokemon = signal(null); + + // eslint-disable-next-line @angular-eslint/prefer-signals + pokemonBattleEvent = signal(BattleEvent.POKEMON_LOADED); + + constructor() { + effect(() => { + if (this.pokemonResource.value()) { + this.pokemonBattleEvent.set(BattleEvent.RESET_BATTLE); + } + if (this.pokemonResource.error()) { + this.alertService.createErrorAlert(translations.pokemonNotFoundError); + } + }); + } +} diff --git a/src/app/features/pokemon/pokemon.routes.ts b/src/app/features/pokemon/pokemon.routes.ts new file mode 100755 index 00000000..c713b2fa --- /dev/null +++ b/src/app/features/pokemon/pokemon.routes.ts @@ -0,0 +1,9 @@ +import type { Route } from '@angular/router'; +import { PokemonDetailComponent } from '~features/pokemon/pages/pokemon-detail/pokemon-detail.component'; + +export const POKEMON_ROUTES: Route[] = [ + { + path: ':pokemonId', + component: PokemonDetailComponent, + }, +]; diff --git a/src/app/features/pokemon/services/crop-image.service.ts b/src/app/features/pokemon/services/crop-image.service.ts new file mode 100644 index 00000000..8c7f0384 --- /dev/null +++ b/src/app/features/pokemon/services/crop-image.service.ts @@ -0,0 +1,114 @@ +import { inject, Injectable, PLATFORM_ID } from '@angular/core'; +import { isPlatformBrowser } from '@angular/common'; + +@Injectable({ + providedIn: 'root', +}) +export class CropImageService { + private readonly platformId = inject(PLATFORM_ID); + readonly isBrowser = isPlatformBrowser(this.platformId); + + async getCroppedImageURL(canvas: HTMLCanvasElement, imageUrl: string): Promise { + return new Promise((resolve, reject) => { + if (this.isBrowser) { + const context = canvas.getContext('2d', { willReadFrequently: true }); + if (!context) { + reject(new Error('Canvas context not found')); + return; + } + + const image = new Image(); + image.crossOrigin = 'Anonymous'; + image.src = imageUrl; + image.addEventListener('load', () => { + canvas.width = image.width; + canvas.height = image.height; + context.drawImage(image, 0, 0); + const croppedImageUrl = this.cropImageToFitContent({ context, image, canvas }); + resolve(croppedImageUrl); + }); + + image.addEventListener('error', () => { + reject(new Error('Image failed to load')); + }); + } + }); + } + + private cropImageToFitContent({ + context, + image, + canvas, + }: { + context: CanvasRenderingContext2D; + image: HTMLImageElement; + canvas: HTMLCanvasElement; + }): string { + const imageData = context.getImageData(0, 0, canvas.width, canvas.height); + const { top, bottom, left, right } = this.findCropBoundaries(imageData, canvas); + const croppedWidth = Math.max(right - left, 1); + const croppedHeight = Math.max(bottom - top, 1); + return this.createCroppedImage({ image, left, top, croppedWidth, croppedHeight }); + } + + // eslint-disable-next-line max-statements + private findCropBoundaries(imageData: ImageData, canvas: HTMLCanvasElement) { + let bottom = 0, + left = canvas.width, + right = 0, + top = canvas.height; + + for (let row = 0; row < canvas.height; row++) { + for (let column = 0; column < canvas.width; column++) { + const index = (row * canvas.width + column) * 4; + const alpha = imageData.data[index + 3]; + if (alpha > 0) { + // Update boundaries for non-transparent pixel + top = Math.min(top, row); + bottom = Math.max(bottom, row); + left = Math.min(left, column); + right = Math.max(right, column); + } + } + } + + return { top, bottom, left, right }; + } + + // eslint-disable-next-line max-lines-per-function + private createCroppedImage({ + image, + left, + top, + croppedWidth, + croppedHeight, + }: { + image: HTMLImageElement; + left: number; + top: number; + croppedWidth: number; + croppedHeight: number; + }): string { + const croppedCanvas = document.createElement('canvas'); + const croppedContext = croppedCanvas.getContext('2d'); + if (!croppedContext) { + return ''; + } + croppedCanvas.width = croppedWidth; + croppedCanvas.height = croppedHeight; + + croppedContext.drawImage( + image, + left, + top, + croppedWidth, + croppedHeight, + 0, + 0, + croppedWidth, + croppedHeight, + ); + + return croppedCanvas.toDataURL(); + } +} diff --git a/src/app/features/pokemon/services/pokemon.service.ts b/src/app/features/pokemon/services/pokemon.service.ts new file mode 100644 index 00000000..f8aef44a --- /dev/null +++ b/src/app/features/pokemon/services/pokemon.service.ts @@ -0,0 +1,50 @@ +import { inject, Injectable } from '@angular/core'; +import type { Observable } from 'rxjs'; +import { forkJoin, map } from 'rxjs'; +import type { HttpResourceRef } from '@angular/common/http'; +import { HttpClient, HttpContext, HttpParams, httpResource } from '@angular/common/http'; +import { CACHING_ENABLED } from '~core/interceptors/caching.interceptor'; +import type { Pokemon } from '~features/pokemon/types/pokemon.type'; +import { getEndpoints } from '~core/constants/endpoints.constants'; +import type { LastUpdatedPokemonIdsResponse } from '~features/pokemon/types/last-updated-pokemon-ids-response.type'; + +@Injectable({ + providedIn: 'root', +}) +export class PokemonService { + private readonly endpoints = getEndpoints(); + private readonly httpClient = inject(HttpClient); + + getPokemon(pokemonIdOrName: string | number): Observable { + return this.httpClient.get(this.endpoints.pokemon.v1.pokemon(pokemonIdOrName), { + params: new HttpParams().set('limit', '1'), + context: new HttpContext().set(CACHING_ENABLED, true), + }); + } + + getPokemonResource(pokemonName: () => string | undefined): HttpResourceRef { + return httpResource(() => + pokemonName() ? this.endpoints.pokemon.v1.pokemon(pokemonName()!) : undefined, + ); + } + + getPokemonByIds(ids: number[]): Observable { + const getPokemonRequests = ids.map((id) => this.getPokemon(id)); + return forkJoin(getPokemonRequests).pipe( + map((pokemons: Pokemon[]) => + pokemons.toSorted((pokemonA, pokemonB) => Number(pokemonA.order) - Number(pokemonB.order)), + ), + ); + } + + getLastUpdatedPokemonIds(): Observable { + return this.httpClient + .get(this.endpoints.pokemon.v1.lastUpdated) + .pipe( + map((response: LastUpdatedPokemonIdsResponse) => { + const { data } = response; + return data.pokemonIds; + }), + ); + } +} diff --git a/src/app/features/pokemon/types/last-updated-pokemon-ids-response.type.ts b/src/app/features/pokemon/types/last-updated-pokemon-ids-response.type.ts new file mode 100644 index 00000000..20320138 --- /dev/null +++ b/src/app/features/pokemon/types/last-updated-pokemon-ids-response.type.ts @@ -0,0 +1,7 @@ +import type { ApiResponse } from '~shared/types/api-response.types'; + +export type LastUpdatedPokemonIdsResponseData = { + pokemonIds: string[]; +}; + +export type LastUpdatedPokemonIdsResponse = ApiResponse; diff --git a/src/app/features/pokemon/types/pokemon.type.ts b/src/app/features/pokemon/types/pokemon.type.ts new file mode 100644 index 00000000..474fd849 --- /dev/null +++ b/src/app/features/pokemon/types/pokemon.type.ts @@ -0,0 +1,11 @@ +export type Pokemon = { + id: number; + order: string; + name: string; + height: string; + weight: string; + sprites: { + front_default: string; + front_shiny: string; + }; +}; diff --git a/src/app/features/pokemon/validators/pokemon.validator.ts b/src/app/features/pokemon/validators/pokemon.validator.ts new file mode 100644 index 00000000..c89e3518 --- /dev/null +++ b/src/app/features/pokemon/validators/pokemon.validator.ts @@ -0,0 +1,47 @@ +import type { Observable } from 'rxjs'; +import { catchError, finalize, map, of, switchMap, tap, timer } from 'rxjs'; +import { inject, Injectable, signal } from '@angular/core'; +import type { AbstractControl, AsyncValidator, ValidationErrors } from '@angular/forms'; +import { PokemonService } from '~features/pokemon/services/pokemon.service'; + +@Injectable({ providedIn: 'root' }) +export class PokemonValidator implements AsyncValidator { + private readonly pokemonService = inject(PokemonService); + private readonly pokemonName = signal(''); + private readonly debounceMs = 500; + + readonly pokemonId = signal(-1); + readonly isPokemonValidating = signal(false); + + validate(control: AbstractControl): Observable { + const pokemonName = (control.value ?? '').toLowerCase().trim(); + + if (!pokemonName) { + this.isPokemonValidating.set(false); + this.pokemonId.set(-1); + return of(null); + } + + this.pokemonName.set(pokemonName); + this.isPokemonValidating.set(true); + return this.validatePokemonName(pokemonName).pipe( + finalize(() => { + this.isPokemonValidating.set(false); + }), + ); + } + + private validatePokemonName(pokemonName: string): Observable { + return timer(this.debounceMs).pipe( + switchMap(() => + this.pokemonService.getPokemon(pokemonName).pipe( + tap((pokemon) => { + this.pokemonId.set(pokemon.id); + }), + map(() => null), + catchError(() => of({ pokemonName: true })), + ), + ), + ); + } +} diff --git a/src/app/heroes/hero-detail/hero-detail.component.html b/src/app/heroes/hero-detail/hero-detail.component.html deleted file mode 100755 index 07e9c79a..00000000 --- a/src/app/heroes/hero-detail/hero-detail.component.html +++ /dev/null @@ -1,27 +0,0 @@ -

{{'heroDetail' | translate}}

- - -
- - - -
- {{hero.name}} - {{hero.alterEgo}} -
-
- {{hero.likes}} - -
-
- -
-
-
diff --git a/src/app/heroes/hero-detail/hero-detail.component.scss b/src/app/heroes/hero-detail/hero-detail.component.scss deleted file mode 100755 index 94aff3db..00000000 --- a/src/app/heroes/hero-detail/hero-detail.component.scss +++ /dev/null @@ -1,5 +0,0 @@ -#heroe-detail { - width: 65%; - margin: 0 auto; - margin-top: 2em; -} \ No newline at end of file diff --git a/src/app/heroes/hero-detail/hero-detail.component.spec.ts b/src/app/heroes/hero-detail/hero-detail.component.spec.ts deleted file mode 100755 index a26c77bd..00000000 --- a/src/app/heroes/hero-detail/hero-detail.component.spec.ts +++ /dev/null @@ -1,45 +0,0 @@ -import {async, TestBed} from '@angular/core/testing'; -import {APP_BASE_HREF} from '@angular/common'; -import {HeroDetailComponent} from './hero-detail.component'; -import {HeroesModule} from '../heroes.module'; -import {TestsModule} from '../../shared/modules/tests.module'; -import {APP_CONFIG, AppConfig} from '../../config/app.config'; -import {TranslateModule} from '@ngx-translate/core'; -import {HeroService} from '../shared/hero.service'; - -describe('HeroDetailComponent', () => { - let fixture; - let component; - let heroService; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [ - TestsModule, - TranslateModule.forRoot(), - HeroesModule - ], - providers: [ - {provide: APP_CONFIG, useValue: AppConfig}, - {provide: APP_BASE_HREF, useValue: '/'}, - HeroService - ], - }).compileComponents(); - - fixture = TestBed.createComponent(HeroDetailComponent); - fixture.detectChanges(); - component = fixture.debugElement.componentInstance; - heroService = TestBed.get(HeroService); - })); - - it('should create hero detail component', (() => { - expect(component).toBeTruthy(); - })); - - it('should like a hero', async(() => { - localStorage.setItem('votes', String(AppConfig.votesLimit - 1)); - component.like({id: 1}).then((result) => { - expect(result).toBe(true); - }); - })); -}); diff --git a/src/app/heroes/hero-detail/hero-detail.component.ts b/src/app/heroes/hero-detail/hero-detail.component.ts deleted file mode 100755 index ccfcd5b4..00000000 --- a/src/app/heroes/hero-detail/hero-detail.component.ts +++ /dev/null @@ -1,37 +0,0 @@ -import {Component} from '@angular/core'; -import {Hero} from '../shared/hero.model'; -import {HeroService} from '../shared/hero.service'; -import {ActivatedRoute} from '@angular/router'; - -@Component({ - selector: 'app-hero-detail', - templateUrl: './hero-detail.component.html', - styleUrls: ['./hero-detail.component.scss'] -}) - -export class HeroDetailComponent { - hero: Hero; - canVote: boolean; - - constructor(private heroService: HeroService, - private activatedRoute: ActivatedRoute) { - this.activatedRoute.params.subscribe((params: any) => { - if (params['id']) { - this.heroService.getHeroById(params['id']).subscribe((hero: Hero) => { - this.hero = hero; - }); - } - }); - } - - like(hero: Hero) { - return new Promise((resolve, reject) => { - this.heroService.like(hero).subscribe(() => { - this.canVote = this.heroService.checkIfUserCanVote(); - resolve(true); - }, (error) => { - reject(error); - }); - }); - } -} diff --git a/src/app/heroes/hero-list/hero-list.component.html b/src/app/heroes/hero-list/hero-list.component.html deleted file mode 100755 index 53c92d96..00000000 --- a/src/app/heroes/hero-list/hero-list.component.html +++ /dev/null @@ -1,60 +0,0 @@ -
-

{{ 'heroesList' | translate }}

-
- - - - - - -

{{hero.name}}

-

- {{hero.alterEgo}} -

-
- {{hero.likes}} - - - delete - -
-
-
-
-
- -
diff --git a/src/app/heroes/hero-list/hero-list.component.scss b/src/app/heroes/hero-list/hero-list.component.scss deleted file mode 100755 index 77965862..00000000 --- a/src/app/heroes/hero-list/hero-list.component.scss +++ /dev/null @@ -1,66 +0,0 @@ -#left { - width: 50%; - float: left; - margin-left: 6%; -} - -#right { - margin-left: 50%; - text-align: center; - padding-right: 17%; -} - -.clear { - clear: both; -} - -.mat-list { - margin: 0 auto; - display: table; - - /deep/ .mat-list-text { - text-align: left !important; - } -} - -.hero-actions { - padding-bottom: 0; - - .remove-icon { - padding-left: 0.5em; - color: darkslategrey; - cursor: pointer; - } -} - -form { - display: grid; - width: 80%; - margin: 0 auto; - - .mat-raised-button { - color: white; - background: #3f51b5; - width: 50%; - margin: 0 auto; - } - - .mat-form-field { - width: 100%; - } -} - -@media (max-width: 680px) { - #left { - width: 100%; - float: none; - margin: 0 auto; - } - - #right { - margin: 1em auto 0; - width: 90%; - float: none; - padding: 0; - } -} diff --git a/src/app/heroes/hero-list/hero-list.component.spec.ts b/src/app/heroes/hero-list/hero-list.component.spec.ts deleted file mode 100755 index ba82217b..00000000 --- a/src/app/heroes/hero-list/hero-list.component.spec.ts +++ /dev/null @@ -1,34 +0,0 @@ -import {async, TestBed} from '@angular/core/testing'; -import {APP_BASE_HREF} from '@angular/common'; -import {HeroListComponent} from './hero-list.component'; -import {HeroesModule} from '../heroes.module'; -import {TestsModule} from '../../shared/modules/tests.module'; -import {TranslateModule} from '@ngx-translate/core'; -import {APP_CONFIG, AppConfig} from '../../config/app.config'; - -describe('HeroListComponent', () => { - let fixture; - let component; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [ - TestsModule, - TranslateModule.forRoot(), - HeroesModule - ], - providers: [ - {provide: APP_CONFIG, useValue: AppConfig}, - {provide: APP_BASE_HREF, useValue: '/'} - ], - }).compileComponents(); - - fixture = TestBed.createComponent(HeroListComponent); - fixture.detectChanges(); - component = fixture.debugElement.componentInstance; - })); - - it('should create hero list component', (() => { - expect(component).toBeTruthy(); - })); -}); diff --git a/src/app/heroes/hero-list/hero-list.component.ts b/src/app/heroes/hero-list/hero-list.component.ts deleted file mode 100755 index 3169c1e1..00000000 --- a/src/app/heroes/hero-list/hero-list.component.ts +++ /dev/null @@ -1,91 +0,0 @@ -import {Component, ViewChild} from '@angular/core'; -import {Hero} from '../shared/hero.model'; -import {HeroService} from '../shared/hero.service'; -import {FormBuilder, FormGroup, Validators} from '@angular/forms'; -import {MatDialog} from '@angular/material'; -import {AppConfig} from '../../config/app.config'; -import {Router} from '@angular/router'; -import {LoggerService} from '../../core/logger.service'; - -@Component({ - selector: 'app-remove-hero-dialog', - templateUrl: './remove-hero.dialog.html', -}) - -export class RemoveHeroDialogComponent { - constructor() { - } -} - -@Component({ - selector: 'app-hero-list', - templateUrl: './hero-list.component.html', - styleUrls: ['./hero-list.component.scss'] -}) - -export class HeroListComponent { - heroes: Hero[]; - newHeroForm: FormGroup; - canVote = false; - error: string; - @ViewChild('form') myNgForm; // just to call resetForm method - - constructor(private heroService: HeroService, - private dialog: MatDialog, - private router: Router, - private formBuilder: FormBuilder) { - this.canVote = this.heroService.checkIfUserCanVote(); - - this.newHeroForm = this.formBuilder.group({ - 'name': ['', [Validators.required]], - 'alterEgo': ['', [Validators.required]] - }); - - this.heroService.getAllHeroes().subscribe((heroes: Array) => { - this.heroes = heroes.sort((a, b) => { - return b.likes - a.likes; - }); - }); - } - - like(hero: Hero) { - this.heroService.like(hero).subscribe(() => { - this.canVote = this.heroService.checkIfUserCanVote(); - }, (error: Response) => { - LoggerService.error('maximum votes limit reached', error); - }); - } - - createNewHero(newHero: Hero) { - this.heroService.createHero(newHero).subscribe((newHeroWithId) => { - this.heroes.push(newHeroWithId); - this.myNgForm.resetForm(); - }, (response: Response) => { - if (response.status === 500) { - this.error = 'errorHasOcurred'; - } - }); - } - - seeHeroDetails(hero): void { - if (hero.default) { - this.router.navigate([AppConfig.routes.heroes + '/' + hero.id]); - } - } - - remove(heroToRemove: Hero): void { - const dialogRef = this.dialog.open(RemoveHeroDialogComponent); - dialogRef.afterClosed().subscribe(result => { - if (result) { - this.heroService.deleteHeroById(heroToRemove.id).subscribe(() => { - this.heroService.showSnackBar('heroRemoved'); - this.heroes = this.heroes.filter(hero => hero.id !== heroToRemove.id); - }, (response: Response) => { - if (response.status === 500) { - this.error = 'heroDefault'; - } - }); - } - }); - } -} diff --git a/src/app/heroes/hero-list/remove-hero.dialog.html b/src/app/heroes/hero-list/remove-hero.dialog.html deleted file mode 100644 index 07ff6b98..00000000 --- a/src/app/heroes/hero-list/remove-hero.dialog.html +++ /dev/null @@ -1,6 +0,0 @@ -

{{'removeHero' | translate}}

-{{'areYouSure' | translate}} - - - - \ No newline at end of file diff --git a/src/app/heroes/hero-top/hero-top.component.html b/src/app/heroes/hero-top/hero-top.component.html deleted file mode 100755 index 6a43e7a8..00000000 --- a/src/app/heroes/hero-top/hero-top.component.html +++ /dev/null @@ -1,33 +0,0 @@ -
-
-
-

{{'topHeroes' | translate}}

- - -
- - - -
- {{hero.name}} - {{hero.alterEgo}} -
-
- {{hero.likes}} - -
-
- -
-
-
-
-
-
diff --git a/src/app/heroes/hero-top/hero-top.component.scss b/src/app/heroes/hero-top/hero-top.component.scss deleted file mode 100755 index 4072e82b..00000000 --- a/src/app/heroes/hero-top/hero-top.component.scss +++ /dev/null @@ -1,22 +0,0 @@ -#heroes-list { - margin: 2em; -} - -.hero-card { - margin: 2em auto; -} - -.progress-spinner { - margin: 0 auto; -} - -@media (max-width: 680px) { - .hero-card { - width: 80%; - margin: 0 auto; - } - - .mat-card { - margin-bottom: 2em; - } -} \ No newline at end of file diff --git a/src/app/heroes/hero-top/hero-top.component.spec.ts b/src/app/heroes/hero-top/hero-top.component.spec.ts deleted file mode 100755 index 5542f29d..00000000 --- a/src/app/heroes/hero-top/hero-top.component.spec.ts +++ /dev/null @@ -1,65 +0,0 @@ -import {async, fakeAsync, TestBed, tick} from '@angular/core/testing'; -import {APP_BASE_HREF} from '@angular/common'; -import {HeroTopComponent} from './hero-top.component'; -import {HeroService} from '../shared/hero.service'; -import {TestsModule} from '../../shared/modules/tests.module'; -import {TranslateModule} from '@ngx-translate/core'; -import {APP_CONFIG, AppConfig} from '../../config/app.config'; -import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core'; - -describe('HeroTopComponent', () => { - let fixture; - let component; - let heroService; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [ - TestsModule, - TranslateModule.forRoot(), - ], - declarations: [ - HeroTopComponent - ], - providers: [ - {provide: APP_CONFIG, useValue: AppConfig}, - {provide: APP_BASE_HREF, useValue: '/'}, - HeroService - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA] - }).compileComponents(); - - fixture = TestBed.createComponent(HeroTopComponent); - fixture.detectChanges(); - component = fixture.debugElement.componentInstance; - heroService = TestBed.get(HeroService); - })); - - it('should create hero top component', (() => { - expect(component).toBeTruthy(); - })); - - it('should initialice component', fakeAsync(() => { - fixture.detectChanges(); - spyOn(heroService, 'getAllHeroes').and.returnValue(Promise.resolve(true)); - tick(); - fixture.detectChanges(); - expect(component.heroes.length).toBe(AppConfig.topHeroesLimit); - })); - - it('should like a hero', async(() => { - localStorage.setItem('votes', String(AppConfig.votesLimit - 1)); - component.like({id: 1}).then((result) => { - expect(result).toBe(true); - }); - })); - - it('should not like a hero', async(() => { - localStorage.setItem('votes', String(AppConfig.votesLimit)); - component.like({id: 1}).then(() => { - }, (error) => { - expect(error).toBe('maximum votes'); - }); - expect(heroService.checkIfUserCanVote()).toBe(false); - })); -}); diff --git a/src/app/heroes/hero-top/hero-top.component.ts b/src/app/heroes/hero-top/hero-top.component.ts deleted file mode 100755 index 3ed93985..00000000 --- a/src/app/heroes/hero-top/hero-top.component.ts +++ /dev/null @@ -1,38 +0,0 @@ -import {Component} from '@angular/core'; - -import {Hero} from '../shared/hero.model'; - -import {HeroService} from '../shared/hero.service'; -import {AppConfig} from '../../config/app.config'; - -@Component({ - selector: 'app-hero-top', - templateUrl: './hero-top.component.html', - styleUrls: ['./hero-top.component.scss'] -}) -export class HeroTopComponent { - - heroes: Hero[] = null; - canVote = false; - - constructor(private heroService: HeroService) { - this.canVote = this.heroService.checkIfUserCanVote(); - - this.heroService.getAllHeroes().subscribe((heroes) => { - this.heroes = heroes.sort((a, b) => { - return b.likes - a.likes; - }).slice(0, AppConfig.topHeroesLimit); - }); - } - - like(hero: Hero): Promise { - return new Promise((resolve, reject) => { - this.heroService.like(hero).subscribe(() => { - this.canVote = this.heroService.checkIfUserCanVote(); - resolve(true); - }, (error) => { - reject(error); - }); - }); - } -} diff --git a/src/app/heroes/heroes-routing.module.ts b/src/app/heroes/heroes-routing.module.ts deleted file mode 100644 index 13d550bb..00000000 --- a/src/app/heroes/heroes-routing.module.ts +++ /dev/null @@ -1,29 +0,0 @@ -import {NgModule} from '@angular/core'; -import {RouterModule, Routes} from '@angular/router'; - -import {HeroListComponent} from './hero-list/hero-list.component'; -import {HeroDetailComponent} from './hero-detail/hero-detail.component'; -import {HeroesComponent} from './heroes.component'; - -const heroesRoutes: Routes = [ - { - path: '', - component: HeroesComponent, - children: [ - {path: '', component: HeroListComponent}, - {path: ':id', component: HeroDetailComponent} - ] - } -]; - -@NgModule({ - imports: [ - RouterModule.forChild(heroesRoutes) - ], - exports: [ - RouterModule - ] -}) - -export class HeroRoutingModule { -} diff --git a/src/app/heroes/heroes.component.html b/src/app/heroes/heroes.component.html deleted file mode 100644 index 90c6b646..00000000 --- a/src/app/heroes/heroes.component.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/app/heroes/heroes.component.spec.ts b/src/app/heroes/heroes.component.spec.ts deleted file mode 100755 index 39ff683a..00000000 --- a/src/app/heroes/heroes.component.spec.ts +++ /dev/null @@ -1,28 +0,0 @@ -import {async, TestBed} from '@angular/core/testing'; -import {APP_BASE_HREF} from '@angular/common'; -import {HeroesComponent} from './heroes.component'; -import {HeroesModule} from './heroes.module'; -import {TestsModule} from '../shared/modules/tests.module'; -import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core'; - -describe('HeroesComponent', () => { - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [ - TestsModule, - HeroesModule - ], - providers: [ - {provide: APP_BASE_HREF, useValue: '/'} - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA] - }).compileComponents(); - })); - - it('should create heroes component', (() => { - const fixture = TestBed.createComponent(HeroesComponent); - fixture.detectChanges(); - const component = fixture.debugElement.componentInstance; - expect(component).toBeTruthy(); - })); -}); diff --git a/src/app/heroes/heroes.component.ts b/src/app/heroes/heroes.component.ts deleted file mode 100755 index 40b8a454..00000000 --- a/src/app/heroes/heroes.component.ts +++ /dev/null @@ -1,13 +0,0 @@ -import {Component} from '@angular/core'; - -@Component({ - selector: 'app-heroes', - templateUrl: './heroes.component.html' -}) - -export class HeroesComponent { - - constructor() { - - } -} diff --git a/src/app/heroes/heroes.module.ts b/src/app/heroes/heroes.module.ts deleted file mode 100644 index eaf17913..00000000 --- a/src/app/heroes/heroes.module.ts +++ /dev/null @@ -1,36 +0,0 @@ -import {NgModule} from '@angular/core'; -import {CommonModule} from '@angular/common'; -import {FormsModule, ReactiveFormsModule} from '@angular/forms'; - -import {HeroRoutingModule} from './heroes-routing.module'; -import {SharedModule} from '../shared/modules/shared.module'; - -import {HeroListComponent, RemoveHeroDialogComponent} from './hero-list/hero-list.component'; -import {HeroService} from './shared/hero.service'; -import {HeroDetailComponent} from './hero-detail/hero-detail.component'; -import {HeroesComponent} from './heroes.component'; - -@NgModule({ - imports: [ - CommonModule, - FormsModule, - SharedModule, - HeroRoutingModule, - ReactiveFormsModule - ], - declarations: [ - HeroesComponent, - HeroListComponent, - RemoveHeroDialogComponent, - HeroDetailComponent - ], - entryComponents: [ - RemoveHeroDialogComponent - ], - providers: [ - HeroService - ] -}) - -export class HeroesModule { -} diff --git a/src/app/heroes/shared/hero.model.ts b/src/app/heroes/shared/hero.model.ts deleted file mode 100755 index 21f69c57..00000000 --- a/src/app/heroes/shared/hero.model.ts +++ /dev/null @@ -1,7 +0,0 @@ -export class Hero { - constructor(public id: number, - public name: string, - public alterEgo: string, - public likes: number) { - } -} diff --git a/src/app/heroes/shared/hero.service.spec.ts b/src/app/heroes/shared/hero.service.spec.ts deleted file mode 100755 index b24f0de3..00000000 --- a/src/app/heroes/shared/hero.service.spec.ts +++ /dev/null @@ -1,107 +0,0 @@ -import {async, TestBed} from '@angular/core/testing'; -import {HeroService} from './hero.service'; -import {APP_BASE_HREF} from '@angular/common'; -import {APP_CONFIG, AppConfig} from '../../config/app.config'; -import {TestsModule} from '../../shared/modules/tests.module'; -import {TranslateModule} from '@ngx-translate/core'; -import {HttpErrorResponse} from '@angular/common/http'; -import {ErrorObservable} from 'rxjs/observable/ErrorObservable'; - -describe('HeroService', () => { - let heroService; - let newHeroCreated; - - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [ - TestsModule, - TranslateModule.forRoot() - ], - providers: [ - {provide: APP_CONFIG, useValue: AppConfig}, - {provide: APP_BASE_HREF, useValue: '/'}, - HeroService - ] - }); - - heroService = TestBed.get(HeroService); - }); - - it('should contains heroes', async(() => { - heroService.getAllHeroes().subscribe((data: any) => { - expect(data.length).toBeGreaterThan(AppConfig.topHeroesLimit); - }); - })); - - it('should get hero by id 1', async(() => { - heroService.getHeroById('1').subscribe((hero) => { - expect(hero.id).toEqual(1); - }); - })); - - it('should fail getting hero by no id', async(() => { - heroService.getHeroById('noId').subscribe(() => { - }, (error) => { - expect(error).toEqual(jasmine.any(HttpErrorResponse)); - }); - })); - - it('should fail creating empty hero', async(() => { - heroService.createHero({}).subscribe(() => { - }, (error) => { - expect(error).toEqual(jasmine.any(HttpErrorResponse)); - }); - })); - - it('should fail deleting noId hero', async(() => { - heroService.deleteHeroById('noId').subscribe(() => { - }, (error) => { - expect(error).toEqual(jasmine.any(HttpErrorResponse)); - }); - })); - - it('should fail like empty hero', async(() => { - localStorage.setItem('votes', String(0)); - heroService.like('noId').subscribe(() => { - }, (error) => { - expect(error).toEqual(jasmine.any(HttpErrorResponse)); - }); - })); - - it('should return json response error', async(() => { - expect(heroService.handleError(new Response('noId'))).toEqual(jasmine.any(ErrorObservable)); - })); - - it('should create hero', async(() => { - heroService.createHero({ - 'name': 'test', - 'alterEgo': 'test' - }).subscribe((hero) => { - newHeroCreated = hero; - expect(hero.id).not.toBeNull(); - }); - })); - - it('should not like a hero because no votes', async(() => { - localStorage.setItem('votes', String(AppConfig.votesLimit)); - expect(heroService.checkIfUserCanVote()).toBe(false); - heroService.like(newHeroCreated).subscribe(() => { - }, (error) => { - expect(error).toBe('maximum votes'); - }); - })); - - it('should like a hero', async(() => { - localStorage.setItem('votes', String(0)); - expect(heroService.checkIfUserCanVote()).toBe(true); - heroService.like(newHeroCreated).subscribe((response) => { - expect(response).toEqual({}); - }); - })); - - it('should delete a hero', async(() => { - heroService.deleteHeroById(newHeroCreated.id).subscribe((response) => { - expect(response).toEqual({}); - }); - })); -}); diff --git a/src/app/heroes/shared/hero.service.ts b/src/app/heroes/shared/hero.service.ts deleted file mode 100755 index 6c3bff11..00000000 --- a/src/app/heroes/shared/hero.service.ts +++ /dev/null @@ -1,103 +0,0 @@ -import {Injectable} from '@angular/core'; -import {HttpClient, HttpHeaders} from '@angular/common/http'; - -import {AppConfig} from '../../config/app.config'; - -import {Hero} from './hero.model'; -import {Observable} from 'rxjs/Observable'; -import {MatSnackBar, MatSnackBarConfig} from '@angular/material'; -import {TranslateService} from '@ngx-translate/core'; - -@Injectable() -export class HeroService { - private headers: HttpHeaders; - private heroesUrl: string; - private translations: any; - - private handleError(error: any) { - if (error instanceof Response) { - return Observable.throw(error.json()['error'] || 'backend server error'); - } - return Observable.throw(error || 'backend server error'); - } - - constructor(private http: HttpClient, - private translateService: TranslateService, - private snackBar: MatSnackBar) { - this.heroesUrl = AppConfig.endpoints.heroes; - this.headers = new HttpHeaders({'Content-Type': 'application/json'}); - - this.translateService.get(['heroCreated', 'saved', 'heroLikeMaximum', 'heroRemoved'], { - 'value': AppConfig.votesLimit - }).subscribe((texts) => { - this.translations = texts; - }); - } - - getAllHeroes(): Observable { - return this.http.get(this.heroesUrl) - .map(response => { - return response; - }) - .catch(error => this.handleError(error)); - } - - getHeroById(heroId: string): Observable { - return this.http.get(this.heroesUrl + '/' + heroId) - .map(response => { - return response; - }) - .catch(error => this.handleError(error)); - } - - createHero(hero: any): Observable { - return this.http - .post(this.heroesUrl, JSON.stringify({ - name: hero.name, - alterEgo: hero.alterEgo - }), {headers: this.headers}) - .map(response => { - this.showSnackBar('heroCreated'); - return response; - }) - .catch(error => this.handleError(error)); - } - - like(hero: Hero) { - if (this.checkIfUserCanVote()) { - const url = `${this.heroesUrl}/${hero.id}/like`; - return this.http - .post(url, {}, {headers: this.headers}) - .map((response) => { - localStorage.setItem('votes', '' + (Number(localStorage.getItem('votes')) + 1)); - hero.likes += 1; - this.showSnackBar('saved'); - return response; - }) - .catch(error => this.handleError(error)); - } else { - this.showSnackBar('heroLikeMaximum'); - return Observable.throw('maximum votes'); - } - } - - checkIfUserCanVote(): boolean { - return Number(localStorage.getItem('votes')) < AppConfig.votesLimit; - } - - deleteHeroById(id: any): Observable> { - const url = `${this.heroesUrl}/${id}`; - return this.http.delete(url, {headers: this.headers}) - .map((response) => { - this.showSnackBar('heroRemoved'); - return response; - }) - .catch(error => this.handleError(error)); - } - - showSnackBar(name): void { - const config: any = new MatSnackBarConfig(); - config.duration = AppConfig.snackBarDuration; - this.snackBar.open(this.translations[name], 'OK', config); - } -} diff --git a/src/app/shared/components/card/card.component.html b/src/app/shared/components/card/card.component.html new file mode 100755 index 00000000..c49078d9 --- /dev/null +++ b/src/app/shared/components/card/card.component.html @@ -0,0 +1,19 @@ +@if (href()) { + + + +} @else { +
+ +
+} + + +
+ +
+ + +
diff --git a/src/app/shared/components/card/card.component.scss b/src/app/shared/components/card/card.component.scss new file mode 100644 index 00000000..ec7ee856 --- /dev/null +++ b/src/app/shared/components/card/card.component.scss @@ -0,0 +1,40 @@ +:host { + .card__container { + display: flex; + flex-direction: column; + justify-content: space-between; + padding: var(--spacing-r-3xl); + overflow: hidden; + color: var(--primary-contrast); + border: 1px solid var(--senary-contrast); + border-radius: var(--border-radius-sm); + transition: + border-color 0.3s ease, + background-color 0.3s ease; + + &:hover { + .card__link { + background-position: 0 0; + } + + background: var(--card-background-hover); + } + + * + *:not(a, code, span), + .card__heading { + margin-block-end: var(--spacing-r-3xl); + } + + .card__link { + position: relative; + margin-block: 0; + font-size: var(--font-size-sm); + color: transparent; + background: var(--card-link-background-hover); + background-position: 100% 0; + background-clip: text; + background-size: 200% 100%; + transition: background-position 2s ease-out; + } + } +} diff --git a/src/app/shared/components/card/card.component.ts b/src/app/shared/components/card/card.component.ts new file mode 100755 index 00000000..8bc50afd --- /dev/null +++ b/src/app/shared/components/card/card.component.ts @@ -0,0 +1,13 @@ +import { ChangeDetectionStrategy, Component, input } from '@angular/core'; +import { NgTemplateOutlet } from '@angular/common'; + +@Component({ + selector: 'app-card', + imports: [NgTemplateOutlet], + templateUrl: './card.component.html', + styleUrl: './card.component.scss', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class CardComponent { + readonly href = input(''); +} diff --git a/src/app/shared/components/cookie-popup/cookie-popup.component.html b/src/app/shared/components/cookie-popup/cookie-popup.component.html new file mode 100644 index 00000000..233cda09 --- /dev/null +++ b/src/app/shared/components/cookie-popup/cookie-popup.component.html @@ -0,0 +1,18 @@ +@if (!hasAccepted()) { +
+

+ This site uses Google Tag Manager and Google Analytics to make it work smoothly and to + understand user behavior. +

+
+ Ok, got it! +
+
+} diff --git a/src/app/shared/components/cookie-popup/cookie-popup.component.scss b/src/app/shared/components/cookie-popup/cookie-popup.component.scss new file mode 100644 index 00000000..cacab224 --- /dev/null +++ b/src/app/shared/components/cookie-popup/cookie-popup.component.scss @@ -0,0 +1,45 @@ +$popup-max-width: 265px; + +:host { + position: fixed; + right: var(--spacing-r-md); + bottom: var(--spacing-r-md); + z-index: var(--z-index-cookie-consent); + visibility: hidden; + opacity: 0; + animation: 1s linear forwards 0.5s fade-in; + + .cookies__container { + max-width: $popup-max-width; + padding: var(--spacing-r-xl); + font-size: var(--font-size-sm); + background-color: var(--page-background); + border: 1px solid var(--senary-contrast); + border-radius: var(--border-radius-sm); + box-shadow: 0 0 10px 0 rgb(0 0 0 / 10%); + transition: + background-color 0.3s ease, + border-color 0.3s ease, + color 0.3s ease; + + > div { + display: flex; + gap: var(--spacing-r-md); + align-items: center; + width: 100%; + margin-block-start: var(--spacing-r-xl); + } + + p { + margin-block: 0; + color: var(--primary-contrast); + } + } + + @keyframes fade-in { + 100% { + visibility: visible; + opacity: 1; + } + } +} diff --git a/src/app/shared/components/cookie-popup/cookie-popup.component.ts b/src/app/shared/components/cookie-popup/cookie-popup.component.ts new file mode 100644 index 00000000..0efbaa98 --- /dev/null +++ b/src/app/shared/components/cookie-popup/cookie-popup.component.ts @@ -0,0 +1,30 @@ +import { + ChangeDetectionStrategy, + Component, + CUSTOM_ELEMENTS_SCHEMA, + inject, + signal, +} from '@angular/core'; +import { ConsentState, CookieConsentService } from '~core/services/storage/cookie-consent.service'; + +import '@shoelace-style/shoelace/dist/components/button/button.js'; + +@Component({ + selector: 'app-cookie-popup', + templateUrl: './cookie-popup.component.html', + styleUrl: './cookie-popup.component.scss', + changeDetection: ChangeDetectionStrategy.OnPush, + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class CookiePopupComponent { + private readonly cookieConsentService = inject(CookieConsentService); + + readonly hasAccepted = signal(this.cookieConsentService.getCookieState()); + + acceptCookies(): void { + const cookieSaved = this.cookieConsentService.setCookieConsent(ConsentState.GRANTED); + if (cookieSaved) { + this.hasAccepted.set(true); + } + } +} diff --git a/src/app/shared/components/decorative-header/decorative-header.component.html b/src/app/shared/components/decorative-header/decorative-header.component.html new file mode 100755 index 00000000..1d6254f0 --- /dev/null +++ b/src/app/shared/components/decorative-header/decorative-header.component.html @@ -0,0 +1,6 @@ +
+
+ +
+
+
diff --git a/src/app/shared/components/decorative-header/decorative-header.component.scss b/src/app/shared/components/decorative-header/decorative-header.component.scss new file mode 100644 index 00000000..95bf37f6 --- /dev/null +++ b/src/app/shared/components/decorative-header/decorative-header.component.scss @@ -0,0 +1,38 @@ +@use 'base/media-queries' as mq; + +$svg-width: 200px; + +:host { + .decorative-header__container { + position: relative; + display: flex; + flex-direction: column-reverse; + padding: var(--spacing-r-3xl); + margin-block-end: var(--spacing-r-4xl); + overflow: hidden; + background: var(--septenary-contrast); + border-radius: var(--border-radius-xl); + transition: background 0.3s ease; + + @include mq.for-tablet-portrait-up { + flex-direction: row; + align-items: center; + justify-content: space-between; + } + + .decorative-header__image { + width: $svg-width; + height: auto; + margin-bottom: var(--spacing-r-xl); + + // stylelint-disable selector-pseudo-element-no-unknown + ::ng-deep svg { + overflow: unset; + } + + @include mq.for-tablet-portrait-up { + margin-bottom: 0; + } + } + } +} diff --git a/src/app/shared/components/decorative-header/decorative-header.component.ts b/src/app/shared/components/decorative-header/decorative-header.component.ts new file mode 100644 index 00000000..ea1b0082 --- /dev/null +++ b/src/app/shared/components/decorative-header/decorative-header.component.ts @@ -0,0 +1,25 @@ +import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core'; +import type { SafeHtml } from '@angular/platform-browser'; +import { DomSanitizer } from '@angular/platform-browser'; +import { FileService } from '~core/services/storage/file.service'; +import { rxResource } from '@angular/core/rxjs-interop'; + +@Component({ + selector: 'app-decorative-header', + templateUrl: './decorative-header.component.html', + styleUrl: './decorative-header.component.scss', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class DecorativeHeaderComponent { + private readonly fileService = inject(FileService); + private readonly domSanitizer = inject(DomSanitizer); + + readonly svgUrl = input(''); + readonly svgResource = rxResource({ + params: this.svgUrl, + stream: ({ params }) => this.fileService.getFileAsText(params), + }); + readonly svgContent = computed(() => + this.domSanitizer.bypassSecurityTrustHtml(this.svgResource.value()!), + ); +} diff --git a/src/app/shared/components/error-404/error-404.component.html b/src/app/shared/components/error-404/error-404.component.html new file mode 100755 index 00000000..337874d8 --- /dev/null +++ b/src/app/shared/components/error-404/error-404.component.html @@ -0,0 +1,15 @@ +
+

Error 404: A Wild Error Appeared

+ +
+ ash and pikachu sad +
+
diff --git a/src/app/shared/components/error-404/error-404.component.scss b/src/app/shared/components/error-404/error-404.component.scss new file mode 100644 index 00000000..d524f5ca --- /dev/null +++ b/src/app/shared/components/error-404/error-404.component.scss @@ -0,0 +1,13 @@ +@use 'base/media-queries' as mq; +@use 'components/pages'; + +:host { + @include pages.read-page; + + text-align: center; + + img { + width: 300px; + height: auto; + } +} diff --git a/src/app/shared/components/error-404/error-404.component.ts b/src/app/shared/components/error-404/error-404.component.ts new file mode 100755 index 00000000..caf7e7aa --- /dev/null +++ b/src/app/shared/components/error-404/error-404.component.ts @@ -0,0 +1,11 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { NgOptimizedImage } from '@angular/common'; + +@Component({ + selector: 'app-error-404', + imports: [NgOptimizedImage], + templateUrl: './error-404.component.html', + styleUrl: 'error-404.component.scss', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class Error404Component {} diff --git a/src/app/shared/components/footer/footer.component.html b/src/app/shared/components/footer/footer.component.html new file mode 100755 index 00000000..dd8a6df1 --- /dev/null +++ b/src/app/shared/components/footer/footer.component.html @@ -0,0 +1,129 @@ + diff --git a/src/app/shared/components/footer/footer.component.scss b/src/app/shared/components/footer/footer.component.scss new file mode 100755 index 00000000..3b0c092c --- /dev/null +++ b/src/app/shared/components/footer/footer.component.scss @@ -0,0 +1,65 @@ +@use 'base/media-queries' as mq; + +:host { + margin-top: auto; + + .footer-container { + position: relative; + justify-content: center; + padding: var(--layout-padding); + padding-inline-end: var(--spacing-r-xl); + container: footer / inline-size; + background-color: var(--page-background); + transition: background-color 0.3s ease; + + .footer-columns { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: var(--spacing-r-4xl); + text-align: center; + + @include mq.for-tablet-up { + grid-template-columns: repeat(4, 1fr); + } + + h2 { + margin-block-end: var(--spacing-r-3xl); + font-size: var(--font-size-sm); + font-weight: var(--font-weight-bold); + letter-spacing: var(--letter-spacing-sm); + } + + ul { + display: flex; + flex-direction: column; + gap: var(--spacing-r-xl); + padding: 0; + list-style: none; + + li { + font-size: var(--font-size-xs); + } + } + + a { + font-weight: var(--font-weight-light); + color: var(--quaternary-contrast); + transition: color 0.3s ease; + + &:hover { + color: var(--primary-contrast); + } + } + } + + .licence__paragraph { + grid-column: span 4; + margin-block-start: var(--spacing-r-4xl); + font-size: var(--font-size-xs); + font-weight: var(--font-weight-light); + color: var(--quaternary-contrast); + text-align: center; + transition: color 0.3s ease; + } + } +} diff --git a/src/app/shared/components/footer/footer.component.ts b/src/app/shared/components/footer/footer.component.ts new file mode 100755 index 00000000..71fd4d95 --- /dev/null +++ b/src/app/shared/components/footer/footer.component.ts @@ -0,0 +1,9 @@ +import { ChangeDetectionStrategy, Component } from '@angular/core'; + +@Component({ + selector: 'app-footer', + templateUrl: './footer.component.html', + styleUrl: './footer.component.scss', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class FooterComponent {} diff --git a/src/app/shared/components/header/header.component.html b/src/app/shared/components/header/header.component.html new file mode 100755 index 00000000..8d450245 --- /dev/null +++ b/src/app/shared/components/header/header.component.html @@ -0,0 +1,153 @@ + diff --git a/src/app/shared/components/header/header.component.scss b/src/app/shared/components/header/header.component.scss new file mode 100755 index 00000000..31303312 --- /dev/null +++ b/src/app/shared/components/header/header.component.scss @@ -0,0 +1,158 @@ +@use 'base/media-queries' as mq; + +$line-active-item-bottom: -31px; +$avatar-size: 40px; + +:host { + .nav__container { + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-between; + border-bottom: 1px solid var(--septenary-contrast); + + @include mq.for-tablet-up { + flex-direction: row; + align-items: center; + justify-content: center; + padding: 0 var(--spacing-r-xl); + } + + &.open { + padding-bottom: var(--spacing-3xl); + + @include mq.for-tablet-up { + padding-bottom: 0; + } + } + + .nav-mobile__container { + display: flex; + align-items: center; + justify-content: space-between; + width: 100%; + + &.open { + border-bottom: 1px solid var(--septenary-contrast); + } + + .nav__hamburger { + display: block; + padding: var(--spacing-xl) var(--spacing-xl); + margin-left: auto; + } + + .nav__item:first-of-type { + margin-left: var(--spacing-r-xl); + } + + @include mq.for-tablet-up { + display: none; + } + } + + .nav__items { + display: none; + flex-direction: column; + gap: var(--spacing-r-lg); + align-items: center; + justify-content: center; + width: 100%; + color: inherit; + text-decoration: none; + + @include mq.for-tablet-up { + display: flex; + flex-flow: row wrap; + } + + &.open { + display: flex; + padding-top: 0; + } + + @include mq.for-tablet-up { + &.user-logged { + .nav__item:nth-child(4) { + margin-left: auto; + } + } + + &:not(.user-logged) { + .nav__item:nth-child(5) { + margin-left: auto; + } + } + } + + .nav__item { + display: block; + margin: var(--spacing-md) 0; + + &:first-of-type { + margin-top: var(--spacing-r-4xl); + } + + @include mq.for-tablet-up { + margin: var(--spacing-xxl) var(--spacing-lg); + + &:first-of-type { + margin: 0 var(--spacing-md) 0; + } + + &:last-of-type { + margin-right: var(--spacing-sm); + } + + &:nth-child(-n + 0) { + align-self: flex-start; + } + } + + .nav__link { + font-size: var(--font-size-md); + color: var(--text-color-secondary); + text-decoration: none; + + &:hover { + color: var(--text-color-secondary-hover); + } + + @include mq.for-tablet-up { + &.active { + position: relative; + + &::after { + position: absolute; + bottom: $line-active-item-bottom; + left: 0; + width: 100%; + height: var(--spacing-xs); + content: ''; + background-color: var(--full-contrast); + } + } + } + + img:first-of-type { + margin: 0; + } + } + } + } + + .avatar__image { + width: $avatar-size; + height: $avatar-size; + border-radius: 50%; + } + + .github-logo__image { + opacity: 0.7; + + &:hover { + opacity: 1; + } + } + } +} diff --git a/src/app/shared/components/header/header.component.ts b/src/app/shared/components/header/header.component.ts new file mode 100755 index 00000000..1ea6ff42 --- /dev/null +++ b/src/app/shared/components/header/header.component.ts @@ -0,0 +1,67 @@ +import type { ElementRef, Signal } from '@angular/core'; +import { + ChangeDetectionStrategy, + Component, + CUSTOM_ELEMENTS_SCHEMA, + inject, + signal, + viewChild, +} from '@angular/core'; +import { AUTH_URLS, ROOT_URLS } from '~core/constants/urls.constants'; +import { Router, RouterLink, RouterLinkActive } from '@angular/router'; +import { NgOptimizedImage, NgTemplateOutlet } from '@angular/common'; +import { AuthenticationService } from '~features/authentication/services/authentication.service'; +import { LanguageSelectorComponent } from '~shared/components/language-selector/language-selector.component'; +import { ThemeButtonComponent } from '~shared/components/theme-button/theme-button.component'; +import { ROOT_PATHS } from '~core/constants/paths.constants'; +import { translations } from '../../../../locale/translations'; +import type { SlDropdown } from '@shoelace-style/shoelace'; +import { PokemonSearchInputComponent } from '~features/pokemon/components/pokemon-search-input/pokemon-search-input.component'; + +import '@shoelace-style/shoelace/dist/components/button/button.js'; +import '@shoelace-style/shoelace/dist/components/icon/icon.js'; +import '@shoelace-style/shoelace/dist/components/dropdown/dropdown.js'; + +@Component({ + selector: 'app-header', + imports: [ + RouterLink, + RouterLinkActive, + NgOptimizedImage, + LanguageSelectorComponent, + NgTemplateOutlet, + ThemeButtonComponent, + PokemonSearchInputComponent, + ], + templateUrl: './header.component.html', + styleUrl: './header.component.scss', + changeDetection: ChangeDetectionStrategy.OnPush, + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class HeaderComponent { + private readonly authenticationService = inject(AuthenticationService); + private readonly router = inject(Router); + + readonly ROOT_PATHS = ROOT_PATHS; + readonly ROOT_URLS = ROOT_URLS; + readonly AUTH_URLS = AUTH_URLS; + readonly translations = translations; + readonly avatarDropdown: Signal | undefined> = viewChild('avatarDropdown'); + readonly isUserLoggedIn = () => this.authenticationService.authState().isLoggedIn; + readonly menuOpen = signal(false); + + logOutUser() { + this.closeMenu(); + this.authenticationService.logOut(); + void this.router.navigate([ROOT_URLS.home]); + } + + toggleMenu() { + this.menuOpen.set(!this.menuOpen()); + } + + closeMenu() { + void this.avatarDropdown()?.nativeElement.hide(); + this.menuOpen.set(false); + } +} diff --git a/src/app/shared/components/language-selector/language-selector.component.html b/src/app/shared/components/language-selector/language-selector.component.html new file mode 100755 index 00000000..000b5e69 --- /dev/null +++ b/src/app/shared/components/language-selector/language-selector.component.html @@ -0,0 +1,13 @@ + + {{ + localeIdText() | uppercase + }} + + diff --git a/src/app/shared/components/language-selector/language-selector.component.ts b/src/app/shared/components/language-selector/language-selector.component.ts new file mode 100755 index 00000000..3f01eac3 --- /dev/null +++ b/src/app/shared/components/language-selector/language-selector.component.ts @@ -0,0 +1,26 @@ +import { + ChangeDetectionStrategy, + Component, + CUSTOM_ELEMENTS_SCHEMA, + inject, + signal, +} from '@angular/core'; +import { Router } from '@angular/router'; +import { UpperCasePipe } from '@angular/common'; +import { LanguageService } from '~core/services/language.service'; + +import '@shoelace-style/shoelace/dist/components/dropdown/dropdown.js'; + +@Component({ + selector: 'app-language-selector', + imports: [UpperCasePipe], + templateUrl: './language-selector.component.html', + changeDetection: ChangeDetectionStrategy.OnPush, + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class LanguageSelectorComponent { + private readonly languageService = inject(LanguageService); + + readonly router = inject(Router); + readonly localeIdText = signal(this.languageService.convertLocaleToAcceptLanguage()); +} diff --git a/src/app/shared/components/progress-bar/progress-bar.component.ts b/src/app/shared/components/progress-bar/progress-bar.component.ts new file mode 100644 index 00000000..22e28398 --- /dev/null +++ b/src/app/shared/components/progress-bar/progress-bar.component.ts @@ -0,0 +1,75 @@ +import type { Signal } from '@angular/core'; +import { + ChangeDetectionStrategy, + Component, + effect, + inject, + signal, + viewChild, +} from '@angular/core'; +import { NgProgressbar, NgProgressRef } from 'ngx-progressbar'; +import type { RouterEvent } from '@angular/router'; +import { + NavigationCancel, + NavigationEnd, + NavigationError, + NavigationSkipped, + NavigationStart, + Router, +} from '@angular/router'; +import { toSignal } from '@angular/core/rxjs-interop'; +import { filter } from 'rxjs'; + +/** Delay before showing the progress bar */ +export const PROGRESS_BAR_DELAY = 30; + +@Component({ + selector: 'app-progress-bar', + imports: [NgProgressbar], + template: ``, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ProgressBarComponent { + private readonly router = inject(Router); + private readonly progressBar: Signal = viewChild(NgProgressRef); + private readonly routerEvents = toSignal( + this.router.events.pipe(filter((event) => this.isNavigationEvent(event as RouterEvent))), + ) as Signal; + private readonly timeoutId = signal(null); + + constructor() { + effect(() => { + const event = this.routerEvents(); + + if (event instanceof NavigationStart) { + const id = setTimeout(() => { + this.progressBar()?.start(); + }, PROGRESS_BAR_DELAY) as unknown as number; + + this.timeoutId.set(id); + } + + if (this.isNavigationEndLike(event)) { + const id = this.timeoutId(); + if (id !== null) { + clearTimeout(id); + } + this.progressBar()?.complete(); + this.timeoutId.set(null); + } + }); + } + + private isNavigationEvent(event: RouterEvent): boolean { + return event instanceof NavigationStart || this.isNavigationEndLike(event); + } + + private isNavigationEndLike(event: RouterEvent): boolean { + return ( + event instanceof NavigationEnd || + event instanceof NavigationCancel || + event instanceof NavigationSkipped || + event instanceof NavigationError + ); + } +} diff --git a/src/app/shared/components/theme-button/theme-button.component.html b/src/app/shared/components/theme-button/theme-button.component.html new file mode 100755 index 00000000..00caf2be --- /dev/null +++ b/src/app/shared/components/theme-button/theme-button.component.html @@ -0,0 +1,7 @@ + + @if (themeSelected() === Theme.DARK) { + + } @else { + + } + diff --git a/src/app/shared/components/theme-button/theme-button.component.ts b/src/app/shared/components/theme-button/theme-button.component.ts new file mode 100755 index 00000000..c90f36b2 --- /dev/null +++ b/src/app/shared/components/theme-button/theme-button.component.ts @@ -0,0 +1,26 @@ +import { ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA, inject } from '@angular/core'; +import { Theme, ThemeManagerService } from '~core/services/ui/theme-manager.service'; + +import '@shoelace-style/shoelace/dist/components/button/button.js'; +import '@shoelace-style/shoelace/dist/components/icon/icon.js'; + +@Component({ + selector: 'app-theme-button', + templateUrl: './theme-button.component.html', + changeDetection: ChangeDetectionStrategy.OnPush, + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class ThemeButtonComponent { + private readonly themeManagerService = inject(ThemeManagerService); + + readonly themeSelected = this.themeManagerService.themeSelected; + readonly Theme = Theme; + + toggleTheme() { + if (this.themeSelected() === Theme.DARK) { + this.themeManagerService.setTheme(Theme.LIGHT); + } else { + this.themeManagerService.setTheme(Theme.DARK); + } + } +} diff --git a/src/app/shared/components/toast-stack/toast-stack.component.html b/src/app/shared/components/toast-stack/toast-stack.component.html new file mode 100755 index 00000000..667724ec --- /dev/null +++ b/src/app/shared/components/toast-stack/toast-stack.component.html @@ -0,0 +1,14 @@ +@for (alert of alerts(); track alert.id) { + +} diff --git a/src/app/shared/components/toast-stack/toast-stack.component.ts b/src/app/shared/components/toast-stack/toast-stack.component.ts new file mode 100755 index 00000000..ffd8ef00 --- /dev/null +++ b/src/app/shared/components/toast-stack/toast-stack.component.ts @@ -0,0 +1,44 @@ +import type { ElementRef } from '@angular/core'; +import { + ChangeDetectionStrategy, + Component, + CUSTOM_ELEMENTS_SCHEMA, + effect, + inject, + viewChildren, +} from '@angular/core'; +import { AlertService } from '~core/services/ui/alert.service'; +import type { Alert } from '~core/constants/alerts.constants'; + +import '@shoelace-style/shoelace/dist/components/alert/alert.js'; + +@Component({ + selector: 'app-toast-stack', + templateUrl: './toast-stack.component.html', + changeDetection: ChangeDetectionStrategy.OnPush, + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class ToastStackComponent { + private readonly alertService = inject(AlertService); + private readonly toastedAlertIds = new Set(); + private readonly alertElements = viewChildren('alertReference'); + + readonly alerts = this.alertService.alerts; + + constructor() { + effect(() => { + for (const element of this.alertElements()) { + const native = element.nativeElement as HTMLElement & { toast?: () => void }; + const alertId = native.getAttribute('id'); + if (alertId && !this.toastedAlertIds.has(alertId)) { + native.toast?.(); + this.toastedAlertIds.add(alertId); + } + } + }); + } + + removeFromAlerts(alert: Alert) { + this.alertService.removeAlert(alert); + } +} diff --git a/src/app/shared/directives/lowercase.directive.ts b/src/app/shared/directives/lowercase.directive.ts new file mode 100644 index 00000000..49ef91ea --- /dev/null +++ b/src/app/shared/directives/lowercase.directive.ts @@ -0,0 +1,20 @@ +import { Directive, ElementRef, inject } from '@angular/core'; +import { NgControl } from '@angular/forms'; + +@Directive({ + selector: '[appLowercase]', + host: { + '(keydown)': 'onKeyDown()', + }, +}) +export class LowercaseDirective { + private readonly el = inject(ElementRef); + private readonly ngControl = inject(NgControl); + + onKeyDown() { + const { control } = this.ngControl; + if (control) { + control.setValue(this.el.nativeElement.value.toLowerCase()); + } + } +} diff --git a/src/app/shared/directives/sl-checkbox-control.directive.ts b/src/app/shared/directives/sl-checkbox-control.directive.ts new file mode 100644 index 00000000..bc1971df --- /dev/null +++ b/src/app/shared/directives/sl-checkbox-control.directive.ts @@ -0,0 +1,47 @@ +import { Directive, ElementRef, inject, model } from '@angular/core'; +import type { ControlValueAccessor } from '@angular/forms'; +import { NG_VALUE_ACCESSOR } from '@angular/forms'; + +@Directive({ + selector: '[appSlCheckboxControl]', + providers: [ + { + provide: NG_VALUE_ACCESSOR, + useExisting: AppSlCheckboxControlDirective, + multi: true, + }, + ], + host: { + '[attr.checked]': 'checked()', + '(sl-change)': 'onSlChange()', + }, +}) +export class AppSlCheckboxControlDirective implements ControlValueAccessor { + private readonly el = inject(ElementRef); + + // eslint-disable-next-line @typescript-eslint/no-empty-function,@typescript-eslint/no-unused-vars + private onChangeFn = (value: boolean) => {}; + + // eslint-disable-next-line @typescript-eslint/no-empty-function + private onTouchedFn = () => {}; + + readonly checked = model(false); + + writeValue(value: boolean): void { + this.checked.set(value); + } + + registerOnChange(function_: () => void): void { + this.onChangeFn = function_; + } + + registerOnTouched(function_: () => void): void { + this.onTouchedFn = function_; + } + + onSlChange(): void { + const { checked } = this.el.nativeElement; + this.onChangeFn(checked); + this.onTouchedFn(); + } +} diff --git a/src/app/shared/directives/sl-input-icon-focus.directive.ts b/src/app/shared/directives/sl-input-icon-focus.directive.ts new file mode 100755 index 00000000..13cf33f1 --- /dev/null +++ b/src/app/shared/directives/sl-input-icon-focus.directive.ts @@ -0,0 +1,36 @@ +import { Directive, ElementRef, inject } from '@angular/core'; + +@Directive({ + selector: '[appSlInputIconFocus]', + host: { + '(mouseover)': 'onMouseOver()', + '(mouseout)': 'onMouseOut()', + '(focus)': 'onFocus()', + '(blur)': 'onBlur()', + }, +}) +export class SlInputIconFocusDirective { + private readonly el = inject(ElementRef); + + private isFocused = false; + + onMouseOver() { + this.el.nativeElement.querySelector('sl-icon').style.color = 'var(--primary-contrast)'; + } + + onMouseOut() { + if (!this.isFocused) { + this.el.nativeElement.querySelector('sl-icon').style.color = 'var(--quaternary-contrast)'; + } + } + + onFocus() { + this.isFocused = true; + this.el.nativeElement.querySelector('sl-icon').style.color = 'var(--primary-contrast)'; + } + + onBlur() { + this.isFocused = false; + this.el.nativeElement.querySelector('sl-icon').style.color = 'var(--quaternary-contrast)'; + } +} diff --git a/src/app/shared/directives/sl-select-control.directive.ts b/src/app/shared/directives/sl-select-control.directive.ts new file mode 100644 index 00000000..a0129473 --- /dev/null +++ b/src/app/shared/directives/sl-select-control.directive.ts @@ -0,0 +1,47 @@ +import { Directive, ElementRef, inject, model } from '@angular/core'; +import type { ControlValueAccessor } from '@angular/forms'; +import { NG_VALUE_ACCESSOR } from '@angular/forms'; + +@Directive({ + selector: '[appSlSelectControl]', + providers: [ + { + provide: NG_VALUE_ACCESSOR, + useExisting: AppSlSelectControlDirective, + multi: true, + }, + ], + host: { + '[attr.value]': 'value()', + '(sl-change)': 'onSlChange()', + }, +}) +export class AppSlSelectControlDirective implements ControlValueAccessor { + private readonly el = inject(ElementRef); + + // eslint-disable-next-line @typescript-eslint/no-empty-function,@typescript-eslint/no-unused-vars + private onChangeFn = (value: unknown) => {}; + + // eslint-disable-next-line @typescript-eslint/no-empty-function + private onTouchedFn = () => {}; + + readonly value = model(''); + + writeValue(value: string): void { + this.value.set(value); + } + + registerOnChange(function_: () => void): void { + this.onChangeFn = function_; + } + + registerOnTouched(function_: () => void): void { + this.onTouchedFn = function_; + } + + onSlChange(): void { + const { value } = this.el.nativeElement; + this.onChangeFn(value); + this.onTouchedFn(); + } +} diff --git a/src/app/shared/directives/trim.directive.ts b/src/app/shared/directives/trim.directive.ts new file mode 100755 index 00000000..24adbadc --- /dev/null +++ b/src/app/shared/directives/trim.directive.ts @@ -0,0 +1,15 @@ +import { Directive, ElementRef, inject } from '@angular/core'; + +@Directive({ + selector: '[appTrim]', + host: { + '(blur)': 'onBlur()', + }, +}) +export class TrimDirective { + private readonly el = inject(ElementRef); + + onBlur() { + this.el.nativeElement.value = this.el.nativeElement.value.trim(); + } +} diff --git a/src/app/shared/interceptors/progress.interceptor.ts b/src/app/shared/interceptors/progress.interceptor.ts deleted file mode 100644 index 52ab4146..00000000 --- a/src/app/shared/interceptors/progress.interceptor.ts +++ /dev/null @@ -1,19 +0,0 @@ -import {HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse} from '@angular/common/http'; -import {Observable} from 'rxjs/Observable'; -import {ProgressBarService} from '../../core/progress-bar.service'; - -export class ProgressInterceptor implements HttpInterceptor { - constructor(private progressBarService: ProgressBarService) { - } - - intercept(req: HttpRequest, next: HttpHandler): Observable> { - this.progressBarService.increase(); - return next - .handle(req) - .do(event => { - if (event instanceof HttpResponse) { - this.progressBarService.decrease(); - } - }); - } -} diff --git a/src/app/shared/interceptors/timing.interceptor.ts b/src/app/shared/interceptors/timing.interceptor.ts deleted file mode 100644 index ccf85658..00000000 --- a/src/app/shared/interceptors/timing.interceptor.ts +++ /dev/null @@ -1,20 +0,0 @@ -import {HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse} from '@angular/common/http'; -import {Observable} from 'rxjs/Observable'; -import {LoggerService} from '../../core/logger.service'; - -export class TimingInterceptor implements HttpInterceptor { - constructor() { - } - - intercept(req: HttpRequest, next: HttpHandler): Observable> { - const started = Date.now(); - return next - .handle(req) - .do(event => { - if (event instanceof HttpResponse) { - const elapsed = Date.now() - started; - LoggerService.log(`Request for ${req.urlWithParams} took ${elapsed} ms.`); - } - }); - } -} diff --git a/src/app/shared/modules/material.module.ts b/src/app/shared/modules/material.module.ts deleted file mode 100644 index 59b756ab..00000000 --- a/src/app/shared/modules/material.module.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { - MatAutocompleteModule, - MatButtonModule, - MatCardModule, - MatDialogModule, - MatGridListModule, - MatIconModule, - MatInputModule, - MatListModule, - MatMenuModule, - MatProgressBarModule, - MatProgressSpinnerModule, - MatSliderModule, - MatSnackBarModule, - MatTooltipModule -} from '@angular/material'; -import {NgModule} from '@angular/core'; - -@NgModule({ - imports: [ - MatButtonModule, - MatMenuModule, - MatIconModule, - MatCardModule, - MatSliderModule, - MatProgressBarModule, - MatAutocompleteModule, - MatInputModule, - MatGridListModule, - MatSnackBarModule, - MatProgressSpinnerModule, - MatTooltipModule, - MatListModule, - MatDialogModule - ], - exports: [ - MatButtonModule, - MatMenuModule, - MatIconModule, - MatCardModule, - MatSliderModule, - MatProgressBarModule, - MatAutocompleteModule, - MatInputModule, - MatGridListModule, - MatSnackBarModule, - MatProgressSpinnerModule, - MatTooltipModule, - MatListModule, - MatDialogModule - ], -}) - -export class MaterialModule { -} diff --git a/src/app/shared/modules/shared.module.ts b/src/app/shared/modules/shared.module.ts deleted file mode 100644 index 6bcf25e3..00000000 --- a/src/app/shared/modules/shared.module.ts +++ /dev/null @@ -1,29 +0,0 @@ -import {ModuleWithProviders, NgModule} from '@angular/core'; -import {MaterialModule} from './material.module'; -import {TranslateModule} from '@ngx-translate/core'; -import {HeroService} from '../../heroes/shared/hero.service'; -import {FlexLayoutModule} from '@angular/flex-layout'; - -@NgModule({ - imports: [ - MaterialModule, - FlexLayoutModule, - TranslateModule - ], - exports: [ - MaterialModule, - FlexLayoutModule, - TranslateModule - ] -}) - -export class SharedModule { - static forRoot(): ModuleWithProviders { - return { - ngModule: SharedModule, - providers: [ - HeroService - ] - }; - } -} diff --git a/src/app/shared/modules/tests.module.ts b/src/app/shared/modules/tests.module.ts deleted file mode 100644 index c3bf4e93..00000000 --- a/src/app/shared/modules/tests.module.ts +++ /dev/null @@ -1,26 +0,0 @@ -import {NgModule} from '@angular/core'; -import {ProgressBarService} from '../../core/progress-bar.service'; -import {MaterialModule} from './material.module'; -import {BrowserModule} from '@angular/platform-browser'; -import {BrowserAnimationsModule} from '@angular/platform-browser/animations'; -import {HttpClientModule} from '@angular/common/http'; -import {RouterModule} from '@angular/router'; -import {FormsModule, ReactiveFormsModule} from '@angular/forms'; -import {RouterTestingModule} from '@angular/router/testing'; - -@NgModule({ - exports: [ - BrowserModule, - BrowserAnimationsModule, - HttpClientModule, - RouterModule, - RouterTestingModule, - MaterialModule, - FormsModule, - ReactiveFormsModule - ], - providers: [ProgressBarService] -}) - -export class TestsModule { -} diff --git a/src/app/shared/pipes/first-title-case.pipe.ts b/src/app/shared/pipes/first-title-case.pipe.ts new file mode 100644 index 00000000..8446c69c --- /dev/null +++ b/src/app/shared/pipes/first-title-case.pipe.ts @@ -0,0 +1,11 @@ +import type { PipeTransform } from '@angular/core'; +import { Pipe } from '@angular/core'; + +@Pipe({ + name: 'firstTitleCase', +}) +export class FirstTitleCasePipe implements PipeTransform { + transform(value: string | undefined): string { + return value ? value[0].toUpperCase() + value.slice(1) : ''; + } +} diff --git a/src/app/shared/types/api-response.types.ts b/src/app/shared/types/api-response.types.ts new file mode 100644 index 00000000..9c368e6c --- /dev/null +++ b/src/app/shared/types/api-response.types.ts @@ -0,0 +1,11 @@ +export type ApiResponse = { + ok: boolean; + data: T; +}; + +export type ApiErrorResponse = { + error: { + internalCode?: number; + message?: string; + }; +}; diff --git a/src/app/shared/validators/email.validator.ts b/src/app/shared/validators/email.validator.ts new file mode 100644 index 00000000..a2d9e370 --- /dev/null +++ b/src/app/shared/validators/email.validator.ts @@ -0,0 +1,13 @@ +import type { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms'; + +export function emailValidator(): ValidatorFn { + return (control: AbstractControl): ValidationErrors | null => { + const { value } = control; + if (!value) { + return null; + } + + const emailRegex = /^[^\s@]+@[^\s@][^\s.@]*\.[^\s@]+$/u; + return emailRegex.test(value) ? null : { email: value }; + }; +} diff --git a/src/app/shared/validators/password.validator.ts b/src/app/shared/validators/password.validator.ts new file mode 100644 index 00000000..f2ceb052 --- /dev/null +++ b/src/app/shared/validators/password.validator.ts @@ -0,0 +1,18 @@ +import type { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms'; + +export function passwordValidator(): ValidatorFn { + const validators = [ + (value: string) => /[A-Z]/u.test(value), // Has uppercase + (value: string) => /[a-z]/u.test(value), // Has lowercase + (value: string) => /[0-9]/u.test(value), // Has numeric + (value: string) => value.length >= 8, // Is valid length + ]; + + return (control: AbstractControl): ValidationErrors | null => { + const value = control.value as string; + if (!value) { + return null; + } + return validators.every((function_) => function_(value)) ? null : { passwordStrength: true }; + }; +} diff --git a/src/assets/css/loading.css b/src/assets/css/loading.css deleted file mode 100644 index fb3a79fa..00000000 --- a/src/assets/css/loading.css +++ /dev/null @@ -1,126 +0,0 @@ -html { - height: 100%; -} - -body { - min-height: 100%; -} - -.loading-page { - height: 100%; - width: 100%; - position: absolute; - background: #3f51b5; -} - -.spinner { - position: absolute; - left: 48%; - top: 40%; - width: 55px; - height: 65px; - text-align: center; -} - -.spinner { - position: absolute; - left: 48%; - top: 40%; - text-align: center; - margin: 20px auto; - width: 40px; - height: 40px; - -webkit-transform: rotateZ(45deg); - transform: rotateZ(45deg); -} - -.spinner .sk-cube { - float: left; - width: 50%; - height: 50%; - position: relative; - -webkit-transform: scale(1.1); - -ms-transform: scale(1.1); - transform: scale(1.1); -} - -.spinner .sk-cube:before { - content: ''; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: white; - -webkit-animation: sk-foldCubeAngle 2.4s infinite linear both; - animation: sk-foldCubeAngle 2.4s infinite linear both; - -webkit-transform-origin: 100% 100%; - -ms-transform-origin: 100% 100%; - transform-origin: 100% 100%; -} - -.spinner .sk-cube2 { - -webkit-transform: scale(1.1) rotateZ(90deg); - transform: scale(1.1) rotateZ(90deg); -} - -.spinner .sk-cube3 { - -webkit-transform: scale(1.1) rotateZ(180deg); - transform: scale(1.1) rotateZ(180deg); -} - -.spinner .sk-cube4 { - -webkit-transform: scale(1.1) rotateZ(270deg); - transform: scale(1.1) rotateZ(270deg); -} - -.spinner .sk-cube2:before { - -webkit-animation-delay: 0.3s; - animation-delay: 0.3s; -} - -.spinner .sk-cube3:before { - -webkit-animation-delay: 0.6s; - animation-delay: 0.6s; -} - -.spinner .sk-cube4:before { - -webkit-animation-delay: 0.9s; - animation-delay: 0.9s; -} - -@-webkit-keyframes sk-foldCubeAngle { - 0%, 10% { - -webkit-transform: perspective(140px) rotateX(-180deg); - transform: perspective(140px) rotateX(-180deg); - opacity: 0; - } - 25%, 75% { - -webkit-transform: perspective(140px) rotateX(0deg); - transform: perspective(140px) rotateX(0deg); - opacity: 1; - } - 90%, 100% { - -webkit-transform: perspective(140px) rotateY(180deg); - transform: perspective(140px) rotateY(180deg); - opacity: 0; - } -} - -@keyframes sk-foldCubeAngle { - 0%, 10% { - -webkit-transform: perspective(140px) rotateX(-180deg); - transform: perspective(140px) rotateX(-180deg); - opacity: 0; - } - 25%, 75% { - -webkit-transform: perspective(140px) rotateX(0deg); - transform: perspective(140px) rotateX(0deg); - opacity: 1; - } - 90%, 100% { - -webkit-transform: perspective(140px) rotateY(180deg); - transform: perspective(140px) rotateY(180deg); - opacity: 0; - } -} \ No newline at end of file diff --git a/src/assets/css/reset.css b/src/assets/css/reset.css deleted file mode 100644 index 27fe71ee..00000000 --- a/src/assets/css/reset.css +++ /dev/null @@ -1,51 +0,0 @@ -html, body, div, span, applet, object, iframe, -h1, h2, h3, h4, h5, h6, p, blockquote, pre, -a, abbr, acronym, address, big, cite, code, -del, dfn, em, img, ins, kbd, q, s, samp, -small, strike, strong, sub, sup, tt, var, -b, u, i, center, -dl, dt, dd, ol, ul, li, -fieldset, form, label, legend, -table, caption, tbody, tfoot, thead, tr, th, td, -article, aside, canvas, details, embed, -figure, figcaption, footer, header, -menu, nav, output, ruby, section, summary, -time, mark, audio, video { - margin: 0; - padding: 0; - border: 0; - font: inherit; - vertical-align: baseline; -} - -/* HTML5 display-role reset for older browsers */ -article, aside, details, figcaption, figure, -footer, header, menu, nav, section { - display: block; -} - -html, body { - height: 100%; -} - -body { - line-height: 1; -} - -ol, ul { - list-style: none; -} - -blockquote, q { - quotes: none; -} - -blockquote:before, blockquote:after, -q:before, q:after { - content: none; -} - -table { - border-collapse: collapse; - border-spacing: 0; -} \ No newline at end of file diff --git a/src/assets/css/styles.scss b/src/assets/css/styles.scss deleted file mode 100644 index b71f26e3..00000000 --- a/src/assets/css/styles.scss +++ /dev/null @@ -1,85 +0,0 @@ -@import 'http://github.com/~@angular/material/prebuilt-themes/deeppurple-amber.css'; - -* { - font-family: 'Roboto', sans-serif; -} - -a, .cp { - cursor: pointer; -} - -.section-title { - text-align: center; - font-size: 1.5em; - font-weight: 300; - padding: 1em 0 0; -} - -.flex-spacer { - flex-grow: 1; -} - -.progress-spinner { - height: 60px !important; - margin: 2em auto; -} - -snack-bar-container { - background: #3f51b5 !important; -} - -.mat-menu-content { - background: #3f51b5; -} - -.mat-menu-item, .mat-menu-item .mat-icon { - color: white; - font-weight: 100; -} - -.hero-actions { - align-items: center; - display: flex; - padding-bottom: 1em; -} - -.like-icon { - color: #DC143C; - cursor: pointer; -} - -.mat-raised-button[disabled] { - background: #bbb !important; -} - -.mat-dialog-container { - background: #3f51b5; - color: white; -} - -.mat-dialog-content { - text-align: center; - padding: 1em 24px !important; -} - -.mat-dialog-title { - text-align: center; -} - -.hero-header-image { - background-size: cover; -} - -.mat-card-image { - margin-bottom: -28px !important; - border-top: 1px solid #eee; -} - -.mat-list-avatar { - height: 55px !important; - width: 55px !important; -} - -.text-right { - text-align: right; -} diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json deleted file mode 100644 index c982f9a3..00000000 --- a/src/assets/i18n/en.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "home": "Home", - "heroesList": "Heroes list", - "angularExampleApp": "Angular Example App", - "language": "Language", - "orange": "Orange", - "yellow": "Yellow", - "cyan": "Cyan", - "name": "Name", - "nameRequired": "Name is required", - "hero-top": { - "title": "Top Heroes" - }, - "hero-create-new": { - "newHero": "New hero" - }, - "heroPower": "Hero power", - "details": "details", - "saveHero": "Save hero", - "createNewHero": "Create new hero", - "alert": "Alert", - "sureRemoveHero": "Do you want to remove the hero?", - "cancel": "Cancel", - "remove": "Remove", - "findHero": "Find a hero", - "back": "Back", - "noHero": "There is no hero!", - "heroDuplicated": "Hero id is already taken", - "heroDefault": "It's a default hero, you cannot delete it", - "topHeroes": "Heroes most liked", - "saved": "Saved!", - "heroLikeMaximum": "The limit of votes is {{value}}!", - "canVote": "Can vote :)", - "cannotVote": "Cannot vote anymore :(", - "createHero": "Create a hero", - "realName": "Real name", - "create": "Create", - "realNameRequired": "Real name is required", - "errorHasOcurred": "An error has ocurred", - "heroCreated": "Hero created!", - "removeHero": "Delete hero", - "areYouSure": "Are you sure?", - "no": "No", - "yes": "Yes", - "heroRemoved": "Hero has gone :(", - "heroDetail": "Hero detail", - "error404": "404 Error", - "mayTheForce": "May the force be with you", - "updateBrowser": "You are using an old browser, please update it and reload the page." -} \ No newline at end of file diff --git a/src/assets/i18n/es.json b/src/assets/i18n/es.json deleted file mode 100644 index d0acd572..00000000 --- a/src/assets/i18n/es.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "home": "Inicio", - "heroesList": "Lista de heroes", - "angularExampleApp": "Angular aplicación de ejemplo", - "language": "Idioma", - "orange": "Naranja", - "yellow": "Amarillo", - "cyan": "Cian", - "name": "Nombre", - "nameRequired": "El nombre es obligatorio", - "hero-top": { - "title": "Top Heroes" - }, - "hero-create-new": { - "newHero": "Nuevo heroe" - }, - "heroPower": "Poder del heroe", - "details": "info", - "saveHero": "Guardar heroe", - "createNewHero": "Crear nuevo heroe", - "alert": "Alerta", - "sureRemoveHero": "¿Estas seguro de que quieres eliminar el heroe?", - "cancel": "Cancelar", - "remove": "Eliminar", - "findHero": "Busca un heroe", - "back": "Atras", - "noHero": "No hay heroe!", - "heroDuplicated": "El id del heroe ya está cogido!", - "heroDefault": "Los heroes por defecto, no se pueden borrar!", - "topHeroes": "Heroes más votados", - "saved": "Guardado!", - "heroLikeMaximum": "El límite de votos es {{value}}!", - "canVote": "Puedes votar :)", - "cannotVote": "No puedes votar más :(", - "createHero": "Añadir un heroe", - "realName": "Nombre real", - "create": "Crear", - "realNameRequired": "Nombre real es obligatorio", - "errorHasOcurred": "Ha ocurrido un error", - "heroCreated": "Heroe creado!", - "removeHero": "Eliminar heroe", - "areYouSure": "¿Estas seguro?", - "no": "No", - "yes": "Yes", - "heroRemoved": "El heroe nos ha dejado :(", - "heroDetail": "Detalle del heroe", - "error404": "Error 404", - "mayTheForce": "Que la fuerza te acompañe", - "updateBrowser": "Estas usando un navegador antiguo, por favor actualiza la versión y recarga la página." -} \ No newline at end of file diff --git a/src/assets/i18n/pt-br.json b/src/assets/i18n/pt-br.json deleted file mode 100644 index 82ef0e46..00000000 --- a/src/assets/i18n/pt-br.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "home": "Inicio", - "heroesList": "Lista de heróis", - "angularExampleApp": "Aplicação exemplo de angular", - "language": "Idioma", - "orange": "Laranja", - "yellow": "Amarelo", - "cyan": "Ciano", - "name": "Nome", - "nameRequired": "O nome é obrigatório", - "hero-top": { - "title": "Top heróis" - }, - "hero-create-new": { - "newHero": "Novo herói" - }, - "heroPower": "Poder", - "details": "info", - "saveHero": "Salvar herói", - "createNewHero": "Criar novo herói", - "alert": "Alerta", - "sureRemoveHero": "Você tem certeza que quer remover o herói?", - "cancel": "Cancelar", - "remove": "Remover", - "findHero": "Pesquisar herói", - "back": "Voltar", - "noHero": "Não há heróis", - "heroDuplicated": "O ID do herói já está pronto", - "heroDefault": "Este é um herói padrão, você não pode excluí-lo", - "topHeroes": "Heróis mais curtidos", - "saved": "Salvo!", - "heroLikeMaximum": "O limite de votos é {{valor}}!", - "canVote": "Vote :)", - "cannotVote": "Não é mais possível voltar:(", - "createHero": "Crie um herói", - "realName": "Nome real", - "create": "Criar", - "realNameRequired": "O nome real e obrigatório", - "errorHasOcurred": "Ocorreu um erro :(", - "heroCreated": "Herói criado!", - "removeHero": "Excluir herói", - "areYouSure": "Você tem certeza?", - "no": "Não", - "yes": "Sim", - "heroRemoved": "O herói se foi :(", - "heroDetail": "Detalhes do herói", - "error404": "Erro 404", - "mayTheForce": "Que a força te acompanhe", - "updateBrowser": "Você está usando um navegador antigo, atualize a versão e recarregue a página." -} \ No newline at end of file diff --git a/src/assets/images/404.gif b/src/assets/images/404.gif deleted file mode 100644 index 4593f537..00000000 Binary files a/src/assets/images/404.gif and /dev/null differ diff --git a/src/assets/images/angular.svg b/src/assets/images/angular.svg deleted file mode 100644 index a0c7d054..00000000 --- a/src/assets/images/angular.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - diff --git a/src/assets/images/github-circle-white-transparent.svg b/src/assets/images/github-circle-white-transparent.svg deleted file mode 100644 index dcb637f1..00000000 --- a/src/assets/images/github-circle-white-transparent.svg +++ /dev/null @@ -1,5 +0,0 @@ - - github-circle-white-transparent - - \ No newline at end of file diff --git a/src/assets/images/heroes/1-thumbnail.jpg b/src/assets/images/heroes/1-thumbnail.jpg deleted file mode 100644 index a3653b53..00000000 Binary files a/src/assets/images/heroes/1-thumbnail.jpg and /dev/null differ diff --git a/src/assets/images/heroes/1.jpg b/src/assets/images/heroes/1.jpg deleted file mode 100644 index 4121007e..00000000 Binary files a/src/assets/images/heroes/1.jpg and /dev/null differ diff --git a/src/assets/images/heroes/2-thumbnail.jpg b/src/assets/images/heroes/2-thumbnail.jpg deleted file mode 100644 index 1ea9ce2b..00000000 Binary files a/src/assets/images/heroes/2-thumbnail.jpg and /dev/null differ diff --git a/src/assets/images/heroes/2.jpg b/src/assets/images/heroes/2.jpg deleted file mode 100644 index 91a93cfe..00000000 Binary files a/src/assets/images/heroes/2.jpg and /dev/null differ diff --git a/src/assets/images/heroes/3-thumbnail.jpg b/src/assets/images/heroes/3-thumbnail.jpg deleted file mode 100644 index 6d40501d..00000000 Binary files a/src/assets/images/heroes/3-thumbnail.jpg and /dev/null differ diff --git a/src/assets/images/heroes/3.jpg b/src/assets/images/heroes/3.jpg deleted file mode 100644 index 3d8b6c32..00000000 Binary files a/src/assets/images/heroes/3.jpg and /dev/null differ diff --git a/src/assets/images/heroes/4-thumbnail.jpg b/src/assets/images/heroes/4-thumbnail.jpg deleted file mode 100644 index c5a01563..00000000 Binary files a/src/assets/images/heroes/4-thumbnail.jpg and /dev/null differ diff --git a/src/assets/images/heroes/4.jpg b/src/assets/images/heroes/4.jpg deleted file mode 100644 index c73f4688..00000000 Binary files a/src/assets/images/heroes/4.jpg and /dev/null differ diff --git a/src/assets/images/heroes/5-thumbnail.jpg b/src/assets/images/heroes/5-thumbnail.jpg deleted file mode 100644 index 32a6bdf2..00000000 Binary files a/src/assets/images/heroes/5-thumbnail.jpg and /dev/null differ diff --git a/src/assets/images/heroes/5.jpg b/src/assets/images/heroes/5.jpg deleted file mode 100644 index 326c5471..00000000 Binary files a/src/assets/images/heroes/5.jpg and /dev/null differ diff --git a/src/assets/images/heroes/6-thumbnail.jpg b/src/assets/images/heroes/6-thumbnail.jpg deleted file mode 100644 index 3e4c5de9..00000000 Binary files a/src/assets/images/heroes/6-thumbnail.jpg and /dev/null differ diff --git a/src/assets/images/heroes/6.jpg b/src/assets/images/heroes/6.jpg deleted file mode 100644 index 3d21e88b..00000000 Binary files a/src/assets/images/heroes/6.jpg and /dev/null differ diff --git a/src/assets/images/heroes/7-thumbnail.jpg b/src/assets/images/heroes/7-thumbnail.jpg deleted file mode 100644 index 28002c19..00000000 Binary files a/src/assets/images/heroes/7-thumbnail.jpg and /dev/null differ diff --git a/src/assets/images/heroes/7.jpg b/src/assets/images/heroes/7.jpg deleted file mode 100644 index 249a30f9..00000000 Binary files a/src/assets/images/heroes/7.jpg and /dev/null differ diff --git a/src/assets/images/heroes/8-thumbnail.jpg b/src/assets/images/heroes/8-thumbnail.jpg deleted file mode 100644 index dcfa93d2..00000000 Binary files a/src/assets/images/heroes/8-thumbnail.jpg and /dev/null differ diff --git a/src/assets/images/heroes/8.jpg b/src/assets/images/heroes/8.jpg deleted file mode 100644 index 9e9c65f3..00000000 Binary files a/src/assets/images/heroes/8.jpg and /dev/null differ diff --git a/src/assets/images/heroes/9-thumbnail.jpg b/src/assets/images/heroes/9-thumbnail.jpg deleted file mode 100644 index 8e28d539..00000000 Binary files a/src/assets/images/heroes/9-thumbnail.jpg and /dev/null differ diff --git a/src/assets/images/heroes/9.jpg b/src/assets/images/heroes/9.jpg deleted file mode 100644 index a33dfc28..00000000 Binary files a/src/assets/images/heroes/9.jpg and /dev/null differ diff --git a/src/assets/images/heroes/default.png b/src/assets/images/heroes/default.png deleted file mode 100644 index 822078a3..00000000 Binary files a/src/assets/images/heroes/default.png and /dev/null differ diff --git a/src/assets/js/gtm.js b/src/assets/js/gtm.js deleted file mode 100644 index 73b95c9a..00000000 --- a/src/assets/js/gtm.js +++ /dev/null @@ -1,5 +0,0 @@ -(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': - new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], - j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= - 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); -})(window,document,'script','dataLayer','GTM-TF7QP5M'); \ No newline at end of file diff --git a/src/assets/js/modernizr.js b/src/assets/js/modernizr.js deleted file mode 100644 index b24934dd..00000000 --- a/src/assets/js/modernizr.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! modernizr 3.5.0 (Custom Build) | MIT * - * https://modernizr.com/download/?-eventlistener-localstorage-queryselector-sessionstorage-setclasses !*/ -!function(e,n,s){function o(e,n){return typeof e===n}function t(){var e,n,s,t,a,l,c;for(var f in i)if(i.hasOwnProperty(f)){if(e=[],n=i[f],n.name&&(e.push(n.name.toLowerCase()),n.options&&n.options.aliases&&n.options.aliases.length))for(s=0;s - - - Angular Example App - - - - - - - - - - - - - - - -
-
-
-
-
-
-
-
-
- + + + + + + + + + Angular Example App + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/locale/messages.es.xlf b/src/locale/messages.es.xlf new file mode 100755 index 00000000..8e1cba26 --- /dev/null +++ b/src/locale/messages.es.xlf @@ -0,0 +1,540 @@ + + + + + ¡Welcome back! + ¡Bienvenido de nuevo! + + + Password + Contraseña + + + Enter + Entrar + + + Register + Regístrate + + + Field required. + Campo requerido + + + Must contain at least one lowercase letter, one uppercase letter and one number. No special characters. + La contraseña debe contener al menos una letra minúscula, una mayúscula y un número. No se admiten caracteres especiales. + + + Angular Example App + Angular Example App ES + + + What's your favourite pokemon? + ¿Cuál es tu Pokémon favorito? + + + Home + Inicio + + + Log in + Iniciar sesión + + + Log out + Cerrar sesión + + + pokemon image + imagen de pokemon + + + Skip to main content + Saltar al contenido principal + + + This site uses Google Tag Manager and Google Analytics to make it work smoothly and to understand user behavior. + Este sitio utiliza Google Tag Manager y Google Analytics para que funcione sin problemas y también para entender cómo se comportan los usuarios. + + + Ok, got it! + ¡Ok, entendido! + + + Error 404: A Wild Error Appeared + Error 404: Ha aparecido un error salvaje + + + ash and pikachu sad + Ash y Pikachu tristes + + + Angular + Angular + + + Angular blog + Blog de Angular + + + Blog + Blog + + + X + X + + + YouTube + YouTube + + + Join the discussions at Angular Community Discord server. + Únete a las discusiones en el servidor de Discord de la comunidad Angular. + + + Discord + Discord + + + GitHub + GitHub + + + Contribute to Angular Example App + Contribuir a Angular Example App + + + Contribute + Contribuir + + + Post issues and suggestions on github. + Publica problemas y sugerencias en github. + + + Report Issues + Reportar problemas + + + Resources + Recursos + + + Stack Overflow: where the community answers your technical Angular questions. + Stack Overflow: donde la comunidad responde a tus preguntas técnicas sobre Angular. + + + Stack Overflow + Stack Overflow + + + Angular Google Developer Experts + Expertos en Google Developer de Angular + + + Angular Google Developer Experts + Expertos en Google Developer de Angular + + + Languages + Idiomas + + + English + Inglés + + + English (US) + Inglés (EE.UU.) + + + Español + Español + + + Español (España) + Español (España) + + + ©2016-2025. Code licensed under a MIT License + ©2016-2025. Código con licencia bajo Licencia MIT. + + + License text + Texto de licencia + + + angular logo + logo de angular + + + ES-ES + ES-ES + + + EN-US + EN-US + + + Page load progress + Progreso de carga de la página + + + Enter your email + Introduce tu correo electrónico + + + Email + Correo electrónico + + + Enter your password + Introduce tu contraseña + + + Don't have an account yet? Register + ¿Aún no tienes cuenta? Regístrate + + + My account + Mi cuenta + + + Enter your name + Introduce tu nombre + + + Name + Nombre + + + Language + Idioma + + + Español (España) + Español (España) + + + Your favourite pokemon is: + Tu Pokémon favorito es: + + + Save + Guardar + + + ash standing + ash de pie + + + ¡Register and complete your Pokédex! + ¡Regístrate y completa tu Pokédex! + + + Retype the password + Vuelve a escribir la contraseña + + + Confirm password + Confirmar contraseña + + + Type a pokemon + Escribe un Pokémon + + + I’ve caught 'em all (the terms and privacy policy) and I’m cool with them! + He atrapado todos (los términos y la política de privacidad) y estoy de acuerdo con ellos! + + + Create account + Crear cuenta + + + Do you have an account? Log in + ¿Tienes cuenta? Inicia sesión + + + Angular Example App + Angular Example App + + + This project is a modern, real-world application designed as a foundation for creating new Angular-based projects and also a practical resource for learning. + Este proyecto es una aplicación actualizada y real que está diseñada como base para crear nuevos proyectos basados en Angular y también como un recurso para aprender. + + + It comes with features like internationalization, standalone components, a more logical folder structure, etc, making it a great starting point for building scalable Angular apps. + Incluye características como internacionalización, standalone components, una estructura de carpetas más lógica, etc., lo que lo convierte en un excelente punto de partida para crear aplicaciones en Angular que escalen con facilidad y sean mantenibles. + + + Whether you’re looking for a boilerplate or a solid base project, this setup is designed to help you create clean, maintainable code with ease. + Ya sea que busques una plantilla o un proyecto base sólido, esta configuración está diseñada para ayudarte a crear código limpio y mantenible con facilidad. + + + This project leverages the PokeAPI to provide fun and practical examples, making it easier to understand key concepts in Angular development. By using data from the Pokémon universe, it offers a familiar and engaging way to showcase features like fetching data, handling API calls, and displaying dynamic content. + Este proyecto aprovecha la PokeAPI para proporcionar ejemplos divertidos y prácticos, facilitando la comprensión de conceptos clave en el desarrollo de Angular. Al usar datos del universo Pokémon, ofrece una forma familiar y atractiva de mostrar características como la obtención de datos, el manejo de llamadas API y la visualización de contenido dinámico. + + + Key features + Características clave + + + My Pokemon + Mis Pokémon + + + + + + + + + + + + + + + + + + + + + Uh-oh, it looks like you haven’t caught any Pokémon yet! Need help finding a pokemon? Try using the search bar to track them down. Gotta catch ‘em all! + ¡Vaya, parece que no has atrapado ningún Pokémon aún! ¿Necesitas ayuda para encontrar uno? Intenta usar la barra de búsqueda para rastrearlos. ¡Hay que atraparlos a todos! + + + N.º: Height: dmWeight: hg + N.º: Altura: dmPeso: hg + + + 🎯 Nice catch, ! You’re one step closer to being a Pokémon Master—keep it up! 🌟 + 🎯 Bien atrapado, ! Estás un paso más cerca de ser un Maestro Pokémon—¡sigue así! 🌟 + + + Already got this one, keep going! + ¡Este ya lo tienes, sigue adelante! + + + Still gotta catch 'em all, this one's missing from your Pokédex! + ¡Aún te falta atraparlos todos, este falta en tu Pokédex! + + + POKEBALL + POKÉBALL + + + Trainer frame 1 + Marco del entrenador 1 + + + Trainer frame 2 + Marco del entrenador 2 + + + Trainer frame 3 + Marco del entrenador 3 + + + Trainer frame 4 + Marco del entrenador 4 + + + + + + + + + + + + + + + N.º: + N.º: + + + Height: dm + Altura: dm + + + Weight: hg + Peso: hg + + + Pokeball + Pokeball + + + My pokemon + Mis Pokémon + + + Passwords do not match. + Las contraseñas no coinciden. + + + Field required. PokeAPI does not found that pokemon name. + Campo requerido. PokeAPI no encontró ese nombre de Pokémon. + + + Find more! + ¡Encuentra más! + + + Find a pokemon + Encuentra un Pokémon + + + Account settings saved. You're all set! + Configuración de la cuenta guardada. ¡Todo listo! + + + Oops! Something went wrong. Please try again later or leave an issue if it persists. + ¡Vaya! Algo salió mal. Intenta nuevamente más tarde o deja un problema si persiste. + + + Invalid credentials. Not very effective, try again! + Credenciales inválidas. ¡No muy efectivo, intenta de nuevo! + + + Register failed. This attempt wasn’t very effective, try again! + Registro fallido. ¡Este intento no fue muy efectivo, intenta de nuevo! + + + Pokémon not found. Double-check the name and try again! + Pokémon no encontrado. ¡Verifica el nombre y vuelve a intentarlo! + + + Angular Signals + Angular Signals + + + Unlock reactivity with Angular Signals. + Desbloquea la reactividad con Angular Signals. + + + Signals provide a declarative way to manage state and reactivity in your application, simplifying data flow and improving performance. + Signals ofrecen una forma declarativa de gestionar el estado y la reactividad en tu aplicación, simplificando el flujo de datos y mejorando el rendimiento. + + + Learn more about Signals + Aprende más sobre Signals + + + Internationalization + Internationalization + + + Build apps for a global audience. + Crea aplicaciones para una audiencia global. + + + Angular’s internationalization tools make it seamless to localize your app, handle translations, and format dates, numbers, and currencies for any locale. + Las herramientas de internacionalización de Angular facilitan la localización de tu aplicación, el manejo de traducciones y el formato de fechas, números y monedas para cualquier ubicación. + + + Explore Internationalization + Explora la Internacionalización + + + Reactive Forms + Reactive Forms + + + Effortless form handling and validation. + Gestión y validación de formularios sin esfuerzo. + + + Reactive Forms empower you to create robust, dynamic forms with a model-driven approach, making validation, dynamic updates, and testing a breeze. + Reactive Forms te permiten crear formularios robustos y dinámicos con un enfoque basado en modelos, facilitando la validación, las actualizaciones dinámicas y las pruebas. + + + Start with Reactive Forms + Comienza con Reactive Forms + + + Animations + Animations + + + Bring your UI to life with Angular Animations. + Da vida a tu interfaz de usuario con Angular Animations. + + + Create smooth transitions and engaging effects with Angular’s powerful animation API, making your application visually appealing and interactive. + Crea transiciones suaves y efectos atractivos con la potente API de animación de Angular, haciendo que tu aplicación sea visualmente atractiva e interactiva. + + + Discover Angular Animations + Descubre Angular Animations + + + Field required. No real email validation. Format: example@domain.com + Campo requerido. No hay validación real del correo. Formato: ejemplo@dominio.com + + + avatar image + avatar image + + + pokemon pikachu + pokemon pikachu + + + pokemon haunter + pokemon haunter + + + pokeball + pokeball + + + ash and pikachu + ash y pikachu + + + pokemon charizard + pokemon charizard + + + pokemon blastoise + pokemon blastoise + + + ash jumping with a pokeball + ash saltando con una pokeball + + + pokemon + pokemon + + + github logo + logo de github + + + Users seeing this page: + Usuarios viendo esta página: + + + An angular example app, so you can see best practices in action. + Una aplicación de ejemplo de Angular, para que puedas ver las mejores prácticas en acción. + + + No session. Please log in. + No tienes sesion. Por favor, haz login. + + + Loading... + Cargando... + + + + \ No newline at end of file diff --git a/src/locale/messages.xlf b/src/locale/messages.xlf new file mode 100755 index 00000000..f8a49280 --- /dev/null +++ b/src/locale/messages.xlf @@ -0,0 +1,402 @@ + + + + + + ¡Welcome back! + + + Password + + + Enter + + + Register + + + Field required. + + + Must contain at least one lowercase letter, one uppercase letter and one number. No special characters. + + + Angular Example App + + + Log in + + + Home + + + What's your favourite pokemon? + + + Log out + + + pokemon image + + + Still gotta catch 'em all, this one's missing from your Pokédex! + + + English (US) + + + + + + + + + + Already got this one, keep going! + + + N.º: Height: dmWeight: hg + + + Español (España) + + + Your favourite pokemon is: + + + GitHub + + + Passwords do not match. + + + Weight: hg + + + Pokémon not found. Double-check the name and try again! + + + Trainer frame 2 + + + Languages + + + Enter your email + + + ash standing + + + Contribute + + + Resources + + + Enter your password + + + EN-US + + + Language + + + X + + + Contribute to Angular Example App + + + Retype the password + + + Enter your name + + + Join the discussions at Angular Community Discord server. + + + Post issues and suggestions on github. + + + N.º: + + + Save + + + Confirm password + + + Invalid credentials. Not very effective, try again! + + + Skip to main content + + + Page load progress + + + Register failed. This attempt wasn’t very effective, try again! + + + Español (España) + + + Discord + + + Find more! + + + Account settings saved. You're all set! + + + Angular Google Developer Experts + + + Pokeball + + + Error 404: A Wild Error Appeared + + + Report Issues + + + This site uses Google Tag Manager and Google Analytics to make it work smoothly and to understand user behavior. + + + Email + + + Stack Overflow: where the community answers your technical Angular questions. + + + Key features + + + Height: dm + + + 🎯 Nice catch, ! You’re one step closer to being a Pokémon Master—keep it up! 🌟 + + + Ok, got it! + + + angular logo + + + This project is a modern, real-world application designed as a foundation for creating new Angular-based projects and also a practical resource for learning. + + + English + + + Create account + + + ES-ES + + + Trainer frame 3 + + + ash and pikachu sad + + + Do you have an account? Log in + + + Stack Overflow + + + ©2016-2025. Code licensed under a MIT License + + + ¡Register and complete your Pokédex! + + + Angular blog + + + Find a pokemon + + + It comes with features like internationalization, standalone components, a more logical folder structure, etc, making it a great starting point for building scalable Angular apps. + + + Español + + + Type a pokemon + + + Blog + + + License text + + + Don't have an account yet? Register + + + Field required. PokeAPI does not found that pokemon name. + + + Uh-oh, it looks like you haven’t caught any Pokémon yet! Need help finding a pokemon? Try using the search bar to track them down. Gotta catch ‘em all! + + + Oops! Something went wrong. Please try again later or leave an issue if it persists. + + + YouTube + + + Angular + + + My Pokemon + + + Angular Example App + + + Angular Google Developer Experts + + + This project leverages the PokeAPI to provide fun and practical examples, making it easier to understand key concepts in Angular development. By using data from the Pokémon universe, it offers a familiar and engaging way to showcase features like fetching data, handling API calls, and displaying dynamic content. + + + Trainer frame 1 + + + My account + + + Name + + + Whether you’re looking for a boilerplate or a solid base project, this setup is designed to help you create clean, maintainable code with ease. + + + I’ve caught 'em all (the terms and privacy policy) and I’m cool with them! + + + POKEBALL + + + + + + + + + + + + + Trainer frame 4 + + + My pokemon + + + Reactive Forms + + + Explore Internationalization + + + Animations + + + Create smooth transitions and engaging effects with Angular’s powerful animation API, making your application visually appealing and interactive. + + + Angular Signals + + + Internationalization + + + Angular’s internationalization tools make it seamless to localize your app, handle translations, and format dates, numbers, and currencies for any locale. + + + Start with Reactive Forms + + + Discover Angular Animations + + + Effortless form handling and validation. + + + Build apps for a global audience. + + + Signals provide a declarative way to manage state and reactivity in your application, simplifying data flow and improving performance. + + + Unlock reactivity with Angular Signals. + + + Learn more about Signals + + + Reactive Forms empower you to create robust, dynamic forms with a model-driven approach, making validation, dynamic updates, and testing a breeze. + + + Bring your UI to life with Angular Animations. + + + Field required. No real email validation. Format: example@domain.com + + + pokeball + + + avatar image + + + pokemon + + + ash jumping with a pokeball + + + ash and pikachu + + + pokemon haunter + + + pokemon pikachu + + + pokemon charizard + + + pokemon blastoise + + + github logo + + + Users seeing this page: + + + An angular example app, so you can see best practices in action. + + + No session. Please log in. + + + Loading... + + + + diff --git a/src/locale/translations.ts b/src/locale/translations.ts new file mode 100755 index 00000000..fbc6548d --- /dev/null +++ b/src/locale/translations.ts @@ -0,0 +1,24 @@ +export const translations = { + seoTitle: $localize`Angular Example App`, + seoDescription: $localize`An angular example app, so you can see best practices in action.`, + home: $localize`Home`, + logIn: $localize`Log in`, + register: $localize`Register`, + myAccount: $localize`My account`, + myPokemon: $localize`My pokemon`, + logOut: $localize`Log out`, + fieldRequired: $localize`Field required.`, + emailHelpText: $localize`Field required. No real email validation. Format: example@domain.com`, + passwordHelpText: $localize`Must contain at least one lowercase letter, one uppercase letter and one number. No special characters.`, + confirmPasswordHelpText: $localize`Passwords do not match.`, + pokemonHelpText: $localize`Field required. PokeAPI does not found that pokemon name.`, + logout: $localize`Log out`, + findMore: $localize`Find more!`, + findPokemon: $localize`Find a pokemon`, + myAccountSuccessAlert: $localize`Account settings saved. You're all set!`, + genericErrorAlert: $localize`Oops! Something went wrong. Please try again later or leave an issue if it persists.`, + loginCredentialsError: $localize`Invalid credentials. Not very effective, try again!`, + genericRegisterError: $localize`Register failed. This attempt wasn’t very effective, try again!`, + pokemonNotFoundError: $localize`Pokémon not found. Double-check the name and try again!`, + sessionExpired: $localize`No session. Please log in.`, +}; diff --git a/src/main.server.ts b/src/main.server.ts new file mode 100644 index 00000000..cce54817 --- /dev/null +++ b/src/main.server.ts @@ -0,0 +1,9 @@ +import type { BootstrapContext } from '@angular/platform-browser'; +import { bootstrapApplication } from '@angular/platform-browser'; +import { AppComponent } from './app/app.component'; +import { config } from './app/app.config.server'; + +const bootstrap = async (context: BootstrapContext) => + bootstrapApplication(AppComponent, config, context); + +export default bootstrap; diff --git a/src/main.ts b/src/main.ts old mode 100644 new mode 100755 index d05547b9..b76e16d7 --- a/src/main.ts +++ b/src/main.ts @@ -1,12 +1,12 @@ -import {enableProdMode} from '@angular/core'; -import {platformBrowserDynamic} from '@angular/platform-browser-dynamic'; +/// +import { bootstrapApplication } from '@angular/platform-browser'; +import { AppComponent } from './app/app.component'; +import { appConfig } from './app/app.config'; +import { setBasePath } from '@shoelace-style/shoelace/dist/utilities/base-path.js'; -import {AppModule} from './app/app.module'; -import {environment} from './environments/environment'; +setBasePath('https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.17.1/cdn/'); -if (environment.production) { - enableProdMode(); -} - -platformBrowserDynamic().bootstrapModule(AppModule) - .catch(err => console.log(err)); +bootstrapApplication(AppComponent, appConfig).catch((error) => { + // eslint-disable-next-line no-console + console.error(error); +}); diff --git a/src/polyfills.ts b/src/polyfills.ts deleted file mode 100644 index 3aad818e..00000000 --- a/src/polyfills.ts +++ /dev/null @@ -1,93 +0,0 @@ -/** - * This file includes polyfills needed by Angular and is loaded before the app. - * You can add your own extra polyfills to this file. - * - * This file is divided into 2 sections: - * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. - * 2. Application imports. Files imported after ZoneJS that should be loaded before your main - * file. - * - * The current setup is for so-called "evergreen" browsers; the last versions of browsers that - * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), - * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. - * - * Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html - */ - -/*************************************************************************************************** - * BROWSER POLYFILLS - */ - -/** IE9, IE10 and IE11 requires all of the following polyfills. **/ -import 'core-js/es6/symbol'; -import 'core-js/es6/object'; -import 'core-js/es6/function'; -import 'core-js/es6/parse-int'; -import 'core-js/es6/parse-float'; -import 'core-js/es6/number'; -import 'core-js/es6/math'; -import 'core-js/es6/string'; -import 'core-js/es6/date'; -import 'core-js/es6/array'; -import 'core-js/es6/regexp'; -import 'core-js/es6/map'; -import 'core-js/es6/weak-map'; -import 'core-js/es6/set'; - -/** IE10 and IE11 requires the following for NgClass support on SVG elements */ -import 'classlist.js'; // Run `npm install --save classlist.js`. - -/** IE10 and IE11 requires the following for the Reflect API. */ -import 'core-js/es6/reflect'; - - -/** Evergreen browsers require these. **/ -// Used for reflect-metadata in JIT. If you use AOT (and only Angular decorators), you can remove. -import 'core-js/es7/reflect'; - - -/** - * Required to support Web Animations `@angular/platform-browser/animations`. - * Needed for: All but Chrome, Firefox and Opera. http://caniuse.com/#feat=web-animation - **/ -// import 'web-animations-js'; // Run `npm install --save web-animations-js`. - - - -/*************************************************************************************************** - * Zone JS is required by Angular itself. - */ -import 'zone.js/dist/zone'; // Included with Angular CLI. - - - -/*************************************************************************************************** - * APPLICATION IMPORTS - */ - -/** - * Date, currency, decimal and percent pipes. - * Needed for: All but Chrome, Firefox, Edge, IE11 and Safari 10 - */ -// import 'intl'; // Run `npm install --save intl`. -/** - * Need to import at least one locale-data with intl. - */ -// import 'intl/locale-data/jsonp/en'; - -/*************************************************************************************************** - * CUSTOM IMPORTS - */ -import 'rxjs/add/observable/throw'; -import 'rxjs/add/observable/forkJoin'; -import 'rxjs/add/operator/filter'; -import 'rxjs/add/operator/catch'; -import 'rxjs/add/operator/startWith'; -import 'rxjs/add/operator/do'; -import 'rxjs/add/operator/map'; - - -/** - * Need to import hammer for Angular Material support. - */ -import 'hammerjs'; diff --git a/src/sitemap.xml b/src/sitemap.xml deleted file mode 100644 index 3fb2a3c6..00000000 --- a/src/sitemap.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - http://angularexampleapp.com/ - 2017-08-05T13:44:43+00:00 - always - - \ No newline at end of file diff --git a/src/styles/base/_border-radius.scss b/src/styles/base/_border-radius.scss new file mode 100644 index 00000000..65bef950 --- /dev/null +++ b/src/styles/base/_border-radius.scss @@ -0,0 +1,9 @@ +:root { + --border-radius-xs: 0.125rem; + --border-radius-sm: 0.25rem; + --border-radius-md: 0.375rem; + --border-radius-lg: 0.5rem; + --border-radius-xl: 0.625rem; + --border-radius-xxl: 0.75rem; + --border-radius-max: 2.75rem; +} diff --git a/src/styles/base/_color-definitions.scss b/src/styles/base/_color-definitions.scss new file mode 100644 index 00000000..21cac229 --- /dev/null +++ b/src/styles/base/_color-definitions.scss @@ -0,0 +1,185 @@ +@use 'primitive-colors'; + +/* + ============================================================ + ⚠️ Themes File ⚠️ + ============================================================ + This file contains the variables for the application's color themes. + These variables are intended to be used all across the app. Developers + must use this ones, not the primitive ones. + + Keeping the theme variables scoped to their intended purpose ensures consistency + and maintainability of the application's design system. + ============================================================ +*/ +@mixin dark-definitions() { + // Contrasts + --full-contrast: var(--primitive-full-white); + --primary-contrast: var(--primitive-gray-50); + --secondary-contrast: var(--primitive-gray-300); + --tertiary-contrast: var(--primitive-gray-300); + --quaternary-contrast: var(--primitive-gray-400); + --quinary-contrast: var(--primitive-gray-500); + --senary-contrast: var(--primitive-gray-700); + --septenary-contrast: var(--primitive-gray-800); + --octonary-contrast: var(--primitive-gray-900); + + // DO NOT use grays anymore, use contrast variables + + // Brand + --brand-color-primary: var(--primitive-hot-red-mixed); + --brand-color-secondary: var(--primitive-bright-blue-mixed); + --brand-color-tertiary: var(--primitive-vivid-pink-mixed); + + // General + --page-color: var(--full-contrast); + --page-background: var(--primitive-gray-1000); + + // Texts + --text-color-primary: var(--primary-contrast); + --text-color-primary-hover: var(--primary-contrast); + --text-color-secondary: var(--quaternary-contrast); + --text-color-secondary-hover: var(--primary-contrast); + + // Status + --status-color-success: var(--primitive-vitalize-green); + --status-color-error: var(--primitive-hot-red); + + // Links + --links-color: var(--brand-color-secondary); + --links-color-hover: var(--brand-color-tertiary); + --links-color-active: var(--brand-color-primary); + + // Buttons + --buttons-background: color-mix(in srgb, var(--brand-color-primary) 10%, white 2%); + --buttons-background-hover: color-mix(in srgb, var(--brand-color-primary) 20%, white 10%); + --buttons-color: color-mix(in srgb, var(--brand-color-primary) 60%, white 70%); + + // Icons + --icons-color: var(--quaternary-contrast); + --icons-color-hover: var(--full-contrast); + + // Inputs + --inputs-background-color: var(--page-background); + --inputs-background-color-hover: var(--page-background); + --inputs-background-color-focus: var(--page-background); + --inputs-border-color: var(--senary-contrast); + --inputs-border-color-hover: var(--primary-contrast); + --inputs-border-color-focus: var(--brand-color-tertiary); + --inputs-color: var(--tertiary-contrast); + --inputs-color-hover: var(--primary-contrast); + --inputs-color-focus: var(--primary-contrast); + --inputs-placeholder-color: var(--quaternary-contrast); + --inputs-help-text-color: var(--quinary-contrast); + --inputs-focus-ring-color: none; + + // Checkboxes + --checkboxes-color: var(--tertiary-contrast); + --checkboxes-control-background: var(--pink-to-purple-horizontal-gradient); + --checkboxes-checked-icon-color: var(--octonary-contrast); + + // Panels + --panels-background: var(--octonary-contrast); + --panels-color: var(--full-contrast); + + // Options + --options-background: color-mix(in srgb, var(--brand-color-primary) 10%, white 2%); + --options-background-hover: color-mix(in srgb, var(--brand-color-primary) 20%, white 10%); + --options-color: color-mix(in srgb, var(--brand-color-primary) 60%, white 70%); + + // Dropdowns + --dropdowns-background: var(--octonary-contrast); + --dropdown-items-background-hover: color-mix(in srgb, var(--brand-color-primary) 20%, white 10%); + --dropdown-items-color: color-mix(in srgb, var(--brand-color-primary) 60%, white 70%); + + // Cards + --card-background-hover: var(--primitive-subtle-purple); + --card-link-background-hover: var( + --pink-to-highlight-to-purple-to-blue-horizontal-mixed-gradient + ); +} + +@mixin light-definitions() { + // Contrast + --full-contrast: var(--primitive-full-black); + --primary-contrast: var(--primitive-gray-900); + --secondary-contrast: var(--primitive-gray-800); + --tertiary-contrast: var(--primitive-gray-700); + --quaternary-contrast: var(--primitive-gray-500); + --quinary-contrast: var(--primitive-gray-300); + --senary-contrast: var(--primitive-gray-200); + --septenary-contrast: var(--primitive-gray-100); + --octonary-contrast: var(--primitive-gray-50); + + // DO NOT use grays anymore, use contrast variables + + // Brand + --brand-color-primary: var(--primitive-bright-blue); + --brand-color-secondary: var(--primitive-hot-red); + --brand-color-tertiary: var(--primitive-vivid-pink); + + // General + --page-color: var(--primary-contrast); + --page-background: var(--primitive-full-white); + + // Texts + --text-color-primary: var(--primary-contrast); + --text-color-primary-hover: var(--primary-contrast); + --text-color-secondary: var(--quaternary-contrast); + --text-color-secondary-hover: var(--primary-contrast); + + // Status + --status-color-success: var(--primitive-vitalize-green); + --status-color-error: var(--primitive-hot-red); + + // Links + --links-color: var(--brand-color-primary); + --links-color-hover: var(--brand-color-tertiary); + --links-color-active: var(--brand-color-secondary); + + // Buttons + --buttons-background: color-mix(in srgb, var(--primitive-indigo-blue) 10%, white 2%); + --buttons-background-hover: color-mix(in srgb, var(--primitive-indigo-blue) 20%, white 10%); + --buttons-color: var(--primitive-indigo-blue); + + // Icons + --icons-color: var(--quaternary-contrast); + --icons-color-hover: var(--full-contrast); + + // Inputs + --inputs-background-color: var(--page-background); + --inputs-background-color-hover: var(--page-background); + --inputs-background-color-focus: var(--page-background); + --inputs-border-color: var(--senary-contrast); + --inputs-border-color-hover: var(--primary-contrast); + --inputs-border-color-focus: var(--brand-color-tertiary); + --inputs-color: var(--tertiary-contrast); + --inputs-color-hover: var(--primary-contrast); + --inputs-color-focus: var(--primary-contrast); + --inputs-placeholder-color: var(--tertiary-contrast); + --inputs-help-text-color: var(--quinary-contrast); + --inputs-focus-ring-color: none; + + // Checkboxes + --checkboxes-color: var(--tertiary-contrast); + --checkboxes-control-background: var(--pink-to-purple-horizontal-gradient); + --checkboxes-checked-icon-color: var(--primary-contrast); + + // Panels + --panels-background: var(--octonary-contrast); + --panels-color: var(--full-contrast); + + // Options + --options-background: color-mix(in srgb, var(--brand-color-primary) 10%, white 2%); + --options-background-hover: color-mix(in srgb, var(--brand-color-primary) 20%, white 10%); + --options-color: color-mix(in srgb, var(--brand-color-primary) 90%, white 70%); + + // Dropdowns + --dropdowns-background: var(--octonary-contrast); + --dropdown-items-background-hover: color-mix(in srgb, var(--brand-color-primary) 20%, white 10%); + --dropdown-items-color: color-mix(in srgb, var(--brand-color-primary) 60%, white 70%); + + // Cards + --card-background-hover: var(--primitive-cotton-ball); + --card-link-background-hover: var(--pink-to-highlight-to-purple-to-blue-horizontal-gradient); +} diff --git a/src/styles/base/_media-queries.scss b/src/styles/base/_media-queries.scss new file mode 100644 index 00000000..1c9523bf --- /dev/null +++ b/src/styles/base/_media-queries.scss @@ -0,0 +1,65 @@ +$screen-xs: 700px; +$screen-sm: 775px; +$screen-md: 900px; +$screen-lg: 1200px; +$screen-xl: 1800px; + +@mixin for-phone-only { + @media (max-width: $screen-sm) { + @content; + } +} + +@mixin for-tablet-portrait-up { + @media (min-width: $screen-xs) { + @content; + } +} + +@mixin for-tablet { + @media (min-width: $screen-xs) and (max-width: $screen-md) { + @content; + } +} + +@mixin for-tablet-up { + @media (min-width: $screen-sm) { + @content; + } +} + +@mixin for-tablet-landscape-up { + @media (min-width: $screen-md) { + @content; + } +} + +@mixin for-desktop-up { + @media (min-width: $screen-lg) { + @content; + } +} + +@mixin for-big-desktop-up { + @media (min-width: $screen-xl) { + @content; + } +} + +@mixin for-desktop-down { + @media (max-width: $screen-lg) { + @content; + } +} + +@mixin for-tablet-landscape-down { + @media (max-width: $screen-md) { + @content; + } +} + +@mixin for-tablet-down { + @media (max-width: $screen-sm) { + @content; + } +} diff --git a/src/styles/base/_primitive-colors.scss b/src/styles/base/_primitive-colors.scss new file mode 100644 index 00000000..b6604c4b --- /dev/null +++ b/src/styles/base/_primitive-colors.scss @@ -0,0 +1,115 @@ +/* + ============================================================ + ⚠️ Primitive Colors ⚠️ + ============================================================ + STRICTLY FORBIDDEN: DO NOT use these color variables anywhere else in the application. + These are **ONLY** for the color themes (_themes.scss). Any other usage will cause inconsistency + and break the design system. + ============================================================ +*/ + +// Using OKLCH color space for better color reproduction on P3 displays, as well as better human-readability +// https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/oklch +@mixin primitive-colors() { + // Base + --primitive-bright-blue: oklch(51.01% 0.274 263.83deg); // #0546ff + --primitive-subtle-purple: oklch(33.72% 0.0108 271.08deg); // #35373D + --primitive-cotton-ball: oklch(97.54% 0.0115 264.51deg); // #f3f7ff + --primitive-indigo-blue: oklch(51.64% 0.229 281.65deg); // #5c44e4 + --primitive-vivid-pink: oklch(69.02% 0.277 332.77deg); // #f637e3 + --primitive-electric-violet: oklch(53.18% 0.28 296.97deg); // #8514f5 + --primitive-hot-red: oklch(61.42% 0.238 15.34deg); // #f11653 + --primitive-orange-red: oklch(63.32% 0.24 31.68deg); // #fa2c04 + --primitive-vitalize-green: oklch(64.01% 0.1751 146.74deg); // #28a745 + --primitive-peach-echo: oklch(12.16% 0.079 270.91deg); // #020024 + --primitive-kissed-mist: oklch(88.15% 0.0908 328.72deg); // #fac3f6 + --primitive-pink-illusion: oklch(83.64% 0.0968 307.17deg); // #dab9fb + + // Mixed + --primitive-bright-blue-mixed: color-mix( + in srgb, + oklch(51.01% 0.274 263.83deg), + var(--full-contrast) 60% + ); + --primitive-vivid-pink-mixed: color-mix( + in srgb, + oklch(69.02% 0.277 332.77deg), + var(--full-contrast) 70% + ); + --primitive-hot-red-mixed: color-mix( + in srgb, + oklch(61.42% 0.238 15.34deg), + var(--full-contrast) 70% + ); + --primitive-orange-red-mixed: color-mix( + in srgb, + oklch(63.32% 0.24 31.68deg), + var(--full-contrast) 60% + ); + --primitive-electric-violet-mixed: color-mix( + in srgb, + oklch(53.18% 0.28 296.97deg), + var(--full-contrast) 70% + ); + + // Full + --primitive-full-white: white; + --primitive-full-black: black; + + // Grays + --primitive-gray-1000: oklch(16.93% 0.004 285.95deg); // #0f0f11 + --primitive-gray-900: oklch(19.37% 0.006 300.98deg); // #151417 + --primitive-gray-800: oklch(25.16% 0.008 308.11deg); // #232125 + --primitive-gray-700: oklch(36.98% 0.014 302.71deg); // #413e46 + --primitive-gray-600: oklch(44% 0.019 306.08deg); // #55505b + --primitive-gray-500: oklch(54.84% 0.023 304.99deg); // #746e7c + --primitive-gray-400: oklch(70.9% 0.015 304.04deg); // #a39fa9 + --primitive-gray-300: oklch(84.01% 0.009 308.34deg); // #ccc9cf + --primitive-gray-200: oklch(91.75% 0.004 301.42deg); // #e4e3e6 + --primitive-gray-100: oklch(97.12% 0.002 325.59deg); // #f6f5f6 + --primitive-gray-50: oklch(98.81% 0 0deg); // #fbfbfb + + // Gradients + --pink-to-highlight-to-purple-to-blue-horizontal-gradient: linear-gradient( + 140deg, + var(--primitive-vivid-pink) 0%, + var(--primitive-vivid-pink) 15%, + color-mix(in srgb, var(--primitive-vivid-pink), var(--primitive-electric-violet) 50%) 25%, + color-mix(in srgb, var(--primitive-vivid-pink), var(--primitive-electric-violet) 10%) 35%, + color-mix(in srgb, var(--primitive-vivid-pink), var(--primitive-orange-red) 50%) 42%, + color-mix(in srgb, var(--primitive-vivid-pink), var(--primitive-orange-red) 50%) 44%, + color-mix(in srgb, var(--primitive-vivid-pink), var(--page-background) 70%) 47%, + var(--primitive-electric-violet) 48%, + var(--primitive-bright-blue) 60% + ); + --pink-to-purple-horizontal-gradient: linear-gradient( + 90deg, + var(--primitive-peach-echo) 0%, + var(--primitive-kissed-mist) 0%, + var(--primitive-pink-illusion) 100% + ); + + // Mixed gradients + --pink-to-highlight-to-purple-to-blue-horizontal-mixed-gradient: linear-gradient( + 140deg, + var(--primitive-vivid-pink-mixed) 0%, + var(--primitive-vivid-pink-mixed) 15%, + color-mix( + in srgb, + var(--primitive-vivid-pink-mixed), + var(--primitive-electric-violet-mixed) 50% + ) + 25%, + color-mix( + in srgb, + var(--primitive-vivid-pink-mixed), + var(--primitive-electric-violet-mixed) 10% + ) + 35%, + color-mix(in srgb, var(--primitive-vivid-pink-mixed), var(--primitive-orange-red-mixed) 50%) 42%, + color-mix(in srgb, var(--primitive-vivid-pink-mixed), var(--primitive-orange-red-mixed) 50%) 44%, + color-mix(in srgb, var(--primitive-vivid-pink-mixed), var(--page-background) 70%) 47%, + var(--primitive-electric-violet-mixed) 48%, + var(--primitive-bright-blue-mixed) 60% + ); +} diff --git a/src/styles/base/_reset.scss b/src/styles/base/_reset.scss new file mode 100644 index 00000000..d636c9b0 --- /dev/null +++ b/src/styles/base/_reset.scss @@ -0,0 +1,73 @@ +@use 'media-queries' as mq; + +@mixin reset() { + :root { + --page-width: 80ch; + --layout-padding: var(--spacing-r-xl); + + @include mq.for-tablet-up { + --layout-padding: var(--spacing-r-4xl); + } + } + + html { + font-family: var(--inter-font), serif; + font-size: var(--font-size-md); + color: var(--page-color); + background-color: var(--page-background); + transition: + color 0.3s ease, + background-color 0.3s ease; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + scroll-behavior: smooth; + } + + @media (prefers-reduced-motion) { + html { + scroll-behavior: auto; + } + } + + body { + margin: 0; + overflow: hidden auto; + } + + html, + body { + height: 100vh; + min-height: 100vh; + + @supports (height: 100svh) { + height: 100svh; + } + } + + button { + cursor: pointer; + } + + img { + width: 100%; + margin: 0; + overflow: hidden; + border-radius: var(--border-radius-sm); + } + + abbr[title] { + text-decoration: none; + } + + h1 { + margin: 0; + } + + ul { + padding-inline-start: 0; + + li { + list-style: none; + } + } +} diff --git a/src/styles/base/_spacing.scss b/src/styles/base/_spacing.scss new file mode 100644 index 00000000..e38ce10f --- /dev/null +++ b/src/styles/base/_spacing.scss @@ -0,0 +1,28 @@ +:root { + --spacing-xs: 2px; + --spacing-sm: 4px; + --spacing-md: 8px; + --spacing-lg: 12px; + --spacing-xl: 16px; + --spacing-xxl: 20px; + --spacing-3xl: 24px; + --spacing-4xl: 32px; + --spacing-5xl: 40px; + --spacing-6xl: 48px; + --spacing-r-xs: 0.125rem; + --spacing-r-sm: 0.375rem; + --spacing-r-md: 0.5rem; + --spacing-r-lg: 0.75rem; + --spacing-r-xl: 1rem; + --spacing-r-xxl: 1.25rem; + --spacing-r-3xl: 1.5rem; + --spacing-r-4xl: 2rem; + --spacing-r-5xl: 2.5rem; + --spacing-r-6xl: 3rem; + --spacing-r-7xl: 3.5rem; + --spacing-r-8xl: 4rem; + --spacing-r-9xl: 4.5rem; + --spacing-r-10xl: 5rem; + --spacing-r-11xl: 5.5rem; + --spacing-r-12xl: 6rem; +} diff --git a/src/styles/base/_themes.scss b/src/styles/base/_themes.scss new file mode 100644 index 00000000..217eaa45 --- /dev/null +++ b/src/styles/base/_themes.scss @@ -0,0 +1,18 @@ +@use 'primitive-colors'; +@use 'color-definitions'; + +@mixin themes() { + .theme-dark--mode { + @include primitive-colors.primitive-colors; + @include color-definitions.dark-definitions; + + background-color: var(--page-background); + } + + .theme-light--mode { + @include primitive-colors.primitive-colors; + @include color-definitions.light-definitions; + + background-color: var(--page-background); + } +} diff --git a/src/styles/base/_typography.scss b/src/styles/base/_typography.scss new file mode 100644 index 00000000..fce461e0 --- /dev/null +++ b/src/styles/base/_typography.scss @@ -0,0 +1,103 @@ +@mixin typography() { + :root { + --fallback-font-stack: + ui-sans-serif, system-ui, -apple-system, blinkmacsystemfont, 'Segoe UI', roboto, + 'Helvetica Neue', arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', + 'Segoe UI Symbol', 'Noto Color Emoji'; + --code-font: 'DM Mono', monospace; + --inter-font: 'Inter', var(--fallback-font-stack); + --inter-tight-font: 'Inter Tight', var(--fallback-font-stack); + + // Font weight + --font-weight-light: 300; + --font-weight-regular: 400; + --font-weight-xregular: 500; + --font-weight-bold: 700; + + // Font style + --font-style-normal: normal; + + // Font size + --font-size-xs: 0.8125rem; + --font-size-sm: 0.875rem; + --font-size-md: 1rem; + --font-size-lg: 1.5rem; + --font-size-xl: 2rem; + --font-size-xxl: 2.25rem; + + // Line height + --line-height-xs: 0.9rem; + --line-height-sm: 1rem; + --line-height-md: 1.25rem; + --line-height-lg: 1.5rem; + --line-height-xl: 2rem; + --line-height-xxl: 2.5rem; + --line-height-max: 3.5rem; + + // Letter spacing + --letter-spacing-sm: -0.0088rem; + --letter-spacing-md: -0.01rem; + --letter-spacing-lg: -0.025rem; + } + + h1, + h2, + h3, + h4, + h5, + h6 { + margin: 0; + font-family: var(--inter-tight-font), serif; + font-weight: var(--font-weight-xregular); + text-wrap: balance; + } + + h1 { + font-size: var(--font-size-xxl); + } + + h2 { + margin-block: var(--spacing-r-3xl) var(--spacing-r-md); + font-size: var(--font-size-xl); + } + + p { + margin-block: 0 var(--spacing-r-xl); + font-size: var(--font-size-sm); + font-weight: var(--font-weight-regular); + line-height: var(--line-height-lg); + letter-spacing: var(--letter-spacing-sm); + } + + p ~ ul, + p ~ ol { + margin-block-start: 0; + } + + ul, + ol { + font-size: var(--font-size-sm); + font-weight: var(--font-weight-regular); + line-height: var(--line-height-lg); + letter-spacing: var(--letter-spacing-md); + } + + a { + font-weight: var(--font-weight-xregular); + text-decoration: none; + } + + hr { + width: 100%; + margin-block: var(--spacing-r-xl); + border: 0; + border-color: var(--senary-contrast); + border-style: solid; + border-block-start-width: 1px; + transition: border-color 0.3s ease; + } + + .text--medium { + font-size: larger; + } +} diff --git a/src/styles/base/_z-index.scss b/src/styles/base/_z-index.scss new file mode 100644 index 00000000..fa1da89a --- /dev/null +++ b/src/styles/base/_z-index.scss @@ -0,0 +1,4 @@ +:root { + --z-index-skip-button: 1000; + --z-index-cookie-consent: 60; +} diff --git a/src/styles/components/_alerts.scss b/src/styles/components/_alerts.scss new file mode 100644 index 00000000..e4851378 --- /dev/null +++ b/src/styles/components/_alerts.scss @@ -0,0 +1,31 @@ +@mixin alerts() { + sl-alert { + &::part(base) { + font-size: var(--font-size-sm); + background-color: var(--page-background); + border-radius: var(--border-radius-sm); + box-shadow: 0 0 10px 0 rgb(0 0 0 / 10%); + transition: + background-color 0.3s ease, + border-color 0.3s ease, + color 0.3s ease; + } + + &::part(message), + &::part(close-button) { + color: var(--primary-contrast); + } + + &.alert--success { + &::part(base) { + border: 1px solid var(--status-color-success); + } + } + + &.alert--error { + &::part(base) { + border: 1px solid var(--status-color-error); + } + } + } +} diff --git a/src/styles/components/_buttons.scss b/src/styles/components/_buttons.scss new file mode 100644 index 00000000..eef7ba40 --- /dev/null +++ b/src/styles/components/_buttons.scss @@ -0,0 +1,135 @@ +$pokedex-background-color: #f8f8f8; +$pokedex-text-color: #4e4e4e; +$pokedex-button-border-color: #7d7897; + +@mixin buttons() { + sl-button { + &::part(base) { + display: flex; + align-items: center; + border: 0; + border-radius: var(--border-radius-max); + transition: background 0.3s ease; + } + + &::part(label) { + padding: 0; + } + + &.button--primary::part(base), + &.dropdown-button--primary::part(base) { + padding-block: var(--spacing-r-sm); + padding-inline: var(--spacing-r-xl); + font-family: var(--inter-font), serif; + font-size: var(--font-size-sm); + font-weight: var(--font-weight-xregular); + line-height: var(--line-height-lg); + color: var(--buttons-color); + letter-spacing: -0.0088rem; + background: var(--buttons-background); + + &:hover { + background: var(--buttons-background-hover); + } + } + + &.dropdown-button--primary::part(label) { + margin-right: var(--spacing-r-sm); + font-weight: var(--font-weight-bold); + } + + &.button--icon::part(base) { + padding-inline: 0; + font-size: var(--font-size-lg); + color: var(--icons-color); + background: transparent; + + &:hover { + color: var(--icons-color-hover); + background: transparent; + transition: color 0.3s ease; + } + } + + &.button__as-link--primary { + &::part(base) { + color: var(--text-color-secondary); + background: transparent; + border: 0; + + &:hover { + color: var(--text-color-secondary-hover); + } + + &:active { + color: var(--text-color-secondary-hover); + } + } + + &::part(label) { + font-size: var(--font-size-md); + } + } + + &.button--pokemon-style::part(base) { + position: relative; + min-height: 0; + padding: var(--spacing-sm) var(--spacing-xl); + color: $pokedex-text-color; + background: $pokedex-background-color; + border: 3px solid $pokedex-button-border-color; + border-radius: var(--border-radius-sm); + + &::before { + position: absolute; + top: 50%; + left: var(--spacing-xs); + content: '▶'; + opacity: 0; + transform: translateY(-50%); + transition: opacity 0.1s; + } + + &:hover { + color: $pokedex-text-color; + + &::before { + opacity: 1; + } + } + + &:active { + color: $pokedex-text-color; + } + } + + &.button--pokemon-style::part(label) { + font-size: var(--font-size-xs); + font-weight: var(--font-weight-bold); + line-height: var(--line-height-md); + opacity: 0.8; + + &:hover { + opacity: 1; + } + } + + &.button--image::part(base) { + background: transparent; + border: 0; + } + + &.dropdown-button--avatar::part(base) { + box-shadow: 0 0 0 1px var(--text-color-secondary); + transition: box-shadow 0.5s ease; + + &:hover { + box-shadow: 0 0 0 1px var(--text-color-secondary-hover); + } + } + + &.dropdown-button--avatar::part(label) { + display: flex; + } + } +} diff --git a/src/styles/components/_checkboxes.scss b/src/styles/components/_checkboxes.scss new file mode 100644 index 00000000..531d6e6f --- /dev/null +++ b/src/styles/components/_checkboxes.scss @@ -0,0 +1,42 @@ +@mixin checkboxes() { + sl-checkbox.checkbox--primary { + --sl-input-required-content: ''; + --sl-input-required-content-offset: 0; + + &::part(base) { + font-size: var(--font-size-sm); + color: var(--checkboxes-color); + text-align: start; + transition: + color 0.3s ease, + background-color 0.3s ease, + border-color 0.3s ease; + } + + &::part(form-control-help-text) { + text-align: start; + } + + &::part(checked-icon) { + color: var(--checkboxes-checked-icon-color); + } + + &::part(control) { + background: var(--checkboxes-control-background); + border-radius: 1px; + } + + &:hover { + sl-icon { + color: var(--icons-color-hover); + } + } + } + + sl-checkbox.ng-invalid.ng-touched:not(form) { + &::part(form-control-help-text), + &::part(label) { + color: var(--status-color-error); + } + } +} diff --git a/src/styles/components/_dropdowns.scss b/src/styles/components/_dropdowns.scss new file mode 100644 index 00000000..f610bde3 --- /dev/null +++ b/src/styles/components/_dropdowns.scss @@ -0,0 +1,42 @@ +@use 'base/media-queries' as mq; + +@mixin dropdowns() { + .dropdown__content-container { + margin-block-start: var(--spacing-r-xl); + background: var(--dropdowns-background); + border: 1px solid var(--senary-contrast); + border-radius: var(--border-radius-sm); + box-shadow: none; + + .dropdown__item-container { + &:hover { + color: var(--dropdown-items-color); + background: var(--dropdown-items-background-hover); + transition: background 0.3s ease; + } + + a { + display: block; + width: 100%; + height: 100%; + padding: var(--spacing-r-xl); + font-size: var(--font-size-md); + color: var(--text-color-secondary); + text-decoration: none; + + &:hover { + color: var(--text-color-secondary-hover); + } + } + + sl-button.button__as-link--primary { + &::part(base) { + display: block; + width: 100%; + height: 100%; + padding: var(--spacing-r-md) var(--spacing-r-xl); + } + } + } + } +} diff --git a/src/styles/components/_forms.scss b/src/styles/components/_forms.scss new file mode 100644 index 00000000..59f215b5 --- /dev/null +++ b/src/styles/components/_forms.scss @@ -0,0 +1,37 @@ +@use 'base/media-queries' as mq; + +@mixin forms() { + .form__container { + padding: var(--spacing-r-5xl) var(--spacing-r-xl); + margin: 0 auto; + border: 1px solid var(--senary-contrast); + + @include mq.for-tablet-up { + padding: var(--spacing-r-6xl) var(--spacing-r-xl); + } + + .form-control__container { + margin-block: var(--spacing-r-3xl); + + .button--primary { + margin-block-start: var(--spacing-r-md); + } + + &:first-of-type { + margin-block-start: 0; + } + + @include mq.for-tablet-up { + margin-block: var(--spacing-r-3xl); + } + } + + .form-footer__paragraph { + margin: 0; + + .form-footer__link { + font-size: var(--font-size-sm); + } + } + } +} diff --git a/src/styles/components/_headings.scss b/src/styles/components/_headings.scss new file mode 100644 index 00000000..e1e88462 --- /dev/null +++ b/src/styles/components/_headings.scss @@ -0,0 +1,7 @@ +@use 'base/media-queries' as mq; + +@mixin headings() { + .first-heading__title { + margin-block-end: var(--spacing-r-3xl); + } +} diff --git a/src/styles/components/_inputs.scss b/src/styles/components/_inputs.scss new file mode 100644 index 00000000..8a60c36e --- /dev/null +++ b/src/styles/components/_inputs.scss @@ -0,0 +1,82 @@ +$loading-icon-suffix-width: 30px; + +@mixin inputs() { + sl-input.input--primary { + --sl-input-background-color: var(--inputs-background-color); + --sl-input-background-color-hover: var(--inputs-background-color-hover); + --sl-input-background-color-focus: var(--inputs-background-color-focus); + --sl-input-border-color: var(--inputs-border-color); + --sl-input-border-color-hover: var(--inputs-border-color-hover); + --sl-input-border-color-focus: var(--inputs-border-color-focus); + --sl-input-font-family: var(--inter-font); + --sl-input-font-size-medium: var(--font-size-md); + --sl-input-color: var(--inputs-color); + --sl-input-color-hover: var(--inputs-color-hover); + --sl-input-color-focus: var(--inputs-color-focus); + --sl-input-placeholder-color: var(--inputs-placeholder-color); + --sl-input-focus-ring-color: var(--inputs-focus-ring-color); + --sl-input-focus-ring-offset: 0; + --sl-input-required-content: ''; + --sl-input-required-content-offset: 0; + + &::part(base) { + transition: + color 0.3s ease, + background-color 0.3s ease, + border-color 0.3s ease; + } + + &::part(input)::placeholder { + font-size: var(--font-size-sm); + } + + &::part(form-control) { + text-align: start; + } + + &::part(form-control-label) { + margin-block-end: var(--spacing-r-sm); + } + + &::part(form-control-help-text) { + margin-top: var(--spacing-r-sm); + font-size: var(--font-size-xs); + color: var(--inputs-placeholder-color); + } + + .loading__image { + width: $loading-icon-suffix-width; + height: auto; + margin-inline-end: var(--spacing-r-sm); + } + + sl-icon { + transition: color 0.3s ease; + } + } + + sl-input:not([disabled]):hover sl-icon { + color: var(--icons-color-hover); + } + + sl-input.ng-invalid.ng-touched:not(form) { + &::part(form-control-input) { + --sl-input-border-color: var(--status-color-error); + --sl-input-border-color-hover: var(--status-color-error); + --sl-input-border-color-focus: var(--status-color-error); + --sl-input-placeholder-color: var(--status-color-error); + } + + &::part(form-control-help-text) { + color: var(--status-color-error); + } + } + + sl-input.ng-valid.ng-touched:not(form) { + &::part(form-control-input) { + --sl-input-border-color: var(--status-color-success); + --sl-input-border-color-hover: var(--status-color-success); + --sl-input-border-color-focus: var(--status-color-success); + } + } +} diff --git a/src/styles/components/_kbd.scss b/src/styles/components/_kbd.scss new file mode 100644 index 00000000..be385e39 --- /dev/null +++ b/src/styles/components/_kbd.scss @@ -0,0 +1,21 @@ +@mixin kbd() { + // We only target non-nested kbd elements + kbd:not(:has(kbd)) { + position: relative; + display: inline-block; + min-width: var(--spacing-xl); + min-height: var(--spacing-xxl); + padding: 0 var(--spacing-r-lg); + font-family: sans-serif; + line-height: var(--line-height-xxl); + vertical-align: middle; + color: var(--text-color-secondary); + text-align: center; + text-shadow: 0 1px 0 var(--octonary-contrast); + border: 1px solid var(--quinary-contrast); + border-radius: var(--border-radius-sm); + box-shadow: + 0 1px 0 rgb(0 0 0 / 20%), + 0 0 0 2px var(--octonary-contrast) inset; + } +} diff --git a/src/styles/components/_links.scss b/src/styles/components/_links.scss new file mode 100644 index 00000000..8d0dff1b --- /dev/null +++ b/src/styles/components/_links.scss @@ -0,0 +1,25 @@ +@mixin links() { + a { + transition: color 0.3s ease; + } + + p a { + text-decoration: underline; + } + + p > a, + td > a, + div > a, + code > a, + li a { + color: var(--links-color); + + &:hover { + color: var(--links-color-hover); + } + + &:active { + color: var(--links-color-active); + } + } +} diff --git a/src/styles/components/_loaders.scss b/src/styles/components/_loaders.scss new file mode 100644 index 00000000..06b6164b --- /dev/null +++ b/src/styles/components/_loaders.scss @@ -0,0 +1,11 @@ +@mixin loaders() { + .loading__image { + animation: spin 1s linear infinite; + } +} + +@keyframes spin { + to { + transform: rotate(360deg); + } +} diff --git a/src/styles/components/_options.scss b/src/styles/components/_options.scss new file mode 100644 index 00000000..b7d69732 --- /dev/null +++ b/src/styles/components/_options.scss @@ -0,0 +1,20 @@ +@mixin options() { + sl-option { + &.sl-option--primary { + &::part(base) { + padding: var(--spacing-r-sm); + color: var(--options-color); + background: var(--options-background); + + &:hover { + background: var(--options-background-hover); + transition: background 0.3s ease; + } + } + + &::part(label) { + font-size: var(--font-size-sm); + } + } + } +} diff --git a/src/styles/components/_pages.scss b/src/styles/components/_pages.scss new file mode 100644 index 00000000..c18e2fa2 --- /dev/null +++ b/src/styles/components/_pages.scss @@ -0,0 +1,9 @@ +@mixin read-page() { + box-sizing: border-box; + display: flex; + flex-direction: column; + justify-self: center; + width: 100%; + max-width: var(--page-width); + padding: var(--layout-padding); +} diff --git a/src/styles/components/_selects.scss b/src/styles/components/_selects.scss new file mode 100644 index 00000000..2453ba42 --- /dev/null +++ b/src/styles/components/_selects.scss @@ -0,0 +1,83 @@ +$loading-icon-suffix-width: 30px; + +@mixin selects() { + sl-select.select--primary { + --sl-input-background-color: var(--inputs-background-color); + --sl-input-background-color-hover: var(--inputs-background-color-hover); + --sl-input-background-color-focus: var(--inputs-background-color-focus); + --sl-input-border-color: var(--inputs-border-color); + --sl-input-border-color-hover: var(--inputs-border-color-hover); + --sl-input-border-color-focus: var(--inputs-border-color-focus); + --sl-input-font-family: var(--inter-font); + --sl-input-font-size-medium: var(--font-size-md); + --sl-input-color: var(--inputs-color); + --sl-input-color-hover: var(--inputs-color-hover); + --sl-input-color-focus: var(--inputs-color-focus); + --sl-input-placeholder-color: var(--inputs-placeholder-color); + --sl-input-focus-ring-color: var(--inputs-focus-ring-color); + --sl-input-focus-ring-offset: 0; + --sl-input-required-content: ''; + --sl-input-required-content-offset: 0; + --sl-panel-background-color: var(--panels-background); + + &::part(base) { + transition: + color 0.3s ease, + background-color 0.3s ease, + border-color 0.3s ease; + } + + &::part(input)::placeholder { + font-size: var(--font-size-sm); + } + + &::part(form-control) { + text-align: start; + } + + &::part(form-control-label) { + margin-block-end: var(--spacing-r-sm); + } + + &::part(form-control-help-text) { + margin-top: var(--spacing-r-sm); + font-size: var(--font-size-xs); + color: var(--inputs-placeholder-color); + } + + .loading__image { + width: $loading-icon-suffix-width; + height: auto; + margin-inline-end: var(--spacing-r-sm); + } + + sl-icon { + transition: color 0.3s ease; + } + } + + sl-input:not([disabled]):hover sl-icon { + color: var(--icons-color-hover); + } + + sl-input.ng-invalid.ng-touched:not(form) { + &::part(form-control-input) { + --sl-input-border-color: var(--status-color-error); + --sl-input-border-color-hover: var(--status-color-error); + --sl-input-border-color-focus: var(--status-color-error); + --sl-input-placeholder-color: var(--status-color-error); + } + + &::part(form-control-help-text) { + color: var(--status-color-error); + } + } + + sl-input.ng-valid.ng-touched:not(form) { + &::part(form-control-input) { + --sl-input-border-color: var(--status-color-success); + --sl-input-border-color-hover: var(--status-color-success); + --sl-input-border-color-focus: var(--status-color-success); + } + } +} diff --git a/src/styles/global.scss b/src/styles/global.scss new file mode 100644 index 00000000..26cb64b3 --- /dev/null +++ b/src/styles/global.scss @@ -0,0 +1,37 @@ +@use 'base/reset'; +@use 'base/z-index'; +@use 'base/border-radius'; +@use 'base/spacing'; +@use 'base/typography'; +@use 'base/themes'; +@use 'components/headings'; +@use 'components/alerts'; +@use 'components/links'; +@use 'components/dropdowns'; +@use 'components/buttons'; +@use 'components/forms'; +@use 'components/inputs'; +@use 'components/selects'; +@use 'components/options'; +@use 'components/checkboxes'; +@use 'components/kbd'; +@use 'components/loaders'; + +// Base +@include reset.reset; +@include typography.typography; +@include themes.themes; + +// Components +@include headings.headings; +@include alerts.alerts; +@include links.links; +@include buttons.buttons; +@include dropdowns.dropdowns; +@include forms.forms; +@include inputs.inputs; +@include selects.selects; +@include options.options; +@include checkboxes.checkboxes; +@include kbd.kbd; +@include loaders.loaders; diff --git a/src/test.ts b/src/test.ts deleted file mode 100644 index cd612eeb..00000000 --- a/src/test.ts +++ /dev/null @@ -1,32 +0,0 @@ -// This file is required by karma.conf.js and loads recursively all the .spec and framework files - -import 'zone.js/dist/long-stack-trace-zone'; -import 'zone.js/dist/proxy.js'; -import 'zone.js/dist/sync-test'; -import 'zone.js/dist/jasmine-patch'; -import 'zone.js/dist/async-test'; -import 'zone.js/dist/fake-async-test'; -import { getTestBed } from '@angular/core/testing'; -import { - BrowserDynamicTestingModule, - platformBrowserDynamicTesting -} from '@angular/platform-browser-dynamic/testing'; - -// Unfortunately there's no typing for the `__karma__` variable. Just declare it as any. -declare const __karma__: any; -declare const require: any; - -// Prevent Karma from running prematurely. -__karma__.loaded = function () {}; - -// First, initialize the Angular testing environment. -getTestBed().initTestEnvironment( - BrowserDynamicTestingModule, - platformBrowserDynamicTesting() -); -// Then we find all the tests. -const context = require.context('./', true, /\.spec\.ts$/); -// And load the modules. -context.keys().map(context); -// Finally, start Karma to run the tests. -__karma__.start(); diff --git a/src/tsconfig.app.json b/src/tsconfig.app.json deleted file mode 100644 index 39ba8dba..00000000 --- a/src/tsconfig.app.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "outDir": "../out-tsc/app", - "baseUrl": "./", - "module": "es2015", - "types": [] - }, - "exclude": [ - "test.ts", - "**/*.spec.ts" - ] -} diff --git a/src/tsconfig.spec.json b/src/tsconfig.spec.json deleted file mode 100644 index 63d89ff2..00000000 --- a/src/tsconfig.spec.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "outDir": "../out-tsc/spec", - "baseUrl": "./", - "module": "commonjs", - "target": "es5", - "types": [ - "jasmine", - "node" - ] - }, - "files": [ - "test.ts" - ], - "include": [ - "**/*.spec.ts", - "**/*.d.ts" - ] -} diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100755 index 00000000..332e7f3f --- /dev/null +++ b/tsconfig.app.json @@ -0,0 +1,10 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/app", + "types": ["@angular/localize", "node"] + }, + "files": ["src/main.ts", "src/main.server.ts"], + "include": ["src/**/*.d.ts"] +} diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json new file mode 100644 index 00000000..02ecc6f5 --- /dev/null +++ b/tsconfig.eslint.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "include": ["src/**/*.*", "e2e/**/*.*"] +} diff --git a/tsconfig.json b/tsconfig.json old mode 100644 new mode 100755 index fcf1a1f9..114e8c87 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,22 +1,39 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ { "compileOnSave": false, "compilerOptions": { + "baseUrl": "./", "outDir": "./dist/out-tsc", + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "skipLibCheck": true, + "isolatedModules": true, + "esModuleInterop": true, "sourceMap": true, "declaration": false, - "moduleResolution": "node", - "emitDecoratorMetadata": true, "experimentalDecorators": true, - "target": "es5", - "typeRoots": [ - "node_modules/@types" - ], - "lib": [ - "es2017", - "dom" - ] + "moduleResolution": "bundler", + "importHelpers": true, + "target": "ES2023", + "module": "ES2022", + "lib": ["ES2023", "dom"], + "paths": { + "~environments/*": ["src/environments/*"], + "~core/*": ["src/app/core/*"], + "~shared/*": ["src/app/shared/*"], + "~features/*": ["src/app/features/*"] + } }, "angularCompilerOptions": { - "preserveWhitespaces": false + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true, + "typeCheckHostBindings": true, + "strictStandalone": true } } diff --git a/tsconfig.spec.json b/tsconfig.spec.json new file mode 100755 index 00000000..95420be2 --- /dev/null +++ b/tsconfig.spec.json @@ -0,0 +1,10 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/spec", + "types": ["@angular/localize"] + }, + "include": ["src/**/*.spec.ts", "src/**/*.d.ts"] +} diff --git a/tslint.json b/tslint.json deleted file mode 100644 index f5264394..00000000 --- a/tslint.json +++ /dev/null @@ -1,140 +0,0 @@ -{ - "rulesDirectory": [ - "node_modules/codelyzer" - ], - "rules": { - "arrow-return-shorthand": true, - "callable-types": true, - "class-name": true, - "comment-format": [ - true, - "check-space" - ], - "curly": true, - "eofline": true, - "forin": true, - "import-blacklist": [ - true, - "rxjs", - "rxjs/Rx" - ], - "import-spacing": true, - "indent": [ - true, - "spaces" - ], - "interface-over-type-literal": true, - "label-position": true, - "max-line-length": [ - true, - 140 - ], - "member-access": false, - "member-ordering": [ - true, - { - "order": [ - "static-field", - "instance-field", - "static-method", - "instance-method" - ] - } - ], - "no-arg": true, - "no-bitwise": true, - "no-console": [ - true, - "debug", - "info", - "time", - "timeEnd", - "trace" - ], - "no-construct": true, - "no-debugger": true, - "no-duplicate-super": true, - "no-empty": false, - "no-empty-interface": true, - "no-eval": true, - "no-inferrable-types": [ - true, - "ignore-params" - ], - "no-misused-new": true, - "no-non-null-assertion": true, - "no-shadowed-variable": true, - "no-string-literal": false, - "no-string-throw": true, - "no-switch-case-fall-through": true, - "no-trailing-whitespace": true, - "no-unnecessary-initializer": true, - "no-unused-expression": true, - "no-use-before-declare": true, - "no-var-keyword": true, - "object-literal-sort-keys": false, - "one-line": [ - true, - "check-open-brace", - "check-catch", - "check-else", - "check-whitespace" - ], - "prefer-const": true, - "quotemark": [ - true, - "single" - ], - "radix": true, - "semicolon": [ - true, - "always" - ], - "triple-equals": [ - true, - "allow-null-check" - ], - "typedef-whitespace": [ - true, - { - "call-signature": "nospace", - "index-signature": "nospace", - "parameter": "nospace", - "property-declaration": "nospace", - "variable-declaration": "nospace" - } - ], - "typeof-compare": true, - "unified-signatures": true, - "variable-name": false, - "whitespace": [ - true, - "check-branch", - "check-decl", - "check-operator", - "check-separator", - "check-type" - ], - "directive-selector": [ - true, - "attribute", - "app", - "camelCase" - ], - "component-selector": [ - true, - "element", - "app", - "kebab-case" - ], - "use-input-property-decorator": true, - "use-output-property-decorator": true, - "use-host-property-decorator": true, - "no-input-rename": true, - "no-output-rename": true, - "use-life-cycle-interface": true, - "use-pipe-transform-interface": true, - "component-class-suffix": true, - "directive-class-suffix": true - } -}