From cb2b6503751dc90667f38163fe5000a2b65f3052 Mon Sep 17 00:00:00 2001 From: Amritanshu Date: Wed, 25 Jun 2025 08:19:37 +0000 Subject: [PATCH] Moved to Angular v20 and Tailwind v4 plus all related dependencies Renamed Docker directory. Also serving static files from FastAPI. --- .vscode/settings.json | 7 +- Dockerfile | 9 +- Makefile | 1 + {docker => ansible}/.gitignore | 0 {docker => ansible}/files/.env | 7 +- ansible/files/Caddyfile | 24 + ansible/files/keygen.sh | 37 + {docker => ansible}/hosts | 10 +- {docker => ansible}/playbook.yml | 4 +- ansible/roles/brewman/tasks/main.yaml | 52 + ansible/vars/acc.yml | 12 + ansible/vars/default.yml | 9 + ansible/vars/exp.yml | 11 + ansible/vars/hinchco.yml | 11 + ansible/vars/hops.yml | 12 + ansible/vars/mhl.yml | 11 + brewman/.python-version | 1 + brewman/brewman/main.py | 3 + brewman/docker-entrypoint.sh | 2 +- deploy.sh | 10 +- docker/app/Dockerfile | 53 - docker/files/nginx.conf.j2 | 51 - docker/roles/brewman/tasks/main.yaml | 27 - docker/roles/nginx/handlers/main.yaml | 6 - docker/roles/nginx/tasks/main.yaml | 24 - docker/roles/upload/tasks/main.yaml | 21 - docker/vars/acc.yml | 10 - docker/vars/default.yml | 4 - docker/vars/exp.yml | 10 - docker/vars/hinchco.yml | 10 - docker/vars/hops.yml | 11 - docker/vars/mhl.yml | 10 - overlord/.gitignore | 1 - overlord/.postcssrc.json | 5 + overlord/.prettierrc.js | 2 +- overlord/angular.json | 63 +- overlord/e2e/protractor.conf.js | 12 +- overlord/e2e/tsconfig.json | 8 +- overlord/eslint.config.js | 80 +- overlord/package.json | 64 +- overlord/proxy.conf.json | 10 +- .../account-detail.component.ts | 29 +- .../app/account/account-list.resolver.spec.ts | 1 - .../account-list/account-list.component.ts | 24 +- .../app/account/account-type.resolver.spec.ts | 1 - .../src/app/account/account-type.resolver.ts | 1 - .../src/app/account/account-type.service.ts | 8 +- .../src/app/account/account.resolver.spec.ts | 1 - overlord/src/app/account/account.routes.ts | 3 +- overlord/src/app/app.component.ts | 1 - overlord/src/app/app.config.ts | 11 +- .../app/attendance/attendance-type.service.ts | 9 +- .../app/attendance/attendance.component.ts | 45 +- .../src/app/attendance/attendance.routes.ts | 1 - .../src/app/attendance/attendance.service.ts | 9 +- overlord/src/app/auth/auth-guard.service.ts | 4 +- overlord/src/app/auth/auth.service.ts | 6 +- .../src/app/auth/login/login.component.ts | 23 +- .../src/app/auth/logout/logout.component.ts | 12 +- .../balance-sheet/balance-sheet.component.ts | 38 +- .../app/balance-sheet/balance-sheet.routes.ts | 1 - .../balance-sheet/balance-sheet.service.ts | 9 +- .../batch-integrity-report.component.ts | 27 +- .../batch-integrity-report.routes.ts | 1 - .../batch-integrity-report.service.ts | 9 +- .../src/app/cash-flow/cash-flow.component.ts | 30 +- .../src/app/cash-flow/cash-flow.routes.ts | 1 - .../src/app/cash-flow/cash-flow.service.ts | 9 +- .../client-detail/client-detail.component.ts | 21 +- .../client-list/client-list.component.ts | 24 +- overlord/src/app/client/client.routes.ts | 3 +- overlord/src/app/client/client.service.ts | 9 +- .../closing-stock/closing-stock.component.ts | 56 +- .../app/closing-stock/closing-stock.routes.ts | 1 - .../closing-stock/closing-stock.service.ts | 9 +- .../src/app/closing-stock/closing-stock.ts | 1 - overlord/src/app/core/account.service.ts | 8 +- overlord/src/app/core/auth.interceptor.ts | 3 +- overlord/src/app/core/batch.service.ts | 8 +- .../src/app/core/nav-bar/nav-bar.component.ts | 16 +- overlord/src/app/core/title.service.ts | 8 +- overlord/src/app/core/voucher.service.ts | 8 +- .../cost-centre-detail.component.ts | 19 +- .../cost-centre-list.resolver.spec.ts | 1 - .../cost-centre/cost-centre-list.resolver.ts | 1 - .../cost-centre-list.component.ts | 24 +- .../cost-centre/cost-centre.resolver.spec.ts | 1 - .../app/cost-centre/cost-centre.resolver.ts | 1 - .../src/app/cost-centre/cost-centre.routes.ts | 3 +- .../app/cost-centre/cost-centre.service.ts | 8 +- overlord/src/app/daybook/daybook.component.ts | 29 +- overlord/src/app/daybook/daybook.routes.ts | 1 - overlord/src/app/daybook/daybook.service.ts | 9 +- .../employee-attendance.component.ts | 46 +- .../employee-attendance.routes.ts | 1 - .../employee-attendance.service.ts | 9 +- .../employee-attendance.ts | 1 - .../employee-benefits.component.ts | 51 +- .../employee-benefits.routes.ts | 1 - .../employee-functions.component.ts | 23 +- .../employee-functions.routes.ts | 1 - .../employee-functions.service.ts | 8 +- .../employee-detail.component.ts | 31 +- .../employee-list/employee-list.component.ts | 32 +- overlord/src/app/employee/employee.routes.ts | 3 +- overlord/src/app/employee/employee.service.ts | 9 +- overlord/src/app/entries/entries.component.ts | 34 +- overlord/src/app/entries/entries.routes.ts | 1 - overlord/src/app/entries/entries.service.ts | 9 +- .../src/app/incentive/incentive.component.ts | 53 +- .../app/incentive/incentive.resolver.spec.ts | 1 - .../src/app/incentive/incentive.routes.ts | 1 - .../src/app/issue/issue-dialog.component.ts | 27 +- .../src/app/issue/issue-grid.service.spec.ts | 2 +- overlord/src/app/issue/issue-grid.service.ts | 8 +- overlord/src/app/issue/issue.component.ts | 56 +- overlord/src/app/issue/issue.resolver.spec.ts | 1 - overlord/src/app/issue/issue.routes.ts | 1 - .../app/journal/journal-dialog.component.ts | 31 +- overlord/src/app/journal/journal.component.ts | 64 +- .../src/app/journal/journal.resolver.spec.ts | 1 - overlord/src/app/journal/journal.routes.ts | 1 - overlord/src/app/ledger/ledger.component.ts | 64 +- overlord/src/app/ledger/ledger.routes.ts | 3 +- overlord/src/app/ledger/ledger.service.ts | 9 +- overlord/src/app/ledger/ledger.ts | 1 - .../mozimo-daily-register.component.ts | 40 +- .../mozimo-daily-register.routes.ts | 1 - .../mozimo-daily-register.service.ts | 9 +- .../mozimo-product-register.component.ts | 47 +- .../mozimo-product-register.routes.ts | 1 - .../mozimo-product-register.service.ts | 9 +- .../mozimo-product-register.ts | 1 - .../net-transactions.component.ts | 30 +- .../net-transactions.routes.ts | 1 - .../net-transactions.service.ts | 9 +- .../non-contract-purchase.component.ts | 27 +- .../non-contract-purchase.routes.ts | 1 - .../non-contract-purchase.service.ts | 9 +- .../payment/payment-accounts.resolver.spec.ts | 1 - .../app/payment/payment-dialog.component.ts | 29 +- overlord/src/app/payment/payment.component.ts | 64 +- .../src/app/payment/payment.resolver.spec.ts | 1 - overlord/src/app/payment/payment.routes.ts | 1 - .../period-detail/period-detail.component.ts | 23 +- .../period-list/period-list.component.ts | 24 +- overlord/src/app/period/period.routes.ts | 3 +- overlord/src/app/period/period.service.ts | 9 +- .../product-group-detail.component.ts | 19 +- .../product-group-list.resolver.spec.ts | 1 - .../product-group-list.resolver.ts | 1 - .../product-group-list.component.ts | 24 +- .../product-group.resolver.spec.ts | 1 - .../product-group/product-group.resolver.ts | 1 - .../app/product-group/product-group.routes.ts | 3 +- .../product-group/product-group.service.ts | 8 +- .../product-ledger.component.ts | 50 +- .../product-ledger/product-ledger.routes.ts | 1 - .../product-ledger/product-ledger.service.ts | 9 +- .../src/app/product-ledger/product-ledger.ts | 1 - .../product-detail-dialog.component.ts | 22 +- .../product-detail.component.ts | 36 +- .../app/product/product-list.resolver.spec.ts | 1 - .../src/app/product/product-list.resolver.ts | 1 - .../product-list/product-list.component.ts | 32 +- .../src/app/product/product.resolver.spec.ts | 1 - overlord/src/app/product/product.resolver.ts | 1 - overlord/src/app/product/product.routes.ts | 3 +- overlord/src/app/product/product.service.ts | 8 +- .../app/profit-loss/profit-loss.component.ts | 37 +- .../src/app/profit-loss/profit-loss.routes.ts | 1 - .../app/profit-loss/profit-loss.service.ts | 9 +- .../purchase-entries.component.ts | 31 +- .../purchase-entries.routes.ts | 1 - .../purchase-entries.service.ts | 9 +- .../purchase-return-dialog.component.ts | 27 +- .../purchase-return.component.ts | 68 +- .../purchase-return.resolver.spec.ts | 1 - .../purchase-return/purchase-return.routes.ts | 1 - .../app/purchase/purchase-dialog.component.ts | 26 +- .../src/app/purchase/purchase.component.ts | 68 +- .../app/purchase/purchase.resolver.spec.ts | 1 - overlord/src/app/purchase/purchase.routes.ts | 1 - .../src/app/purchases/purchases.component.ts | 39 +- .../src/app/purchases/purchases.routes.ts | 1 - .../src/app/purchases/purchases.service.ts | 9 +- .../rate-contract-detail.component.ts | 47 +- .../rate-contract-list.component.ts | 24 +- .../app/rate-contract/rate-contract.routes.ts | 3 +- .../rate-contract/rate-contract.service.ts | 9 +- .../src/app/rate-contract/rate-contract.ts | 1 - .../raw-material-cost.component.ts | 44 +- .../raw-material-cost.routes.ts | 1 - .../raw-material-cost.service.ts | 9 +- .../receipt/receipt-accounts.resolver.spec.ts | 1 - .../app/receipt/receipt-dialog.component.ts | 29 +- overlord/src/app/receipt/receipt.component.ts | 64 +- .../src/app/receipt/receipt.resolver.spec.ts | 1 - overlord/src/app/receipt/receipt.routes.ts | 1 - .../recipe-template-detail.component.ts | 23 +- .../recipe-template-list.component.ts | 24 +- .../recipe-template/recipe-template.routes.ts | 3 +- .../recipe-template.service.ts | 9 +- .../recipe-detail/recipe-detail.component.ts | 44 +- .../recipe-list/recipe-list.component.ts | 30 +- overlord/src/app/recipe/recipe.routes.ts | 3 +- overlord/src/app/recipe/recipe.service.ts | 9 +- overlord/src/app/recipe/recipe.ts | 1 - .../role/role-detail/role-detail.component.ts | 21 +- .../app/role/role-list/role-list.component.ts | 24 +- overlord/src/app/role/role.routes.ts | 3 +- overlord/src/app/role/role.service.ts | 9 +- .../src/app/settings/settings.component.ts | 40 +- overlord/src/app/settings/settings.routes.ts | 1 - overlord/src/app/settings/settings.service.ts | 9 +- .../src/app/settings/voucher-type.resolver.ts | 1 - .../src/app/settings/voucher-type.service.ts | 8 +- .../confirm-dialog.component.ts | 18 +- .../src/app/shared/cookie.service.spec.ts | 2 +- .../image-dialog/image-dialog.component.ts | 8 +- .../src/app/shared/to-csv.service.spec.ts | 2 +- .../stock-movement.component.ts | 29 +- .../stock-movement/stock-movement.routes.ts | 1 - .../stock-movement/stock-movement.service.ts | 9 +- .../app/tag-dialog/tag-dialog.component.ts | 38 +- .../tag/tag-detail/tag-detail.component.ts | 25 +- .../src/app/tag/tag-list.resolver.spec.ts | 1 - overlord/src/app/tag/tag-list.resolver.ts | 1 - .../app/tag/tag-list/tag-list.component.ts | 24 +- overlord/src/app/tag/tag.resolver.spec.ts | 1 - overlord/src/app/tag/tag.resolver.ts | 1 - overlord/src/app/tag/tag.routes.ts | 3 +- overlord/src/app/tag/tag.service.ts | 10 +- .../trial-balance/trial-balance.component.ts | 30 +- .../app/trial-balance/trial-balance.routes.ts | 1 - .../trial-balance/trial-balance.service.ts | 9 +- .../user/user-detail/user-detail.component.ts | 21 +- .../src/app/user/user-list.resolver.spec.ts | 1 - overlord/src/app/user/user-list.resolver.ts | 1 - .../app/user/user-list/user-list.component.ts | 24 +- overlord/src/app/user/user.resolver.spec.ts | 1 - overlord/src/app/user/user.resolver.ts | 1 - overlord/src/app/user/user.routes.ts | 3 +- overlord/src/app/user/user.service.ts | 8 +- overlord/src/index.html | 2 +- overlord/src/main.ts | 10 +- overlord/src/styles.css | 24 +- overlord/tailwind.config.js | 10 - overlord/tsconfig.app.json | 8 +- overlord/tsconfig.json | 10 +- overlord/tsconfig.spec.json | 9 +- overlord/yarn.lock | 6996 +++++++++++++++++ version_bump.sh | 4 - 253 files changed, 8626 insertions(+), 1995 deletions(-) rename {docker => ansible}/.gitignore (100%) rename {docker => ansible}/files/.env (58%) create mode 100644 ansible/files/Caddyfile create mode 100755 ansible/files/keygen.sh rename {docker => ansible}/hosts (55%) rename {docker => ansible}/playbook.yml (91%) create mode 100644 ansible/roles/brewman/tasks/main.yaml create mode 100644 ansible/vars/acc.yml create mode 100644 ansible/vars/default.yml create mode 100644 ansible/vars/exp.yml create mode 100644 ansible/vars/hinchco.yml create mode 100644 ansible/vars/hops.yml create mode 100644 ansible/vars/mhl.yml create mode 100644 brewman/.python-version delete mode 100644 docker/app/Dockerfile delete mode 100644 docker/files/nginx.conf.j2 delete mode 100644 docker/roles/brewman/tasks/main.yaml delete mode 100644 docker/roles/nginx/handlers/main.yaml delete mode 100644 docker/roles/nginx/tasks/main.yaml delete mode 100644 docker/roles/upload/tasks/main.yaml delete mode 100644 docker/vars/acc.yml delete mode 100644 docker/vars/default.yml delete mode 100644 docker/vars/exp.yml delete mode 100644 docker/vars/hinchco.yml delete mode 100644 docker/vars/hops.yml delete mode 100644 docker/vars/mhl.yml create mode 100644 overlord/.postcssrc.json delete mode 100644 overlord/tailwind.config.js create mode 100644 overlord/yarn.lock diff --git a/.vscode/settings.json b/.vscode/settings.json index 84554568..9ef95a44 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -14,5 +14,8 @@ "**/package-lock.json": true, "/overlord/.angular/**": true, }, - "makefile.configureOnOpen": false -} + "editor.codeActionsOnSave": { + "source.fixAll.eslint": "explicit" + }, + "makefile.configureOnOpen": false + } diff --git a/Dockerfile b/Dockerfile index 6d476603..d7e33310 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,7 +13,7 @@ RUN \ else echo "Lockfile not found." && exit 1; \ fi -FROM base as builder +FROM base AS builder WORKDIR /app COPY --from=deps /app/node_modules ./node_modules COPY /overlord ./ @@ -34,8 +34,8 @@ RUN apt-get update && \ sed --in-place --expression='s/# en_IN UTF-8/en_IN UTF-8/' /etc/locale.gen && \ dpkg-reconfigure --frontend=noninteractive locales -ENV LANG en_IN -ENV LC_ALL en_IN +ENV LANG=en_IN +ENV LC_ALL=en_IN # Install Poetry RUN curl -sSL https://install.python-poetry.org | POETRY_HOME=/opt/poetry python - && \ @@ -51,11 +51,10 @@ ARG INSTALL_DEV=false RUN bash -c "if [ $INSTALL_DEV == 'true' ] ; then poetry install --no-root ; else poetry install --no-root --only main ; fi" COPY /brewman ./ -COPY --from=builder /frontend/browser /app/frontend +COPY --from=builder /frontend/browser /app/static ENV PYTHONPATH=/app EXPOSE 80 -VOLUME /frontend RUN chmod 777 /app/docker-entrypoint.sh \ && ln -s /app/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh \ diff --git a/Makefile b/Makefile index 456358ba..88effcaa 100644 --- a/Makefile +++ b/Makefile @@ -3,5 +3,6 @@ build-production: ## Build the production docker image. @docker buildx build \ --platform linux/amd64,linux/arm64/v8 \ --tag registry.tanshu.com/brewman:latest \ + $(if $(TAG),--tag registry.tanshu.com/brewman:$(TAG)) \ --push \ git@git.tanshu.com:tanshu/brewman.git diff --git a/docker/.gitignore b/ansible/.gitignore similarity index 100% rename from docker/.gitignore rename to ansible/.gitignore diff --git a/docker/files/.env b/ansible/files/.env similarity index 58% rename from docker/files/.env rename to ansible/files/.env index 5a76573d..81488ab2 100644 --- a/docker/files/.env +++ b/ansible/files/.env @@ -3,12 +3,13 @@ HOST=0.0.0.0 PORT=80 LOG_LEVEL=WARN DEBUG=false -SQLALCHEMY_DATABASE_URI=postgresql+psycopg://postgres:123456@db:5432/brewman_{{ name }} +SQLALCHEMY_DATABASE_URI=postgresql+psycopg://postgres:123456@{{ db }}:5432/brewman_{{ name }} MODULE_NAME=brewman.main PROJECT_NAME=brewman -SECRET_KEY={{ secret_key }} +PUBLIC_KEY={{ public_key }} +PRIVATE_KEY={{ private_key }} MIDDLEWARE_SECRET_KEY={{ middleware_key }} -ALGORITHM=HS256 +ALGORITHM=EdDSA JWT_TOKEN_EXPIRE_MINUTES=30 ALEMBIC_LOG_LEVEL=INFO ALEMBIC_SQLALCHEMY_LOG_LEVEL=WARN diff --git a/ansible/files/Caddyfile b/ansible/files/Caddyfile new file mode 100644 index 00000000..72722b95 --- /dev/null +++ b/ansible/files/Caddyfile @@ -0,0 +1,24 @@ +{{ host }} { + # Match and proxy API routes + @apiRoutes { + path_regexp ^/(api|token|refresh|attendance-report|fingerprint-report|db-image) + } + handle @apiRoutes { + reverse_proxy @apiRoutes {{ host_directory }}:80 + } + + # Match requests that end with .js, .css, .ico, or .html + @staticFiles { + path_regexp \.(js|css|ico|html)$ + } + handle @staticFiles { + rewrite * /static{uri} + reverse_proxy {{ host_directory }}:80 + } + + # All other frontend routes → /static/index.html + handle { + rewrite * /static/index.html + reverse_proxy {{ host_directory }}:80 + } +} diff --git a/ansible/files/keygen.sh b/ansible/files/keygen.sh new file mode 100755 index 00000000..acb9aa1d --- /dev/null +++ b/ansible/files/keygen.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +# File names +PRIVATE_KEY_FILE="ed25519-private.pem" +PUBLIC_KEY_FILE="ed25519-public.pem" + +# Generate private key +openssl genpkey -algorithm Ed25519 -out "$PRIVATE_KEY_FILE" +if [ $? -ne 0 ]; then + echo "❌ Failed to generate private key" + exit 1 +fi + +# Extract public key +openssl pkey -in "$PRIVATE_KEY_FILE" -pubout -out "$PUBLIC_KEY_FILE" +if [ $? -ne 0 ]; then + echo "❌ Failed to extract public key" + exit 1 +fi + +# Function to convert PEM to one-liner with \n +format_pem_for_env() { + awk '{printf "%s\\n", $0}' "$1" +} + +# Output .env formatted variables +echo "✅ Keys generated. Add the following to your .env file:" +echo "" +echo "PRIVATE_KEY=\"$(format_pem_for_env $PRIVATE_KEY_FILE)\"" +echo "" +echo "PUBLIC_KEY=\"$(format_pem_for_env $PUBLIC_KEY_FILE)\"" +echo "" +echo "ALGORITHM=EdDSA" + +rm -f "$PRIVATE_KEY_FILE" "$PUBLIC_KEY_FILE" +echo "Temporary key files removed." +echo "Done." diff --git a/docker/hosts b/ansible/hosts similarity index 55% rename from docker/hosts rename to ansible/hosts index d127b202..155dae93 100644 --- a/docker/hosts +++ b/ansible/hosts @@ -5,11 +5,11 @@ # - A hostname/ip can be a member of multiple groups [brewman] -acc ansible_host=gondor var_file=vars/acc.yml -exp ansible_host=gondor var_file=vars/exp.yml -hops ansible_host=gondor var_file=vars/hops.yml -mhl ansible_host=gondor var_file=vars/mhl.yml -hinchco ansible_host=gondor var_file=vars/hinchco.yml +acc ansible_host=monoco var_file=vars/acc.yml +exp ansible_host=monoco var_file=vars/exp.yml +hops ansible_host=monoco var_file=vars/hops.yml +mhl ansible_host=monoco var_file=vars/mhl.yml +hinchco ansible_host=monoco var_file=vars/hinchco.yml [all:vars] ansible_python_interpreter=/usr/bin/python3 diff --git a/docker/playbook.yml b/ansible/playbook.yml similarity index 91% rename from docker/playbook.yml rename to ansible/playbook.yml index a0b26716..8cc6be5a 100755 --- a/docker/playbook.yml +++ b/ansible/playbook.yml @@ -5,10 +5,8 @@ - hosts: brewman become: true vars_files: - - "{{ var_file }}" - vars/default.yml + - "{{ var_file }}" roles: - - upload - brewman - - nginx diff --git a/ansible/roles/brewman/tasks/main.yaml b/ansible/roles/brewman/tasks/main.yaml new file mode 100644 index 00000000..8dacd570 --- /dev/null +++ b/ansible/roles/brewman/tasks/main.yaml @@ -0,0 +1,52 @@ +--- +# Tasks for docker role +- name: Log in to Docker registry + docker_login: + registry: "{{ registry }}" + username: "{{ username }}" + password: "{{ password }}" + +- name: Pull Brewman image + docker_image: + name: "{{ image_name }}" + source: pull + state: present + force_source: yes + +- name: Ensure Host Directory exists + file: + path: "/var/lib/{{ host_directory }}" + state: directory + +- name: Upload the .env file + template: + src: "files/.env" + dest: "/var/lib/{{ host_directory }}/.env" + +- name: Upload the Caddyfile template + template: + src: "files/Caddyfile" + dest: "/var/lib/{{ host_directory }}/Caddyfile" + +- name: Create Docker network for Brewman + docker_network: + name: "brewman_{{ name }}_net" + state: present + +- name: Create brewman container + docker_container: + name: "{{ host_directory }}" + image: "{{ image_name }}" + state: started + restart_policy: "unless-stopped" + env_file: "/var/lib/{{ host_directory }}/.env" + volumes: + - "/var/lib/{{ host_directory }}/frontend:/frontend" + +- name: Connect DB container to Brewman network + docker_network: + name: "brewman_{{ name }}_net" + connected: + - "{{ db }}" + - "{{ proxy }}" + - "{{ host_directory }}" \ No newline at end of file diff --git a/ansible/vars/acc.yml b/ansible/vars/acc.yml new file mode 100644 index 00000000..a066a20b --- /dev/null +++ b/ansible/vars/acc.yml @@ -0,0 +1,12 @@ +--- +name: acc +title: "The Great Bear" + +public_key: -----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAB+3c94GO2p6+cCOfaA1J0oQVbmZQieYaOqNbgHR70JM=\n-----END PUBLIC KEY----- +private_key: -----BEGIN PRIVATE KEY-----\nMC4CAQAwBQYDK2VwBCIEICdULYmhJhsQJPoCScBBYM+PdI0LrOu0jzOajvgZXElI\n-----END PRIVATE KEY----- +middleware_key: cb71666b9c + +host: acc.hopsngrains.com +host_directory: "brewman-{{ name }}" +db_name: "brewman_{{ name }}" + diff --git a/ansible/vars/default.yml b/ansible/vars/default.yml new file mode 100644 index 00000000..c1fe4997 --- /dev/null +++ b/ansible/vars/default.yml @@ -0,0 +1,9 @@ +--- +registry: registry.tanshu.com +username: ta-registry +password: ff28a01f00c0f39315d94cd9dcb1e554968dba25676a8ea5f2be34e96a9a099f +tag: latest + +image_name: "{{ registry }}/brewman:{{ tag }}" +db: postgres +proxy: caddy \ No newline at end of file diff --git a/ansible/vars/exp.yml b/ansible/vars/exp.yml new file mode 100644 index 00000000..75e2f696 --- /dev/null +++ b/ansible/vars/exp.yml @@ -0,0 +1,11 @@ +--- +name: exp +title: Tanshu + +public_key: -----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEABj/Hq4mOHC8fwTL+MJOr7HDFU+LmGfmQFOt90a+ZGtg=\n-----END PUBLIC KEY----- +private_key: -----BEGIN PRIVATE KEY-----\nMC4CAQAwBQYDK2VwBCIEIGyEz6qjXMPtjWaYpacAyUewO7uBPWwmwDpGpZz8L2QX\n-----END PRIVATE KEY----- +middleware_key: da6fcd999b + +host: exp.tanshu.com +host_directory: "brewman-{{ name }}" +db_name: "brewman_{{ name }}" diff --git a/ansible/vars/hinchco.yml b/ansible/vars/hinchco.yml new file mode 100644 index 00000000..eb2df737 --- /dev/null +++ b/ansible/vars/hinchco.yml @@ -0,0 +1,11 @@ +--- +name: hinchco +title: Mozimo + +public_key: -----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAQUHP86TdF2/HRgpSOATueKxP16KONO+iTef1nITnlwc=\n-----END PUBLIC KEY----- +private_key: -----BEGIN PRIVATE KEY-----\nMC4CAQAwBQYDK2VwBCIEIPWikH3em6asm4WVSO6qsljphHFg8Vqme8qso4ZUAHux\n-----END PRIVATE KEY----- +middleware_key: 1e36e7f678 + +host: acc.hinchco.in +host_directory: "brewman-{{ name }}" +db_name: "brewman_{{ name }}" diff --git a/ansible/vars/hops.yml b/ansible/vars/hops.yml new file mode 100644 index 00000000..03e86b7c --- /dev/null +++ b/ansible/vars/hops.yml @@ -0,0 +1,12 @@ +--- +name: hops +title: "HnG Panchkula" + + +public_key: -----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEA5CKg54LzOC2Ud+8Lu/bjXeGQiyINpLMFpWU3KL34RpU=\n-----END PUBLIC KEY----- +private_key: -----BEGIN PRIVATE KEY-----\nMC4CAQAwBQYDK2VwBCIEIBEjfprZzihARk6Kgzt/UH6KyaU5FpYgvkF03z+Y50BW\n-----END PRIVATE KEY----- +middleware_key: 9c2bdd24be + +host: hops.hopsngrains.com +host_directory: "brewman-{{ name }}" +db_name: "brewman_{{ name }}" diff --git a/ansible/vars/mhl.yml b/ansible/vars/mhl.yml new file mode 100644 index 00000000..906a03ea --- /dev/null +++ b/ansible/vars/mhl.yml @@ -0,0 +1,11 @@ +--- +name: mhl +title: "HnG Mohali" + +public_key: -----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAerD1T7kXn4cDp8dw1xQapPMyrlq7WHq0PpnIWqzTq8c=\n-----END PUBLIC KEY----- +private_key: -----BEGIN PRIVATE KEY-----\nMC4CAQAwBQYDK2VwBCIEIFguJkIzoUkxHSxvFWr6qiCwE0ia4AsqTwhLqexVOCEh\n-----END PRIVATE KEY----- +middleware_key: 9183bdcfb0 + +host: mhl.hopsngrains.com +host_directory: "brewman-{{ name }}" +db_name: "brewman_{{ name }}" diff --git a/brewman/.python-version b/brewman/.python-version new file mode 100644 index 00000000..24ee5b1b --- /dev/null +++ b/brewman/.python-version @@ -0,0 +1 @@ +3.13 diff --git a/brewman/brewman/main.py b/brewman/brewman/main.py index 7fa3f32f..d5a7c445 100644 --- a/brewman/brewman/main.py +++ b/brewman/brewman/main.py @@ -1,6 +1,7 @@ import uvicorn from fastapi import FastAPI +from fastapi.staticfiles import StaticFiles from starlette.middleware.sessions import SessionMiddleware from .core.config import settings @@ -140,6 +141,8 @@ app.include_router(db_integrity.router, prefix="/api/db-integrity", tags=["manag app.include_router(rebase.router, prefix="/api/rebase", tags=["management"]) app.include_router(title.router, prefix="/api/title") +app.mount("/static", StaticFiles(directory="static"), name="static") + def init() -> None: uvicorn.run(app, host=settings.HOST, port=settings.PORT) diff --git a/brewman/docker-entrypoint.sh b/brewman/docker-entrypoint.sh index 645ab7d5..18f96971 100644 --- a/brewman/docker-entrypoint.sh +++ b/brewman/docker-entrypoint.sh @@ -1,6 +1,6 @@ #!/bin/bash set -e -cp /app/frontend/* /frontend +# cp /app/frontend/* /frontend exec "$@" diff --git a/deploy.sh b/deploy.sh index bae8b8e2..1c77a4aa 100755 --- a/deploy.sh +++ b/deploy.sh @@ -8,16 +8,10 @@ cd "$parent_path" || exit if [ 1 -eq "$#" ] then ./version_bump.sh "$1" + make build-production TAG="$1" else ./version_bump.sh -fi - -make build-production -if [ 1 -eq "$#" ] -then - docker tag brewman:latest "$1" -else - echo "No version bump" + make build-production fi cd "$parent_path/ansible" || exit ansible-playbook --inventory hosts playbook.yml diff --git a/docker/app/Dockerfile b/docker/app/Dockerfile deleted file mode 100644 index 5fadbaef..00000000 --- a/docker/app/Dockerfile +++ /dev/null @@ -1,53 +0,0 @@ -FROM node:latest AS builder -RUN mkdir -p /app/overlord -COPY package.json /app/overlord/package.json -RUN cd /app/overlord \ - && npm install --unsafe-perm \ - && mv /app/overlord/node_modules / \ - && cd / \ - && rm -rf /app -ADD https://git.tanshu.com/api/v1/repos/tanshu/brewman/tags /tags.json -RUN git clone --single-branch --depth 1 --branch latest https://git.tanshu.com/tanshu/brewman.git /app -WORKDIR /app/overlord -RUN mv /node_modules /app/overlord/ \ - && /app/overlord/node_modules/.bin/ng build - - -FROM python:3.12 -LABEL maintainer="Amritanshu " - -COPY pyproject.toml /app/pyproject.toml - -RUN apt-get update && \ - apt-get install -y locales && \ - sed --in-place --expression='s/# en_IN UTF-8/en_IN UTF-8/' /etc/locale.gen && \ - dpkg-reconfigure --frontend=noninteractive locales - -ENV LANG en_IN -ENV LC_ALL en_IN - -# Install Poetry -RUN curl -sSL https://install.python-poetry.org | POETRY_HOME=/opt/poetry python - && \ - cd /usr/local/bin && \ - ln -s /opt/poetry/bin/poetry && \ - poetry config virtualenvs.create false - -WORKDIR /app - -# Allow installing dev dependencies to run tests -ARG INSTALL_DEV=false -RUN bash -c "if [ $INSTALL_DEV == 'true' ] ; then poetry install --no-root ; else poetry install --no-root --only main ; fi" - -COPY --from=builder /app/brewman /app -COPY --from=builder /app/frontend/browser /app/frontend - -ENV PYTHONPATH=/app -EXPOSE 80 -VOLUME /frontend - -RUN chmod 777 /app/docker-entrypoint.sh \ - && ln -s /app/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh \ - && ln -s /app/docker-entrypoint.sh / -ENTRYPOINT ["docker-entrypoint.sh"] - -CMD ["poetry", "run", "gunicorn", "brewman.main:app", "--worker-class", "uvicorn.workers.UvicornWorker", "--config", "/app/gunicorn.conf.py", "--log-config", "/app/logging.conf"] diff --git a/docker/files/nginx.conf.j2 b/docker/files/nginx.conf.j2 deleted file mode 100644 index 42b06ef5..00000000 --- a/docker/files/nginx.conf.j2 +++ /dev/null @@ -1,51 +0,0 @@ -server { - - listen 80; - server_name {{ http_host }}; - - # Allow large attachments - client_max_body_size 128M; - - location /api { - proxy_set_header Host $host:$server_port; - proxy_set_header X-Scheme $scheme; - proxy_set_header X-Forwarded-For $remote_addr; - proxy_pass http://localhost:{{ host_port }}; - } - location /token { - - proxy_set_header Host $host:$server_port; - proxy_set_header X-Scheme $scheme; - proxy_set_header X-Forwarded-For $remote_addr; - proxy_pass http://localhost:{{ host_port }}; - } - location /refresh { - proxy_set_header Host $host:$server_port; - proxy_set_header X-Scheme $scheme; - proxy_set_header X-Forwarded-For $remote_addr; - proxy_pass http://localhost:{{ host_port }}; - } - location /attendance-report { - proxy_set_header Host $host:$server_port; - proxy_set_header X-Scheme $scheme; - proxy_set_header X-Forwarded-For $remote_addr; - proxy_pass http://localhost:{{ host_port }}; - } - location /fingerprint-report { - proxy_set_header Host $host:$server_port; - proxy_set_header X-Scheme $scheme; - proxy_set_header X-Forwarded-For $remote_addr; - proxy_pass http://localhost:{{ host_port }}; - } location /db-image { - proxy_set_header Host $host:$server_port; - proxy_set_header X-Scheme $scheme; - proxy_set_header X-Forwarded-For $remote_addr; - proxy_pass http://localhost:{{ host_port }}; - } - location / { - root /var/lib/{{ host_directory }}/frontend; - index index.html index.htm; - try_files $uri $uri/ /index.html =404; - } -} - diff --git a/docker/roles/brewman/tasks/main.yaml b/docker/roles/brewman/tasks/main.yaml deleted file mode 100644 index 7f273a4f..00000000 --- a/docker/roles/brewman/tasks/main.yaml +++ /dev/null @@ -1,27 +0,0 @@ ---- -# Tasks for docker role -- name: Build brewman image - docker_image: - name: brewman:latest - build: - path: "/tmp/{{ host_directory }}/" - dockerfile: "/tmp/{{ host_directory }}/Dockerfile" - pull: yes - state: present - source: build - -- name: Create brewman container - docker_container: - name: "{{ host_directory }}" - image: brewman:latest - state: started - restart_policy: "unless-stopped" - env_file: "/var/lib/{{ host_directory }}/.env" - etc_hosts: - db : "{{ db_host }}" - # links: - # - "postgres:db" - published_ports: - - "127.0.0.1:{{ host_port }}:80" - volumes: - - "/var/lib/{{ host_directory }}/frontend:/frontend" diff --git a/docker/roles/nginx/handlers/main.yaml b/docker/roles/nginx/handlers/main.yaml deleted file mode 100644 index 622fd366..00000000 --- a/docker/roles/nginx/handlers/main.yaml +++ /dev/null @@ -1,6 +0,0 @@ ---- -# Handlers for Nginx role -- name: Reload Nginx - service: - name: nginx - state: reloaded diff --git a/docker/roles/nginx/tasks/main.yaml b/docker/roles/nginx/tasks/main.yaml deleted file mode 100644 index 4441fe7f..00000000 --- a/docker/roles/nginx/tasks/main.yaml +++ /dev/null @@ -1,24 +0,0 @@ ---- -# Tasks for Nginx role -- name: Check if Nginx conf file exists - stat: - path: "/etc/nginx/sites-available/{{ http_conf }}" - register: status - -- name: No need to reload Nginx - debug: - msg: "No need to reload Nginx as sites-available entries have already been created" - -- name: Set Nginx conf file - when: status.stat.exists == false - template: - src: "files/nginx.conf.j2" - dest: "/etc/nginx/sites-available/{{ http_conf }}" - -- name: Enable new site - when: status.stat.exists == false - file: - src: "/etc/nginx/sites-available/{{ http_conf }}" - dest: "/etc/nginx/sites-enabled/{{ http_conf }}" - state: link - notify: Reload Nginx diff --git a/docker/roles/upload/tasks/main.yaml b/docker/roles/upload/tasks/main.yaml deleted file mode 100644 index 5cb33001..00000000 --- a/docker/roles/upload/tasks/main.yaml +++ /dev/null @@ -1,21 +0,0 @@ ---- -# Tasks for upload role -- name: Ensure Temporary Directory exists - file: - path: "/tmp/{{ host_directory }}" - state: directory - -- name: Copy dockerfile - synchronize: - src: app - dest: "/tmp/{{ host_directory }}" - -- name: Ensure Host Directory exists - file: - path: "/var/lib/{{ host_directory }}" - state: directory - -- name: Upload the .env file - template: - src: "files/.env" - dest: "/var/lib/{{ host_directory }}/.env" diff --git a/docker/vars/acc.yml b/docker/vars/acc.yml deleted file mode 100644 index d9b01b7f..00000000 --- a/docker/vars/acc.yml +++ /dev/null @@ -1,10 +0,0 @@ ---- -name: acc -title: "The Great Bear" - -http_host: "acc.hopsngrains.com" -http_conf: "acc.hopsngrains.com.conf" -host_port: "8659" - -secret_key: c9bee2d38676447c2f7a9ea715446e2fd09f16fbaa5b3f6a6f207ec18993987f -middleware_key: cb71666b9c diff --git a/docker/vars/default.yml b/docker/vars/default.yml deleted file mode 100644 index 2d23165b..00000000 --- a/docker/vars/default.yml +++ /dev/null @@ -1,4 +0,0 @@ ---- -db_host: 172.26.12.67 -host_directory: "brewman-{{ name }}" -db_name: "brewman_{{ name }}" diff --git a/docker/vars/exp.yml b/docker/vars/exp.yml deleted file mode 100644 index 5ab230f7..00000000 --- a/docker/vars/exp.yml +++ /dev/null @@ -1,10 +0,0 @@ ---- -name: exp -title: Tanshu - -http_host: "exp.tanshu.com" -http_conf: "exp.tanshu.com.conf" -host_port: "8656" - -secret_key: 8546a61262dab7c05ccf2e26abe30bc10966904df6dfd29259ea85dd0844a8e7 -middleware_key: da6fcd999b diff --git a/docker/vars/hinchco.yml b/docker/vars/hinchco.yml deleted file mode 100644 index 7a61d202..00000000 --- a/docker/vars/hinchco.yml +++ /dev/null @@ -1,10 +0,0 @@ ---- -name: hinchco -title: Mozimo - -http_host: "acc.hinchco.in" -http_conf: "acc.hinchco.in.conf" -host_port: "8655" - -secret_key: 7b889cff76532fde8483304cf415243f70df200518ba9aee4d26c0709ad6fbd1 -middleware_key: 1e36e7f678 diff --git a/docker/vars/hops.yml b/docker/vars/hops.yml deleted file mode 100644 index 0f5bfdf7..00000000 --- a/docker/vars/hops.yml +++ /dev/null @@ -1,11 +0,0 @@ ---- -name: hops -title: "HnG Panchkula" - - -http_host: "hops.hopsngrains.com" -http_conf: "hops.hopsngrains.com.conf" -host_port: "8658" - -secret_key: cfb3be420c4e2b0ed423b2e4e238713d0461e2ba56198138ad6c4d82aef6295c -middleware_key: 9c2bdd24be diff --git a/docker/vars/mhl.yml b/docker/vars/mhl.yml deleted file mode 100644 index d023ab3a..00000000 --- a/docker/vars/mhl.yml +++ /dev/null @@ -1,10 +0,0 @@ ---- -name: mhl -title: "HnG Mohali" - -http_host: "mhl.hopsngrains.com" -http_conf: "mhl.hopsngrains.com.conf" -host_port: "8657" - -secret_key: c9fd1b99931feb083f67470170650420b99eb35368d3de186427166c28d32c8b -middleware_key: 9183bdcfb0 diff --git a/overlord/.gitignore b/overlord/.gitignore index 41adae5e..a9f467dd 100644 --- a/overlord/.gitignore +++ b/overlord/.gitignore @@ -10,7 +10,6 @@ /node_modules npm-debug.log yarn-error.log -package-lock.json # IDEs and editors /.idea diff --git a/overlord/.postcssrc.json b/overlord/.postcssrc.json new file mode 100644 index 00000000..e092dc7c --- /dev/null +++ b/overlord/.postcssrc.json @@ -0,0 +1,5 @@ +{ + "plugins": { + "@tailwindcss/postcss": {} + } +} diff --git a/overlord/.prettierrc.js b/overlord/.prettierrc.js index 88e181cf..448de693 100644 --- a/overlord/.prettierrc.js +++ b/overlord/.prettierrc.js @@ -3,5 +3,5 @@ module.exports = { semi: true, singleQuote: true, bracketSpacing: true, - printWidth: 120 + printWidth: 120, }; diff --git a/overlord/angular.json b/overlord/angular.json index c85f42b2..9cc2805d 100644 --- a/overlord/angular.json +++ b/overlord/angular.json @@ -18,21 +18,15 @@ "prefix": "app", "architect": { "build": { - "builder": "@angular-devkit/build-angular:application", + "builder": "@angular/build:application", "options": { "outputPath": { "base": "../frontend" }, "index": "src/index.html", "tsConfig": "tsconfig.app.json", - "assets": [ - "src/favicon.ico", - "src/assets" - ], - "styles": [ - "@angular/material/prebuilt-themes/azure-blue.css", - "src/styles.css" - ], + "assets": ["src/favicon.ico", "src/assets"], + "styles": ["@angular/material/prebuilt-themes/azure-blue.css", "src/styles.css"], "scripts": [], "browser": "src/main.ts" }, @@ -62,7 +56,7 @@ "defaultConfiguration": "production" }, "serve": { - "builder": "@angular-devkit/build-angular:dev-server", + "builder": "@angular/build:dev-server", "configurations": { "production": { "buildTarget": "overlord:build:production" @@ -77,43 +71,58 @@ "defaultConfiguration": "development" }, "extract-i18n": { - "builder": "@angular-devkit/build-angular:extract-i18n", + "builder": "@angular/build:extract-i18n", "options": { "buildTarget": "overlord:build" } }, "test": { - "builder": "@angular-devkit/build-angular:karma", + "builder": "@angular/build:karma", "options": { "tsConfig": "tsconfig.spec.json", "inlineStyleLanguage": "scss", - "assets": [ - "src/favicon.ico", - "src/assets" - ], - "styles": [ - "@angular/material/prebuilt-themes/indigo-pink.css", - "src/styles.css" - ], + "assets": ["src/favicon.ico", "src/assets"], + "styles": ["@angular/material/prebuilt-themes/indigo-pink.css", "src/styles.css"], "scripts": [] } }, "lint": { "builder": "@angular-eslint/builder:lint", "options": { - "lintFilePatterns": [ - "src/**/*.ts", - "src/**/*.html" - ] + "lintFilePatterns": ["src/**/*.ts", "src/**/*.html"] } } } } }, "cli": { - "schematicCollections": [ - "@angular-eslint/schematics" - ], + "schematicCollections": ["@angular-eslint/schematics"], "analytics": false + }, + "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/overlord/e2e/protractor.conf.js b/overlord/e2e/protractor.conf.js index b95b8f5e..284f5a88 100644 --- a/overlord/e2e/protractor.conf.js +++ b/overlord/e2e/protractor.conf.js @@ -5,11 +5,9 @@ const { SpecReporter } = require('jasmine-spec-reporter'); exports.config = { allScriptsTimeout: 11000, - specs: [ - './src/**/*.e2e-spec.ts' - ], + specs: ['./src/**/*.e2e-spec.ts'], capabilities: { - 'browserName': 'chrome' + browserName: 'chrome', }, directConnect: true, baseUrl: 'http://localhost:4200/', @@ -17,12 +15,12 @@ exports.config = { jasmineNodeOpts: { showColors: true, defaultTimeoutInterval: 30000, - print: function() {} + print: function () {}, }, onPrepare() { require('ts-node').register({ - project: require('path').join(__dirname, './tsconfig.json') + project: require('path').join(__dirname, './tsconfig.json'), }); jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); - } + }, }; diff --git a/overlord/e2e/tsconfig.json b/overlord/e2e/tsconfig.json index a6dd6220..22e04cb1 100644 --- a/overlord/e2e/tsconfig.json +++ b/overlord/e2e/tsconfig.json @@ -4,10 +4,6 @@ "outDir": "../out-tsc/app", "module": "commonjs", "target": "es5", - "types": [ - "jasmine", - "jasminewd2", - "node" - ] + "types": ["jasmine", "jasminewd2", "node"] } -} \ No newline at end of file +} diff --git a/overlord/eslint.config.js b/overlord/eslint.config.js index c3b61637..fe9a7b44 100644 --- a/overlord/eslint.config.js +++ b/overlord/eslint.config.js @@ -1,74 +1,70 @@ // @ts-check -const eslint = require("@eslint/js"); -const tseslint = require("typescript-eslint"); -const angular = require("angular-eslint"); -const eslintConfigPrettier = require("eslint-config-prettier"); -// const plugin_import = require("eslint-plugin-import"); -const unusedImports = require("eslint-plugin-unused-imports"); -// const deprecation = require("eslint-plugin-deprecation"); +const eslint = require('@eslint/js'); +const tseslint = require('typescript-eslint'); +const angular = require('angular-eslint'); +const eslintConfigPrettier = require('eslint-config-prettier'); +const unusedImports = require('eslint-plugin-unused-imports'); +const perfectionist = require('eslint-plugin-perfectionist'); module.exports = tseslint.config( { - files: ["**/*.ts"], + files: ['**/*.ts'], extends: [ eslint.configs.recommended, ...tseslint.configs.recommended, ...tseslint.configs.stylistic, ...angular.configs.tsRecommended, - eslintConfigPrettier + eslintConfigPrettier, ], processor: angular.processInlineTemplates, plugins: { unusedImports: unusedImports, + perfectionist: perfectionist, }, rules: { - "@angular-eslint/directive-selector": [ - "error", + '@angular-eslint/directive-selector': [ + 'error', { - type: "attribute", - prefix: "app", - style: "camelCase", + type: 'attribute', + prefix: 'app', + style: 'camelCase', }, ], - "@angular-eslint/component-selector": [ - "error", + '@angular-eslint/component-selector': [ + 'error', { - type: "element", - prefix: "app", - style: "kebab-case", + type: 'element', + prefix: 'app', + style: 'kebab-case', }, ], - "@/lines-between-class-members": [ - "error", - "always", + '@angular-eslint/prefer-inject': 'error', + '@/lines-between-class-members': [ + 'error', + 'always', { - "exceptAfterSingleLine": true - } + exceptAfterSingleLine: true, + }, ], - // "import/order": [ - // "error", - // { - // "alphabetize": { - // "order": "asc", - // "caseInsensitive": true - // }, - // "newlines-between": "always" - // } - // ], - "@typescript-eslint/no-explicit-any": [ - "error" + 'no-duplicate-imports': 'error', + '@typescript-eslint/no-explicit-any': ['error'], + 'unusedImports/no-unused-imports': 'error', + '@typescript-eslint/no-empty-function': 'off', + 'perfectionist/sort-imports': [ + 'error', + { + type: 'natural', + order: 'asc', + }, ], - "unusedImports/no-unused-imports": "error", - "@typescript-eslint/no-empty-function": "off", - // "deprecation/deprecation": "warn" -}, + }, }, { - files: ["**/*.html"], + files: ['**/*.html'], extends: [ ...angular.configs.templateRecommended, // ...angular.configs.templateAccessibility, ], rules: {}, - } + }, ); diff --git a/overlord/package.json b/overlord/package.json index 828c73b6..9be237ca 100644 --- a/overlord/package.json +++ b/overlord/package.json @@ -14,36 +14,40 @@ }, "private": true, "dependencies": { - "@angular/animations": "^18.0.1", - "@angular/cdk": "^18.0.1", - "@angular/common": "^18.0.1", - "@angular/compiler": "^18.0.1", - "@angular/core": "^18.0.1", - "@angular/forms": "^18.0.1", - "@angular/material": "^18.0.1", - "@angular/material-moment-adapter": "^18.0.1", - "@angular/platform-browser": "^18.0.1", - "@angular/platform-browser-dynamic": "^18.0.1", - "@angular/router": "^18.0.1", - "@ngx-loading-bar/core": "^6.0.2", - "@ngx-loading-bar/http-client": "^6.0.2", - "@ngx-loading-bar/router": "^6.0.2", - "mathjs": "^13.0.2", + "@angular/animations": "^20.0.4", + "@angular/cdk": "^20.0.3", + "@angular/common": "^20.0.4", + "@angular/compiler": "^20.0.4", + "@angular/core": "^20.0.4", + "@angular/forms": "^20.0.4", + "@angular/material": "^20.0.3", + "@angular/material-moment-adapter": "^20.0.3", + "@angular/platform-browser": "^20.0.4", + "@angular/platform-browser-dynamic": "^20.0.4", + "@angular/router": "^20.0.4", + "@ngx-loading-bar/core": "^7.0.0", + "@ngx-loading-bar/http-client": "^7.0.0", + "@ngx-loading-bar/router": "^7.0.0", + "mathjs": "^14.5.2", "moment": "^2.30.1", "rxjs": "~7.8.0", "tslib": "^2.6.0" }, "devDependencies": { - "@angular-devkit/build-angular": "^18.0.2", - "@angular/cli": "^18.0.2", - "@angular/compiler-cli": "^18.0.1", - "@angular/language-service": "^18.0.1", + "@angular/build": "^20.0.3", + "@angular/cli": "^20.0.3", + "@angular/compiler-cli": "^20.0.4", + "@angular/language-service": "^20.0.4", + "@tailwindcss/postcss": "^4.1.10", "@types/jasmine": "~5.1.4", - "angular-eslint": "^18.0.1", + "angular-eslint": "^20.1.1", "autoprefixer": "^10.4.19", - "eslint": "^9.6.0", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-unused-imports": "^4.0.0", + "eslint": "^9.28.0", + "eslint-config-prettier": "^10.1.5", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-perfectionist": "^4.15.0", + "eslint-plugin-simple-import-sort": "^12.1.1", + "eslint-plugin-unused-imports": "^4.1.4", "husky": "^9.0.11", "jasmine-core": "~5.1.0", "karma": "^6.4.2", @@ -51,17 +55,13 @@ "karma-coverage": "~2.2.1", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "^2.1.0", - "lint-staged": "^15.2.5", - "postcss": "^8.4.38", + "lint-staged": "^16.1.2", + "postcss": "^8.5.6", "prettier": "^3.2.5", "standard-version": "^9.5.0", - "tailwindcss": "^3.4.3", - "typescript": "~5.4.5", - "typescript-eslint": "^8.0.0-alpha.58" - }, - "removedDevDepForEslint9": { - "eslint-plugin-deprecation": "^3.0.0", - "eslint-plugin-import": "^2.29.1" + "tailwindcss": "^4.1.10", + "typescript": "~5.8.3", + "typescript-eslint": "^8.33.1" }, "husky": { "hooks": { diff --git a/overlord/proxy.conf.json b/overlord/proxy.conf.json index 8bb17e5d..ccc65783 100644 --- a/overlord/proxy.conf.json +++ b/overlord/proxy.conf.json @@ -4,27 +4,27 @@ "secure": false, "logLevel": "debug" }, - "/token": { + "/token": { "target": "http://localhost:9998", "secure": false, "logLevel": "info" }, - "/refresh": { + "/refresh": { "target": "http://localhost:9998", "secure": false, "logLevel": "info" }, - "/attendance-report": { + "/attendance-report": { "target": "http://localhost:9998", "secure": false, "logLevel": "info" }, - "/fingerprint-report": { + "/fingerprint-report": { "target": "http://localhost:9998", "secure": false, "logLevel": "info" }, - "/db-image": { + "/db-image": { "target": "http://localhost:9998", "secure": false, "logLevel": "info" diff --git a/overlord/src/app/account/account-detail/account-detail.component.ts b/overlord/src/app/account/account-detail/account-detail.component.ts index 7e9f7e53..9d561404 100644 --- a/overlord/src/app/account/account-detail/account-detail.component.ts +++ b/overlord/src/app/account/account-detail/account-detail.component.ts @@ -1,35 +1,34 @@ -import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; +import { AfterViewInit, Component, ElementRef, inject, OnInit, ViewChild } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { MatButton } from '@angular/material/button'; import { MatCard, - MatCardHeader, - MatCardTitleGroup, - MatCardTitle, - MatCardContent, MatCardActions, + MatCardContent, + MatCardHeader, + MatCardTitle, + MatCardTitleGroup, } from '@angular/material/card'; import { MatCheckbox } from '@angular/material/checkbox'; import { MatOption } from '@angular/material/core'; import { MatDialog } from '@angular/material/dialog'; -import { MatSuffix, MatFormField, MatLabel } from '@angular/material/form-field'; +import { MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field'; import { MatIcon } from '@angular/material/icon'; import { MatInput } from '@angular/material/input'; import { MatSelect } from '@angular/material/select'; +import { MatSnackBar } from '@angular/material/snack-bar'; import { ActivatedRoute, Router } from '@angular/router'; import { Account } from '../../core/account'; import { AccountType } from '../../core/account-type'; import { AccountService } from '../../core/account.service'; import { CostCentre } from '../../core/cost-centre'; -import { MatSnackBar } from '@angular/material/snack-bar'; import { ConfirmDialogComponent } from '../../shared/confirm-dialog/confirm-dialog.component'; @Component({ selector: 'app-account-detail', templateUrl: './account-detail.component.html', styleUrls: ['./account-detail.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -50,6 +49,12 @@ import { ConfirmDialogComponent } from '../../shared/confirm-dialog/confirm-dial ], }) export class AccountDetailComponent implements OnInit, AfterViewInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + private dialog = inject(MatDialog); + private snackBar = inject(MatSnackBar); + private ser = inject(AccountService); + @ViewChild('nameElement', { static: true }) nameElement!: ElementRef; form: FormGroup<{ code: FormControl; @@ -64,13 +69,7 @@ export class AccountDetailComponent implements OnInit, AfterViewInit { costCentres: CostCentre[] = []; item: Account = new Account(); - constructor( - private route: ActivatedRoute, - private router: Router, - private dialog: MatDialog, - private snackBar: MatSnackBar, - private ser: AccountService, - ) { + constructor() { this.form = new FormGroup({ code: new FormControl({ value: 0, disabled: true }, { nonNullable: true }), name: new FormControl(null), diff --git a/overlord/src/app/account/account-list.resolver.spec.ts b/overlord/src/app/account/account-list.resolver.spec.ts index 6aa7673c..3dd49161 100644 --- a/overlord/src/app/account/account-list.resolver.spec.ts +++ b/overlord/src/app/account/account-list.resolver.spec.ts @@ -2,7 +2,6 @@ import { TestBed } from '@angular/core/testing'; import { ResolveFn } from '@angular/router'; import { Account } from '../core/account'; - import { accountListResolver } from './account-list.resolver'; describe('accountListResolver', () => { diff --git a/overlord/src/app/account/account-list/account-list.component.ts b/overlord/src/app/account/account-list/account-list.component.ts index dbc91b13..39d0f30c 100644 --- a/overlord/src/app/account/account-list/account-list.component.ts +++ b/overlord/src/app/account/account-list/account-list.component.ts @@ -1,23 +1,23 @@ -import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; +import { AfterViewInit, Component, ElementRef, inject, OnInit, ViewChild } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { MatAnchor } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitleGroup, MatCardTitle, MatCardContent } from '@angular/material/card'; +import { MatCard, MatCardContent, MatCardHeader, MatCardTitle, MatCardTitleGroup } from '@angular/material/card'; import { MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field'; import { MatIcon } from '@angular/material/icon'; import { MatInput } from '@angular/material/input'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort, MatSortHeader } from '@angular/material/sort'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatHeaderRowDef, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, MatHeaderRow, - MatRowDef, + MatHeaderRowDef, MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, RouterLink } from '@angular/router'; import { Observable } from 'rxjs'; @@ -25,14 +25,12 @@ import { debounceTime, distinctUntilChanged } from 'rxjs/operators'; import { Account } from '../../core/account'; import { AccountType } from '../../core/account-type'; - import { AccountListDataSource } from './account-list-datasource'; @Component({ selector: 'app-account-list', templateUrl: './account-list.component.html', styleUrls: ['./account-list.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -63,6 +61,8 @@ import { AccountListDataSource } from './account-list-datasource'; ], }) export class AccountListComponent implements OnInit, AfterViewInit { + private route = inject(ActivatedRoute); + @ViewChild('filterElement', { static: true }) filterElement!: ElementRef; @ViewChild(MatPaginator, { static: true }) paginator!: MatPaginator; @ViewChild(MatSort, { static: true }) sort!: MatSort; @@ -78,7 +78,7 @@ export class AccountListComponent implements OnInit, AfterViewInit { /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = ['name', 'type', 'isActive', 'isReconcilable', 'costCentre']; - constructor(private route: ActivatedRoute) { + constructor() { this.form = new FormGroup({ filter: new FormControl('', { nonNullable: true }), }); diff --git a/overlord/src/app/account/account-type.resolver.spec.ts b/overlord/src/app/account/account-type.resolver.spec.ts index 7233f17d..fed2bb2b 100644 --- a/overlord/src/app/account/account-type.resolver.spec.ts +++ b/overlord/src/app/account/account-type.resolver.spec.ts @@ -2,7 +2,6 @@ import { TestBed } from '@angular/core/testing'; import { ResolveFn } from '@angular/router'; import { AccountType } from '../core/account-type'; - import { accountTypeResolver } from './account-type.resolver'; describe('accountTypeResolver', () => { diff --git a/overlord/src/app/account/account-type.resolver.ts b/overlord/src/app/account/account-type.resolver.ts index ae82ffb6..0b330b59 100644 --- a/overlord/src/app/account/account-type.resolver.ts +++ b/overlord/src/app/account/account-type.resolver.ts @@ -2,7 +2,6 @@ import { inject } from '@angular/core'; import { ResolveFn } from '@angular/router'; import { AccountType } from '../core/account-type'; - import { AccountTypeService } from './account-type.service'; export const accountTypeResolver: ResolveFn = () => { diff --git a/overlord/src/app/account/account-type.service.ts b/overlord/src/app/account/account-type.service.ts index 18db7360..627b7103 100644 --- a/overlord/src/app/account/account-type.service.ts +++ b/overlord/src/app/account/account-type.service.ts @@ -1,5 +1,5 @@ import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; @@ -13,10 +13,8 @@ const serviceName = 'AccountTypeService'; providedIn: 'root', }) export class AccountTypeService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); list(): Observable { return this.http.get(url).pipe(catchError(this.log.handleError(serviceName, 'list'))) as Observable< diff --git a/overlord/src/app/account/account.resolver.spec.ts b/overlord/src/app/account/account.resolver.spec.ts index 2eb812a8..b1097a8d 100644 --- a/overlord/src/app/account/account.resolver.spec.ts +++ b/overlord/src/app/account/account.resolver.spec.ts @@ -2,7 +2,6 @@ import { TestBed } from '@angular/core/testing'; import { ResolveFn } from '@angular/router'; import { Account } from '../core/account'; - import { accountResolver } from './account.resolver'; describe('accountResolver', () => { diff --git a/overlord/src/app/account/account.routes.ts b/overlord/src/app/account/account.routes.ts index 8388ebf7..7ddcd88b 100644 --- a/overlord/src/app/account/account.routes.ts +++ b/overlord/src/app/account/account.routes.ts @@ -2,10 +2,9 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; import { costCentreListResolver } from '../cost-centre/cost-centre-list.resolver'; - import { AccountDetailComponent } from './account-detail/account-detail.component'; -import { AccountListComponent } from './account-list/account-list.component'; import { accountListResolver } from './account-list.resolver'; +import { AccountListComponent } from './account-list/account-list.component'; import { accountTypeResolver } from './account-type.resolver'; import { accountResolver } from './account.resolver'; diff --git a/overlord/src/app/app.component.ts b/overlord/src/app/app.component.ts index f7d2a345..dcd87b25 100644 --- a/overlord/src/app/app.component.ts +++ b/overlord/src/app/app.component.ts @@ -8,7 +8,6 @@ import { NavBarComponent } from './core/nav-bar/nav-bar.component'; selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'], - standalone: true, imports: [LoadingBarModule, NavBarComponent, RouterOutlet], }) export class AppComponent { diff --git a/overlord/src/app/app.config.ts b/overlord/src/app/app.config.ts index 0686137c..b5bbfbf8 100644 --- a/overlord/src/app/app.config.ts +++ b/overlord/src/app/app.config.ts @@ -1,12 +1,8 @@ import { LayoutModule } from '@angular/cdk/layout'; import { provideHttpClient, withInterceptors } from '@angular/common/http'; -import { - LOCALE_ID, - importProvidersFrom, - ApplicationConfig, - provideExperimentalZonelessChangeDetection, -} from '@angular/core'; +import { ApplicationConfig, importProvidersFrom, LOCALE_ID, provideZonelessChangeDetection } from '@angular/core'; import { ReactiveFormsModule } from '@angular/forms'; +import { MomentDateAdapter } from '@angular/material-moment-adapter'; import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; import { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '@angular/material/core'; @@ -22,7 +18,6 @@ import { MAT_SNACK_BAR_DEFAULT_OPTIONS, MatSnackBarModule } from '@angular/mater import { MatSortModule } from '@angular/material/sort'; import { MatTableModule } from '@angular/material/table'; import { MatToolbarModule } from '@angular/material/toolbar'; -import { MomentDateAdapter } from '@angular/material-moment-adapter'; import { BrowserModule } from '@angular/platform-browser'; import { provideAnimations } from '@angular/platform-browser/animations'; import { provideRouter, withRouterConfig } from '@angular/router'; @@ -68,6 +63,6 @@ export const appConfig: ApplicationConfig = { { provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE] }, { provide: MAT_DATE_FORMATS, useValue: dateFormat }, { provide: MAT_SNACK_BAR_DEFAULT_OPTIONS, useValue: { duration: 3000 } }, - provideExperimentalZonelessChangeDetection(), + provideZonelessChangeDetection(), ], }; diff --git a/overlord/src/app/attendance/attendance-type.service.ts b/overlord/src/app/attendance/attendance-type.service.ts index ada42d78..dd7dec39 100644 --- a/overlord/src/app/attendance/attendance-type.service.ts +++ b/overlord/src/app/attendance/attendance-type.service.ts @@ -1,10 +1,9 @@ import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; import { ErrorLoggerService } from '../core/error-logger.service'; - import { AttendanceType } from './attendance-type'; const url = '/api/attendance-types'; @@ -12,10 +11,8 @@ const serviceName = 'AttendanceTypeService'; @Injectable({ providedIn: 'root' }) export class AttendanceTypeService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); list(): Observable { return this.http diff --git a/overlord/src/app/attendance/attendance.component.ts b/overlord/src/app/attendance/attendance.component.ts index 0c389a0a..0e28cb31 100644 --- a/overlord/src/app/attendance/attendance.component.ts +++ b/overlord/src/app/attendance/attendance.component.ts @@ -1,48 +1,43 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, ElementRef, HostListener, inject, OnInit, ViewChild } from '@angular/core'; import { FormArray, FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { MatButton } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitle, MatCardContent, MatCardActions } from '@angular/material/card'; -import { MatChipSet, MatChipOption } from '@angular/material/chips'; +import { MatCard, MatCardActions, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card'; +import { MatChipOption, MatChipSet } from '@angular/material/chips'; import { MatOption } from '@angular/material/core'; -import { MatDatepickerInput, MatDatepickerToggle, MatDatepicker } from '@angular/material/datepicker'; +import { MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from '@angular/material/datepicker'; import { MatDialog } from '@angular/material/dialog'; import { MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field'; import { MatIcon } from '@angular/material/icon'; import { MatInput } from '@angular/material/input'; import { MatSelect } from '@angular/material/select'; +import { MatSnackBar } from '@angular/material/snack-bar'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatHeaderRowDef, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, MatHeaderRow, - MatRowDef, + MatHeaderRowDef, MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, Router } from '@angular/router'; import moment from 'moment'; import { BehaviorSubject } from 'rxjs'; import { AuthService } from '../auth/auth.service'; -import { MatSnackBar } from '@angular/material/snack-bar'; - import { Attendance } from './attendance'; import { AttendanceDataSource } from './attendance-datasource'; import { AttendanceItem } from './attendance-item'; import { AttendanceType } from './attendance-type'; import { AttendanceService } from './attendance.service'; -import { ViewChild } from '@angular/core'; -import { ElementRef } from '@angular/core'; -import { HostListener } from '@angular/core'; @Component({ selector: 'app-attendance', templateUrl: './attendance.component.html', styleUrls: ['./attendance.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -76,6 +71,13 @@ import { HostListener } from '@angular/core'; ], }) export class AttendanceComponent implements OnInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + private dialog = inject(MatDialog); + private snackBar = inject(MatSnackBar); + private auth = inject(AuthService); + private ser = inject(AttendanceService); + @ViewChild('dateElement', { static: false }) dateElement!: ElementRef; public attendanceObservable = new BehaviorSubject([]); dataSource: AttendanceDataSource = new AttendanceDataSource(this.attendanceObservable); @@ -100,14 +102,7 @@ export class AttendanceComponent implements OnInit { this.dateElement.nativeElement.select(); } - constructor( - private route: ActivatedRoute, - private router: Router, - private dialog: MatDialog, - private snackBar: MatSnackBar, - private auth: AuthService, - private ser: AttendanceService, - ) { + constructor() { this.form = new FormGroup({ date: new FormControl(new Date(), { nonNullable: true }), attendances: new FormArray }>>([]), diff --git a/overlord/src/app/attendance/attendance.routes.ts b/overlord/src/app/attendance/attendance.routes.ts index 8d9d93f7..6aa62067 100644 --- a/overlord/src/app/attendance/attendance.routes.ts +++ b/overlord/src/app/attendance/attendance.routes.ts @@ -1,7 +1,6 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; - import { attendanceTypeResolver } from './attendance-type.resolver'; import { AttendanceComponent } from './attendance.component'; import { attendanceResolver } from './attendance.resolver'; diff --git a/overlord/src/app/attendance/attendance.service.ts b/overlord/src/app/attendance/attendance.service.ts index 677d0640..95466f91 100644 --- a/overlord/src/app/attendance/attendance.service.ts +++ b/overlord/src/app/attendance/attendance.service.ts @@ -1,10 +1,9 @@ import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; import { ErrorLoggerService } from '../core/error-logger.service'; - import { Attendance } from './attendance'; const url = '/api/attendance'; @@ -12,10 +11,8 @@ const serviceName = 'AttendanceService'; @Injectable({ providedIn: 'root' }) export class AttendanceService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); get(date: string | null): Observable { const getUrl: string = date === null ? url : `${url}/${date}`; diff --git a/overlord/src/app/auth/auth-guard.service.ts b/overlord/src/app/auth/auth-guard.service.ts index 63af9b28..a3569db5 100644 --- a/overlord/src/app/auth/auth-guard.service.ts +++ b/overlord/src/app/auth/auth-guard.service.ts @@ -1,8 +1,6 @@ import { inject } from '@angular/core'; -import { CanActivateFn } from '@angular/router'; -import { Router } from '@angular/router'; - import { MatSnackBar } from '@angular/material/snack-bar'; +import { CanActivateFn, Router } from '@angular/router'; import { AuthService } from './auth.service'; diff --git a/overlord/src/app/auth/auth.service.ts b/overlord/src/app/auth/auth.service.ts index af18a985..ba3a0c00 100644 --- a/overlord/src/app/auth/auth.service.ts +++ b/overlord/src/app/auth/auth.service.ts @@ -1,5 +1,5 @@ import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { BehaviorSubject, Observable } from 'rxjs'; import { map } from 'rxjs/operators'; @@ -12,11 +12,13 @@ const JWT_USER = 'JWT_USER'; @Injectable({ providedIn: 'root' }) export class AuthService { + private http = inject(HttpClient); + public currentUser: Observable; private currentUserSubject: BehaviorSubject = new BehaviorSubject(null); public isRefreshing = false; - constructor(private http: HttpClient) { + constructor() { this.checkStorage(); this.currentUser = this.currentUserSubject.asObservable(); } diff --git a/overlord/src/app/auth/login/login.component.ts b/overlord/src/app/auth/login/login.component.ts index 224c3699..edd6be7e 100644 --- a/overlord/src/app/auth/login/login.component.ts +++ b/overlord/src/app/auth/login/login.component.ts @@ -1,14 +1,14 @@ -import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; -import { FormControl, FormGroup, Validators, ReactiveFormsModule } from '@angular/forms'; +import { AfterViewInit, Component, ElementRef, inject, OnInit, ViewChild } from '@angular/core'; +import { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms'; import { MatButton } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitle, MatCardContent, MatCardActions } from '@angular/material/card'; +import { MatCard, MatCardActions, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card'; import { MatDivider } from '@angular/material/divider'; import { MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field'; import { MatIcon } from '@angular/material/icon'; import { MatInput } from '@angular/material/input'; +import { MatSnackBar } from '@angular/material/snack-bar'; import { ActivatedRoute, Router } from '@angular/router'; -import { MatSnackBar } from '@angular/material/snack-bar'; import { CookieService } from '../../shared/cookie.service'; import { AuthService } from '../auth.service'; @@ -16,7 +16,6 @@ import { AuthService } from '../auth.service'; selector: 'app-login', templateUrl: './login.component.html', styleUrls: ['./login.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -34,6 +33,12 @@ import { AuthService } from '../auth.service'; ], }) export class LoginComponent implements OnInit, AfterViewInit { + private route = inject(ActivatedRoute); + private auth = inject(AuthService); + private router = inject(Router); + private snackBar = inject(MatSnackBar); + private cs = inject(CookieService); + @ViewChild('nameElement', { static: true }) nameElement!: ElementRef; form: FormGroup<{ username: FormControl; @@ -46,13 +51,7 @@ export class LoginComponent implements OnInit, AfterViewInit { clientId = ''; private returnUrl = ''; - constructor( - private route: ActivatedRoute, - private auth: AuthService, - private router: Router, - private snackBar: MatSnackBar, - private cs: CookieService, - ) { + constructor() { this.hide = true; this.showOtp = false; this.form = new FormGroup({ diff --git a/overlord/src/app/auth/logout/logout.component.ts b/overlord/src/app/auth/logout/logout.component.ts index 4f166f7c..ccb72bcf 100644 --- a/overlord/src/app/auth/logout/logout.component.ts +++ b/overlord/src/app/auth/logout/logout.component.ts @@ -1,7 +1,7 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, inject, OnInit } from '@angular/core'; +import { MatSnackBar } from '@angular/material/snack-bar'; import { Router } from '@angular/router'; -import { MatSnackBar } from '@angular/material/snack-bar'; import { AuthService } from '../auth.service'; @Component({ @@ -10,11 +10,9 @@ import { AuthService } from '../auth.service'; standalone: true, }) export class LogoutComponent implements OnInit { - constructor( - private auth: AuthService, - private router: Router, - private snackBar: MatSnackBar, - ) {} + private auth = inject(AuthService); + private router = inject(Router); + private snackBar = inject(MatSnackBar); ngOnInit() { this.auth.logout(); diff --git a/overlord/src/app/balance-sheet/balance-sheet.component.ts b/overlord/src/app/balance-sheet/balance-sheet.component.ts index ce816232..48ba180b 100644 --- a/overlord/src/app/balance-sheet/balance-sheet.component.ts +++ b/overlord/src/app/balance-sheet/balance-sheet.component.ts @@ -1,34 +1,33 @@ import { CurrencyPipe } from '@angular/common'; -import { Component, ElementRef, HostListener, OnInit, ViewChild } from '@angular/core'; +import { Component, ElementRef, HostListener, inject, OnInit, ViewChild } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { MatButton } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitle, MatCardContent } from '@angular/material/card'; -import { MatDatepickerInput, MatDatepickerToggle, MatDatepicker } from '@angular/material/datepicker'; +import { MatCard, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card'; +import { MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from '@angular/material/datepicker'; import { MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field'; import { MatInput } from '@angular/material/input'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort, MatSortHeader } from '@angular/material/sort'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatFooterCellDef, + MatCellDef, + MatColumnDef, MatFooterCell, - MatHeaderRowDef, - MatHeaderRow, - MatRowDef, - MatRow, - MatFooterRowDef, + MatFooterCellDef, MatFooterRow, + MatFooterRowDef, + MatHeaderCell, + MatHeaderCellDef, + MatHeaderRow, + MatHeaderRowDef, + MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, Router } from '@angular/router'; import moment from 'moment'; import { ClearPipe } from '../shared/clear.pipe'; - import { BalanceSheet } from './balance-sheet'; import { BalanceSheetDataSource } from './balance-sheet-datasource'; @@ -36,7 +35,6 @@ import { BalanceSheetDataSource } from './balance-sheet-datasource'; selector: 'app-balance-sheet', templateUrl: './balance-sheet.component.html', styleUrls: ['./balance-sheet.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -73,6 +71,9 @@ import { BalanceSheetDataSource } from './balance-sheet-datasource'; ], }) export class BalanceSheetComponent implements OnInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + @ViewChild(MatPaginator, { static: true }) paginator!: MatPaginator; @ViewChild(MatSort, { static: true }) sort!: MatSort; @ViewChild('dateElement', { static: true }) dateElement!: ElementRef; @@ -92,10 +93,7 @@ export class BalanceSheetComponent implements OnInit { this.dateElement.nativeElement.select(); } - constructor( - private route: ActivatedRoute, - private router: Router, - ) { + constructor() { this.form = new FormGroup({ date: new FormControl(new Date(), { nonNullable: true }), }); diff --git a/overlord/src/app/balance-sheet/balance-sheet.routes.ts b/overlord/src/app/balance-sheet/balance-sheet.routes.ts index da4178c4..8dea4e4e 100644 --- a/overlord/src/app/balance-sheet/balance-sheet.routes.ts +++ b/overlord/src/app/balance-sheet/balance-sheet.routes.ts @@ -1,7 +1,6 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; - import { BalanceSheetComponent } from './balance-sheet.component'; import { balanceSheetResolver } from './balance-sheet.resolver'; diff --git a/overlord/src/app/balance-sheet/balance-sheet.service.ts b/overlord/src/app/balance-sheet/balance-sheet.service.ts index ca404000..69674ae4 100644 --- a/overlord/src/app/balance-sheet/balance-sheet.service.ts +++ b/overlord/src/app/balance-sheet/balance-sheet.service.ts @@ -1,10 +1,9 @@ import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; import { ErrorLoggerService } from '../core/error-logger.service'; - import { BalanceSheet } from './balance-sheet'; const url = '/api/balance-sheet'; @@ -14,10 +13,8 @@ const serviceName = 'BalanceSheetService'; providedIn: 'root', }) export class BalanceSheetService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); list(date: string | null): Observable { const listUrl = date === null ? url : `${url}/${date}`; diff --git a/overlord/src/app/batch-integrity-report/batch-integrity-report.component.ts b/overlord/src/app/batch-integrity-report/batch-integrity-report.component.ts index a5ae0583..cc5be18f 100644 --- a/overlord/src/app/batch-integrity-report/batch-integrity-report.component.ts +++ b/overlord/src/app/batch-integrity-report/batch-integrity-report.component.ts @@ -1,17 +1,17 @@ import { CurrencyPipe } from '@angular/common'; -import { Component, OnInit } from '@angular/core'; -import { MatCard, MatCardHeader, MatCardTitle, MatCardContent } from '@angular/material/card'; +import { Component, inject, OnInit } from '@angular/core'; +import { MatCard, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatHeaderRowDef, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, MatHeaderRow, - MatRowDef, + MatHeaderRowDef, MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, Router, RouterLink } from '@angular/router'; @@ -22,7 +22,6 @@ import { BatchIntegrityReportDatasource } from './batch-integrity-report-datasou selector: 'app-batch-integrity', templateUrl: './batch-integrity-report.component.html', styleUrls: ['./batch-integrity-report.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -43,15 +42,13 @@ import { BatchIntegrityReportDatasource } from './batch-integrity-report-datasou ], }) export class BatchIntegrityReportComponent implements OnInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + info: BatchIntegrity[] = []; dataSource: BatchIntegrityReportDatasource = new BatchIntegrityReportDatasource(this.info); displayedColumns = ['batch', 'details']; - constructor( - private route: ActivatedRoute, - private router: Router, - ) {} - ngOnInit() { this.route.data.subscribe((value) => { const data = value as { info: BatchIntegrity[] }; diff --git a/overlord/src/app/batch-integrity-report/batch-integrity-report.routes.ts b/overlord/src/app/batch-integrity-report/batch-integrity-report.routes.ts index 6cd5ab41..93234b23 100644 --- a/overlord/src/app/batch-integrity-report/batch-integrity-report.routes.ts +++ b/overlord/src/app/batch-integrity-report/batch-integrity-report.routes.ts @@ -1,7 +1,6 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; - import { BatchIntegrityReportComponent } from './batch-integrity-report.component'; import { batchIntegrityResolver } from './batch-integrity.resolver'; diff --git a/overlord/src/app/batch-integrity-report/batch-integrity-report.service.ts b/overlord/src/app/batch-integrity-report/batch-integrity-report.service.ts index 0e08c7e5..b870e04d 100644 --- a/overlord/src/app/batch-integrity-report/batch-integrity-report.service.ts +++ b/overlord/src/app/batch-integrity-report/batch-integrity-report.service.ts @@ -1,10 +1,9 @@ import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; import { ErrorLoggerService } from '../core/error-logger.service'; - import { BatchIntegrity } from './batch-integrity'; const serviceName = 'BatchIntegrityReportService'; @@ -13,10 +12,8 @@ const serviceName = 'BatchIntegrityReportService'; providedIn: 'root', }) export class BatchIntegrityReportService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); batchIntegrity(): Observable { const url = '/api/batch-integrity'; diff --git a/overlord/src/app/cash-flow/cash-flow.component.ts b/overlord/src/app/cash-flow/cash-flow.component.ts index 74c0f4d0..4063fb5a 100644 --- a/overlord/src/app/cash-flow/cash-flow.component.ts +++ b/overlord/src/app/cash-flow/cash-flow.component.ts @@ -1,29 +1,28 @@ import { CurrencyPipe } from '@angular/common'; -import { Component, ElementRef, HostListener, OnInit, ViewChild } from '@angular/core'; +import { Component, ElementRef, HostListener, inject, OnInit, ViewChild } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { MatButton } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitle, MatCardContent } from '@angular/material/card'; -import { MatDatepickerInput, MatDatepickerToggle, MatDatepicker } from '@angular/material/datepicker'; +import { MatCard, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card'; +import { MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from '@angular/material/datepicker'; import { MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field'; import { MatInput } from '@angular/material/input'; import { MatSort, MatSortHeader } from '@angular/material/sort'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatHeaderRowDef, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, MatHeaderRow, - MatRowDef, + MatHeaderRowDef, MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, Router, RouterLink } from '@angular/router'; import moment from 'moment'; import { ClearPipe } from '../shared/clear.pipe'; - import { CashFlow } from './cash-flow'; import { CashFlowDataSource } from './cash-flow-datasource'; @@ -31,7 +30,6 @@ import { CashFlowDataSource } from './cash-flow-datasource'; selector: 'app-cash-flow', templateUrl: './cash-flow.component.html', styleUrls: ['./cash-flow.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -64,6 +62,9 @@ import { CashFlowDataSource } from './cash-flow-datasource'; ], }) export class CashFlowComponent implements OnInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + @ViewChild('startDateElement', { static: true }) startDate!: ElementRef; info: CashFlow = new CashFlow(); dataSource: CashFlowDataSource = new CashFlowDataSource(CashFlow.Data(this.info)); @@ -82,10 +83,7 @@ export class CashFlowComponent implements OnInit { this.startDate.nativeElement.select(); } - constructor( - private route: ActivatedRoute, - private router: Router, - ) { + constructor() { this.form = new FormGroup({ startDate: new FormControl(new Date(), { nonNullable: true }), finishDate: new FormControl(new Date(), { nonNullable: true }), diff --git a/overlord/src/app/cash-flow/cash-flow.routes.ts b/overlord/src/app/cash-flow/cash-flow.routes.ts index 44b29cfa..b5022a41 100644 --- a/overlord/src/app/cash-flow/cash-flow.routes.ts +++ b/overlord/src/app/cash-flow/cash-flow.routes.ts @@ -1,7 +1,6 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; - import { CashFlowComponent } from './cash-flow.component'; import { cashFlowResolver } from './cash-flow.resolver'; diff --git a/overlord/src/app/cash-flow/cash-flow.service.ts b/overlord/src/app/cash-flow/cash-flow.service.ts index e945e792..9c920cc1 100644 --- a/overlord/src/app/cash-flow/cash-flow.service.ts +++ b/overlord/src/app/cash-flow/cash-flow.service.ts @@ -1,10 +1,9 @@ import { HttpClient, HttpParams } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; import { ErrorLoggerService } from '../core/error-logger.service'; - import { CashFlow } from './cash-flow'; const url = '/api/cash-flow'; @@ -14,10 +13,8 @@ const serviceName = 'CashFlowService'; providedIn: 'root', }) export class CashFlowService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); list(id: string | null, startDate: string | null, finishDate: string | null): Observable { const options = { params: new HttpParams() }; diff --git a/overlord/src/app/client/client-detail/client-detail.component.ts b/overlord/src/app/client/client-detail/client-detail.component.ts index c3c5c7ae..d5271e60 100644 --- a/overlord/src/app/client/client-detail/client-detail.component.ts +++ b/overlord/src/app/client/client-detail/client-detail.component.ts @@ -1,14 +1,14 @@ -import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; +import { AfterViewInit, Component, ElementRef, inject, OnInit, ViewChild } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { MatButton } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitle, MatCardContent, MatCardActions } from '@angular/material/card'; +import { MatCard, MatCardActions, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card'; import { MatCheckbox } from '@angular/material/checkbox'; import { MatDialog } from '@angular/material/dialog'; import { MatFormField, MatLabel } from '@angular/material/form-field'; import { MatInput } from '@angular/material/input'; +import { MatSnackBar } from '@angular/material/snack-bar'; import { ActivatedRoute, Router } from '@angular/router'; -import { MatSnackBar } from '@angular/material/snack-bar'; import { ConfirmDialogComponent } from '../../shared/confirm-dialog/confirm-dialog.component'; import { Client } from '../client'; import { ClientService } from '../client.service'; @@ -17,7 +17,6 @@ import { ClientService } from '../client.service'; selector: 'app-client-detail', templateUrl: './client-detail.component.html', styleUrls: ['./client-detail.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -33,6 +32,12 @@ import { ClientService } from '../client.service'; ], }) export class ClientDetailComponent implements OnInit, AfterViewInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + private dialog = inject(MatDialog); + private snackBar = inject(MatSnackBar); + private ser = inject(ClientService); + @ViewChild('nameElement', { static: true }) nameElement!: ElementRef; form: FormGroup<{ code: FormControl; @@ -43,13 +48,7 @@ export class ClientDetailComponent implements OnInit, AfterViewInit { item: Client = new Client(); - constructor( - private route: ActivatedRoute, - private router: Router, - private dialog: MatDialog, - private snackBar: MatSnackBar, - private ser: ClientService, - ) { + constructor() { this.form = new FormGroup({ code: new FormControl({ value: '(Auto)', disabled: true }, { nonNullable: true }), name: new FormControl(null), diff --git a/overlord/src/app/client/client-list/client-list.component.ts b/overlord/src/app/client/client-list/client-list.component.ts index 27319191..c87e1168 100644 --- a/overlord/src/app/client/client-list/client-list.component.ts +++ b/overlord/src/app/client/client-list/client-list.component.ts @@ -1,31 +1,29 @@ -import { Component, OnInit, ViewChild } from '@angular/core'; -import { MatCard, MatCardHeader, MatCardTitle, MatCardContent } from '@angular/material/card'; +import { Component, inject, OnInit, ViewChild } from '@angular/core'; +import { MatCard, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort, MatSortHeader } from '@angular/material/sort'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatHeaderRowDef, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, MatHeaderRow, - MatRowDef, + MatHeaderRowDef, MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, RouterLink } from '@angular/router'; import { LocalTimePipe } from '../../shared/local-time.pipe'; import { Client } from '../client'; - import { ClientListDataSource } from './client-list-datasource'; @Component({ selector: 'app-client-list', templateUrl: './client-list.component.html', styleUrls: ['./client-list.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -49,6 +47,8 @@ import { ClientListDataSource } from './client-list-datasource'; ], }) export class ClientListComponent implements OnInit { + private route = inject(ActivatedRoute); + @ViewChild(MatPaginator, { static: true }) paginator!: MatPaginator; @ViewChild(MatSort, { static: true }) sort!: MatSort; list: Client[] = []; @@ -56,8 +56,6 @@ export class ClientListComponent implements OnInit { /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = ['code', 'name', 'enabled', 'otp', 'created', 'last']; - constructor(private route: ActivatedRoute) {} - ngOnInit() { this.route.data.subscribe((value) => { const data = value as { list: Client[] }; diff --git a/overlord/src/app/client/client.routes.ts b/overlord/src/app/client/client.routes.ts index cd8e6573..80ecdb18 100644 --- a/overlord/src/app/client/client.routes.ts +++ b/overlord/src/app/client/client.routes.ts @@ -1,10 +1,9 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; - import { ClientDetailComponent } from './client-detail/client-detail.component'; -import { ClientListComponent } from './client-list/client-list.component'; import { clientListResolver } from './client-list.resolver'; +import { ClientListComponent } from './client-list/client-list.component'; import { clientResolver } from './client.resolver'; export const routes: Routes = [ diff --git a/overlord/src/app/client/client.service.ts b/overlord/src/app/client/client.service.ts index 707d5ff3..39ab5e1e 100644 --- a/overlord/src/app/client/client.service.ts +++ b/overlord/src/app/client/client.service.ts @@ -1,10 +1,9 @@ import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; import { ErrorLoggerService } from '../core/error-logger.service'; - import { Client } from './client'; const url = '/api/clients'; @@ -14,10 +13,8 @@ const serviceName = 'ClientService'; providedIn: 'root', }) export class ClientService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); get(id: string | null): Observable { const getUrl: string = id === null ? url : `${url}/${id}`; diff --git a/overlord/src/app/closing-stock/closing-stock.component.ts b/overlord/src/app/closing-stock/closing-stock.component.ts index d0cb268f..5ebcec79 100644 --- a/overlord/src/app/closing-stock/closing-stock.component.ts +++ b/overlord/src/app/closing-stock/closing-stock.component.ts @@ -1,46 +1,45 @@ -import { DecimalPipe, CurrencyPipe } from '@angular/common'; -import { Component, ElementRef, HostListener, OnInit, ViewChild } from '@angular/core'; -import { FormGroup, FormArray, FormControl, ReactiveFormsModule } from '@angular/forms'; -import { MatIconButton, MatButton } from '@angular/material/button'; +import { CurrencyPipe, DecimalPipe } from '@angular/common'; +import { Component, ElementRef, HostListener, inject, OnInit, ViewChild } from '@angular/core'; +import { FormArray, FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; +import { MatButton, MatIconButton } from '@angular/material/button'; import { MatCard, - MatCardHeader, - MatCardTitleGroup, - MatCardTitle, - MatCardContent, MatCardActions, + MatCardContent, + MatCardHeader, + MatCardTitle, + MatCardTitleGroup, } from '@angular/material/card'; import { MatOption } from '@angular/material/core'; -import { MatDatepickerInput, MatDatepickerToggle, MatDatepicker } from '@angular/material/datepicker'; +import { MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from '@angular/material/datepicker'; import { MatDialog } from '@angular/material/dialog'; import { MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field'; import { MatIcon } from '@angular/material/icon'; import { MatInput } from '@angular/material/input'; import { MatPaginator } from '@angular/material/paginator'; -import { MatSelectChange, MatSelect } from '@angular/material/select'; +import { MatSelect, MatSelectChange } from '@angular/material/select'; +import { MatSnackBar } from '@angular/material/snack-bar'; import { MatSort, MatSortHeader } from '@angular/material/sort'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatHeaderRowDef, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, MatHeaderRow, - MatRowDef, + MatHeaderRowDef, MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, Router } from '@angular/router'; import moment from 'moment'; import { AuthService } from '../auth/auth.service'; import { CostCentre } from '../core/cost-centre'; -import { MatSnackBar } from '@angular/material/snack-bar'; import { User } from '../core/user'; import { ConfirmDialogComponent } from '../shared/confirm-dialog/confirm-dialog.component'; import { ToCsvService } from '../shared/to-csv.service'; - import { ClosingStock } from './closing-stock'; import { ClosingStockDataSource } from './closing-stock-datasource'; import { ClosingStockItem } from './closing-stock-item'; @@ -50,7 +49,6 @@ import { ClosingStockService } from './closing-stock.service'; selector: 'app-closing-stock', templateUrl: './closing-stock.component.html', styleUrls: ['./closing-stock.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -89,6 +87,14 @@ import { ClosingStockService } from './closing-stock.service'; ], }) export class ClosingStockComponent implements OnInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + private toCsv = inject(ToCsvService); + private dialog = inject(MatDialog); + private snackBar = inject(MatSnackBar); + auth = inject(AuthService); + private ser = inject(ClosingStockService); + @ViewChild(MatPaginator, { static: true }) paginator!: MatPaginator; @ViewChild(MatSort, { static: true }) sort!: MatSort; @ViewChild('dateElement', { static: true }) dateElement!: ElementRef; @@ -117,15 +123,7 @@ export class ClosingStockComponent implements OnInit { this.dateElement.nativeElement.select(); } - constructor( - private route: ActivatedRoute, - private router: Router, - private toCsv: ToCsvService, - private dialog: MatDialog, - private snackBar: MatSnackBar, - public auth: AuthService, - private ser: ClosingStockService, - ) { + constructor() { this.costCentres = []; this.form = new FormGroup({ date: new FormControl(new Date(), { nonNullable: true }), diff --git a/overlord/src/app/closing-stock/closing-stock.routes.ts b/overlord/src/app/closing-stock/closing-stock.routes.ts index 20cdbe80..a1cad6f7 100644 --- a/overlord/src/app/closing-stock/closing-stock.routes.ts +++ b/overlord/src/app/closing-stock/closing-stock.routes.ts @@ -2,7 +2,6 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; import { costCentreListResolver } from '../cost-centre/cost-centre-list.resolver'; - import { ClosingStockComponent } from './closing-stock.component'; import { closingStockResolver } from './closing-stock.resolver'; diff --git a/overlord/src/app/closing-stock/closing-stock.service.ts b/overlord/src/app/closing-stock/closing-stock.service.ts index f326ee6d..70778824 100644 --- a/overlord/src/app/closing-stock/closing-stock.service.ts +++ b/overlord/src/app/closing-stock/closing-stock.service.ts @@ -1,10 +1,9 @@ import { HttpClient, HttpParams } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; import { ErrorLoggerService } from '../core/error-logger.service'; - import { ClosingStock } from './closing-stock'; const url = '/api/closing-stock'; @@ -14,10 +13,8 @@ const serviceName = 'ClosingStockService'; providedIn: 'root', }) export class ClosingStockService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); list(date: string | null, costCentre: string | null): Observable { const listUrl = date === null ? url : `${url}/${date}`; diff --git a/overlord/src/app/closing-stock/closing-stock.ts b/overlord/src/app/closing-stock/closing-stock.ts index 69de8c00..2857c969 100644 --- a/overlord/src/app/closing-stock/closing-stock.ts +++ b/overlord/src/app/closing-stock/closing-stock.ts @@ -1,6 +1,5 @@ import { CostCentre } from '../core/cost-centre'; import { User } from '../core/user'; - import { ClosingStockItem } from './closing-stock-item'; export class ClosingStock { diff --git a/overlord/src/app/core/account.service.ts b/overlord/src/app/core/account.service.ts index 656afa66..a53d3e8e 100644 --- a/overlord/src/app/core/account.service.ts +++ b/overlord/src/app/core/account.service.ts @@ -1,5 +1,5 @@ import { HttpClient, HttpParams } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; @@ -12,10 +12,8 @@ const serviceName = 'AccountService'; @Injectable({ providedIn: 'root' }) export class AccountService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); get(id: string | null): Observable { const getUrl: string = id === null ? `${url}` : `${url}/${id}`; diff --git a/overlord/src/app/core/auth.interceptor.ts b/overlord/src/app/core/auth.interceptor.ts index 3fb8a63e..02575c43 100644 --- a/overlord/src/app/core/auth.interceptor.ts +++ b/overlord/src/app/core/auth.interceptor.ts @@ -1,6 +1,7 @@ import { HttpInterceptorFn } from '@angular/common/http'; import { inject } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; +import { MatSnackBar } from '@angular/material/snack-bar'; import { Router } from '@angular/router'; import { throwError } from 'rxjs'; import { catchError } from 'rxjs/operators'; @@ -8,8 +9,6 @@ import { catchError } from 'rxjs/operators'; import { AuthService } from '../auth/auth.service'; import { ConfirmDialogComponent } from '../shared/confirm-dialog/confirm-dialog.component'; -import { MatSnackBar } from '@angular/material/snack-bar'; - export const authInterceptor: HttpInterceptorFn = (req, next) => { return next(req).pipe( catchError((err) => { diff --git a/overlord/src/app/core/batch.service.ts b/overlord/src/app/core/batch.service.ts index f36b62b5..28800a60 100644 --- a/overlord/src/app/core/batch.service.ts +++ b/overlord/src/app/core/batch.service.ts @@ -1,5 +1,5 @@ import { HttpClient, HttpParams } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; @@ -11,10 +11,8 @@ const serviceName = 'BatchService'; @Injectable({ providedIn: 'root' }) export class BatchService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); autocomplete(date: string, term: string): Observable { const options = { params: new HttpParams().set('q', term).set('d', date) }; diff --git a/overlord/src/app/core/nav-bar/nav-bar.component.ts b/overlord/src/app/core/nav-bar/nav-bar.component.ts index 851401e0..669467f7 100644 --- a/overlord/src/app/core/nav-bar/nav-bar.component.ts +++ b/overlord/src/app/core/nav-bar/nav-bar.component.ts @@ -1,6 +1,6 @@ import { AsyncPipe } from '@angular/common'; -import { Component, OnInit } from '@angular/core'; -import { MatButton, MatAnchor } from '@angular/material/button'; +import { Component, inject, OnInit } from '@angular/core'; +import { MatAnchor, MatButton } from '@angular/material/button'; import { MatIcon } from '@angular/material/icon'; import { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu'; import { MatToolbar } from '@angular/material/toolbar'; @@ -14,16 +14,16 @@ import { TitleService } from '../title.service'; selector: 'app-nav-bar', templateUrl: './nav-bar.component.html', styleUrls: ['./nav-bar.component.css'], - standalone: true, imports: [MatToolbar, RouterLink, MatMenu, MatMenuItem, MatButton, MatMenuTrigger, MatIcon, MatAnchor, AsyncPipe], }) export class NavBarComponent implements OnInit { + private router = inject(Router); + auth = inject(AuthService); + titleService = inject(TitleService); + title: string; - constructor( - private router: Router, - public auth: AuthService, - public titleService: TitleService, - ) { + + constructor() { this.title = environment.title; } diff --git a/overlord/src/app/core/title.service.ts b/overlord/src/app/core/title.service.ts index 9a51110d..6f34d7b9 100644 --- a/overlord/src/app/core/title.service.ts +++ b/overlord/src/app/core/title.service.ts @@ -1,5 +1,5 @@ import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; @@ -12,10 +12,8 @@ const serviceName = 'VoucherService'; providedIn: 'root', }) export class TitleService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); get(): Observable { return this.http diff --git a/overlord/src/app/core/voucher.service.ts b/overlord/src/app/core/voucher.service.ts index 6da3331a..ee4d74f2 100644 --- a/overlord/src/app/core/voucher.service.ts +++ b/overlord/src/app/core/voucher.service.ts @@ -1,5 +1,5 @@ import { HttpClient, HttpParams } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; @@ -13,10 +13,8 @@ const serviceName = 'VoucherService'; providedIn: 'root', }) export class VoucherService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); static dataURLtoBlob(dataURL: string) { const re = /^data:([\w/\-.]+);\w+,(.*)$/; diff --git a/overlord/src/app/cost-centre/cost-centre-detail/cost-centre-detail.component.ts b/overlord/src/app/cost-centre/cost-centre-detail/cost-centre-detail.component.ts index 6234e004..b861dc02 100644 --- a/overlord/src/app/cost-centre/cost-centre-detail/cost-centre-detail.component.ts +++ b/overlord/src/app/cost-centre/cost-centre-detail/cost-centre-detail.component.ts @@ -1,20 +1,19 @@ -import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; +import { AfterViewInit, Component, ElementRef, inject, OnInit, ViewChild } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { MatButton } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitle, MatCardContent, MatCardActions } from '@angular/material/card'; +import { MatCard, MatCardActions, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card'; import { MatFormField, MatLabel } from '@angular/material/form-field'; import { MatInput } from '@angular/material/input'; +import { MatSnackBar } from '@angular/material/snack-bar'; import { ActivatedRoute, Router } from '@angular/router'; import { CostCentre } from '../../core/cost-centre'; -import { MatSnackBar } from '@angular/material/snack-bar'; import { CostCentreService } from '../cost-centre.service'; @Component({ selector: 'app-cost-centre-detail', templateUrl: './cost-centre-detail.component.html', styleUrls: ['./cost-centre-detail.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -29,6 +28,11 @@ import { CostCentreService } from '../cost-centre.service'; ], }) export class CostCentreDetailComponent implements OnInit, AfterViewInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + private snackBar = inject(MatSnackBar); + private ser = inject(CostCentreService); + @ViewChild('nameElement', { static: true }) nameElement!: ElementRef; form: FormGroup<{ name: FormControl; @@ -36,12 +40,7 @@ export class CostCentreDetailComponent implements OnInit, AfterViewInit { item: CostCentre = new CostCentre(); - constructor( - private route: ActivatedRoute, - private router: Router, - private snackBar: MatSnackBar, - private ser: CostCentreService, - ) { + constructor() { this.form = new FormGroup({ name: new FormControl(null), }); diff --git a/overlord/src/app/cost-centre/cost-centre-list.resolver.spec.ts b/overlord/src/app/cost-centre/cost-centre-list.resolver.spec.ts index 594fbd6e..b7690c95 100644 --- a/overlord/src/app/cost-centre/cost-centre-list.resolver.spec.ts +++ b/overlord/src/app/cost-centre/cost-centre-list.resolver.spec.ts @@ -2,7 +2,6 @@ import { TestBed } from '@angular/core/testing'; import { ResolveFn } from '@angular/router'; import { CostCentre } from '../core/cost-centre'; - import { costCentreListResolver } from './cost-centre-list.resolver'; describe('costCentreListResolver', () => { diff --git a/overlord/src/app/cost-centre/cost-centre-list.resolver.ts b/overlord/src/app/cost-centre/cost-centre-list.resolver.ts index e164d7c6..44bdcb93 100644 --- a/overlord/src/app/cost-centre/cost-centre-list.resolver.ts +++ b/overlord/src/app/cost-centre/cost-centre-list.resolver.ts @@ -2,7 +2,6 @@ import { inject } from '@angular/core'; import { ResolveFn } from '@angular/router'; import { CostCentre } from '../core/cost-centre'; - import { CostCentreService } from './cost-centre.service'; export const costCentreListResolver: ResolveFn = () => { diff --git a/overlord/src/app/cost-centre/cost-centre-list/cost-centre-list.component.ts b/overlord/src/app/cost-centre/cost-centre-list/cost-centre-list.component.ts index f3da9559..6358f7b3 100644 --- a/overlord/src/app/cost-centre/cost-centre-list/cost-centre-list.component.ts +++ b/overlord/src/app/cost-centre/cost-centre-list/cost-centre-list.component.ts @@ -1,32 +1,30 @@ -import { Component, OnInit, ViewChild } from '@angular/core'; +import { Component, inject, OnInit, ViewChild } from '@angular/core'; import { MatAnchor } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitleGroup, MatCardTitle, MatCardContent } from '@angular/material/card'; +import { MatCard, MatCardContent, MatCardHeader, MatCardTitle, MatCardTitleGroup } from '@angular/material/card'; import { MatIcon } from '@angular/material/icon'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort, MatSortHeader } from '@angular/material/sort'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatHeaderRowDef, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, MatHeaderRow, - MatRowDef, + MatHeaderRowDef, MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, RouterLink } from '@angular/router'; import { CostCentre } from '../../core/cost-centre'; - import { CostCentreListDataSource } from './cost-centre-list-datasource'; @Component({ selector: 'app-cost-centre-list', templateUrl: './cost-centre-list.component.html', styleUrls: ['./cost-centre-list.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -52,6 +50,8 @@ import { CostCentreListDataSource } from './cost-centre-list-datasource'; ], }) export class CostCentreListComponent implements OnInit { + private route = inject(ActivatedRoute); + @ViewChild(MatPaginator, { static: true }) paginator!: MatPaginator; @ViewChild(MatSort, { static: true }) sort!: MatSort; list: CostCentre[] = []; @@ -59,8 +59,6 @@ export class CostCentreListComponent implements OnInit { /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = ['name', 'isFixture']; - constructor(private route: ActivatedRoute) {} - ngOnInit() { this.route.data.subscribe((value) => { const data = value as { list: CostCentre[] }; diff --git a/overlord/src/app/cost-centre/cost-centre.resolver.spec.ts b/overlord/src/app/cost-centre/cost-centre.resolver.spec.ts index 6be9f070..9c2a42a2 100644 --- a/overlord/src/app/cost-centre/cost-centre.resolver.spec.ts +++ b/overlord/src/app/cost-centre/cost-centre.resolver.spec.ts @@ -2,7 +2,6 @@ import { TestBed } from '@angular/core/testing'; import { ResolveFn } from '@angular/router'; import { CostCentre } from '../core/cost-centre'; - import { costCentreResolver } from './cost-centre.resolver'; describe('costCentreResolver', () => { diff --git a/overlord/src/app/cost-centre/cost-centre.resolver.ts b/overlord/src/app/cost-centre/cost-centre.resolver.ts index b4042ad6..d0299538 100644 --- a/overlord/src/app/cost-centre/cost-centre.resolver.ts +++ b/overlord/src/app/cost-centre/cost-centre.resolver.ts @@ -2,7 +2,6 @@ import { inject } from '@angular/core'; import { ResolveFn } from '@angular/router'; import { CostCentre } from '../core/cost-centre'; - import { CostCentreService } from './cost-centre.service'; export const costCentreResolver: ResolveFn = (route) => { diff --git a/overlord/src/app/cost-centre/cost-centre.routes.ts b/overlord/src/app/cost-centre/cost-centre.routes.ts index dac9c31e..223fac2c 100644 --- a/overlord/src/app/cost-centre/cost-centre.routes.ts +++ b/overlord/src/app/cost-centre/cost-centre.routes.ts @@ -1,10 +1,9 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; - import { CostCentreDetailComponent } from './cost-centre-detail/cost-centre-detail.component'; -import { CostCentreListComponent } from './cost-centre-list/cost-centre-list.component'; import { costCentreListResolver } from './cost-centre-list.resolver'; +import { CostCentreListComponent } from './cost-centre-list/cost-centre-list.component'; import { costCentreResolver } from './cost-centre.resolver'; export const routes: Routes = [ diff --git a/overlord/src/app/cost-centre/cost-centre.service.ts b/overlord/src/app/cost-centre/cost-centre.service.ts index f4dec3e7..231aa33f 100644 --- a/overlord/src/app/cost-centre/cost-centre.service.ts +++ b/overlord/src/app/cost-centre/cost-centre.service.ts @@ -1,5 +1,5 @@ import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; @@ -13,10 +13,8 @@ const serviceName = 'CostCentreService'; providedIn: 'root', }) export class CostCentreService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); get(id: string | null): Observable { const getUrl: string = id === null ? `${url}` : `${url}/${id}`; diff --git a/overlord/src/app/daybook/daybook.component.ts b/overlord/src/app/daybook/daybook.component.ts index 5ddca427..e72ad2fb 100644 --- a/overlord/src/app/daybook/daybook.component.ts +++ b/overlord/src/app/daybook/daybook.component.ts @@ -1,24 +1,24 @@ import { CurrencyPipe } from '@angular/common'; -import { Component, ElementRef, HostListener, OnInit, ViewChild } from '@angular/core'; +import { Component, ElementRef, HostListener, inject, OnInit, ViewChild } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { MatButton } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitle, MatCardContent } from '@angular/material/card'; -import { MatDatepickerInput, MatDatepickerToggle, MatDatepicker } from '@angular/material/datepicker'; +import { MatCard, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card'; +import { MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from '@angular/material/datepicker'; import { MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field'; import { MatInput } from '@angular/material/input'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort, MatSortHeader } from '@angular/material/sort'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatHeaderRowDef, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, MatHeaderRow, - MatRowDef, + MatHeaderRowDef, MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, Router, RouterLink } from '@angular/router'; import moment from 'moment'; @@ -30,7 +30,6 @@ import { DaybookDataSource } from './daybook-datasource'; selector: 'app-daybook', templateUrl: './daybook.component.html', styleUrls: ['./daybook.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -63,6 +62,9 @@ import { DaybookDataSource } from './daybook-datasource'; ], }) export class DaybookComponent implements OnInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + @ViewChild(MatPaginator, { static: true }) paginator!: MatPaginator; @ViewChild(MatSort, { static: true }) sort!: MatSort; @ViewChild('startDateElement', { static: true }) startDate!: ElementRef; @@ -84,10 +86,7 @@ export class DaybookComponent implements OnInit { this.startDate.nativeElement.select(); } - constructor( - private route: ActivatedRoute, - private router: Router, - ) { + constructor() { this.form = new FormGroup({ startDate: new FormControl(new Date(), { nonNullable: true }), finishDate: new FormControl(new Date(), { nonNullable: true }), diff --git a/overlord/src/app/daybook/daybook.routes.ts b/overlord/src/app/daybook/daybook.routes.ts index 1ae70af9..f98a6d30 100644 --- a/overlord/src/app/daybook/daybook.routes.ts +++ b/overlord/src/app/daybook/daybook.routes.ts @@ -1,7 +1,6 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; - import { DaybookComponent } from './daybook.component'; import { daybookResolver } from './daybook.resolver'; diff --git a/overlord/src/app/daybook/daybook.service.ts b/overlord/src/app/daybook/daybook.service.ts index 574dfd3f..8a3e039e 100644 --- a/overlord/src/app/daybook/daybook.service.ts +++ b/overlord/src/app/daybook/daybook.service.ts @@ -1,10 +1,9 @@ import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; import { ErrorLoggerService } from '../core/error-logger.service'; - import { Daybook } from './daybook'; const url = '/api/daybook'; @@ -14,10 +13,8 @@ const serviceName = 'DaybookService'; providedIn: 'root', }) export class DaybookService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); list(startDate: string | null, finishDate: string | null): Observable { const startDateWithSlash = startDate ? `/${startDate}` : ''; diff --git a/overlord/src/app/employee-attendance/employee-attendance.component.ts b/overlord/src/app/employee-attendance/employee-attendance.component.ts index ca435382..eaeecdcd 100644 --- a/overlord/src/app/employee-attendance/employee-attendance.component.ts +++ b/overlord/src/app/employee-attendance/employee-attendance.component.ts @@ -1,28 +1,29 @@ import { AsyncPipe } from '@angular/common'; -import { AfterViewInit, Component, ElementRef, HostListener, OnInit, ViewChild } from '@angular/core'; +import { AfterViewInit, Component, ElementRef, HostListener, inject, OnInit, ViewChild } from '@angular/core'; import { FormArray, FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; -import { MatAutocompleteSelectedEvent, MatAutocompleteTrigger, MatAutocomplete } from '@angular/material/autocomplete'; +import { MatAutocomplete, MatAutocompleteSelectedEvent, MatAutocompleteTrigger } from '@angular/material/autocomplete'; import { MatButton } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitle, MatCardContent, MatCardActions } from '@angular/material/card'; -import { MatChipSet, MatChipOption } from '@angular/material/chips'; +import { MatCard, MatCardActions, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card'; +import { MatChipOption, MatChipSet } from '@angular/material/chips'; import { MatOption } from '@angular/material/core'; -import { MatDatepickerInput, MatDatepickerToggle, MatDatepicker } from '@angular/material/datepicker'; +import { MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from '@angular/material/datepicker'; import { MatDialog } from '@angular/material/dialog'; import { MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field'; import { MatIcon } from '@angular/material/icon'; import { MatInput } from '@angular/material/input'; import { MatSelect } from '@angular/material/select'; +import { MatSnackBar } from '@angular/material/snack-bar'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatHeaderRowDef, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, MatHeaderRow, - MatRowDef, + MatHeaderRowDef, MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, Router } from '@angular/router'; import moment from 'moment'; @@ -31,10 +32,8 @@ import { debounceTime, distinctUntilChanged, switchMap } from 'rxjs/operators'; import { AttendanceType } from '../attendance/attendance-type'; import { AuthService } from '../auth/auth.service'; -import { MatSnackBar } from '@angular/material/snack-bar'; import { Employee } from '../employee/employee'; import { EmployeeService } from '../employee/employee.service'; - import { EmployeeAttendance } from './employee-attendance'; import { EmployeeAttendanceDataSource } from './employee-attendance-datasource'; import { EmployeeAttendanceItem } from './employee-attendance-item'; @@ -44,7 +43,6 @@ import { EmployeeAttendanceService } from './employee-attendance.service'; selector: 'app-employee-attendance', templateUrl: './employee-attendance.component.html', styleUrls: ['./employee-attendance.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -81,6 +79,14 @@ import { EmployeeAttendanceService } from './employee-attendance.service'; ], }) export class EmployeeAttendanceComponent implements OnInit, AfterViewInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + private dialog = inject(MatDialog); + private snackBar = inject(MatSnackBar); + private auth = inject(AuthService); + private ser = inject(EmployeeAttendanceService); + private employeeSer = inject(EmployeeService); + @ViewChild('employeeElement', { static: true }) employeeElement!: ElementRef; @ViewChild('startDateElement', { static: true }) startDate!: ElementRef; public employeeAttendanceObservable = new BehaviorSubject([]); @@ -111,15 +117,7 @@ export class EmployeeAttendanceComponent implements OnInit, AfterViewInit { this.startDate.nativeElement.select(); } - constructor( - private route: ActivatedRoute, - private router: Router, - private dialog: MatDialog, - private snackBar: MatSnackBar, - private auth: AuthService, - private ser: EmployeeAttendanceService, - private employeeSer: EmployeeService, - ) { + constructor() { this.form = new FormGroup({ startDate: new FormControl(new Date(), { nonNullable: true }), finishDate: new FormControl(new Date(), { nonNullable: true }), diff --git a/overlord/src/app/employee-attendance/employee-attendance.routes.ts b/overlord/src/app/employee-attendance/employee-attendance.routes.ts index 09efb3f0..fadfeefe 100644 --- a/overlord/src/app/employee-attendance/employee-attendance.routes.ts +++ b/overlord/src/app/employee-attendance/employee-attendance.routes.ts @@ -2,7 +2,6 @@ import { Routes } from '@angular/router'; import { attendanceTypeResolver } from '../attendance/attendance-type.resolver'; import { authGuard } from '../auth/auth-guard.service'; - import { EmployeeAttendanceComponent } from './employee-attendance.component'; import { employeeAttendanceResolver } from './employee-attendance.resolver'; diff --git a/overlord/src/app/employee-attendance/employee-attendance.service.ts b/overlord/src/app/employee-attendance/employee-attendance.service.ts index dd820015..383c9bce 100644 --- a/overlord/src/app/employee-attendance/employee-attendance.service.ts +++ b/overlord/src/app/employee-attendance/employee-attendance.service.ts @@ -1,10 +1,9 @@ import { HttpClient, HttpParams } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable, of as observableOf } from 'rxjs'; import { catchError } from 'rxjs/operators'; import { ErrorLoggerService } from '../core/error-logger.service'; - import { EmployeeAttendance } from './employee-attendance'; const url = '/api/employee-attendance'; @@ -12,10 +11,8 @@ const serviceName = 'EmployeeAttendanceService'; @Injectable({ providedIn: 'root' }) export class EmployeeAttendanceService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); get(id: string | null, startDate: string | null, finishDate: string | null): Observable { const getUrl: string = id === null ? url : `${url}/${id}`; diff --git a/overlord/src/app/employee-attendance/employee-attendance.ts b/overlord/src/app/employee-attendance/employee-attendance.ts index 46dd743e..4d17070c 100644 --- a/overlord/src/app/employee-attendance/employee-attendance.ts +++ b/overlord/src/app/employee-attendance/employee-attendance.ts @@ -1,5 +1,4 @@ import { Employee } from '../employee/employee'; - import { EmployeeAttendanceItem } from './employee-attendance-item'; export class EmployeeAttendance { diff --git a/overlord/src/app/employee-benefits/employee-benefits.component.ts b/overlord/src/app/employee-benefits/employee-benefits.component.ts index ceee0c2f..1b322f04 100644 --- a/overlord/src/app/employee-benefits/employee-benefits.component.ts +++ b/overlord/src/app/employee-benefits/employee-benefits.component.ts @@ -1,33 +1,34 @@ -import { AsyncPipe, DecimalPipe, CurrencyPipe } from '@angular/common'; -import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; +import { AsyncPipe, CurrencyPipe, DecimalPipe } from '@angular/common'; +import { AfterViewInit, Component, ElementRef, HostListener, inject, OnInit, ViewChild } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; -import { MatAutocompleteSelectedEvent, MatAutocompleteTrigger, MatAutocomplete } from '@angular/material/autocomplete'; +import { MatAutocomplete, MatAutocompleteSelectedEvent, MatAutocompleteTrigger } from '@angular/material/autocomplete'; import { MatButton, MatIconButton } from '@angular/material/button'; import { MatCard, - MatCardHeader, - MatCardTitle, - MatCardContent, MatCardActions, + MatCardContent, + MatCardHeader, MatCardSubtitle, + MatCardTitle, } from '@angular/material/card'; import { MatOption } from '@angular/material/core'; -import { MatDatepickerInput, MatDatepickerToggle, MatDatepicker } from '@angular/material/datepicker'; +import { MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from '@angular/material/datepicker'; import { MatDialog } from '@angular/material/dialog'; import { MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field'; import { MatIcon } from '@angular/material/icon'; import { MatInput } from '@angular/material/input'; +import { MatSnackBar } from '@angular/material/snack-bar'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatHeaderRowDef, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, MatHeaderRow, - MatRowDef, + MatHeaderRowDef, MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, Router } from '@angular/router'; import moment from 'moment'; @@ -37,7 +38,6 @@ import { debounceTime, distinctUntilChanged, switchMap } from 'rxjs/operators'; import { AuthService } from '../auth/auth.service'; import { AccountBalance } from '../core/account-balance'; import { EmployeeBenefit } from '../core/employee-benefit'; -import { MatSnackBar } from '@angular/material/snack-bar'; import { User } from '../core/user'; import { Voucher } from '../core/voucher'; import { VoucherService } from '../core/voucher.service'; @@ -45,15 +45,12 @@ import { Employee } from '../employee/employee'; import { EmployeeService } from '../employee/employee.service'; import { ConfirmDialogComponent } from '../shared/confirm-dialog/confirm-dialog.component'; import { LocalTimePipe } from '../shared/local-time.pipe'; - import { EmployeeBenefitsDataSource } from './employee-benefits-datasource'; -import { HostListener } from '@angular/core'; @Component({ selector: 'app-employee-benefits', templateUrl: './employee-benefits.component.html', styleUrls: ['./employee-benefits.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -92,6 +89,14 @@ import { HostListener } from '@angular/core'; ], }) export class EmployeeBenefitsComponent implements OnInit, AfterViewInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + private dialog = inject(MatDialog); + private snackBar = inject(MatSnackBar); + auth = inject(AuthService); + private ser = inject(VoucherService); + private employeeSer = inject(EmployeeService); + @ViewChild('employeeElement', { static: true }) employeeElement!: ElementRef; @ViewChild('dateElement', { static: true }) dateElement!: ElementRef; public benefitsObservable = new BehaviorSubject([]); @@ -130,15 +135,7 @@ export class EmployeeBenefitsComponent implements OnInit, AfterViewInit { this.dateElement.nativeElement.select(); } - constructor( - private route: ActivatedRoute, - private router: Router, - private dialog: MatDialog, - private snackBar: MatSnackBar, - public auth: AuthService, - private ser: VoucherService, - private employeeSer: EmployeeService, - ) { + constructor() { this.form = new FormGroup({ date: new FormControl(new Date(), { nonNullable: true }), addRow: new FormGroup({ diff --git a/overlord/src/app/employee-benefits/employee-benefits.routes.ts b/overlord/src/app/employee-benefits/employee-benefits.routes.ts index b1a5813f..5906a2fb 100644 --- a/overlord/src/app/employee-benefits/employee-benefits.routes.ts +++ b/overlord/src/app/employee-benefits/employee-benefits.routes.ts @@ -1,7 +1,6 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; - import { EmployeeBenefitsComponent } from './employee-benefits.component'; import { employeeBenefitsResolver } from './employee-benefits.resolver'; diff --git a/overlord/src/app/employee-functions/employee-functions.component.ts b/overlord/src/app/employee-functions/employee-functions.component.ts index 177dca8c..1d0b7595 100644 --- a/overlord/src/app/employee-functions/employee-functions.component.ts +++ b/overlord/src/app/employee-functions/employee-functions.component.ts @@ -1,15 +1,13 @@ -import { Component } from '@angular/core'; +import { Component, inject } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; -import { MatButton, MatAnchor } from '@angular/material/button'; +import { MatAnchor, MatButton } from '@angular/material/button'; import { MatCard, MatCardContent } from '@angular/material/card'; import { MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from '@angular/material/datepicker'; import { MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field'; import { MatInput } from '@angular/material/input'; -import { MatTabGroup, MatTab } from '@angular/material/tabs'; -import moment from 'moment'; -import { Moment } from 'moment'; - import { MatSnackBar } from '@angular/material/snack-bar'; +import { MatTab, MatTabGroup } from '@angular/material/tabs'; +import moment from 'moment'; import { EmployeeFunctionsService } from './employee-functions.service'; @@ -17,7 +15,6 @@ import { EmployeeFunctionsService } from './employee-functions.service'; selector: 'app-employee-functions', templateUrl: './employee-functions.component.html', styleUrls: ['./employee-functions.component.css'], - standalone: true, imports: [ MatTabGroup, MatTab, @@ -36,6 +33,9 @@ import { EmployeeFunctionsService } from './employee-functions.service'; ], }) export class EmployeeFunctionsComponent { + private snackBar = inject(MatSnackBar); + private ser = inject(EmployeeFunctionsService); + creditSalaryForm: FormGroup<{ date: FormControl; }>; @@ -47,10 +47,7 @@ export class EmployeeFunctionsComponent { fingerprintFile: File | null = null; - constructor( - private snackBar: MatSnackBar, - private ser: EmployeeFunctionsService, - ) { + constructor() { const startDate = moment().date(1); const finishDate = moment().date(startDate.daysInMonth()); this.creditSalaryForm = new FormGroup({ @@ -62,14 +59,14 @@ export class EmployeeFunctionsComponent { }); } - chosenYearHandler(normalizedYear: Moment) { + chosenYearHandler(normalizedYear: moment.Moment) { const ctrlValue = this.creditSalaryForm.value.date ?? moment(); ctrlValue.year(normalizedYear.year()); ctrlValue.date(ctrlValue.daysInMonth()); this.creditSalaryForm.setValue({ date: ctrlValue }); } - chosenMonthHandler(normlizedMonth: Moment, datepicker: MatDatepicker) { + chosenMonthHandler(normlizedMonth: moment.Moment, datepicker: MatDatepicker) { const ctrlValue = this.creditSalaryForm.value.date ?? moment(); ctrlValue.month(normlizedMonth.month()); ctrlValue.date(ctrlValue.daysInMonth()); diff --git a/overlord/src/app/employee-functions/employee-functions.routes.ts b/overlord/src/app/employee-functions/employee-functions.routes.ts index 8769e4ec..5f7a3d7d 100644 --- a/overlord/src/app/employee-functions/employee-functions.routes.ts +++ b/overlord/src/app/employee-functions/employee-functions.routes.ts @@ -1,7 +1,6 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; - import { EmployeeFunctionsComponent } from './employee-functions.component'; export const routes: Routes = [ diff --git a/overlord/src/app/employee-functions/employee-functions.service.ts b/overlord/src/app/employee-functions/employee-functions.service.ts index 5fb4027d..874d4453 100644 --- a/overlord/src/app/employee-functions/employee-functions.service.ts +++ b/overlord/src/app/employee-functions/employee-functions.service.ts @@ -1,5 +1,5 @@ import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; @@ -9,10 +9,8 @@ const serviceName = 'EmployeeFunctionsService'; @Injectable({ providedIn: 'root' }) export class EmployeeFunctionsService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); creditSalary(month: string): Observable { const url = '/api/credit-salary'; diff --git a/overlord/src/app/employee/employee-detail/employee-detail.component.ts b/overlord/src/app/employee/employee-detail/employee-detail.component.ts index 1606cce7..793be95f 100644 --- a/overlord/src/app/employee/employee-detail/employee-detail.component.ts +++ b/overlord/src/app/employee/employee-detail/employee-detail.component.ts @@ -1,27 +1,27 @@ -import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; +import { AfterViewInit, Component, ElementRef, inject, OnInit, ViewChild } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { MatButton } from '@angular/material/button'; import { MatCard, - MatCardHeader, - MatCardTitleGroup, - MatCardTitle, - MatCardContent, MatCardActions, + MatCardContent, + MatCardHeader, + MatCardTitle, + MatCardTitleGroup, } from '@angular/material/card'; import { MatCheckbox } from '@angular/material/checkbox'; import { MatOption } from '@angular/material/core'; -import { MatDatepickerInput, MatDatepickerToggle, MatDatepicker } from '@angular/material/datepicker'; +import { MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from '@angular/material/datepicker'; import { MatDialog } from '@angular/material/dialog'; -import { MatSuffix, MatFormField, MatLabel } from '@angular/material/form-field'; +import { MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field'; import { MatIcon } from '@angular/material/icon'; import { MatInput } from '@angular/material/input'; import { MatSelect } from '@angular/material/select'; +import { MatSnackBar } from '@angular/material/snack-bar'; import { ActivatedRoute, Router } from '@angular/router'; import moment from 'moment'; import { CostCentre } from '../../core/cost-centre'; -import { MatSnackBar } from '@angular/material/snack-bar'; import { ConfirmDialogComponent } from '../../shared/confirm-dialog/confirm-dialog.component'; import { Employee } from '../employee'; import { EmployeeService } from '../employee.service'; @@ -30,7 +30,6 @@ import { EmployeeService } from '../employee.service'; selector: 'app-employee-detail', templateUrl: './employee-detail.component.html', styleUrls: ['./employee-detail.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -54,6 +53,12 @@ import { EmployeeService } from '../employee.service'; ], }) export class EmployeeDetailComponent implements OnInit, AfterViewInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + private dialog = inject(MatDialog); + private snackBar = inject(MatSnackBar); + private ser = inject(EmployeeService); + @ViewChild('nameElement', { static: true }) nameElement!: ElementRef; form: FormGroup<{ code: FormControl; @@ -70,13 +75,7 @@ export class EmployeeDetailComponent implements OnInit, AfterViewInit { costCentres: CostCentre[] = []; item: Employee = new Employee(); - constructor( - private route: ActivatedRoute, - private router: Router, - private dialog: MatDialog, - private snackBar: MatSnackBar, - private ser: EmployeeService, - ) { + constructor() { this.form = new FormGroup({ code: new FormControl({ value: 0, disabled: true }, { nonNullable: true }), name: new FormControl(null), diff --git a/overlord/src/app/employee/employee-list/employee-list.component.ts b/overlord/src/app/employee/employee-list/employee-list.component.ts index 11ffd5f0..830e4fb0 100644 --- a/overlord/src/app/employee/employee-list/employee-list.component.ts +++ b/overlord/src/app/employee/employee-list/employee-list.component.ts @@ -1,24 +1,24 @@ -import { DecimalPipe, CurrencyPipe } from '@angular/common'; -import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; +import { CurrencyPipe, DecimalPipe } from '@angular/common'; +import { AfterViewInit, Component, ElementRef, inject, OnInit, ViewChild } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; -import { MatIconButton, MatAnchor } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitleGroup, MatCardTitle, MatCardContent } from '@angular/material/card'; +import { MatAnchor, MatIconButton } from '@angular/material/button'; +import { MatCard, MatCardContent, MatCardHeader, MatCardTitle, MatCardTitleGroup } from '@angular/material/card'; import { MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field'; import { MatIcon } from '@angular/material/icon'; import { MatInput } from '@angular/material/input'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort, MatSortHeader } from '@angular/material/sort'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatHeaderRowDef, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, MatHeaderRow, - MatRowDef, + MatHeaderRowDef, MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, RouterLink } from '@angular/router'; import { Observable } from 'rxjs'; @@ -26,14 +26,12 @@ import { debounceTime, distinctUntilChanged } from 'rxjs/operators'; import { ToCsvService } from '../../shared/to-csv.service'; import { Employee } from '../employee'; - import { EmployeeListDataSource } from './employee-list-datasource'; @Component({ selector: 'app-employee-list', templateUrl: './employee-list.component.html', styleUrls: ['./employee-list.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -67,6 +65,9 @@ import { EmployeeListDataSource } from './employee-list-datasource'; ], }) export class EmployeeListComponent implements OnInit, AfterViewInit { + private route = inject(ActivatedRoute); + private toCsv = inject(ToCsvService); + @ViewChild('filterElement', { static: true }) filterElement!: ElementRef; @ViewChild(MatPaginator, { static: true }) paginator!: MatPaginator; @ViewChild(MatSort, { static: true }) sort!: MatSort; @@ -81,10 +82,7 @@ export class EmployeeListComponent implements OnInit, AfterViewInit { /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = ['code', 'name', 'designation', 'salary', 'points', 'department', 'joiningDate', 'leavingDate']; - constructor( - private route: ActivatedRoute, - private toCsv: ToCsvService, - ) { + constructor() { this.form = new FormGroup({ filter: new FormControl('', { nonNullable: true }), }); diff --git a/overlord/src/app/employee/employee.routes.ts b/overlord/src/app/employee/employee.routes.ts index 9655f1ef..626f3f1c 100644 --- a/overlord/src/app/employee/employee.routes.ts +++ b/overlord/src/app/employee/employee.routes.ts @@ -2,10 +2,9 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; import { costCentreListResolver } from '../cost-centre/cost-centre-list.resolver'; - import { EmployeeDetailComponent } from './employee-detail/employee-detail.component'; -import { EmployeeListComponent } from './employee-list/employee-list.component'; import { employeeListResolver } from './employee-list.resolver'; +import { EmployeeListComponent } from './employee-list/employee-list.component'; import { employeeResolver } from './employee.resolver'; export const routes: Routes = [ diff --git a/overlord/src/app/employee/employee.service.ts b/overlord/src/app/employee/employee.service.ts index 8b055992..669c3d34 100644 --- a/overlord/src/app/employee/employee.service.ts +++ b/overlord/src/app/employee/employee.service.ts @@ -1,10 +1,9 @@ import { HttpClient, HttpParams } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; import { ErrorLoggerService } from '../core/error-logger.service'; - import { Employee } from './employee'; const url = '/api/employees'; @@ -12,10 +11,8 @@ const serviceName = 'EmployeeService'; @Injectable({ providedIn: 'root' }) export class EmployeeService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); get(id: string | null): Observable { const getUrl: string = id === null ? `${url}` : `${url}/${id}`; diff --git a/overlord/src/app/entries/entries.component.ts b/overlord/src/app/entries/entries.component.ts index ecd3ff3c..2d9ac076 100644 --- a/overlord/src/app/entries/entries.component.ts +++ b/overlord/src/app/entries/entries.component.ts @@ -1,33 +1,32 @@ import { CurrencyPipe } from '@angular/common'; -import { Component, ElementRef, HostListener, OnInit, ViewChild } from '@angular/core'; +import { Component, ElementRef, HostListener, inject, OnInit, ViewChild } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { MatButton } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitle, MatCardContent } from '@angular/material/card'; +import { MatCard, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card'; import { MatCheckbox } from '@angular/material/checkbox'; -import { MatDatepickerInput, MatDatepickerToggle, MatDatepicker } from '@angular/material/datepicker'; +import { MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from '@angular/material/datepicker'; import { MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field'; import { MatIcon } from '@angular/material/icon'; import { MatInput } from '@angular/material/input'; import { MatPaginator } from '@angular/material/paginator'; -import { MatRadioChange, MatRadioGroup, MatRadioButton } from '@angular/material/radio'; -import { MatSort, SortDirection, MatSortHeader } from '@angular/material/sort'; +import { MatRadioButton, MatRadioChange, MatRadioGroup } from '@angular/material/radio'; +import { MatSort, MatSortHeader, SortDirection } from '@angular/material/sort'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatHeaderRowDef, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, MatHeaderRow, - MatRowDef, + MatHeaderRowDef, MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, Router, RouterLink } from '@angular/router'; import moment from 'moment'; import { LocalTimePipe } from '../shared/local-time.pipe'; - import { EntriesDatasource } from './entries-datasource'; import { Report } from './report'; @@ -35,7 +34,6 @@ import { Report } from './report'; selector: 'app-entries', templateUrl: './entries.component.html', styleUrls: ['./entries.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -73,6 +71,9 @@ import { Report } from './report'; ], }) export class EntriesComponent implements OnInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + @ViewChild(MatPaginator, { static: true }) paginator!: MatPaginator; @ViewChild(MatSort, { static: true }) sort!: MatSort; @ViewChild('startDateElement', { static: true }) startDate!: ElementRef; @@ -97,10 +98,7 @@ export class EntriesComponent implements OnInit { this.startDate.nativeElement.select(); } - constructor( - private route: ActivatedRoute, - private router: Router, - ) { + constructor() { this.form = new FormGroup({ startDate: new FormControl(new Date(), { nonNullable: true }), finishDate: new FormControl(new Date(), { nonNullable: true }), diff --git a/overlord/src/app/entries/entries.routes.ts b/overlord/src/app/entries/entries.routes.ts index c572fc8f..7e3b1687 100644 --- a/overlord/src/app/entries/entries.routes.ts +++ b/overlord/src/app/entries/entries.routes.ts @@ -1,7 +1,6 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; - import { EntriesComponent } from './entries.component'; import { entriesResolver } from './entries.resolver'; diff --git a/overlord/src/app/entries/entries.service.ts b/overlord/src/app/entries/entries.service.ts index e4c93465..d151b625 100644 --- a/overlord/src/app/entries/entries.service.ts +++ b/overlord/src/app/entries/entries.service.ts @@ -1,10 +1,9 @@ import { HttpClient, HttpParams } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; import { ErrorLoggerService } from '../core/error-logger.service'; - import { Report } from './report'; const url = '/api/entries'; @@ -14,10 +13,8 @@ const serviceName = 'EntriesService'; providedIn: 'root', }) export class EntriesService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); list( start_date: string | null, diff --git a/overlord/src/app/incentive/incentive.component.ts b/overlord/src/app/incentive/incentive.component.ts index 114b5a00..193f9ce5 100644 --- a/overlord/src/app/incentive/incentive.component.ts +++ b/overlord/src/app/incentive/incentive.component.ts @@ -1,31 +1,32 @@ -import { DecimalPipe, CurrencyPipe } from '@angular/common'; -import { Component, OnInit } from '@angular/core'; +import { CurrencyPipe, DecimalPipe } from '@angular/common'; +import { Component, ElementRef, HostListener, inject, OnInit, ViewChild } from '@angular/core'; import { FormArray, FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; -import { MatIconButton, MatButton } from '@angular/material/button'; +import { MatButton, MatIconButton } from '@angular/material/button'; import { MatCard, - MatCardHeader, - MatCardTitle, - MatCardContent, MatCardActions, + MatCardContent, + MatCardHeader, MatCardSubtitle, + MatCardTitle, } from '@angular/material/card'; -import { MatDatepickerInput, MatDatepickerToggle, MatDatepicker } from '@angular/material/datepicker'; +import { MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from '@angular/material/datepicker'; import { MatDialog } from '@angular/material/dialog'; -import { MatFormField, MatLabel, MatSuffix, MatPrefix } from '@angular/material/form-field'; +import { MatFormField, MatLabel, MatPrefix, MatSuffix } from '@angular/material/form-field'; import { MatIcon } from '@angular/material/icon'; import { MatInput } from '@angular/material/input'; +import { MatSnackBar } from '@angular/material/snack-bar'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatHeaderRowDef, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, MatHeaderRow, - MatRowDef, + MatHeaderRowDef, MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, Router } from '@angular/router'; import moment from 'moment'; @@ -36,23 +37,17 @@ import { AuthService } from '../auth/auth.service'; import { Account } from '../core/account'; import { AccountBalance } from '../core/account-balance'; import { Incentive } from '../core/incentive'; -import { MatSnackBar } from '@angular/material/snack-bar'; import { User } from '../core/user'; import { Voucher } from '../core/voucher'; import { VoucherService } from '../core/voucher.service'; import { ConfirmDialogComponent } from '../shared/confirm-dialog/confirm-dialog.component'; import { LocalTimePipe } from '../shared/local-time.pipe'; - import { IncentiveDataSource } from './incentive-datasource'; -import { ViewChild } from '@angular/core'; -import { ElementRef } from '@angular/core'; -import { HostListener } from '@angular/core'; @Component({ selector: 'app-incentive', templateUrl: './incentive.component.html', styleUrls: ['./incentive.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -88,6 +83,13 @@ import { HostListener } from '@angular/core'; ], }) export class IncentiveComponent implements OnInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + private dialog = inject(MatDialog); + private snackBar = inject(MatSnackBar); + auth = inject(AuthService); + private ser = inject(VoucherService); + @ViewChild('dateElement', { static: true }) dateElement!: ElementRef; public incentiveObservable = new BehaviorSubject([]); dataSource: IncentiveDataSource = new IncentiveDataSource(this.incentiveObservable); @@ -113,14 +115,7 @@ export class IncentiveComponent implements OnInit { this.dateElement.nativeElement.select(); } - constructor( - private route: ActivatedRoute, - private router: Router, - private dialog: MatDialog, - private snackBar: MatSnackBar, - public auth: AuthService, - private ser: VoucherService, - ) { + constructor() { this.form = new FormGroup({ date: new FormControl(new Date(), { nonNullable: true }), incentives: new FormArray }>>([]), diff --git a/overlord/src/app/incentive/incentive.resolver.spec.ts b/overlord/src/app/incentive/incentive.resolver.spec.ts index 31c04da0..55c80c39 100644 --- a/overlord/src/app/incentive/incentive.resolver.spec.ts +++ b/overlord/src/app/incentive/incentive.resolver.spec.ts @@ -2,7 +2,6 @@ import { TestBed } from '@angular/core/testing'; import { ResolveFn } from '@angular/router'; import { Voucher } from '../core/voucher'; - import { incentiveResolver } from './incentive.resolver'; describe('incentiveResolver', () => { diff --git a/overlord/src/app/incentive/incentive.routes.ts b/overlord/src/app/incentive/incentive.routes.ts index 84349bed..43032181 100644 --- a/overlord/src/app/incentive/incentive.routes.ts +++ b/overlord/src/app/incentive/incentive.routes.ts @@ -1,7 +1,6 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; - import { IncentiveComponent } from './incentive.component'; import { incentiveResolver } from './incentive.resolver'; diff --git a/overlord/src/app/issue/issue-dialog.component.ts b/overlord/src/app/issue/issue-dialog.component.ts index 54f3f5f7..0d610261 100644 --- a/overlord/src/app/issue/issue-dialog.component.ts +++ b/overlord/src/app/issue/issue-dialog.component.ts @@ -1,17 +1,17 @@ import { CdkScrollable } from '@angular/cdk/scrolling'; import { AsyncPipe } from '@angular/common'; -import { Component, Inject, OnInit } from '@angular/core'; +import { Component, inject, OnInit } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; -import { MatAutocompleteSelectedEvent, MatAutocompleteTrigger, MatAutocomplete } from '@angular/material/autocomplete'; +import { MatAutocomplete, MatAutocompleteSelectedEvent, MatAutocompleteTrigger } from '@angular/material/autocomplete'; import { MatButton } from '@angular/material/button'; import { MatOption } from '@angular/material/core'; import { MAT_DIALOG_DATA, - MatDialogRef, - MatDialogTitle, - MatDialogContent, MatDialogActions, MatDialogClose, + MatDialogContent, + MatDialogRef, + MatDialogTitle, } from '@angular/material/dialog'; import { MatFormField, MatLabel } from '@angular/material/form-field'; import { MatInput } from '@angular/material/input'; @@ -27,7 +27,6 @@ import { MathService } from '../shared/math.service'; selector: 'app-issue-dialog', templateUrl: './issue-dialog.component.html', styleUrls: ['./issue-dialog.component.css'], - standalone: true, imports: [ MatDialogTitle, CdkScrollable, @@ -46,6 +45,15 @@ import { MathService } from '../shared/math.service'; ], }) export class IssueDialogComponent implements OnInit { + dialogRef = inject>(MatDialogRef); + data = inject<{ + inventory: Inventory; + date: string; + }>(MAT_DIALOG_DATA); + + private math = inject(MathService); + private batchSer = inject(BatchService); + batches: Observable; form: FormGroup<{ batch: FormControl; @@ -54,12 +62,7 @@ export class IssueDialogComponent implements OnInit { batch: Batch = new Batch(); - constructor( - public dialogRef: MatDialogRef, - @Inject(MAT_DIALOG_DATA) public data: { inventory: Inventory; date: string }, - private math: MathService, - private batchSer: BatchService, - ) { + constructor() { this.form = new FormGroup({ batch: new FormControl(null), quantity: new FormControl('', { nonNullable: true }), diff --git a/overlord/src/app/issue/issue-grid.service.spec.ts b/overlord/src/app/issue/issue-grid.service.spec.ts index 746f3bb6..cceb760f 100644 --- a/overlord/src/app/issue/issue-grid.service.spec.ts +++ b/overlord/src/app/issue/issue-grid.service.spec.ts @@ -1,5 +1,5 @@ import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'; -import { TestBed, inject } from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; import { IssueGridService } from './issue-grid.service'; diff --git a/overlord/src/app/issue/issue-grid.service.ts b/overlord/src/app/issue/issue-grid.service.ts index 054e308b..49846898 100644 --- a/overlord/src/app/issue/issue-grid.service.ts +++ b/overlord/src/app/issue/issue-grid.service.ts @@ -1,5 +1,5 @@ import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; @@ -13,10 +13,8 @@ const serviceName = 'IssueGridService'; providedIn: 'root', }) export class IssueGridService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); issueGrid(date: string): Observable { return this.http diff --git a/overlord/src/app/issue/issue.component.ts b/overlord/src/app/issue/issue.component.ts index 5a993108..231b74ee 100644 --- a/overlord/src/app/issue/issue.component.ts +++ b/overlord/src/app/issue/issue.component.ts @@ -1,35 +1,36 @@ -import { AsyncPipe, DecimalPipe, CurrencyPipe } from '@angular/common'; -import { AfterViewInit, Component, ElementRef, OnInit, ViewChild, HostListener } from '@angular/core'; +import { AsyncPipe, CurrencyPipe, DecimalPipe } from '@angular/common'; +import { AfterViewInit, Component, ElementRef, HostListener, inject, OnInit, ViewChild } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; -import { MatAutocompleteSelectedEvent, MatAutocompleteTrigger, MatAutocomplete } from '@angular/material/autocomplete'; +import { MatAutocomplete, MatAutocompleteSelectedEvent, MatAutocompleteTrigger } from '@angular/material/autocomplete'; import { MatButton, MatIconButton } from '@angular/material/button'; import { MatCard, + MatCardActions, + MatCardContent, + MatCardFooter, MatCardHeader, MatCardTitle, - MatCardContent, - MatCardActions, - MatCardFooter, } from '@angular/material/card'; import { MatOption } from '@angular/material/core'; -import { MatDatepickerInput, MatDatepickerToggle, MatDatepicker } from '@angular/material/datepicker'; +import { MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from '@angular/material/datepicker'; import { MatDialog } from '@angular/material/dialog'; -import { MatFormField, MatLabel, MatSuffix, MatPrefix } from '@angular/material/form-field'; +import { MatFormField, MatLabel, MatPrefix, MatSuffix } from '@angular/material/form-field'; import { MatIcon } from '@angular/material/icon'; import { MatInput } from '@angular/material/input'; import { MatSelect } from '@angular/material/select'; +import { MatSnackBar } from '@angular/material/snack-bar'; import { MatSort } from '@angular/material/sort'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatHeaderRowDef, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, MatHeaderRow, - MatRowDef, + MatHeaderRowDef, MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, Router } from '@angular/router'; import { round } from 'mathjs'; @@ -43,14 +44,12 @@ import { BatchService } from '../core/batch.service'; import { CostCentre } from '../core/cost-centre'; import { Inventory } from '../core/inventory'; import { IssueGridItem } from '../core/issue-grid-item'; -import { MatSnackBar } from '@angular/material/snack-bar'; import { User } from '../core/user'; import { Voucher } from '../core/voucher'; import { VoucherService } from '../core/voucher.service'; import { ConfirmDialogComponent } from '../shared/confirm-dialog/confirm-dialog.component'; import { LocalTimePipe } from '../shared/local-time.pipe'; import { MathService } from '../shared/math.service'; - import { IssueDataSource } from './issue-datasource'; import { IssueDialogComponent } from './issue-dialog.component'; import { IssueGridDataSource } from './issue-grid-datasource'; @@ -60,7 +59,6 @@ import { IssueGridService } from './issue-grid.service'; selector: 'app-issue', templateUrl: './issue.component.html', styleUrls: ['./issue.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -102,6 +100,16 @@ import { IssueGridService } from './issue-grid.service'; ], }) export class IssueComponent implements OnInit, AfterViewInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + private dialog = inject(MatDialog); + private snackBar = inject(MatSnackBar); + private auth = inject(AuthService); + private math = inject(MathService); + private ser = inject(VoucherService); + private batchSer = inject(BatchService); + private issueGridSer = inject(IssueGridService); + @ViewChild('batchElement', { static: true }) batchElement!: ElementRef; @ViewChild('dateElement', { static: true }) dateElement!: ElementRef; @@ -145,17 +153,7 @@ export class IssueComponent implements OnInit, AfterViewInit { batches: Observable; - constructor( - private route: ActivatedRoute, - private router: Router, - private dialog: MatDialog, - private snackBar: MatSnackBar, - private auth: AuthService, - private math: MathService, - private ser: VoucherService, - private batchSer: BatchService, - private issueGridSer: IssueGridService, - ) { + constructor() { this.form = new FormGroup({ date: new FormControl(new Date(), { nonNullable: true }), source: new FormControl(null), diff --git a/overlord/src/app/issue/issue.resolver.spec.ts b/overlord/src/app/issue/issue.resolver.spec.ts index 0809340d..d521eed2 100644 --- a/overlord/src/app/issue/issue.resolver.spec.ts +++ b/overlord/src/app/issue/issue.resolver.spec.ts @@ -2,7 +2,6 @@ import { TestBed } from '@angular/core/testing'; import { ResolveFn } from '@angular/router'; import { Voucher } from '../core/voucher'; - import { issueResolver } from './issue.resolver'; describe('issueResolver', () => { diff --git a/overlord/src/app/issue/issue.routes.ts b/overlord/src/app/issue/issue.routes.ts index 55c4a2cc..e456eee2 100644 --- a/overlord/src/app/issue/issue.routes.ts +++ b/overlord/src/app/issue/issue.routes.ts @@ -2,7 +2,6 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; import { costCentreListResolver } from '../cost-centre/cost-centre-list.resolver'; - import { IssueComponent } from './issue.component'; import { issueResolver } from './issue.resolver'; diff --git a/overlord/src/app/journal/journal-dialog.component.ts b/overlord/src/app/journal/journal-dialog.component.ts index 98cc1057..c1af39a7 100644 --- a/overlord/src/app/journal/journal-dialog.component.ts +++ b/overlord/src/app/journal/journal-dialog.component.ts @@ -1,20 +1,19 @@ import { CdkScrollable } from '@angular/cdk/scrolling'; import { AsyncPipe, CurrencyPipe } from '@angular/common'; -import { Component, Inject, OnInit } from '@angular/core'; +import { Component, inject, OnInit } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; -import { MatAutocompleteSelectedEvent, MatAutocompleteTrigger, MatAutocomplete } from '@angular/material/autocomplete'; +import { MatAutocomplete, MatAutocompleteSelectedEvent, MatAutocompleteTrigger } from '@angular/material/autocomplete'; import { MatButton } from '@angular/material/button'; import { MatOption } from '@angular/material/core'; -import { MatDatepicker } from '@angular/material/datepicker'; import { MAT_DIALOG_DATA, - MatDialogRef, - MatDialogTitle, - MatDialogContent, MatDialogActions, MatDialogClose, + MatDialogContent, + MatDialogRef, + MatDialogTitle, } from '@angular/material/dialog'; -import { MatFormField, MatLabel, MatHint, MatPrefix } from '@angular/material/form-field'; +import { MatFormField, MatHint, MatLabel, MatPrefix } from '@angular/material/form-field'; import { MatInput } from '@angular/material/input'; import { MatSelect } from '@angular/material/select'; import { Observable, of as observableOf } from 'rxjs'; @@ -31,7 +30,6 @@ import { MathService } from '../shared/math.service'; selector: 'app-journal-dialog', templateUrl: './journal-dialog.component.html', styleUrls: ['./journal-dialog.component.css'], - standalone: true, imports: [ MatDialogTitle, CdkScrollable, @@ -39,7 +37,6 @@ import { MathService } from '../shared/math.service'; ReactiveFormsModule, MatFormField, MatSelect, - MatDatepicker, MatOption, MatLabel, MatInput, @@ -56,6 +53,15 @@ import { MathService } from '../shared/math.service'; ], }) export class JournalDialogComponent implements OnInit { + dialogRef = inject>(MatDialogRef); + data = inject<{ + journal: Journal; + date: string; + }>(MAT_DIALOG_DATA); + + private math = inject(MathService); + private accountSer = inject(AccountService); + accounts: Observable; form: FormGroup<{ debit: FormControl; @@ -66,12 +72,7 @@ export class JournalDialogComponent implements OnInit { account: Account = new Account(); accBal: AccountBalance | null = null; - constructor( - public dialogRef: MatDialogRef, - @Inject(MAT_DIALOG_DATA) public data: { journal: Journal; date: string }, - private math: MathService, - private accountSer: AccountService, - ) { + constructor() { this.form = new FormGroup({ debit: new FormControl(1, { nonNullable: true }), account: new FormControl(''), diff --git a/overlord/src/app/journal/journal.component.ts b/overlord/src/app/journal/journal.component.ts index 0d5ea3a9..78f90c8e 100644 --- a/overlord/src/app/journal/journal.component.ts +++ b/overlord/src/app/journal/journal.component.ts @@ -1,37 +1,38 @@ import { COMMA, ENTER } from '@angular/cdk/keycodes'; import { AsyncPipe, CurrencyPipe } from '@angular/common'; -import { AfterViewInit, Component, ElementRef, OnInit, ViewChild, HostListener } from '@angular/core'; +import { AfterViewInit, Component, ElementRef, HostListener, inject, OnInit, ViewChild } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; -import { MatAutocompleteSelectedEvent, MatAutocompleteTrigger, MatAutocomplete } from '@angular/material/autocomplete'; +import { MatAutocomplete, MatAutocompleteSelectedEvent, MatAutocompleteTrigger } from '@angular/material/autocomplete'; import { MatButton, MatIconButton } from '@angular/material/button'; import { MatCard, - MatCardHeader, - MatCardTitleGroup, - MatCardTitle, - MatCardContent, MatCardActions, + MatCardContent, + MatCardHeader, + MatCardTitle, + MatCardTitleGroup, } from '@angular/material/card'; -import { MatChipInputEvent, MatChipGrid, MatChipRow, MatChipRemove, MatChipInput } from '@angular/material/chips'; +import { MatChipGrid, MatChipInput, MatChipInputEvent, MatChipRemove, MatChipRow } from '@angular/material/chips'; import { MatOption } from '@angular/material/core'; -import { MatDatepickerInput, MatDatepickerToggle, MatDatepicker } from '@angular/material/datepicker'; +import { MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from '@angular/material/datepicker'; import { MatDialog } from '@angular/material/dialog'; -import { MatSuffix, MatFormField, MatLabel, MatHint, MatPrefix } from '@angular/material/form-field'; +import { MatFormField, MatHint, MatLabel, MatPrefix, MatSuffix } from '@angular/material/form-field'; import { MatIcon } from '@angular/material/icon'; import { MatInput } from '@angular/material/input'; import { MatSelect } from '@angular/material/select'; +import { MatSnackBar } from '@angular/material/snack-bar'; import { MatSort } from '@angular/material/sort'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatHeaderRowDef, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, MatHeaderRow, - MatRowDef, + MatHeaderRowDef, MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, Router } from '@angular/router'; import { round } from 'mathjs'; @@ -45,9 +46,6 @@ import { AccountBalance } from '../core/account-balance'; import { AccountService } from '../core/account.service'; import { DbFile } from '../core/db-file'; import { Journal } from '../core/journal'; -import { Tag } from '../tag/tag'; -import { TagService } from '../tag/tag.service'; -import { MatSnackBar } from '@angular/material/snack-bar'; import { User } from '../core/user'; import { Voucher } from '../core/voucher'; import { VoucherService } from '../core/voucher.service'; @@ -57,7 +55,8 @@ import { ImageDialogComponent } from '../shared/image-dialog/image-dialog.compon import { ImageService } from '../shared/image.service'; import { LocalTimePipe } from '../shared/local-time.pipe'; import { MathService } from '../shared/math.service'; - +import { Tag } from '../tag/tag'; +import { TagService } from '../tag/tag.service'; import { JournalDataSource } from './journal-datasource'; import { JournalDialogComponent } from './journal-dialog.component'; @@ -65,7 +64,6 @@ import { JournalDialogComponent } from './journal-dialog.component'; selector: 'app-journal', templateUrl: './journal.component.html', styleUrls: ['./journal.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -112,6 +110,17 @@ import { JournalDialogComponent } from './journal-dialog.component'; ], }) export class JournalComponent implements OnInit, AfterViewInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + private dialog = inject(MatDialog); + private snackBar = inject(MatSnackBar); + auth = inject(AuthService); + private math = inject(MathService); + image = inject(ImageService); + private ser = inject(VoucherService); + private accountSer = inject(AccountService); + private tagSer = inject(TagService); + @ViewChild('accountElement', { static: true }) accountElement!: ElementRef; @ViewChild('dateElement', { static: false }) dateElement!: ElementRef; @ViewChild('tagInput') tagInput?: ElementRef; @@ -162,18 +171,7 @@ export class JournalComponent implements OnInit, AfterViewInit { accounts: Observable; - constructor( - private route: ActivatedRoute, - private router: Router, - private dialog: MatDialog, - private snackBar: MatSnackBar, - public auth: AuthService, - private math: MathService, - public image: ImageService, - private ser: VoucherService, - private accountSer: AccountService, - private tagSer: TagService, - ) { + constructor() { this.account = null; this.form = new FormGroup({ date: new FormControl(new Date(), { nonNullable: true }), diff --git a/overlord/src/app/journal/journal.resolver.spec.ts b/overlord/src/app/journal/journal.resolver.spec.ts index 458ae315..4277a222 100644 --- a/overlord/src/app/journal/journal.resolver.spec.ts +++ b/overlord/src/app/journal/journal.resolver.spec.ts @@ -2,7 +2,6 @@ import { TestBed } from '@angular/core/testing'; import { ResolveFn } from '@angular/router'; import { Voucher } from '../core/voucher'; - import { journalResolver } from './journal.resolver'; describe('journalResolver', () => { diff --git a/overlord/src/app/journal/journal.routes.ts b/overlord/src/app/journal/journal.routes.ts index 7af620d7..2a2cc7b9 100644 --- a/overlord/src/app/journal/journal.routes.ts +++ b/overlord/src/app/journal/journal.routes.ts @@ -1,7 +1,6 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; - import { JournalComponent } from './journal.component'; import { journalResolver } from './journal.resolver'; diff --git a/overlord/src/app/ledger/ledger.component.ts b/overlord/src/app/ledger/ledger.component.ts index 34f2ecf0..59654942 100644 --- a/overlord/src/app/ledger/ledger.component.ts +++ b/overlord/src/app/ledger/ledger.component.ts @@ -1,33 +1,36 @@ import { SelectionModel } from '@angular/cdk/collections'; import { AsyncPipe, CurrencyPipe } from '@angular/common'; -import { AfterViewInit, Component, ElementRef, HostListener, OnInit, ViewChild } from '@angular/core'; +import { AfterViewInit, Component, ElementRef, HostListener, inject, OnInit, ViewChild } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; -import { MatAutocompleteSelectedEvent, MatAutocompleteTrigger, MatAutocomplete } from '@angular/material/autocomplete'; -import { MatIconButton, MatButton } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitleGroup, MatCardTitle, MatCardContent } from '@angular/material/card'; +import { MatAutocomplete, MatAutocompleteSelectedEvent, MatAutocompleteTrigger } from '@angular/material/autocomplete'; +import { MatButton, MatIconButton } from '@angular/material/button'; +import { MatCard, MatCardContent, MatCardHeader, MatCardTitle, MatCardTitleGroup } from '@angular/material/card'; +import { MatCheckbox } from '@angular/material/checkbox'; +import { MatChip, MatChipSet } from '@angular/material/chips'; import { MatOption } from '@angular/material/core'; -import { MatDatepickerInput, MatDatepickerToggle, MatDatepicker } from '@angular/material/datepicker'; +import { MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from '@angular/material/datepicker'; +import { MatDialog } from '@angular/material/dialog'; import { MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field'; import { MatIcon } from '@angular/material/icon'; import { MatInput } from '@angular/material/input'; import { MatPaginator } from '@angular/material/paginator'; +import { MatSelect } from '@angular/material/select'; import { MatSort, MatSortHeader } from '@angular/material/sort'; -import { MatCheckbox } from '@angular/material/checkbox'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatFooterCellDef, + MatCellDef, + MatColumnDef, MatFooterCell, - MatHeaderRowDef, - MatHeaderRow, - MatRowDef, - MatRow, - MatFooterRowDef, + MatFooterCellDef, MatFooterRow, + MatFooterRowDef, + MatHeaderCell, + MatHeaderCellDef, + MatHeaderRow, + MatHeaderRowDef, + MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, Router, RouterLink } from '@angular/router'; import moment from 'moment'; @@ -39,22 +42,17 @@ import { AccountService } from '../core/account.service'; import { AccountingPipe } from '../shared/accounting.pipe'; import { ClearPipe } from '../shared/clear.pipe'; import { ToCsvService } from '../shared/to-csv.service'; - +import { TagDialogComponent } from '../tag-dialog/tag-dialog.component'; +import { Tag } from '../tag/tag'; +import { TagService } from '../tag/tag.service'; import { Ledger } from './ledger'; import { LedgerDataSource } from './ledger-datasource'; -import { MatSelect } from '@angular/material/select'; -import { MatChip, MatChipSet } from '@angular/material/chips'; import { LedgerItem } from './ledger-item'; -import { MatDialog } from '@angular/material/dialog'; -import { TagService } from '../tag/tag.service'; -import { Tag } from '../tag/tag'; -import { TagDialogComponent } from '../tag-dialog/tag-dialog.component'; @Component({ selector: 'app-ledger', templateUrl: './ledger.component.html', styleUrls: ['./ledger.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -104,6 +102,13 @@ import { TagDialogComponent } from '../tag-dialog/tag-dialog.component'; ], }) export class LedgerComponent implements OnInit, AfterViewInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + private dialog = inject(MatDialog); + private toCsv = inject(ToCsvService); + private accountSer = inject(AccountService); + private tagSer = inject(TagService); + @ViewChild('accountElement', { static: true }) accountElement!: ElementRef; @ViewChild('startDateElement', { static: true }) startDate!: ElementRef; @ViewChild(MatPaginator, { static: true }) paginator!: MatPaginator; @@ -136,14 +141,7 @@ export class LedgerComponent implements OnInit, AfterViewInit { this.startDate.nativeElement.select(); } - constructor( - private route: ActivatedRoute, - private router: Router, - private dialog: MatDialog, - private toCsv: ToCsvService, - private accountSer: AccountService, - private tagSer: TagService, - ) { + constructor() { this.form = new FormGroup({ startDate: new FormControl(new Date(), { nonNullable: true }), finishDate: new FormControl(new Date(), { nonNullable: true }), diff --git a/overlord/src/app/ledger/ledger.routes.ts b/overlord/src/app/ledger/ledger.routes.ts index 76323e27..da47536c 100644 --- a/overlord/src/app/ledger/ledger.routes.ts +++ b/overlord/src/app/ledger/ledger.routes.ts @@ -1,10 +1,9 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; - +import { tagListResolver } from '../tag/tag-list.resolver'; import { LedgerComponent } from './ledger.component'; import { ledgerResolver } from './ledger.resolver'; -import { tagListResolver } from '../tag/tag-list.resolver'; export const routes: Routes = [ { diff --git a/overlord/src/app/ledger/ledger.service.ts b/overlord/src/app/ledger/ledger.service.ts index eb451e21..5343d4ed 100644 --- a/overlord/src/app/ledger/ledger.service.ts +++ b/overlord/src/app/ledger/ledger.service.ts @@ -1,10 +1,9 @@ import { HttpClient, HttpParams } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; import { ErrorLoggerService } from '../core/error-logger.service'; - import { Ledger } from './ledger'; const url = '/api/ledger'; @@ -14,10 +13,8 @@ const serviceName = 'LedgerService'; providedIn: 'root', }) export class LedgerService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); list(id: string | null, startDate: string | null, finishDate: string | null): Observable { const listUrl = id === null ? url : `${url}/${id}`; diff --git a/overlord/src/app/ledger/ledger.ts b/overlord/src/app/ledger/ledger.ts index 5ba00396..97b13acc 100644 --- a/overlord/src/app/ledger/ledger.ts +++ b/overlord/src/app/ledger/ledger.ts @@ -1,5 +1,4 @@ import { Account } from '../core/account'; - import { LedgerItem } from './ledger-item'; export class Ledger { diff --git a/overlord/src/app/mozimo-daily-register/mozimo-daily-register.component.ts b/overlord/src/app/mozimo-daily-register/mozimo-daily-register.component.ts index e403dd1c..509a3b4a 100644 --- a/overlord/src/app/mozimo-daily-register/mozimo-daily-register.component.ts +++ b/overlord/src/app/mozimo-daily-register/mozimo-daily-register.component.ts @@ -1,39 +1,35 @@ -import { DecimalPipe, CurrencyPipe, AsyncPipe } from '@angular/common'; -import { Component, ElementRef, OnInit, ViewChild } from '@angular/core'; -import { FormGroup, FormArray, FormControl, ReactiveFormsModule, Validators } from '@angular/forms'; +import { DecimalPipe } from '@angular/common'; +import { Component, ElementRef, inject, OnInit, ViewChild } from '@angular/core'; +import { FormArray, FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms'; +import { MatAutocompleteModule } from '@angular/material/autocomplete'; +import { MatBadgeModule } from '@angular/material/badge'; import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; import { MatDatepickerModule } from '@angular/material/datepicker'; -import { MatBadgeModule } from '@angular/material/badge'; import { MatFormFieldModule } from '@angular/material/form-field'; import { MatIconModule } from '@angular/material/icon'; import { MatInputModule } from '@angular/material/input'; import { MatPaginator, MatPaginatorModule } from '@angular/material/paginator'; +import { MatSnackBar } from '@angular/material/snack-bar'; import { MatTableModule } from '@angular/material/table'; +import { MatTooltipModule } from '@angular/material/tooltip'; import { ActivatedRoute, Router } from '@angular/router'; import moment from 'moment'; +import { BehaviorSubject } from 'rxjs'; import { AuthService } from '../auth/auth.service'; -import { MatSnackBar } from '@angular/material/snack-bar'; +import { LocalTimePipe } from '../shared/local-time.pipe'; import { ToCsvService } from '../shared/to-csv.service'; - import { MozimoDailyRegister } from './mozimo-daily-register'; import { MozimoDailyRegisterDataSource } from './mozimo-daily-register-datasource'; import { MozimoDailyRegisterItem } from './mozimo-daily-register-item'; import { MozimoDailyRegisterService } from './mozimo-daily-register.service'; -import { MatAutocompleteModule } from '@angular/material/autocomplete'; -import { BehaviorSubject } from 'rxjs'; -import { LocalTimePipe } from '../shared/local-time.pipe'; -import { MatTooltipModule } from '@angular/material/tooltip'; @Component({ selector: 'app-mozimo-daily-register', templateUrl: './mozimo-daily-register.component.html', styleUrls: ['./mozimo-daily-register.component.css'], - standalone: true, imports: [ - AsyncPipe, - CurrencyPipe, DecimalPipe, LocalTimePipe, MatAutocompleteModule, @@ -52,6 +48,14 @@ import { MatTooltipModule } from '@angular/material/tooltip'; providers: [LocalTimePipe], }) export class MozimoDailyRegisterComponent implements OnInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + private toCsv = inject(ToCsvService); + private localTimePipe = inject(LocalTimePipe); + private snackBar = inject(MatSnackBar); + auth = inject(AuthService); + private ser = inject(MozimoDailyRegisterService); + @ViewChild('dateElement', { static: false }) dateElement!: ElementRef; @ViewChild(MatPaginator, { static: true }) paginator!: MatPaginator; info: MozimoDailyRegister = new MozimoDailyRegister(); @@ -74,15 +78,7 @@ export class MozimoDailyRegisterComponent implements OnInit { displayedColumns = ['product', 'opening', 'received', 'sale', 'nc', 'display', 'ageing', 'variance', 'closing']; - constructor( - private route: ActivatedRoute, - private router: Router, - private toCsv: ToCsvService, - private localTimePipe: LocalTimePipe, - private snackBar: MatSnackBar, - public auth: AuthService, - private ser: MozimoDailyRegisterService, - ) { + constructor() { this.form = new FormGroup({ date: new FormControl(new Date(), { nonNullable: true }), items: new FormArray< diff --git a/overlord/src/app/mozimo-daily-register/mozimo-daily-register.routes.ts b/overlord/src/app/mozimo-daily-register/mozimo-daily-register.routes.ts index 92ca1cee..54a752d7 100644 --- a/overlord/src/app/mozimo-daily-register/mozimo-daily-register.routes.ts +++ b/overlord/src/app/mozimo-daily-register/mozimo-daily-register.routes.ts @@ -1,7 +1,6 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; - import { MozimoDailyRegisterComponent } from './mozimo-daily-register.component'; import { mozimoDailyRegisterResolver } from './mozimo-daily-register.resolver'; diff --git a/overlord/src/app/mozimo-daily-register/mozimo-daily-register.service.ts b/overlord/src/app/mozimo-daily-register/mozimo-daily-register.service.ts index 5bd22a80..f34de8a9 100644 --- a/overlord/src/app/mozimo-daily-register/mozimo-daily-register.service.ts +++ b/overlord/src/app/mozimo-daily-register/mozimo-daily-register.service.ts @@ -1,10 +1,9 @@ import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; import { ErrorLoggerService } from '../core/error-logger.service'; - import { MozimoDailyRegister } from './mozimo-daily-register'; const url = '/api/mozimo-daily-register'; @@ -14,10 +13,8 @@ const serviceName = 'MozimoDailyRegisterService'; providedIn: 'root', }) export class MozimoDailyRegisterService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); list(date: string | null): Observable { const listUrl: string = date === null ? url : `${url}/${date}`; diff --git a/overlord/src/app/mozimo-product-register/mozimo-product-register.component.ts b/overlord/src/app/mozimo-product-register/mozimo-product-register.component.ts index 5aaf7695..3aa488a6 100644 --- a/overlord/src/app/mozimo-product-register/mozimo-product-register.component.ts +++ b/overlord/src/app/mozimo-product-register/mozimo-product-register.component.ts @@ -1,42 +1,39 @@ -import { DecimalPipe, CurrencyPipe, AsyncPipe } from '@angular/common'; -import { Component, OnInit, ViewChild } from '@angular/core'; -import { FormGroup, FormArray, FormControl, ReactiveFormsModule, Validators } from '@angular/forms'; +import { AsyncPipe, DecimalPipe } from '@angular/common'; +import { Component, inject, OnInit, ViewChild } from '@angular/core'; +import { FormArray, FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms'; +import { MatAutocompleteModule, MatAutocompleteSelectedEvent } from '@angular/material/autocomplete'; +import { MatBadgeModule } from '@angular/material/badge'; import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; import { MatDatepickerModule } from '@angular/material/datepicker'; -import { MatBadgeModule } from '@angular/material/badge'; import { MatFormFieldModule } from '@angular/material/form-field'; import { MatIconModule } from '@angular/material/icon'; import { MatInputModule } from '@angular/material/input'; import { MatPaginator, MatPaginatorModule } from '@angular/material/paginator'; +import { MatSnackBar } from '@angular/material/snack-bar'; import { MatTableModule } from '@angular/material/table'; +import { MatTooltipModule } from '@angular/material/tooltip'; import { ActivatedRoute, Router } from '@angular/router'; import moment from 'moment'; +import { BehaviorSubject, debounceTime, distinctUntilChanged, Observable, of as observableOf, switchMap } from 'rxjs'; import { AuthService } from '../auth/auth.service'; -import { MatSnackBar } from '@angular/material/snack-bar'; +import { Product } from '../core/product'; +import { ProductSku } from '../core/product-sku'; +import { ProductService } from '../product/product.service'; +import { LocalTimePipe } from '../shared/local-time.pipe'; import { ToCsvService } from '../shared/to-csv.service'; - import { MozimoProductRegister } from './mozimo-product-register'; import { MozimoProductRegisterDataSource } from './mozimo-product-register-datasource'; import { MozimoProductRegisterItem } from './mozimo-product-register-item'; import { MozimoProductRegisterService } from './mozimo-product-register.service'; -import { MatAutocompleteModule, MatAutocompleteSelectedEvent } from '@angular/material/autocomplete'; -import { Product } from '../core/product'; -import { debounceTime, distinctUntilChanged, Observable, switchMap, of as observableOf, BehaviorSubject } from 'rxjs'; -import { ProductSku } from '../core/product-sku'; -import { ProductService } from '../product/product.service'; -import { LocalTimePipe } from '../shared/local-time.pipe'; -import { MatTooltipModule } from '@angular/material/tooltip'; @Component({ selector: 'app-mozimo-product-register', templateUrl: './mozimo-product-register.component.html', styleUrls: ['./mozimo-product-register.component.css'], - standalone: true, imports: [ AsyncPipe, - CurrencyPipe, DecimalPipe, LocalTimePipe, MatAutocompleteModule, @@ -55,6 +52,15 @@ import { MatTooltipModule } from '@angular/material/tooltip'; providers: [LocalTimePipe], }) export class MozimoProductRegisterComponent implements OnInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + private toCsv = inject(ToCsvService); + private localTimePipe = inject(LocalTimePipe); + private snackBar = inject(MatSnackBar); + auth = inject(AuthService); + private ser = inject(MozimoProductRegisterService); + private productSer = inject(ProductService); + @ViewChild(MatPaginator, { static: true }) paginator!: MatPaginator; info: MozimoProductRegister = new MozimoProductRegister(); body = new BehaviorSubject([]); @@ -80,16 +86,7 @@ export class MozimoProductRegisterComponent implements OnInit { products: Observable; - constructor( - private route: ActivatedRoute, - private router: Router, - private toCsv: ToCsvService, - private localTimePipe: LocalTimePipe, - private snackBar: MatSnackBar, - public auth: AuthService, - private ser: MozimoProductRegisterService, - private productSer: ProductService, - ) { + constructor() { this.form = new FormGroup({ startDate: new FormControl(new Date(), { nonNullable: true }), finishDate: new FormControl(new Date(), { nonNullable: true }), diff --git a/overlord/src/app/mozimo-product-register/mozimo-product-register.routes.ts b/overlord/src/app/mozimo-product-register/mozimo-product-register.routes.ts index beafe7db..2f87e301 100644 --- a/overlord/src/app/mozimo-product-register/mozimo-product-register.routes.ts +++ b/overlord/src/app/mozimo-product-register/mozimo-product-register.routes.ts @@ -1,7 +1,6 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; - import { MozimoProductRegisterComponent } from './mozimo-product-register.component'; import { mozimoProductRegisterResolver } from './mozimo-product-register.resolver'; diff --git a/overlord/src/app/mozimo-product-register/mozimo-product-register.service.ts b/overlord/src/app/mozimo-product-register/mozimo-product-register.service.ts index 9c09a651..e89da508 100644 --- a/overlord/src/app/mozimo-product-register/mozimo-product-register.service.ts +++ b/overlord/src/app/mozimo-product-register/mozimo-product-register.service.ts @@ -1,10 +1,9 @@ import { HttpClient, HttpParams } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; import { ErrorLoggerService } from '../core/error-logger.service'; - import { MozimoProductRegister } from './mozimo-product-register'; const url = '/api/mozimo-product-register'; @@ -14,10 +13,8 @@ const serviceName = 'MozimoProductRegisterService'; providedIn: 'root', }) export class MozimoProductRegisterService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); list(id: string | null, startDate: string | null, finishDate: string | null): Observable { const listUrl = id === null ? url : `${url}/${id}`; diff --git a/overlord/src/app/mozimo-product-register/mozimo-product-register.ts b/overlord/src/app/mozimo-product-register/mozimo-product-register.ts index 98e14340..b16c483b 100644 --- a/overlord/src/app/mozimo-product-register/mozimo-product-register.ts +++ b/overlord/src/app/mozimo-product-register/mozimo-product-register.ts @@ -1,5 +1,4 @@ import { Product } from '../core/product'; - import { MozimoProductRegisterItem } from './mozimo-product-register-item'; export class MozimoProductRegister { diff --git a/overlord/src/app/net-transactions/net-transactions.component.ts b/overlord/src/app/net-transactions/net-transactions.component.ts index cece2ac5..bdee5ccf 100644 --- a/overlord/src/app/net-transactions/net-transactions.component.ts +++ b/overlord/src/app/net-transactions/net-transactions.component.ts @@ -1,30 +1,29 @@ import { CurrencyPipe } from '@angular/common'; -import { Component, ElementRef, HostListener, OnInit, ViewChild } from '@angular/core'; +import { Component, ElementRef, HostListener, inject, OnInit, ViewChild } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { MatButton } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitle, MatCardContent } from '@angular/material/card'; -import { MatDatepickerInput, MatDatepickerToggle, MatDatepicker } from '@angular/material/datepicker'; +import { MatCard, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card'; +import { MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from '@angular/material/datepicker'; import { MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field'; import { MatInput } from '@angular/material/input'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort, MatSortHeader } from '@angular/material/sort'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatHeaderRowDef, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, MatHeaderRow, - MatRowDef, + MatHeaderRowDef, MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, Router } from '@angular/router'; import moment from 'moment'; import { AccountingPipe } from '../shared/accounting.pipe'; - import { NetTransactions } from './net-transactions'; import { NetTransactionsDataSource } from './net-transactions-datasource'; @@ -32,7 +31,6 @@ import { NetTransactionsDataSource } from './net-transactions-datasource'; selector: 'app-net-transactions', templateUrl: './net-transactions.component.html', styleUrls: ['./net-transactions.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -65,6 +63,9 @@ import { NetTransactionsDataSource } from './net-transactions-datasource'; ], }) export class NetTransactionsComponent implements OnInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + @ViewChild(MatPaginator, { static: true }) paginator!: MatPaginator; @ViewChild(MatSort, { static: true }) sort!: MatSort; @ViewChild('startDateElement', { static: true }) startDate!: ElementRef; @@ -86,10 +87,7 @@ export class NetTransactionsComponent implements OnInit { this.startDate.nativeElement.select(); } - constructor( - private route: ActivatedRoute, - private router: Router, - ) { + constructor() { this.form = new FormGroup({ startDate: new FormControl(new Date(), { nonNullable: true }), finishDate: new FormControl(new Date(), { nonNullable: true }), diff --git a/overlord/src/app/net-transactions/net-transactions.routes.ts b/overlord/src/app/net-transactions/net-transactions.routes.ts index edec9cb2..8545452c 100644 --- a/overlord/src/app/net-transactions/net-transactions.routes.ts +++ b/overlord/src/app/net-transactions/net-transactions.routes.ts @@ -1,7 +1,6 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; - import { NetTransactionsComponent } from './net-transactions.component'; import { netTransactionsResolver } from './net-transactions.resolver'; diff --git a/overlord/src/app/net-transactions/net-transactions.service.ts b/overlord/src/app/net-transactions/net-transactions.service.ts index cc6671ee..56c3ac2b 100644 --- a/overlord/src/app/net-transactions/net-transactions.service.ts +++ b/overlord/src/app/net-transactions/net-transactions.service.ts @@ -1,10 +1,9 @@ import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; import { ErrorLoggerService } from '../core/error-logger.service'; - import { NetTransactions } from './net-transactions'; const url = '/api/net-transactions'; @@ -14,10 +13,8 @@ const serviceName = 'NetTransactionsService'; providedIn: 'root', }) export class NetTransactionsService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); list(startDate: string | null, finishDate: string | null): Observable { const startDateWithSlash = startDate ? `/${startDate}` : ''; diff --git a/overlord/src/app/non-contact-purchase/non-contract-purchase.component.ts b/overlord/src/app/non-contact-purchase/non-contract-purchase.component.ts index 5fbff8a1..cb07d489 100644 --- a/overlord/src/app/non-contact-purchase/non-contract-purchase.component.ts +++ b/overlord/src/app/non-contact-purchase/non-contract-purchase.component.ts @@ -1,17 +1,17 @@ import { CurrencyPipe } from '@angular/common'; -import { Component, OnInit } from '@angular/core'; -import { MatCard, MatCardHeader, MatCardTitle, MatCardContent } from '@angular/material/card'; +import { Component, inject, OnInit } from '@angular/core'; +import { MatCard, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatHeaderRowDef, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, MatHeaderRow, - MatRowDef, + MatHeaderRowDef, MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, Router, RouterLink } from '@angular/router'; @@ -22,7 +22,6 @@ import { NonContractPurchaseDatasource } from './non-contract-purchase-datasourc selector: 'app-non-contract-purchase', templateUrl: './non-contract-purchase.component.html', styleUrls: ['./non-contract-purchase.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -43,15 +42,13 @@ import { NonContractPurchaseDatasource } from './non-contract-purchase-datasourc ], }) export class NonContractPurchaseComponent implements OnInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + info: NonContractPurchase[] = []; dataSource: NonContractPurchaseDatasource = new NonContractPurchaseDatasource(this.info); displayedColumns = ['date', 'vendor', 'product', 'contractPrice', 'purchasePrice']; - constructor( - private route: ActivatedRoute, - private router: Router, - ) {} - ngOnInit() { this.route.data.subscribe((value) => { const data = value as { info: NonContractPurchase[] }; diff --git a/overlord/src/app/non-contact-purchase/non-contract-purchase.routes.ts b/overlord/src/app/non-contact-purchase/non-contract-purchase.routes.ts index 65127034..ffb89dd7 100644 --- a/overlord/src/app/non-contact-purchase/non-contract-purchase.routes.ts +++ b/overlord/src/app/non-contact-purchase/non-contract-purchase.routes.ts @@ -1,7 +1,6 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; - import { NonContractPurchaseComponent } from './non-contract-purchase.component'; import { nonContractPurchaseResolver } from './non-contract-purchase.resolver'; diff --git a/overlord/src/app/non-contact-purchase/non-contract-purchase.service.ts b/overlord/src/app/non-contact-purchase/non-contract-purchase.service.ts index 4b46290f..c6cdb7b4 100644 --- a/overlord/src/app/non-contact-purchase/non-contract-purchase.service.ts +++ b/overlord/src/app/non-contact-purchase/non-contract-purchase.service.ts @@ -1,10 +1,9 @@ import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; import { ErrorLoggerService } from '../core/error-logger.service'; - import { NonContractPurchase } from './non-contract-purchase'; const url = '/api/non-contract-purchase'; @@ -14,10 +13,8 @@ const serviceName = 'NonContractPurchaseService'; providedIn: 'root', }) export class NonContractPurchaseService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); nonContractPurchase(): Observable { return this.http diff --git a/overlord/src/app/payment/payment-accounts.resolver.spec.ts b/overlord/src/app/payment/payment-accounts.resolver.spec.ts index 4adcfa76..82e1d710 100644 --- a/overlord/src/app/payment/payment-accounts.resolver.spec.ts +++ b/overlord/src/app/payment/payment-accounts.resolver.spec.ts @@ -2,7 +2,6 @@ import { TestBed } from '@angular/core/testing'; import { ResolveFn } from '@angular/router'; import { Account } from '../core/account'; - import { paymentAccountsResolver } from './payment-accounts.resolver'; describe('paymentAccountsResolver', () => { diff --git a/overlord/src/app/payment/payment-dialog.component.ts b/overlord/src/app/payment/payment-dialog.component.ts index 755a8361..819bdfb2 100644 --- a/overlord/src/app/payment/payment-dialog.component.ts +++ b/overlord/src/app/payment/payment-dialog.component.ts @@ -1,19 +1,19 @@ import { CdkScrollable } from '@angular/cdk/scrolling'; import { AsyncPipe, CurrencyPipe } from '@angular/common'; -import { Component, Inject, OnInit } from '@angular/core'; +import { Component, inject, OnInit } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; -import { MatAutocompleteSelectedEvent, MatAutocompleteTrigger, MatAutocomplete } from '@angular/material/autocomplete'; +import { MatAutocomplete, MatAutocompleteSelectedEvent, MatAutocompleteTrigger } from '@angular/material/autocomplete'; import { MatButton } from '@angular/material/button'; import { MatOption } from '@angular/material/core'; import { MAT_DIALOG_DATA, - MatDialogRef, - MatDialogTitle, - MatDialogContent, MatDialogActions, MatDialogClose, + MatDialogContent, + MatDialogRef, + MatDialogTitle, } from '@angular/material/dialog'; -import { MatFormField, MatLabel, MatHint, MatPrefix } from '@angular/material/form-field'; +import { MatFormField, MatHint, MatLabel, MatPrefix } from '@angular/material/form-field'; import { MatInput } from '@angular/material/input'; import { Observable, of as observableOf } from 'rxjs'; import { debounceTime, distinctUntilChanged, switchMap } from 'rxjs/operators'; @@ -29,7 +29,6 @@ import { MathService } from '../shared/math.service'; selector: 'app-payment-dialog', templateUrl: './payment-dialog.component.html', styleUrls: ['./payment-dialog.component.css'], - standalone: true, imports: [ MatDialogTitle, CdkScrollable, @@ -52,6 +51,15 @@ import { MathService } from '../shared/math.service'; ], }) export class PaymentDialogComponent implements OnInit { + dialogRef = inject>(MatDialogRef); + data = inject<{ + journal: Journal; + date: string; + }>(MAT_DIALOG_DATA); + + private math = inject(MathService); + private accountSer = inject(AccountService); + accounts: Observable; form: FormGroup<{ account: FormControl; @@ -61,12 +69,7 @@ export class PaymentDialogComponent implements OnInit { account: Account = new Account(); accBal: AccountBalance | null = null; - constructor( - public dialogRef: MatDialogRef, - @Inject(MAT_DIALOG_DATA) public data: { journal: Journal; date: string }, - private math: MathService, - private accountSer: AccountService, - ) { + constructor() { this.form = new FormGroup({ account: new FormControl(''), amount: new FormControl('', { nonNullable: true }), diff --git a/overlord/src/app/payment/payment.component.ts b/overlord/src/app/payment/payment.component.ts index a17ac174..747b5a2d 100644 --- a/overlord/src/app/payment/payment.component.ts +++ b/overlord/src/app/payment/payment.component.ts @@ -1,37 +1,38 @@ import { COMMA, ENTER } from '@angular/cdk/keycodes'; import { AsyncPipe, CurrencyPipe } from '@angular/common'; -import { AfterViewInit, Component, ElementRef, OnInit, ViewChild, HostListener } from '@angular/core'; +import { AfterViewInit, Component, ElementRef, HostListener, inject, OnInit, ViewChild } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; -import { MatAutocompleteSelectedEvent, MatAutocompleteTrigger, MatAutocomplete } from '@angular/material/autocomplete'; +import { MatAutocomplete, MatAutocompleteSelectedEvent, MatAutocompleteTrigger } from '@angular/material/autocomplete'; import { MatButton, MatIconButton } from '@angular/material/button'; import { MatCard, - MatCardHeader, - MatCardTitleGroup, - MatCardTitle, - MatCardContent, MatCardActions, + MatCardContent, + MatCardHeader, + MatCardTitle, + MatCardTitleGroup, } from '@angular/material/card'; -import { MatChipInputEvent, MatChipGrid, MatChipRow, MatChipRemove, MatChipInput } from '@angular/material/chips'; +import { MatChipGrid, MatChipInput, MatChipInputEvent, MatChipRemove, MatChipRow } from '@angular/material/chips'; import { MatOption } from '@angular/material/core'; -import { MatDatepickerInput, MatDatepickerToggle, MatDatepicker } from '@angular/material/datepicker'; +import { MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from '@angular/material/datepicker'; import { MatDialog } from '@angular/material/dialog'; -import { MatSuffix, MatFormField, MatLabel, MatPrefix, MatHint } from '@angular/material/form-field'; +import { MatFormField, MatHint, MatLabel, MatPrefix, MatSuffix } from '@angular/material/form-field'; import { MatIcon } from '@angular/material/icon'; import { MatInput } from '@angular/material/input'; import { MatSelect } from '@angular/material/select'; +import { MatSnackBar } from '@angular/material/snack-bar'; import { MatSort } from '@angular/material/sort'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatHeaderRowDef, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, MatHeaderRow, - MatRowDef, + MatHeaderRowDef, MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, Router } from '@angular/router'; import { round } from 'mathjs'; @@ -45,9 +46,6 @@ import { AccountBalance } from '../core/account-balance'; import { AccountService } from '../core/account.service'; import { DbFile } from '../core/db-file'; import { Journal } from '../core/journal'; -import { Tag } from '../tag/tag'; -import { TagService } from '../tag/tag.service'; -import { MatSnackBar } from '@angular/material/snack-bar'; import { User } from '../core/user'; import { Voucher } from '../core/voucher'; import { VoucherService } from '../core/voucher.service'; @@ -57,7 +55,8 @@ import { ImageDialogComponent } from '../shared/image-dialog/image-dialog.compon import { ImageService } from '../shared/image.service'; import { LocalTimePipe } from '../shared/local-time.pipe'; import { MathService } from '../shared/math.service'; - +import { Tag } from '../tag/tag'; +import { TagService } from '../tag/tag.service'; import { PaymentDataSource } from './payment-datasource'; import { PaymentDialogComponent } from './payment-dialog.component'; @@ -65,7 +64,6 @@ import { PaymentDialogComponent } from './payment-dialog.component'; selector: 'app-payment', templateUrl: './payment.component.html', styleUrls: ['./payment.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -112,6 +110,17 @@ import { PaymentDialogComponent } from './payment-dialog.component'; ], }) export class PaymentComponent implements OnInit, AfterViewInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + private dialog = inject(MatDialog); + private snackBar = inject(MatSnackBar); + auth = inject(AuthService); + private math = inject(MathService); + image = inject(ImageService); + private ser = inject(VoucherService); + private accountSer = inject(AccountService); + private tagSer = inject(TagService); + @ViewChild('accountElement', { static: true }) accountElement!: ElementRef; @ViewChild('dateElement', { static: true }) dateElement!: ElementRef; @ViewChild('tagInput') tagInput?: ElementRef; @@ -165,18 +174,7 @@ export class PaymentComponent implements OnInit, AfterViewInit { accounts: Observable; tags: Observable; - constructor( - private route: ActivatedRoute, - private router: Router, - private dialog: MatDialog, - private snackBar: MatSnackBar, - public auth: AuthService, - private math: MathService, - public image: ImageService, - private ser: VoucherService, - private accountSer: AccountService, - private tagSer: TagService, - ) { + constructor() { this.account = null; this.form = new FormGroup({ date: new FormControl(new Date(), { nonNullable: true }), diff --git a/overlord/src/app/payment/payment.resolver.spec.ts b/overlord/src/app/payment/payment.resolver.spec.ts index d4a89b8c..8a7c9e5c 100644 --- a/overlord/src/app/payment/payment.resolver.spec.ts +++ b/overlord/src/app/payment/payment.resolver.spec.ts @@ -2,7 +2,6 @@ import { TestBed } from '@angular/core/testing'; import { ResolveFn } from '@angular/router'; import { Voucher } from '../core/voucher'; - import { paymentResolver } from './payment.resolver'; describe('paymentResolver', () => { diff --git a/overlord/src/app/payment/payment.routes.ts b/overlord/src/app/payment/payment.routes.ts index 0e7f7c83..c47d5247 100644 --- a/overlord/src/app/payment/payment.routes.ts +++ b/overlord/src/app/payment/payment.routes.ts @@ -1,7 +1,6 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; - import { paymentAccountsResolver } from './payment-accounts.resolver'; import { PaymentComponent } from './payment.component'; import { paymentResolver } from './payment.resolver'; diff --git a/overlord/src/app/period/period-detail/period-detail.component.ts b/overlord/src/app/period/period-detail/period-detail.component.ts index 425ac8b7..6f84a98e 100644 --- a/overlord/src/app/period/period-detail/period-detail.component.ts +++ b/overlord/src/app/period/period-detail/period-detail.component.ts @@ -1,15 +1,15 @@ -import { Component, ElementRef, HostListener, OnInit, ViewChild } from '@angular/core'; +import { Component, ElementRef, HostListener, inject, OnInit, ViewChild } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { MatButton } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitle, MatCardContent, MatCardActions } from '@angular/material/card'; -import { MatDatepickerInput, MatDatepickerToggle, MatDatepicker } from '@angular/material/datepicker'; +import { MatCard, MatCardActions, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card'; +import { MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from '@angular/material/datepicker'; import { MatDialog } from '@angular/material/dialog'; import { MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field'; import { MatInput } from '@angular/material/input'; +import { MatSnackBar } from '@angular/material/snack-bar'; import { ActivatedRoute, Router } from '@angular/router'; import moment from 'moment'; -import { MatSnackBar } from '@angular/material/snack-bar'; import { ConfirmDialogComponent } from '../../shared/confirm-dialog/confirm-dialog.component'; import { Period } from '../period'; import { PeriodService } from '../period.service'; @@ -18,7 +18,6 @@ import { PeriodService } from '../period.service'; selector: 'app-period-detail', templateUrl: './period-detail.component.html', styleUrls: ['./period-detail.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -37,6 +36,12 @@ import { PeriodService } from '../period.service'; ], }) export class PeriodDetailComponent implements OnInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + private dialog = inject(MatDialog); + private snackBar = inject(MatSnackBar); + private ser = inject(PeriodService); + @ViewChild('startDateElement', { static: true }) startDate!: ElementRef; form: FormGroup<{ validFrom: FormControl; @@ -52,13 +57,7 @@ export class PeriodDetailComponent implements OnInit { this.startDate.nativeElement.select(); } - constructor( - private route: ActivatedRoute, - private router: Router, - private dialog: MatDialog, - private snackBar: MatSnackBar, - private ser: PeriodService, - ) { + constructor() { this.form = new FormGroup({ validFrom: new FormControl(new Date(), { nonNullable: true }), validTill: new FormControl(new Date(), { nonNullable: true }), diff --git a/overlord/src/app/period/period-list/period-list.component.ts b/overlord/src/app/period/period-list/period-list.component.ts index b8fb9ebf..894d2bf8 100644 --- a/overlord/src/app/period/period-list/period-list.component.ts +++ b/overlord/src/app/period/period-list/period-list.component.ts @@ -1,30 +1,28 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, inject, OnInit } from '@angular/core'; import { MatAnchor } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitleGroup, MatCardTitle, MatCardContent } from '@angular/material/card'; +import { MatCard, MatCardContent, MatCardHeader, MatCardTitle, MatCardTitleGroup } from '@angular/material/card'; import { MatIcon } from '@angular/material/icon'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatHeaderRowDef, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, MatHeaderRow, - MatRowDef, + MatHeaderRowDef, MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, RouterLink } from '@angular/router'; import { Period } from '../period'; - import { PeriodListDataSource } from './period-list-datasource'; @Component({ selector: 'app-period-list', templateUrl: './period-list.component.html', styleUrls: ['./period-list.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -47,6 +45,8 @@ import { PeriodListDataSource } from './period-list-datasource'; ], }) export class PeriodListComponent implements OnInit { + private route = inject(ActivatedRoute); + dataSource: PeriodListDataSource; list: Period[] = []; @@ -54,7 +54,7 @@ export class PeriodListComponent implements OnInit { /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = ['validFrom', 'validTill']; - constructor(private route: ActivatedRoute) { + constructor() { this.dataSource = new PeriodListDataSource(this.list); } diff --git a/overlord/src/app/period/period.routes.ts b/overlord/src/app/period/period.routes.ts index bf5e1ba3..72caa2e0 100644 --- a/overlord/src/app/period/period.routes.ts +++ b/overlord/src/app/period/period.routes.ts @@ -2,10 +2,9 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; import { costCentreListResolver } from '../cost-centre/cost-centre-list.resolver'; - import { PeriodDetailComponent } from './period-detail/period-detail.component'; -import { PeriodListComponent } from './period-list/period-list.component'; import { periodListResolver } from './period-list.resolver'; +import { PeriodListComponent } from './period-list/period-list.component'; import { periodResolver } from './period.resolver'; export const routes: Routes = [ diff --git a/overlord/src/app/period/period.service.ts b/overlord/src/app/period/period.service.ts index 7e6fc20b..823962e4 100644 --- a/overlord/src/app/period/period.service.ts +++ b/overlord/src/app/period/period.service.ts @@ -1,10 +1,9 @@ import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; import { ErrorLoggerService } from '../core/error-logger.service'; - import { Period } from './period'; const url = '/api/periods'; @@ -12,10 +11,8 @@ const serviceName = 'PeriodService'; @Injectable({ providedIn: 'root' }) export class PeriodService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); get(id: string | null): Observable { const getUrl: string = id === null ? `${url}` : `${url}/${id}`; diff --git a/overlord/src/app/product-group/product-group-detail/product-group-detail.component.ts b/overlord/src/app/product-group/product-group-detail/product-group-detail.component.ts index dfa031b3..8a8811d3 100644 --- a/overlord/src/app/product-group/product-group-detail/product-group-detail.component.ts +++ b/overlord/src/app/product-group/product-group-detail/product-group-detail.component.ts @@ -1,21 +1,20 @@ -import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; +import { AfterViewInit, Component, ElementRef, inject, OnInit, ViewChild } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { MatButton } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitle, MatCardContent, MatCardActions } from '@angular/material/card'; +import { MatCard, MatCardActions, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card'; import { MatCheckbox } from '@angular/material/checkbox'; import { MatFormField, MatLabel } from '@angular/material/form-field'; import { MatInput } from '@angular/material/input'; +import { MatSnackBar } from '@angular/material/snack-bar'; import { ActivatedRoute, Router } from '@angular/router'; import { ProductGroup } from '../../core/product-group'; -import { MatSnackBar } from '@angular/material/snack-bar'; import { ProductGroupService } from '../product-group.service'; @Component({ selector: 'app-product-group-detail', templateUrl: './product-group-detail.component.html', styleUrls: ['./product-group-detail.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -31,6 +30,11 @@ import { ProductGroupService } from '../product-group.service'; ], }) export class ProductGroupDetailComponent implements OnInit, AfterViewInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + private snackBar = inject(MatSnackBar); + private ser = inject(ProductGroupService); + @ViewChild('nameElement', { static: true }) nameElement!: ElementRef; form: FormGroup<{ name: FormControl; @@ -40,12 +44,7 @@ export class ProductGroupDetailComponent implements OnInit, AfterViewInit { item: ProductGroup = new ProductGroup(); - constructor( - private route: ActivatedRoute, - private router: Router, - private snackBar: MatSnackBar, - private ser: ProductGroupService, - ) { + constructor() { this.form = new FormGroup({ name: new FormControl(null), nutritional: new FormControl(false, { nonNullable: true }), diff --git a/overlord/src/app/product-group/product-group-list.resolver.spec.ts b/overlord/src/app/product-group/product-group-list.resolver.spec.ts index 7fdde6fb..a5650248 100644 --- a/overlord/src/app/product-group/product-group-list.resolver.spec.ts +++ b/overlord/src/app/product-group/product-group-list.resolver.spec.ts @@ -2,7 +2,6 @@ import { TestBed } from '@angular/core/testing'; import { ResolveFn } from '@angular/router'; import { ProductGroup } from '../core/product-group'; - import { productGroupListResolver } from './product-group-list.resolver'; describe('productGroupListResolver', () => { diff --git a/overlord/src/app/product-group/product-group-list.resolver.ts b/overlord/src/app/product-group/product-group-list.resolver.ts index c61beea9..6c70c535 100644 --- a/overlord/src/app/product-group/product-group-list.resolver.ts +++ b/overlord/src/app/product-group/product-group-list.resolver.ts @@ -2,7 +2,6 @@ import { inject } from '@angular/core'; import { ResolveFn } from '@angular/router'; import { ProductGroup } from '../core/product-group'; - import { ProductGroupService } from './product-group.service'; export const productGroupListResolver: ResolveFn = () => { diff --git a/overlord/src/app/product-group/product-group-list/product-group-list.component.ts b/overlord/src/app/product-group/product-group-list/product-group-list.component.ts index c8be799e..f6534e21 100644 --- a/overlord/src/app/product-group/product-group-list/product-group-list.component.ts +++ b/overlord/src/app/product-group/product-group-list/product-group-list.component.ts @@ -1,32 +1,30 @@ -import { Component, OnInit, ViewChild } from '@angular/core'; +import { Component, inject, OnInit, ViewChild } from '@angular/core'; import { MatAnchor } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitleGroup, MatCardTitle, MatCardContent } from '@angular/material/card'; +import { MatCard, MatCardContent, MatCardHeader, MatCardTitle, MatCardTitleGroup } from '@angular/material/card'; import { MatIcon } from '@angular/material/icon'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort, MatSortHeader } from '@angular/material/sort'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatHeaderRowDef, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, MatHeaderRow, - MatRowDef, + MatHeaderRowDef, MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, RouterLink } from '@angular/router'; import { ProductGroup } from '../../core/product-group'; - import { ProductGroupListDataSource } from './product-group-list-datasource'; @Component({ selector: 'app-product-group-list', templateUrl: './product-group-list.component.html', styleUrls: ['./product-group-list.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -52,6 +50,8 @@ import { ProductGroupListDataSource } from './product-group-list-datasource'; ], }) export class ProductGroupListComponent implements OnInit { + private route = inject(ActivatedRoute); + @ViewChild(MatPaginator, { static: true }) paginator!: MatPaginator; @ViewChild(MatSort, { static: true }) sort!: MatSort; list: ProductGroup[] = []; @@ -59,8 +59,6 @@ export class ProductGroupListComponent implements OnInit { /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = ['name', 'isFixture']; - constructor(private route: ActivatedRoute) {} - ngOnInit() { this.route.data.subscribe((value) => { const data = value as { list: ProductGroup[] }; diff --git a/overlord/src/app/product-group/product-group.resolver.spec.ts b/overlord/src/app/product-group/product-group.resolver.spec.ts index 0e5c4ab1..4f5b5a86 100644 --- a/overlord/src/app/product-group/product-group.resolver.spec.ts +++ b/overlord/src/app/product-group/product-group.resolver.spec.ts @@ -2,7 +2,6 @@ import { TestBed } from '@angular/core/testing'; import { ResolveFn } from '@angular/router'; import { ProductGroup } from '../core/product-group'; - import { productGroupResolver } from './product-group.resolver'; describe('productGroupResolver', () => { diff --git a/overlord/src/app/product-group/product-group.resolver.ts b/overlord/src/app/product-group/product-group.resolver.ts index 277c9565..57742f52 100644 --- a/overlord/src/app/product-group/product-group.resolver.ts +++ b/overlord/src/app/product-group/product-group.resolver.ts @@ -2,7 +2,6 @@ import { inject } from '@angular/core'; import { ResolveFn } from '@angular/router'; import { ProductGroup } from '../core/product-group'; - import { ProductGroupService } from './product-group.service'; export const productGroupResolver: ResolveFn = (route) => { diff --git a/overlord/src/app/product-group/product-group.routes.ts b/overlord/src/app/product-group/product-group.routes.ts index 7c5851f1..de7f7113 100644 --- a/overlord/src/app/product-group/product-group.routes.ts +++ b/overlord/src/app/product-group/product-group.routes.ts @@ -1,10 +1,9 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; - import { ProductGroupDetailComponent } from './product-group-detail/product-group-detail.component'; -import { ProductGroupListComponent } from './product-group-list/product-group-list.component'; import { productGroupListResolver } from './product-group-list.resolver'; +import { ProductGroupListComponent } from './product-group-list/product-group-list.component'; import { productGroupResolver } from './product-group.resolver'; export const routes: Routes = [ diff --git a/overlord/src/app/product-group/product-group.service.ts b/overlord/src/app/product-group/product-group.service.ts index de4cc245..2649f7c2 100644 --- a/overlord/src/app/product-group/product-group.service.ts +++ b/overlord/src/app/product-group/product-group.service.ts @@ -1,5 +1,5 @@ import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; @@ -13,10 +13,8 @@ const serviceName = 'ProductGroupService'; providedIn: 'root', }) export class ProductGroupService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); get(id: string | null): Observable { const getUrl: string = id === null ? `${url}` : `${url}/${id}`; diff --git a/overlord/src/app/product-ledger/product-ledger.component.ts b/overlord/src/app/product-ledger/product-ledger.component.ts index e93fe2a8..ddd49e7d 100644 --- a/overlord/src/app/product-ledger/product-ledger.component.ts +++ b/overlord/src/app/product-ledger/product-ledger.component.ts @@ -1,31 +1,31 @@ -import { AsyncPipe, DecimalPipe, CurrencyPipe } from '@angular/common'; -import { AfterViewInit, Component, ElementRef, HostListener, OnInit, ViewChild } from '@angular/core'; +import { AsyncPipe, CurrencyPipe, DecimalPipe } from '@angular/common'; +import { AfterViewInit, Component, ElementRef, HostListener, inject, OnInit, ViewChild } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; -import { MatAutocompleteSelectedEvent, MatAutocompleteTrigger, MatAutocomplete } from '@angular/material/autocomplete'; -import { MatIconButton, MatButton } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitleGroup, MatCardTitle, MatCardContent } from '@angular/material/card'; +import { MatAutocomplete, MatAutocompleteSelectedEvent, MatAutocompleteTrigger } from '@angular/material/autocomplete'; +import { MatButton, MatIconButton } from '@angular/material/button'; +import { MatCard, MatCardContent, MatCardHeader, MatCardTitle, MatCardTitleGroup } from '@angular/material/card'; import { MatOption } from '@angular/material/core'; -import { MatDatepickerInput, MatDatepickerToggle, MatDatepicker } from '@angular/material/datepicker'; +import { MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from '@angular/material/datepicker'; import { MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field'; import { MatIcon } from '@angular/material/icon'; import { MatInput } from '@angular/material/input'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort, MatSortHeader } from '@angular/material/sort'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatFooterCellDef, + MatCellDef, + MatColumnDef, MatFooterCell, - MatHeaderRowDef, - MatHeaderRow, - MatRowDef, - MatRow, - MatFooterRowDef, + MatFooterCellDef, MatFooterRow, + MatFooterRowDef, + MatHeaderCell, + MatHeaderCellDef, + MatHeaderRow, + MatHeaderRowDef, + MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, Router, RouterLink } from '@angular/router'; import moment from 'moment'; @@ -36,7 +36,6 @@ import { Product } from '../core/product'; import { ProductSku } from '../core/product-sku'; import { ProductService } from '../product/product.service'; import { ToCsvService } from '../shared/to-csv.service'; - import { ProductLedger } from './product-ledger'; import { ProductLedgerDataSource } from './product-ledger-datasource'; import { ProductLedgerService } from './product-ledger.service'; @@ -45,7 +44,6 @@ import { ProductLedgerService } from './product-ledger.service'; selector: 'app-product-ledger', templateUrl: './product-ledger.component.html', styleUrls: ['./product-ledger.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -90,6 +88,12 @@ import { ProductLedgerService } from './product-ledger.service'; ], }) export class ProductLedgerComponent implements OnInit, AfterViewInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + private toCsv = inject(ToCsvService); + private ser = inject(ProductLedgerService); + private productSer = inject(ProductService); + @ViewChild('productElement', { static: true }) productElement!: ElementRef; @ViewChild(MatPaginator, { static: true }) paginator!: MatPaginator; @ViewChild(MatSort, { static: true }) sort!: MatSort; @@ -132,13 +136,7 @@ export class ProductLedgerComponent implements OnInit, AfterViewInit { this.startDate.nativeElement.select(); } - constructor( - private route: ActivatedRoute, - private router: Router, - private toCsv: ToCsvService, - private ser: ProductLedgerService, - private productSer: ProductService, - ) { + constructor() { this.form = new FormGroup({ startDate: new FormControl(new Date(), { nonNullable: true }), finishDate: new FormControl(new Date(), { nonNullable: true }), diff --git a/overlord/src/app/product-ledger/product-ledger.routes.ts b/overlord/src/app/product-ledger/product-ledger.routes.ts index 4720d8e4..dfb4947b 100644 --- a/overlord/src/app/product-ledger/product-ledger.routes.ts +++ b/overlord/src/app/product-ledger/product-ledger.routes.ts @@ -1,7 +1,6 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; - import { ProductLedgerComponent } from './product-ledger.component'; import { productLedgerResolver } from './product-ledger.resolver'; diff --git a/overlord/src/app/product-ledger/product-ledger.service.ts b/overlord/src/app/product-ledger/product-ledger.service.ts index 249014c5..50d3765c 100644 --- a/overlord/src/app/product-ledger/product-ledger.service.ts +++ b/overlord/src/app/product-ledger/product-ledger.service.ts @@ -1,10 +1,9 @@ import { HttpClient, HttpParams } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; import { ErrorLoggerService } from '../core/error-logger.service'; - import { ProductLedger } from './product-ledger'; const url = '/api/product-ledger'; @@ -14,10 +13,8 @@ const serviceName = 'ProductLedgerService'; providedIn: 'root', }) export class ProductLedgerService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); list(id: string | null, startDate: string | null, finishDate: string | null): Observable { const listUrl = id === null ? url : `${url}/${id}`; diff --git a/overlord/src/app/product-ledger/product-ledger.ts b/overlord/src/app/product-ledger/product-ledger.ts index 6e6f31f2..4248b977 100644 --- a/overlord/src/app/product-ledger/product-ledger.ts +++ b/overlord/src/app/product-ledger/product-ledger.ts @@ -1,5 +1,4 @@ import { Product } from '../core/product'; - import { ProductLedgerItem } from './product-ledger-item'; export class ProductLedger { diff --git a/overlord/src/app/product/product-detail/product-detail-dialog.component.ts b/overlord/src/app/product/product-detail/product-detail-dialog.component.ts index 40041916..8aaaeca3 100644 --- a/overlord/src/app/product/product-detail/product-detail-dialog.component.ts +++ b/overlord/src/app/product/product-detail/product-detail-dialog.component.ts @@ -1,14 +1,14 @@ import { CdkScrollable } from '@angular/cdk/scrolling'; -import { Component, Inject, OnInit } from '@angular/core'; +import { Component, inject, OnInit } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { MatButton } from '@angular/material/button'; import { MAT_DIALOG_DATA, - MatDialogRef, - MatDialogTitle, - MatDialogContent, MatDialogActions, MatDialogClose, + MatDialogContent, + MatDialogRef, + MatDialogTitle, } from '@angular/material/dialog'; import { MatFormField, MatLabel } from '@angular/material/form-field'; import { MatInput } from '@angular/material/input'; @@ -19,7 +19,6 @@ import { StockKeepingUnit } from '../../core/product'; selector: 'app-journal-dialog', templateUrl: './product-detail-dialog.component.html', styleUrls: ['./product-detail-dialog.component.css'], - standalone: true, imports: [ MatDialogTitle, CdkScrollable, @@ -34,6 +33,13 @@ import { StockKeepingUnit } from '../../core/product'; ], }) export class ProductDetailDialogComponent implements OnInit { + dialogRef = inject>(MatDialogRef); + data = inject<{ + item: StockKeepingUnit; + isSold: boolean; + isPurchased: boolean; + }>(MAT_DIALOG_DATA); + form: FormGroup<{ units: FormControl; fraction: FormControl; @@ -42,11 +48,7 @@ export class ProductDetailDialogComponent implements OnInit { salePrice: FormControl; }>; - constructor( - public dialogRef: MatDialogRef, - @Inject(MAT_DIALOG_DATA) - public data: { item: StockKeepingUnit; isSold: boolean; isPurchased: boolean }, - ) { + constructor() { this.form = new FormGroup({ units: new FormControl('', { nonNullable: true }), fraction: new FormControl(1, { nonNullable: true }), diff --git a/overlord/src/app/product/product-detail/product-detail.component.ts b/overlord/src/app/product/product-detail/product-detail.component.ts index 9bafbafc..94649cbe 100644 --- a/overlord/src/app/product/product-detail/product-detail.component.ts +++ b/overlord/src/app/product/product-detail/product-detail.component.ts @@ -1,8 +1,8 @@ import { CurrencyPipe } from '@angular/common'; -import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; +import { AfterViewInit, Component, ElementRef, inject, OnInit, ViewChild } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { MatButton, MatIconButton } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitle, MatCardContent, MatCardActions } from '@angular/material/card'; +import { MatCard, MatCardActions, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card'; import { MatCheckbox } from '@angular/material/checkbox'; import { MatOption } from '@angular/material/core'; import { MatDialog } from '@angular/material/dialog'; @@ -10,27 +10,26 @@ import { MatFormField, MatLabel } from '@angular/material/form-field'; import { MatIcon } from '@angular/material/icon'; import { MatInput } from '@angular/material/input'; import { MatSelect } from '@angular/material/select'; +import { MatSnackBar } from '@angular/material/snack-bar'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatHeaderRowDef, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, MatHeaderRow, - MatRowDef, + MatHeaderRowDef, MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, Router } from '@angular/router'; import { BehaviorSubject } from 'rxjs'; import { Product, StockKeepingUnit } from '../../core/product'; import { ProductGroup } from '../../core/product-group'; -import { MatSnackBar } from '@angular/material/snack-bar'; import { ConfirmDialogComponent } from '../../shared/confirm-dialog/confirm-dialog.component'; import { ProductService } from '../product.service'; - import { ProductDetailDatasource } from './product-detail-datasource'; import { ProductDetailDialogComponent } from './product-detail-dialog.component'; @@ -38,7 +37,6 @@ import { ProductDetailDialogComponent } from './product-detail-dialog.component' selector: 'app-product-detail', templateUrl: './product-detail.component.html', styleUrls: ['./product-detail.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -69,6 +67,12 @@ import { ProductDetailDialogComponent } from './product-detail-dialog.component' ], }) export class ProductDetailComponent implements OnInit, AfterViewInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + private dialog = inject(MatDialog); + private snackBar = inject(MatSnackBar); + private ser = inject(ProductService); + @ViewChild('nameElement', { static: true }) nameElement!: ElementRef; form: FormGroup<{ code: FormControl; @@ -111,13 +115,7 @@ export class ProductDetailComponent implements OnInit, AfterViewInit { displayedColumns = ['units', 'fraction', 'yield', 'costPrice', 'salePrice', 'action']; - constructor( - private route: ActivatedRoute, - private router: Router, - private dialog: MatDialog, - private snackBar: MatSnackBar, - private ser: ProductService, - ) { + constructor() { this.form = new FormGroup({ code: new FormControl({ value: 0, disabled: true }, { nonNullable: true }), name: new FormControl(null), diff --git a/overlord/src/app/product/product-list.resolver.spec.ts b/overlord/src/app/product/product-list.resolver.spec.ts index bc481571..eaeff3e7 100644 --- a/overlord/src/app/product/product-list.resolver.spec.ts +++ b/overlord/src/app/product/product-list.resolver.spec.ts @@ -2,7 +2,6 @@ import { TestBed } from '@angular/core/testing'; import { ResolveFn } from '@angular/router'; import { Product } from '../core/product'; - import { productListResolver } from './product-list.resolver'; describe('productListResolver', () => { diff --git a/overlord/src/app/product/product-list.resolver.ts b/overlord/src/app/product/product-list.resolver.ts index c50e3549..6746a82b 100644 --- a/overlord/src/app/product/product-list.resolver.ts +++ b/overlord/src/app/product/product-list.resolver.ts @@ -2,7 +2,6 @@ import { inject } from '@angular/core'; import { ResolveFn } from '@angular/router'; import { Product } from '../core/product'; - import { ProductService } from './product.service'; export const productListResolver: ResolveFn = () => { diff --git a/overlord/src/app/product/product-list/product-list.component.ts b/overlord/src/app/product/product-list/product-list.component.ts index f8436bb4..1b3a0189 100644 --- a/overlord/src/app/product/product-list/product-list.component.ts +++ b/overlord/src/app/product/product-list/product-list.component.ts @@ -1,24 +1,24 @@ -import { PercentPipe, CurrencyPipe } from '@angular/common'; -import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; +import { CurrencyPipe, PercentPipe } from '@angular/common'; +import { AfterViewInit, Component, ElementRef, inject, OnInit, ViewChild } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; -import { MatIconButton, MatAnchor } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitleGroup, MatCardTitle, MatCardContent } from '@angular/material/card'; +import { MatAnchor, MatIconButton } from '@angular/material/button'; +import { MatCard, MatCardContent, MatCardHeader, MatCardTitle, MatCardTitleGroup } from '@angular/material/card'; import { MatFormField, MatLabel } from '@angular/material/form-field'; import { MatIcon } from '@angular/material/icon'; import { MatInput } from '@angular/material/input'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort, MatSortHeader } from '@angular/material/sort'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatHeaderRowDef, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, MatHeaderRow, - MatRowDef, + MatHeaderRowDef, MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, RouterLink } from '@angular/router'; import { Observable } from 'rxjs'; @@ -26,14 +26,12 @@ import { debounceTime, distinctUntilChanged } from 'rxjs/operators'; import { Product } from '../../core/product'; import { ToCsvService } from '../../shared/to-csv.service'; - import { ProductListDataSource } from './product-list-datasource'; @Component({ selector: 'app-product-list', templateUrl: './product-list.component.html', styleUrls: ['./product-list.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -66,6 +64,9 @@ import { ProductListDataSource } from './product-list-datasource'; ], }) export class ProductListComponent implements OnInit, AfterViewInit { + private route = inject(ActivatedRoute); + private toCsv = inject(ToCsvService); + @ViewChild('filterElement', { static: true }) filterElement!: ElementRef; @ViewChild(MatPaginator, { static: true }) paginator!: MatPaginator; @ViewChild(MatSort, { static: true }) sort!: MatSort; @@ -81,10 +82,7 @@ export class ProductListComponent implements OnInit, AfterViewInit { private _showExtended = true; - constructor( - private route: ActivatedRoute, - private toCsv: ToCsvService, - ) { + constructor() { this.showExtended = true; this.form = new FormGroup({ filter: new FormControl('', { nonNullable: true }), diff --git a/overlord/src/app/product/product.resolver.spec.ts b/overlord/src/app/product/product.resolver.spec.ts index cbbaed07..9962a7e0 100644 --- a/overlord/src/app/product/product.resolver.spec.ts +++ b/overlord/src/app/product/product.resolver.spec.ts @@ -2,7 +2,6 @@ import { TestBed } from '@angular/core/testing'; import { ResolveFn } from '@angular/router'; import { Product } from '../core/product'; - import { productResolver } from './product.resolver'; describe('productResolver', () => { diff --git a/overlord/src/app/product/product.resolver.ts b/overlord/src/app/product/product.resolver.ts index 548a4816..ef916305 100644 --- a/overlord/src/app/product/product.resolver.ts +++ b/overlord/src/app/product/product.resolver.ts @@ -2,7 +2,6 @@ import { inject } from '@angular/core'; import { ResolveFn } from '@angular/router'; import { Product } from '../core/product'; - import { ProductService } from './product.service'; export const productResolver: ResolveFn = (route) => { diff --git a/overlord/src/app/product/product.routes.ts b/overlord/src/app/product/product.routes.ts index b7d56204..2977c94b 100644 --- a/overlord/src/app/product/product.routes.ts +++ b/overlord/src/app/product/product.routes.ts @@ -2,10 +2,9 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; import { productGroupListResolver } from '../product-group/product-group-list.resolver'; - import { ProductDetailComponent } from './product-detail/product-detail.component'; -import { ProductListComponent } from './product-list/product-list.component'; import { productListResolver } from './product-list.resolver'; +import { ProductListComponent } from './product-list/product-list.component'; import { productResolver } from './product.resolver'; export const routes: Routes = [ diff --git a/overlord/src/app/product/product.service.ts b/overlord/src/app/product/product.service.ts index f6680596..534327df 100644 --- a/overlord/src/app/product/product.service.ts +++ b/overlord/src/app/product/product.service.ts @@ -1,5 +1,5 @@ import { HttpClient, HttpParams } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; @@ -12,10 +12,8 @@ const serviceName = 'ProductService'; @Injectable({ providedIn: 'root' }) export class ProductService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); get(id: string | null): Observable { const getUrl: string = id === null ? `${url}` : `${url}/${id}`; diff --git a/overlord/src/app/profit-loss/profit-loss.component.ts b/overlord/src/app/profit-loss/profit-loss.component.ts index 5a59a8af..44feb68e 100644 --- a/overlord/src/app/profit-loss/profit-loss.component.ts +++ b/overlord/src/app/profit-loss/profit-loss.component.ts @@ -1,28 +1,28 @@ import { CurrencyPipe } from '@angular/common'; -import { Component, ElementRef, HostListener, OnInit, ViewChild } from '@angular/core'; +import { Component, ElementRef, HostListener, inject, OnInit, ViewChild } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { MatButton } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitle, MatCardContent } from '@angular/material/card'; -import { MatDatepickerInput, MatDatepickerToggle, MatDatepicker } from '@angular/material/datepicker'; +import { MatCard, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card'; +import { MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from '@angular/material/datepicker'; import { MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field'; import { MatInput } from '@angular/material/input'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort, MatSortHeader } from '@angular/material/sort'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatFooterCellDef, + MatCellDef, + MatColumnDef, MatFooterCell, - MatHeaderRowDef, - MatHeaderRow, - MatRowDef, - MatRow, - MatFooterRowDef, + MatFooterCellDef, MatFooterRow, + MatFooterRowDef, + MatHeaderCell, + MatHeaderCellDef, + MatHeaderRow, + MatHeaderRowDef, + MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, Router } from '@angular/router'; import moment from 'moment'; @@ -34,7 +34,6 @@ import { ProfitLossDataSource } from './profit-loss-datasource'; selector: 'app-profit-loss', templateUrl: './profit-loss.component.html', styleUrls: ['./profit-loss.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -70,6 +69,9 @@ import { ProfitLossDataSource } from './profit-loss-datasource'; ], }) export class ProfitLossComponent implements OnInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + @ViewChild(MatPaginator, { static: true }) paginator!: MatPaginator; @ViewChild(MatSort, { static: true }) sort!: MatSort; @ViewChild('startDateElement', { static: true }) startDate!: ElementRef; @@ -91,10 +93,7 @@ export class ProfitLossComponent implements OnInit { this.startDate.nativeElement.select(); } - constructor( - private route: ActivatedRoute, - private router: Router, - ) { + constructor() { this.form = new FormGroup({ startDate: new FormControl(new Date(), { nonNullable: true }), finishDate: new FormControl(new Date(), { nonNullable: true }), diff --git a/overlord/src/app/profit-loss/profit-loss.routes.ts b/overlord/src/app/profit-loss/profit-loss.routes.ts index 86f7852c..87d6938a 100644 --- a/overlord/src/app/profit-loss/profit-loss.routes.ts +++ b/overlord/src/app/profit-loss/profit-loss.routes.ts @@ -1,7 +1,6 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; - import { ProfitLossComponent } from './profit-loss.component'; import { profitLossResolver } from './profit-loss.resolver'; diff --git a/overlord/src/app/profit-loss/profit-loss.service.ts b/overlord/src/app/profit-loss/profit-loss.service.ts index 6db728c8..3be73723 100644 --- a/overlord/src/app/profit-loss/profit-loss.service.ts +++ b/overlord/src/app/profit-loss/profit-loss.service.ts @@ -1,10 +1,9 @@ import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; import { ErrorLoggerService } from '../core/error-logger.service'; - import { ProfitLoss } from './profit-loss'; const url = '/api/profit-loss'; @@ -14,10 +13,8 @@ const serviceName = 'ProfitLossService'; providedIn: 'root', }) export class ProfitLossService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); list(startDate: string | null, finishDate: string | null): Observable { const startDateWithSlash = startDate ? `/${startDate}` : ''; diff --git a/overlord/src/app/purchase-entries/purchase-entries.component.ts b/overlord/src/app/purchase-entries/purchase-entries.component.ts index 78360ba7..4849711e 100644 --- a/overlord/src/app/purchase-entries/purchase-entries.component.ts +++ b/overlord/src/app/purchase-entries/purchase-entries.component.ts @@ -1,24 +1,24 @@ -import { DecimalPipe, PercentPipe, CurrencyPipe } from '@angular/common'; -import { Component, ElementRef, HostListener, OnInit, ViewChild } from '@angular/core'; +import { CurrencyPipe, DecimalPipe, PercentPipe } from '@angular/common'; +import { Component, ElementRef, HostListener, inject, OnInit, ViewChild } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { MatButton } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitle, MatCardContent } from '@angular/material/card'; -import { MatDatepickerInput, MatDatepickerToggle, MatDatepicker } from '@angular/material/datepicker'; +import { MatCard, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card'; +import { MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from '@angular/material/datepicker'; import { MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field'; import { MatInput } from '@angular/material/input'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort, MatSortHeader } from '@angular/material/sort'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatHeaderRowDef, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, MatHeaderRow, - MatRowDef, + MatHeaderRowDef, MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, Router, RouterLink } from '@angular/router'; import moment from 'moment'; @@ -30,7 +30,6 @@ import { PurchaseEntriesDataSource } from './purchase-entries-datasource'; selector: 'app-purchase-entries', templateUrl: './purchase-entries.component.html', styleUrls: ['./purchase-entries.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -65,6 +64,9 @@ import { PurchaseEntriesDataSource } from './purchase-entries-datasource'; ], }) export class PurchaseEntriesComponent implements OnInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + @ViewChild(MatPaginator, { static: true }) paginator!: MatPaginator; @ViewChild(MatSort, { static: true }) sort!: MatSort; @ViewChild('startDateElement', { static: true }) startDate!: ElementRef; @@ -86,10 +88,7 @@ export class PurchaseEntriesComponent implements OnInit { this.startDate.nativeElement.select(); } - constructor( - private route: ActivatedRoute, - private router: Router, - ) { + constructor() { this.form = new FormGroup({ startDate: new FormControl(new Date(), { nonNullable: true }), finishDate: new FormControl(new Date(), { nonNullable: true }), diff --git a/overlord/src/app/purchase-entries/purchase-entries.routes.ts b/overlord/src/app/purchase-entries/purchase-entries.routes.ts index 21dd8553..20acbb33 100644 --- a/overlord/src/app/purchase-entries/purchase-entries.routes.ts +++ b/overlord/src/app/purchase-entries/purchase-entries.routes.ts @@ -1,7 +1,6 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; - import { PurchaseEntriesComponent } from './purchase-entries.component'; import { purchaseEntriesResolver } from './purchase-entries.resolver'; diff --git a/overlord/src/app/purchase-entries/purchase-entries.service.ts b/overlord/src/app/purchase-entries/purchase-entries.service.ts index 6f496792..ab08f57b 100644 --- a/overlord/src/app/purchase-entries/purchase-entries.service.ts +++ b/overlord/src/app/purchase-entries/purchase-entries.service.ts @@ -1,10 +1,9 @@ import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; import { ErrorLoggerService } from '../core/error-logger.service'; - import { PurchaseEntries } from './purchase-entries'; const url = '/api/purchase-entries'; @@ -14,10 +13,8 @@ const serviceName = 'PurchaseEntriesService'; providedIn: 'root', }) export class PurchaseEntriesService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); list(startDate: string | null, finishDate: string | null): Observable { const startDateWithSlash = startDate ? `/${startDate}` : ''; diff --git a/overlord/src/app/purchase-return/purchase-return-dialog.component.ts b/overlord/src/app/purchase-return/purchase-return-dialog.component.ts index 26edc08a..7c48832b 100644 --- a/overlord/src/app/purchase-return/purchase-return-dialog.component.ts +++ b/overlord/src/app/purchase-return/purchase-return-dialog.component.ts @@ -1,17 +1,17 @@ import { CdkScrollable } from '@angular/cdk/scrolling'; import { AsyncPipe } from '@angular/common'; -import { Component, Inject, OnInit } from '@angular/core'; +import { Component, inject, OnInit } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; -import { MatAutocompleteSelectedEvent, MatAutocompleteTrigger, MatAutocomplete } from '@angular/material/autocomplete'; +import { MatAutocomplete, MatAutocompleteSelectedEvent, MatAutocompleteTrigger } from '@angular/material/autocomplete'; import { MatButton } from '@angular/material/button'; import { MatOption } from '@angular/material/core'; import { MAT_DIALOG_DATA, - MatDialogRef, - MatDialogTitle, - MatDialogContent, MatDialogActions, MatDialogClose, + MatDialogContent, + MatDialogRef, + MatDialogTitle, } from '@angular/material/dialog'; import { MatFormField, MatLabel } from '@angular/material/form-field'; import { MatInput } from '@angular/material/input'; @@ -27,7 +27,6 @@ import { MathService } from '../shared/math.service'; selector: 'app-purchase-return-dialog', templateUrl: './purchase-return-dialog.component.html', styleUrls: ['./purchase-return-dialog.component.css'], - standalone: true, imports: [ MatDialogTitle, CdkScrollable, @@ -46,6 +45,15 @@ import { MathService } from '../shared/math.service'; ], }) export class PurchaseReturnDialogComponent implements OnInit { + dialogRef = inject>(MatDialogRef); + data = inject<{ + inventory: Inventory; + date: string; + }>(MAT_DIALOG_DATA); + + private math = inject(MathService); + private batchSer = inject(BatchService); + batches: Observable; form: FormGroup<{ batch: FormControl; @@ -54,12 +62,7 @@ export class PurchaseReturnDialogComponent implements OnInit { batch: Batch = new Batch(); - constructor( - public dialogRef: MatDialogRef, - @Inject(MAT_DIALOG_DATA) public data: { inventory: Inventory; date: string }, - private math: MathService, - private batchSer: BatchService, - ) { + constructor() { this.form = new FormGroup({ batch: new FormControl(null), quantity: new FormControl('', { nonNullable: true }), diff --git a/overlord/src/app/purchase-return/purchase-return.component.ts b/overlord/src/app/purchase-return/purchase-return.component.ts index 7963f183..560e8045 100644 --- a/overlord/src/app/purchase-return/purchase-return.component.ts +++ b/overlord/src/app/purchase-return/purchase-return.component.ts @@ -1,36 +1,37 @@ import { COMMA, ENTER } from '@angular/cdk/keycodes'; -import { AsyncPipe, DecimalPipe, PercentPipe, CurrencyPipe } from '@angular/common'; -import { AfterViewInit, Component, ElementRef, OnInit, ViewChild, HostListener } from '@angular/core'; +import { AsyncPipe, CurrencyPipe, DecimalPipe, PercentPipe } from '@angular/common'; +import { AfterViewInit, Component, ElementRef, HostListener, inject, OnInit, ViewChild } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; -import { MatAutocompleteSelectedEvent, MatAutocompleteTrigger, MatAutocomplete } from '@angular/material/autocomplete'; +import { MatAutocomplete, MatAutocompleteSelectedEvent, MatAutocompleteTrigger } from '@angular/material/autocomplete'; import { MatButton, MatIconButton } from '@angular/material/button'; import { MatCard, - MatCardHeader, - MatCardTitleGroup, - MatCardTitle, - MatCardContent, MatCardActions, + MatCardContent, + MatCardHeader, + MatCardTitle, + MatCardTitleGroup, } from '@angular/material/card'; -import { MatChipInputEvent, MatChipGrid, MatChipRow, MatChipRemove, MatChipInput } from '@angular/material/chips'; +import { MatChipGrid, MatChipInput, MatChipInputEvent, MatChipRemove, MatChipRow } from '@angular/material/chips'; import { MatOption } from '@angular/material/core'; -import { MatDatepickerInput, MatDatepickerToggle, MatDatepicker } from '@angular/material/datepicker'; +import { MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from '@angular/material/datepicker'; import { MatDialog } from '@angular/material/dialog'; -import { MatSuffix, MatFormField, MatLabel, MatHint, MatPrefix } from '@angular/material/form-field'; +import { MatFormField, MatHint, MatLabel, MatPrefix, MatSuffix } from '@angular/material/form-field'; import { MatIcon } from '@angular/material/icon'; import { MatInput } from '@angular/material/input'; +import { MatSnackBar } from '@angular/material/snack-bar'; import { MatSort } from '@angular/material/sort'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatHeaderRowDef, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, MatHeaderRow, - MatRowDef, + MatHeaderRowDef, MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, Router } from '@angular/router'; import { round } from 'mathjs'; @@ -46,9 +47,6 @@ import { Batch } from '../core/batch'; import { BatchService } from '../core/batch.service'; import { DbFile } from '../core/db-file'; import { Inventory } from '../core/inventory'; -import { Tag } from '../tag/tag'; -import { TagService } from '../tag/tag.service'; -import { MatSnackBar } from '@angular/material/snack-bar'; import { User } from '../core/user'; import { Voucher } from '../core/voucher'; import { VoucherService } from '../core/voucher.service'; @@ -58,7 +56,8 @@ import { ImageDialogComponent } from '../shared/image-dialog/image-dialog.compon import { ImageService } from '../shared/image.service'; import { LocalTimePipe } from '../shared/local-time.pipe'; import { MathService } from '../shared/math.service'; - +import { Tag } from '../tag/tag'; +import { TagService } from '../tag/tag.service'; import { PurchaseReturnDataSource } from './purchase-return-datasource'; import { PurchaseReturnDialogComponent } from './purchase-return-dialog.component'; @@ -66,7 +65,6 @@ import { PurchaseReturnDialogComponent } from './purchase-return-dialog.componen selector: 'app-purchase-return', templateUrl: './purchase-return.component.html', styleUrls: ['./purchase-return.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -114,6 +112,18 @@ import { PurchaseReturnDialogComponent } from './purchase-return-dialog.componen ], }) export class PurchaseReturnComponent implements OnInit, AfterViewInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + private dialog = inject(MatDialog); + private snackBar = inject(MatSnackBar); + auth = inject(AuthService); + private math = inject(MathService); + image = inject(ImageService); + private ser = inject(VoucherService); + private batchSer = inject(BatchService); + private accountSer = inject(AccountService); + private tagSer = inject(TagService); + @ViewChild('accountElement', { static: true }) accountElement!: ElementRef; @ViewChild('batchElement', { static: true }) batchElement!: ElementRef; @ViewChild('dateElement', { static: true }) dateElement!: ElementRef; @@ -167,19 +177,7 @@ export class PurchaseReturnComponent implements OnInit, AfterViewInit { tags: Observable; batches: Observable; - constructor( - private route: ActivatedRoute, - private router: Router, - private dialog: MatDialog, - private snackBar: MatSnackBar, - public auth: AuthService, - private math: MathService, - public image: ImageService, - private ser: VoucherService, - private batchSer: BatchService, - private accountSer: AccountService, - private tagSer: TagService, - ) { + constructor() { this.form = new FormGroup({ date: new FormControl(new Date(), { nonNullable: true }), account: new FormControl(null), diff --git a/overlord/src/app/purchase-return/purchase-return.resolver.spec.ts b/overlord/src/app/purchase-return/purchase-return.resolver.spec.ts index 2ef85aae..bbccc44a 100644 --- a/overlord/src/app/purchase-return/purchase-return.resolver.spec.ts +++ b/overlord/src/app/purchase-return/purchase-return.resolver.spec.ts @@ -2,7 +2,6 @@ import { TestBed } from '@angular/core/testing'; import { ResolveFn } from '@angular/router'; import { Voucher } from '../core/voucher'; - import { purchaseReturnResolver } from './purchase-return.resolver'; describe('purchaseReturnResolver', () => { diff --git a/overlord/src/app/purchase-return/purchase-return.routes.ts b/overlord/src/app/purchase-return/purchase-return.routes.ts index e5c07563..e3aa3b3a 100644 --- a/overlord/src/app/purchase-return/purchase-return.routes.ts +++ b/overlord/src/app/purchase-return/purchase-return.routes.ts @@ -1,7 +1,6 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; - import { PurchaseReturnComponent } from './purchase-return.component'; import { purchaseReturnResolver } from './purchase-return.resolver'; diff --git a/overlord/src/app/purchase/purchase-dialog.component.ts b/overlord/src/app/purchase/purchase-dialog.component.ts index 362a8fed..6d53033d 100644 --- a/overlord/src/app/purchase/purchase-dialog.component.ts +++ b/overlord/src/app/purchase/purchase-dialog.component.ts @@ -1,17 +1,17 @@ import { CdkScrollable } from '@angular/cdk/scrolling'; import { AsyncPipe } from '@angular/common'; -import { Component, Inject, OnInit } from '@angular/core'; +import { Component, inject, OnInit } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; -import { MatAutocompleteSelectedEvent, MatAutocompleteTrigger, MatAutocomplete } from '@angular/material/autocomplete'; +import { MatAutocomplete, MatAutocompleteSelectedEvent, MatAutocompleteTrigger } from '@angular/material/autocomplete'; import { MatButton } from '@angular/material/button'; import { MatOption } from '@angular/material/core'; import { MAT_DIALOG_DATA, - MatDialogRef, - MatDialogTitle, - MatDialogContent, MatDialogActions, MatDialogClose, + MatDialogContent, + MatDialogRef, + MatDialogTitle, } from '@angular/material/dialog'; import { MatFormField, MatLabel } from '@angular/material/form-field'; import { MatInput } from '@angular/material/input'; @@ -30,7 +30,6 @@ import { MathService } from '../shared/math.service'; selector: 'app-purchase-dialog', templateUrl: './purchase-dialog.component.html', styleUrls: ['./purchase-dialog.component.css'], - standalone: true, imports: [ MatDialogTitle, CdkScrollable, @@ -49,6 +48,14 @@ import { MathService } from '../shared/math.service'; ], }) export class PurchaseDialogComponent implements OnInit { + dialogRef = inject>(MatDialogRef); + data = inject<{ + inventory: Inventory; + }>(MAT_DIALOG_DATA); + + private math = inject(MathService); + private productSer = inject(ProductService); + products: Observable; form: FormGroup<{ product: FormControl; @@ -60,12 +67,7 @@ export class PurchaseDialogComponent implements OnInit { product: ProductSku = new ProductSku(); - constructor( - public dialogRef: MatDialogRef, - @Inject(MAT_DIALOG_DATA) public data: { inventory: Inventory }, - private math: MathService, - private productSer: ProductService, - ) { + constructor() { this.form = new FormGroup({ product: new FormControl(null), quantity: new FormControl('', { nonNullable: true }), diff --git a/overlord/src/app/purchase/purchase.component.ts b/overlord/src/app/purchase/purchase.component.ts index 175a9209..b0ecab9f 100644 --- a/overlord/src/app/purchase/purchase.component.ts +++ b/overlord/src/app/purchase/purchase.component.ts @@ -1,36 +1,37 @@ import { COMMA, ENTER } from '@angular/cdk/keycodes'; -import { AsyncPipe, DecimalPipe, PercentPipe, CurrencyPipe } from '@angular/common'; -import { AfterViewInit, Component, ElementRef, OnInit, ViewChild, HostListener } from '@angular/core'; +import { AsyncPipe, CurrencyPipe, DecimalPipe, PercentPipe } from '@angular/common'; +import { AfterViewInit, Component, ElementRef, HostListener, inject, OnInit, ViewChild } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; -import { MatAutocompleteSelectedEvent, MatAutocompleteTrigger, MatAutocomplete } from '@angular/material/autocomplete'; +import { MatAutocomplete, MatAutocompleteSelectedEvent, MatAutocompleteTrigger } from '@angular/material/autocomplete'; import { MatButton, MatIconButton } from '@angular/material/button'; import { MatCard, - MatCardHeader, - MatCardTitleGroup, - MatCardTitle, - MatCardContent, MatCardActions, + MatCardContent, + MatCardHeader, + MatCardTitle, + MatCardTitleGroup, } from '@angular/material/card'; -import { MatChipInputEvent, MatChipGrid, MatChipRow, MatChipRemove, MatChipInput } from '@angular/material/chips'; +import { MatChipGrid, MatChipInput, MatChipInputEvent, MatChipRemove, MatChipRow } from '@angular/material/chips'; import { MatOption } from '@angular/material/core'; -import { MatDatepickerInput, MatDatepickerToggle, MatDatepicker } from '@angular/material/datepicker'; +import { MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from '@angular/material/datepicker'; import { MatDialog } from '@angular/material/dialog'; -import { MatSuffix, MatFormField, MatLabel, MatHint, MatPrefix } from '@angular/material/form-field'; +import { MatFormField, MatHint, MatLabel, MatPrefix, MatSuffix } from '@angular/material/form-field'; import { MatIcon } from '@angular/material/icon'; import { MatInput } from '@angular/material/input'; +import { MatSnackBar } from '@angular/material/snack-bar'; import { MatSort } from '@angular/material/sort'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatHeaderRowDef, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, MatHeaderRow, - MatRowDef, + MatHeaderRowDef, MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, Router } from '@angular/router'; import { round } from 'mathjs'; @@ -47,9 +48,6 @@ import { DbFile } from '../core/db-file'; import { Inventory } from '../core/inventory'; import { Product } from '../core/product'; import { ProductSku } from '../core/product-sku'; -import { Tag } from '../tag/tag'; -import { TagService } from '../tag/tag.service'; -import { MatSnackBar } from '@angular/material/snack-bar'; import { User } from '../core/user'; import { Voucher } from '../core/voucher'; import { VoucherService } from '../core/voucher.service'; @@ -60,7 +58,8 @@ import { ImageDialogComponent } from '../shared/image-dialog/image-dialog.compon import { ImageService } from '../shared/image.service'; import { LocalTimePipe } from '../shared/local-time.pipe'; import { MathService } from '../shared/math.service'; - +import { Tag } from '../tag/tag'; +import { TagService } from '../tag/tag.service'; import { PurchaseDataSource } from './purchase-datasource'; import { PurchaseDialogComponent } from './purchase-dialog.component'; @@ -68,7 +67,6 @@ import { PurchaseDialogComponent } from './purchase-dialog.component'; selector: 'app-purchase', templateUrl: './purchase.component.html', styleUrls: ['./purchase.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -116,6 +114,18 @@ import { PurchaseDialogComponent } from './purchase-dialog.component'; ], }) export class PurchaseComponent implements OnInit, AfterViewInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + private dialog = inject(MatDialog); + private snackBar = inject(MatSnackBar); + auth = inject(AuthService); + private math = inject(MathService); + image = inject(ImageService); + private ser = inject(VoucherService); + private productSer = inject(ProductService); + private accountSer = inject(AccountService); + private tagSer = inject(TagService); + @ViewChild('accountElement', { static: true }) accountElement!: ElementRef; @ViewChild('productElement', { static: true }) productElement!: ElementRef; @ViewChild('dateElement', { static: true }) dateElement!: ElementRef; @@ -172,19 +182,7 @@ export class PurchaseComponent implements OnInit, AfterViewInit { tags: Observable; products: Observable; - constructor( - private route: ActivatedRoute, - private router: Router, - private dialog: MatDialog, - private snackBar: MatSnackBar, - public auth: AuthService, - private math: MathService, - public image: ImageService, - private ser: VoucherService, - private productSer: ProductService, - private accountSer: AccountService, - private tagSer: TagService, - ) { + constructor() { this.form = new FormGroup({ date: new FormControl(new Date(), { nonNullable: true }), account: new FormControl(null), diff --git a/overlord/src/app/purchase/purchase.resolver.spec.ts b/overlord/src/app/purchase/purchase.resolver.spec.ts index 58926556..423baa9d 100644 --- a/overlord/src/app/purchase/purchase.resolver.spec.ts +++ b/overlord/src/app/purchase/purchase.resolver.spec.ts @@ -2,7 +2,6 @@ import { TestBed } from '@angular/core/testing'; import { ResolveFn } from '@angular/router'; import { Voucher } from '../core/voucher'; - import { purchaseResolver } from './purchase.resolver'; describe('purchaseResolver', () => { diff --git a/overlord/src/app/purchase/purchase.routes.ts b/overlord/src/app/purchase/purchase.routes.ts index 793171a1..1e1b1468 100644 --- a/overlord/src/app/purchase/purchase.routes.ts +++ b/overlord/src/app/purchase/purchase.routes.ts @@ -1,7 +1,6 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; - import { PurchaseComponent } from './purchase.component'; import { purchaseResolver } from './purchase.resolver'; diff --git a/overlord/src/app/purchases/purchases.component.ts b/overlord/src/app/purchases/purchases.component.ts index b050be27..bd11afbe 100644 --- a/overlord/src/app/purchases/purchases.component.ts +++ b/overlord/src/app/purchases/purchases.component.ts @@ -1,28 +1,28 @@ -import { DecimalPipe, CurrencyPipe } from '@angular/common'; -import { Component, ElementRef, HostListener, OnInit, ViewChild } from '@angular/core'; +import { CurrencyPipe, DecimalPipe } from '@angular/common'; +import { Component, ElementRef, HostListener, inject, OnInit, ViewChild } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { MatButton } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitle, MatCardContent } from '@angular/material/card'; -import { MatDatepickerInput, MatDatepickerToggle, MatDatepicker } from '@angular/material/datepicker'; +import { MatCard, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card'; +import { MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from '@angular/material/datepicker'; import { MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field'; import { MatInput } from '@angular/material/input'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort, MatSortHeader } from '@angular/material/sort'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatFooterCellDef, + MatCellDef, + MatColumnDef, MatFooterCell, - MatHeaderRowDef, - MatHeaderRow, - MatRowDef, - MatRow, - MatFooterRowDef, + MatFooterCellDef, MatFooterRow, + MatFooterRowDef, + MatHeaderCell, + MatHeaderCellDef, + MatHeaderRow, + MatHeaderRowDef, + MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, Router, RouterLink } from '@angular/router'; import moment from 'moment'; @@ -35,7 +35,6 @@ import { PurchasesItem } from './purchases-item'; selector: 'app-purchases', templateUrl: './purchases.component.html', styleUrls: ['./purchases.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -73,6 +72,9 @@ import { PurchasesItem } from './purchases-item'; ], }) export class PurchasesComponent implements OnInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + @ViewChild(MatPaginator, { static: true }) paginator!: MatPaginator; @ViewChild(MatSort, { static: true }) sort!: MatSort; @ViewChild('startDateElement', { static: true }) startDate!: ElementRef; @@ -94,10 +96,7 @@ export class PurchasesComponent implements OnInit { this.startDate.nativeElement.select(); } - constructor( - private route: ActivatedRoute, - private router: Router, - ) { + constructor() { this.form = new FormGroup({ startDate: new FormControl(new Date(), { nonNullable: true }), finishDate: new FormControl(new Date(), { nonNullable: true }), diff --git a/overlord/src/app/purchases/purchases.routes.ts b/overlord/src/app/purchases/purchases.routes.ts index 00565672..d8af4baa 100644 --- a/overlord/src/app/purchases/purchases.routes.ts +++ b/overlord/src/app/purchases/purchases.routes.ts @@ -1,7 +1,6 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; - import { PurchasesComponent } from './purchases.component'; import { purchasesResolver } from './purchases.resolver'; diff --git a/overlord/src/app/purchases/purchases.service.ts b/overlord/src/app/purchases/purchases.service.ts index 8b23eec6..9844a2cd 100644 --- a/overlord/src/app/purchases/purchases.service.ts +++ b/overlord/src/app/purchases/purchases.service.ts @@ -1,10 +1,9 @@ import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; import { ErrorLoggerService } from '../core/error-logger.service'; - import { Purchases } from './purchases'; const url = '/api/purchases'; @@ -14,10 +13,8 @@ const serviceName = 'PurchasesService'; providedIn: 'root', }) export class PurchasesService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); list(startDate: string | null, finishDate: string | null): Observable { const startDateWithSlash = startDate ? `/${startDate}` : ''; diff --git a/overlord/src/app/rate-contract/rate-contract-detail/rate-contract-detail.component.ts b/overlord/src/app/rate-contract/rate-contract-detail/rate-contract-detail.component.ts index e93b919b..4c3119fa 100644 --- a/overlord/src/app/rate-contract/rate-contract-detail/rate-contract-detail.component.ts +++ b/overlord/src/app/rate-contract/rate-contract-detail/rate-contract-detail.component.ts @@ -1,27 +1,28 @@ import { AsyncPipe, CurrencyPipe } from '@angular/common'; -import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; +import { AfterViewInit, Component, ElementRef, HostListener, inject, OnInit, ViewChild } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; -import { MatAutocompleteSelectedEvent, MatAutocompleteTrigger, MatAutocomplete } from '@angular/material/autocomplete'; +import { MatAutocomplete, MatAutocompleteSelectedEvent, MatAutocompleteTrigger } from '@angular/material/autocomplete'; import { MatButton, MatIconButton } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitle, MatCardContent, MatCardActions } from '@angular/material/card'; +import { MatCard, MatCardActions, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card'; import { MatOption } from '@angular/material/core'; -import { MatDatepickerInput, MatDatepickerToggle, MatDatepicker } from '@angular/material/datepicker'; +import { MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from '@angular/material/datepicker'; import { MatDialog } from '@angular/material/dialog'; import { MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field'; import { MatIcon } from '@angular/material/icon'; import { MatInput } from '@angular/material/input'; +import { MatSnackBar } from '@angular/material/snack-bar'; import { MatSort } from '@angular/material/sort'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatHeaderRowDef, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, MatHeaderRow, - MatRowDef, + MatHeaderRowDef, MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, Router } from '@angular/router'; import moment from 'moment'; @@ -32,22 +33,18 @@ import { Account } from '../../core/account'; import { AccountService } from '../../core/account.service'; import { Product } from '../../core/product'; import { ProductSku } from '../../core/product-sku'; -import { MatSnackBar } from '@angular/material/snack-bar'; import { ProductService } from '../../product/product.service'; import { ConfirmDialogComponent } from '../../shared/confirm-dialog/confirm-dialog.component'; import { MathService } from '../../shared/math.service'; import { RateContract } from '../rate-contract'; import { RateContractItem } from '../rate-contract-item'; import { RateContractService } from '../rate-contract.service'; - import { RateContractDetailDatasource } from './rate-contract-detail-datasource'; -import { HostListener } from '@angular/core'; @Component({ selector: 'app-rate-contract-detail', templateUrl: './rate-contract-detail.component.html', styleUrls: ['./rate-contract-detail.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -84,6 +81,15 @@ import { HostListener } from '@angular/core'; ], }) export class RateContractDetailComponent implements OnInit, AfterViewInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + private snackBar = inject(MatSnackBar); + private dialog = inject(MatDialog); + private math = inject(MathService); + private ser = inject(RateContractService); + private productSer = inject(ProductService); + private accountSer = inject(AccountService); + @ViewChild('accountElement', { static: true }) accountElement!: ElementRef; @ViewChild('productElement', { static: true }) productElement!: ElementRef; @ViewChild('dateElement', { static: true }) dateElement!: ElementRef; @@ -118,16 +124,7 @@ export class RateContractDetailComponent implements OnInit, AfterViewInit { this.dateElement.nativeElement.select(); } - constructor( - private route: ActivatedRoute, - private router: Router, - private snackBar: MatSnackBar, - private dialog: MatDialog, - private math: MathService, - private ser: RateContractService, - private productSer: ProductService, - private accountSer: AccountService, - ) { + constructor() { this.form = new FormGroup({ date: new FormControl(new Date(), { nonNullable: true }), account: new FormControl(null), diff --git a/overlord/src/app/rate-contract/rate-contract-list/rate-contract-list.component.ts b/overlord/src/app/rate-contract/rate-contract-list/rate-contract-list.component.ts index 4af28a2c..3e91d8c7 100644 --- a/overlord/src/app/rate-contract/rate-contract-list/rate-contract-list.component.ts +++ b/overlord/src/app/rate-contract/rate-contract-list/rate-contract-list.component.ts @@ -1,33 +1,31 @@ import { CurrencyPipe } from '@angular/common'; -import { Component, OnInit, ViewChild } from '@angular/core'; +import { Component, inject, OnInit, ViewChild } from '@angular/core'; import { MatAnchor } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitleGroup, MatCardTitle, MatCardContent } from '@angular/material/card'; +import { MatCard, MatCardContent, MatCardHeader, MatCardTitle, MatCardTitleGroup } from '@angular/material/card'; import { MatIcon } from '@angular/material/icon'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort, MatSortHeader } from '@angular/material/sort'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatHeaderRowDef, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, MatHeaderRow, - MatRowDef, + MatHeaderRowDef, MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, RouterLink } from '@angular/router'; import { RateContract } from '../rate-contract'; - import { RateContractListDatasource } from './rate-contract-list-datasource'; @Component({ selector: 'app-rate-contract-list', templateUrl: './rate-contract-list.component.html', styleUrls: ['./rate-contract-list.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -54,6 +52,8 @@ import { RateContractListDatasource } from './rate-contract-list-datasource'; ], }) export class RateContractListComponent implements OnInit { + private route = inject(ActivatedRoute); + @ViewChild(MatPaginator, { static: true }) paginator!: MatPaginator; @ViewChild(MatSort, { static: true }) sort!: MatSort; list: RateContract[] = []; @@ -61,8 +61,6 @@ export class RateContractListComponent implements OnInit { /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = ['vendor', 'validity', 'products']; - constructor(private route: ActivatedRoute) {} - ngOnInit() { this.route.data.subscribe((value) => { const data = value as { list: RateContract[] }; diff --git a/overlord/src/app/rate-contract/rate-contract.routes.ts b/overlord/src/app/rate-contract/rate-contract.routes.ts index 471d44a0..f4d72917 100644 --- a/overlord/src/app/rate-contract/rate-contract.routes.ts +++ b/overlord/src/app/rate-contract/rate-contract.routes.ts @@ -1,10 +1,9 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; - import { RateContractDetailComponent } from './rate-contract-detail/rate-contract-detail.component'; -import { RateContractListComponent } from './rate-contract-list/rate-contract-list.component'; import { rateContractListResolver } from './rate-contract-list.resolver'; +import { RateContractListComponent } from './rate-contract-list/rate-contract-list.component'; import { rateContractResolver } from './rate-contract.resolver'; export const routes: Routes = [ diff --git a/overlord/src/app/rate-contract/rate-contract.service.ts b/overlord/src/app/rate-contract/rate-contract.service.ts index 26d88c5a..032af9d7 100644 --- a/overlord/src/app/rate-contract/rate-contract.service.ts +++ b/overlord/src/app/rate-contract/rate-contract.service.ts @@ -1,10 +1,9 @@ import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; import { ErrorLoggerService } from '../core/error-logger.service'; - import { RateContract } from './rate-contract'; const url = '/api/rate-contracts'; @@ -14,10 +13,8 @@ const serviceName = 'RateContractService'; providedIn: 'root', }) export class RateContractService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); get(id: string | null): Observable { const getUrl: string = id === null ? `${url}` : `${url}/${id}`; diff --git a/overlord/src/app/rate-contract/rate-contract.ts b/overlord/src/app/rate-contract/rate-contract.ts index a06ef54a..def2af0c 100644 --- a/overlord/src/app/rate-contract/rate-contract.ts +++ b/overlord/src/app/rate-contract/rate-contract.ts @@ -1,6 +1,5 @@ import { Account } from '../core/account'; import { User } from '../core/user'; - import { RateContractItem } from './rate-contract-item'; export class RateContract { diff --git a/overlord/src/app/raw-material-cost/raw-material-cost.component.ts b/overlord/src/app/raw-material-cost/raw-material-cost.component.ts index e111aa91..cd9c46de 100644 --- a/overlord/src/app/raw-material-cost/raw-material-cost.component.ts +++ b/overlord/src/app/raw-material-cost/raw-material-cost.component.ts @@ -1,35 +1,34 @@ -import { DecimalPipe, PercentPipe, CurrencyPipe } from '@angular/common'; -import { Component, ElementRef, HostListener, OnInit, ViewChild } from '@angular/core'; +import { CurrencyPipe, DecimalPipe, PercentPipe } from '@angular/common'; +import { Component, ElementRef, HostListener, inject, OnInit, ViewChild } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; -import { MatIconButton, MatButton } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitleGroup, MatCardTitle, MatCardContent } from '@angular/material/card'; -import { MatDatepickerInput, MatDatepickerToggle, MatDatepicker } from '@angular/material/datepicker'; +import { MatButton, MatIconButton } from '@angular/material/button'; +import { MatCard, MatCardContent, MatCardHeader, MatCardTitle, MatCardTitleGroup } from '@angular/material/card'; +import { MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from '@angular/material/datepicker'; import { MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field'; import { MatIcon } from '@angular/material/icon'; import { MatInput } from '@angular/material/input'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort, MatSortHeader } from '@angular/material/sort'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatFooterCellDef, + MatCellDef, + MatColumnDef, MatFooterCell, - MatHeaderRowDef, - MatHeaderRow, - MatRowDef, - MatRow, - MatFooterRowDef, + MatFooterCellDef, MatFooterRow, + MatFooterRowDef, + MatHeaderCell, + MatHeaderCellDef, + MatHeaderRow, + MatHeaderRowDef, + MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, Router, RouterLink } from '@angular/router'; import moment from 'moment'; import { ToCsvService } from '../shared/to-csv.service'; - import { RawMaterialCost } from './raw-material-cost'; import { RawMaterialCostDataSource } from './raw-material-cost-datasource'; @@ -37,7 +36,6 @@ import { RawMaterialCostDataSource } from './raw-material-cost-datasource'; selector: 'app-raw-material-cost', templateUrl: './raw-material-cost.component.html', styleUrls: ['./raw-material-cost.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -79,6 +77,10 @@ import { RawMaterialCostDataSource } from './raw-material-cost-datasource'; ], }) export class RawMaterialCostComponent implements OnInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + private toCsv = inject(ToCsvService); + @ViewChild(MatPaginator, { static: true }) paginator!: MatPaginator; @ViewChild(MatSort, { static: true }) sort!: MatSort; @ViewChild('startDateElement', { static: true }) startDate!: ElementRef; @@ -107,11 +109,7 @@ export class RawMaterialCostComponent implements OnInit { this.startDate.nativeElement.select(); } - constructor( - private route: ActivatedRoute, - private router: Router, - private toCsv: ToCsvService, - ) { + constructor() { this.form = new FormGroup({ startDate: new FormControl(new Date(), { nonNullable: true }), finishDate: new FormControl(new Date(), { nonNullable: true }), diff --git a/overlord/src/app/raw-material-cost/raw-material-cost.routes.ts b/overlord/src/app/raw-material-cost/raw-material-cost.routes.ts index eb60aea5..59413f45 100644 --- a/overlord/src/app/raw-material-cost/raw-material-cost.routes.ts +++ b/overlord/src/app/raw-material-cost/raw-material-cost.routes.ts @@ -1,7 +1,6 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; - import { RawMaterialCostComponent } from './raw-material-cost.component'; import { rawMaterialCostResolver } from './raw-material-cost.resolver'; diff --git a/overlord/src/app/raw-material-cost/raw-material-cost.service.ts b/overlord/src/app/raw-material-cost/raw-material-cost.service.ts index d5940eb3..fccaf8ee 100644 --- a/overlord/src/app/raw-material-cost/raw-material-cost.service.ts +++ b/overlord/src/app/raw-material-cost/raw-material-cost.service.ts @@ -1,10 +1,9 @@ import { HttpClient, HttpParams } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; import { ErrorLoggerService } from '../core/error-logger.service'; - import { RawMaterialCost } from './raw-material-cost'; const url = '/api/raw-material-cost'; @@ -14,10 +13,8 @@ const serviceName = 'RawMaterialCostService'; providedIn: 'root', }) export class RawMaterialCostService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); list(id: string | null, startDate: string | null, finishDate: string | null): Observable { const options = { params: new HttpParams() }; diff --git a/overlord/src/app/receipt/receipt-accounts.resolver.spec.ts b/overlord/src/app/receipt/receipt-accounts.resolver.spec.ts index 72e57c17..b02fcf22 100644 --- a/overlord/src/app/receipt/receipt-accounts.resolver.spec.ts +++ b/overlord/src/app/receipt/receipt-accounts.resolver.spec.ts @@ -2,7 +2,6 @@ import { TestBed } from '@angular/core/testing'; import { ResolveFn } from '@angular/router'; import { Account } from '../core/account'; - import { receiptAccountsResolver } from './receipt-accounts.resolver'; describe('receiptAccountsResolver', () => { diff --git a/overlord/src/app/receipt/receipt-dialog.component.ts b/overlord/src/app/receipt/receipt-dialog.component.ts index 8c357c7d..6168f132 100644 --- a/overlord/src/app/receipt/receipt-dialog.component.ts +++ b/overlord/src/app/receipt/receipt-dialog.component.ts @@ -1,19 +1,19 @@ import { CdkScrollable } from '@angular/cdk/scrolling'; import { AsyncPipe, CurrencyPipe } from '@angular/common'; -import { Component, Inject, OnInit } from '@angular/core'; +import { Component, inject, OnInit } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; -import { MatAutocompleteSelectedEvent, MatAutocompleteTrigger, MatAutocomplete } from '@angular/material/autocomplete'; +import { MatAutocomplete, MatAutocompleteSelectedEvent, MatAutocompleteTrigger } from '@angular/material/autocomplete'; import { MatButton } from '@angular/material/button'; import { MatOption } from '@angular/material/core'; import { MAT_DIALOG_DATA, - MatDialogRef, - MatDialogTitle, - MatDialogContent, MatDialogActions, MatDialogClose, + MatDialogContent, + MatDialogRef, + MatDialogTitle, } from '@angular/material/dialog'; -import { MatFormField, MatLabel, MatHint, MatPrefix } from '@angular/material/form-field'; +import { MatFormField, MatHint, MatLabel, MatPrefix } from '@angular/material/form-field'; import { MatInput } from '@angular/material/input'; import { Observable, of as observableOf } from 'rxjs'; import { debounceTime, distinctUntilChanged, switchMap } from 'rxjs/operators'; @@ -29,7 +29,6 @@ import { MathService } from '../shared/math.service'; selector: 'app-receipt-dialog', templateUrl: './receipt-dialog.component.html', styleUrls: ['./receipt-dialog.component.css'], - standalone: true, imports: [ MatDialogTitle, CdkScrollable, @@ -52,6 +51,15 @@ import { MathService } from '../shared/math.service'; ], }) export class ReceiptDialogComponent implements OnInit { + dialogRef = inject>(MatDialogRef); + data = inject<{ + journal: Journal; + date: string; + }>(MAT_DIALOG_DATA); + + private math = inject(MathService); + private accountSer = inject(AccountService); + accounts: Observable; form: FormGroup<{ account: FormControl; @@ -61,12 +69,7 @@ export class ReceiptDialogComponent implements OnInit { account: Account = new Account(); accBal: AccountBalance | null = null; - constructor( - public dialogRef: MatDialogRef, - @Inject(MAT_DIALOG_DATA) public data: { journal: Journal; date: string }, - private math: MathService, - private accountSer: AccountService, - ) { + constructor() { this.form = new FormGroup({ account: new FormControl(''), amount: new FormControl('', { nonNullable: true }), diff --git a/overlord/src/app/receipt/receipt.component.ts b/overlord/src/app/receipt/receipt.component.ts index 2967c8f1..637aefdd 100644 --- a/overlord/src/app/receipt/receipt.component.ts +++ b/overlord/src/app/receipt/receipt.component.ts @@ -1,37 +1,38 @@ import { COMMA, ENTER } from '@angular/cdk/keycodes'; import { AsyncPipe, CurrencyPipe } from '@angular/common'; -import { AfterViewInit, Component, ElementRef, OnInit, ViewChild, HostListener } from '@angular/core'; +import { AfterViewInit, Component, ElementRef, HostListener, inject, OnInit, ViewChild } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; -import { MatAutocompleteSelectedEvent, MatAutocompleteTrigger, MatAutocomplete } from '@angular/material/autocomplete'; +import { MatAutocomplete, MatAutocompleteSelectedEvent, MatAutocompleteTrigger } from '@angular/material/autocomplete'; import { MatButton, MatIconButton } from '@angular/material/button'; import { MatCard, - MatCardHeader, - MatCardTitleGroup, - MatCardTitle, - MatCardContent, MatCardActions, + MatCardContent, + MatCardHeader, + MatCardTitle, + MatCardTitleGroup, } from '@angular/material/card'; -import { MatChipInputEvent, MatChipGrid, MatChipRow, MatChipRemove, MatChipInput } from '@angular/material/chips'; +import { MatChipGrid, MatChipInput, MatChipInputEvent, MatChipRemove, MatChipRow } from '@angular/material/chips'; import { MatOption } from '@angular/material/core'; -import { MatDatepickerInput, MatDatepickerToggle, MatDatepicker } from '@angular/material/datepicker'; +import { MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from '@angular/material/datepicker'; import { MatDialog } from '@angular/material/dialog'; -import { MatSuffix, MatFormField, MatLabel, MatPrefix, MatHint } from '@angular/material/form-field'; +import { MatFormField, MatHint, MatLabel, MatPrefix, MatSuffix } from '@angular/material/form-field'; import { MatIcon } from '@angular/material/icon'; import { MatInput } from '@angular/material/input'; import { MatSelect } from '@angular/material/select'; +import { MatSnackBar } from '@angular/material/snack-bar'; import { MatSort } from '@angular/material/sort'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatHeaderRowDef, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, MatHeaderRow, - MatRowDef, + MatHeaderRowDef, MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, Router } from '@angular/router'; import { round } from 'mathjs'; @@ -45,9 +46,6 @@ import { AccountBalance } from '../core/account-balance'; import { AccountService } from '../core/account.service'; import { DbFile } from '../core/db-file'; import { Journal } from '../core/journal'; -import { Tag } from '../tag/tag'; -import { TagService } from '../tag/tag.service'; -import { MatSnackBar } from '@angular/material/snack-bar'; import { User } from '../core/user'; import { Voucher } from '../core/voucher'; import { VoucherService } from '../core/voucher.service'; @@ -57,7 +55,8 @@ import { ImageDialogComponent } from '../shared/image-dialog/image-dialog.compon import { ImageService } from '../shared/image.service'; import { LocalTimePipe } from '../shared/local-time.pipe'; import { MathService } from '../shared/math.service'; - +import { Tag } from '../tag/tag'; +import { TagService } from '../tag/tag.service'; import { ReceiptDataSource } from './receipt-datasource'; import { ReceiptDialogComponent } from './receipt-dialog.component'; @@ -65,7 +64,6 @@ import { ReceiptDialogComponent } from './receipt-dialog.component'; selector: 'app-receipt', templateUrl: './receipt.component.html', styleUrls: ['./receipt.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -112,6 +110,17 @@ import { ReceiptDialogComponent } from './receipt-dialog.component'; ], }) export class ReceiptComponent implements OnInit, AfterViewInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + private dialog = inject(MatDialog); + private snackBar = inject(MatSnackBar); + auth = inject(AuthService); + private math = inject(MathService); + image = inject(ImageService); + private ser = inject(VoucherService); + private accountSer = inject(AccountService); + private tagSer = inject(TagService); + @ViewChild('accountElement', { static: true }) accountElement!: ElementRef; @ViewChild('dateElement', { static: true }) dateElement!: ElementRef; @ViewChild('tagInput') tagInput?: ElementRef; @@ -165,18 +174,7 @@ export class ReceiptComponent implements OnInit, AfterViewInit { accounts: Observable; tags: Observable; - constructor( - private route: ActivatedRoute, - private router: Router, - private dialog: MatDialog, - private snackBar: MatSnackBar, - public auth: AuthService, - private math: MathService, - public image: ImageService, - private ser: VoucherService, - private accountSer: AccountService, - private tagSer: TagService, - ) { + constructor() { this.form = new FormGroup({ date: new FormControl(new Date(), { nonNullable: true }), receiptAccount: new FormControl('', { nonNullable: true }), diff --git a/overlord/src/app/receipt/receipt.resolver.spec.ts b/overlord/src/app/receipt/receipt.resolver.spec.ts index 98c99c83..9621d1d1 100644 --- a/overlord/src/app/receipt/receipt.resolver.spec.ts +++ b/overlord/src/app/receipt/receipt.resolver.spec.ts @@ -2,7 +2,6 @@ import { TestBed } from '@angular/core/testing'; import { ResolveFn } from '@angular/router'; import { Voucher } from '../core/voucher'; - import { receiptResolver } from './receipt.resolver'; describe('receiptResolver', () => { diff --git a/overlord/src/app/receipt/receipt.routes.ts b/overlord/src/app/receipt/receipt.routes.ts index 7bcf713b..663dbad7 100644 --- a/overlord/src/app/receipt/receipt.routes.ts +++ b/overlord/src/app/receipt/receipt.routes.ts @@ -1,7 +1,6 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; - import { receiptAccountsResolver } from './receipt-accounts.resolver'; import { ReceiptComponent } from './receipt.component'; import { receiptResolver } from './receipt.resolver'; diff --git a/overlord/src/app/recipe-template/recipe-template-detail/recipe-template-detail.component.ts b/overlord/src/app/recipe-template/recipe-template-detail/recipe-template-detail.component.ts index f55631ed..a5eca83d 100644 --- a/overlord/src/app/recipe-template/recipe-template-detail/recipe-template-detail.component.ts +++ b/overlord/src/app/recipe-template/recipe-template-detail/recipe-template-detail.component.ts @@ -1,16 +1,16 @@ -import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; +import { AfterViewInit, Component, ElementRef, inject, OnInit, ViewChild } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { MatButton } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitle, MatCardContent, MatCardActions } from '@angular/material/card'; +import { MatCard, MatCardActions, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card'; import { MatCheckbox } from '@angular/material/checkbox'; -import { MatDatepickerInput, MatDatepickerToggle, MatDatepicker } from '@angular/material/datepicker'; +import { MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from '@angular/material/datepicker'; import { MatDialog } from '@angular/material/dialog'; import { MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field'; import { MatInput } from '@angular/material/input'; +import { MatSnackBar } from '@angular/material/snack-bar'; import { ActivatedRoute, Router } from '@angular/router'; import moment from 'moment'; -import { MatSnackBar } from '@angular/material/snack-bar'; import { ConfirmDialogComponent } from '../../shared/confirm-dialog/confirm-dialog.component'; import { RecipeTemplate } from '../recipe-template'; import { RecipeTemplateService } from '../recipe-template.service'; @@ -19,7 +19,6 @@ import { RecipeTemplateService } from '../recipe-template.service'; selector: 'app-recipe-template-detail', templateUrl: './recipe-template-detail.component.html', styleUrls: ['./recipe-template-detail.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -39,6 +38,12 @@ import { RecipeTemplateService } from '../recipe-template.service'; ], }) export class RecipeTemplateDetailComponent implements OnInit, AfterViewInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + private dialog = inject(MatDialog); + private snackBar = inject(MatSnackBar); + private ser = inject(RecipeTemplateService); + @ViewChild('nameElement', { static: true }) nameElement!: ElementRef; form: FormGroup<{ name: FormControl; @@ -49,13 +54,7 @@ export class RecipeTemplateDetailComponent implements OnInit, AfterViewInit { item: RecipeTemplate = new RecipeTemplate(); - constructor( - private route: ActivatedRoute, - private router: Router, - private dialog: MatDialog, - private snackBar: MatSnackBar, - private ser: RecipeTemplateService, - ) { + constructor() { this.form = new FormGroup({ name: new FormControl('', { nonNullable: true }), date: new FormControl(new Date(), { nonNullable: true }), diff --git a/overlord/src/app/recipe-template/recipe-template-list/recipe-template-list.component.ts b/overlord/src/app/recipe-template/recipe-template-list/recipe-template-list.component.ts index 2d849f40..342a2c2f 100644 --- a/overlord/src/app/recipe-template/recipe-template-list/recipe-template-list.component.ts +++ b/overlord/src/app/recipe-template/recipe-template-list/recipe-template-list.component.ts @@ -1,32 +1,30 @@ -import { Component, OnInit, ViewChild } from '@angular/core'; +import { Component, inject, OnInit, ViewChild } from '@angular/core'; import { MatAnchor } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitleGroup, MatCardTitle, MatCardContent } from '@angular/material/card'; +import { MatCard, MatCardContent, MatCardHeader, MatCardTitle, MatCardTitleGroup } from '@angular/material/card'; import { MatIcon } from '@angular/material/icon'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort, MatSortHeader } from '@angular/material/sort'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatHeaderRowDef, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, MatHeaderRow, - MatRowDef, + MatHeaderRowDef, MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, RouterLink } from '@angular/router'; import { RecipeTemplate } from '../recipe-template'; - import { RecipeTemplateListDataSource } from './recipe-template-list-datasource'; @Component({ selector: 'app-recipe-template-list', templateUrl: './recipe-template-list.component.html', styleUrls: ['./recipe-template-list.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -52,6 +50,8 @@ import { RecipeTemplateListDataSource } from './recipe-template-list-datasource' ], }) export class RecipeTemplateListComponent implements OnInit { + private route = inject(ActivatedRoute); + @ViewChild(MatPaginator, { static: true }) paginator!: MatPaginator; @ViewChild(MatSort, { static: true }) sort!: MatSort; list: RecipeTemplate[] = []; @@ -59,8 +59,6 @@ export class RecipeTemplateListComponent implements OnInit { /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = ['name', 'selected', 'date']; - constructor(private route: ActivatedRoute) {} - ngOnInit() { this.route.data.subscribe((value) => { const data = value as { list: RecipeTemplate[] }; diff --git a/overlord/src/app/recipe-template/recipe-template.routes.ts b/overlord/src/app/recipe-template/recipe-template.routes.ts index 4c0e47d4..7018b232 100644 --- a/overlord/src/app/recipe-template/recipe-template.routes.ts +++ b/overlord/src/app/recipe-template/recipe-template.routes.ts @@ -1,10 +1,9 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; - import { RecipeTemplateDetailComponent } from './recipe-template-detail/recipe-template-detail.component'; -import { RecipeTemplateListComponent } from './recipe-template-list/recipe-template-list.component'; import { recipeTemplateListResolver } from './recipe-template-list.resolver'; +import { RecipeTemplateListComponent } from './recipe-template-list/recipe-template-list.component'; import { recipeTemplateResolver } from './recipe-template.resolver'; export const routes: Routes = [ diff --git a/overlord/src/app/recipe-template/recipe-template.service.ts b/overlord/src/app/recipe-template/recipe-template.service.ts index bbf2c8ba..5811e9be 100644 --- a/overlord/src/app/recipe-template/recipe-template.service.ts +++ b/overlord/src/app/recipe-template/recipe-template.service.ts @@ -1,10 +1,9 @@ import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; import { ErrorLoggerService } from '../core/error-logger.service'; - import { RecipeTemplate } from './recipe-template'; const url = '/api/recipe-templates'; @@ -14,10 +13,8 @@ const serviceName = 'RecipeTemplateService'; providedIn: 'root', }) export class RecipeTemplateService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); get(id: string | null): Observable { const getUrl: string = id === null ? url : `${url}/${id}`; diff --git a/overlord/src/app/recipe/recipe-detail/recipe-detail.component.ts b/overlord/src/app/recipe/recipe-detail/recipe-detail.component.ts index 9d3ec66d..933e2a36 100644 --- a/overlord/src/app/recipe/recipe-detail/recipe-detail.component.ts +++ b/overlord/src/app/recipe/recipe-detail/recipe-detail.component.ts @@ -1,27 +1,28 @@ import { AsyncPipe, DecimalPipe } from '@angular/common'; -import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; +import { AfterViewInit, Component, ElementRef, inject, OnInit, ViewChild } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; -import { MatAutocompleteSelectedEvent, MatAutocompleteTrigger, MatAutocomplete } from '@angular/material/autocomplete'; +import { MatAutocomplete, MatAutocompleteSelectedEvent, MatAutocompleteTrigger } from '@angular/material/autocomplete'; import { MatButton, MatIconButton } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitle, MatCardContent, MatCardActions } from '@angular/material/card'; +import { MatCard, MatCardActions, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card'; import { MatOption } from '@angular/material/core'; -import { MatDatepickerInput, MatDatepickerToggle, MatDatepicker } from '@angular/material/datepicker'; +import { MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from '@angular/material/datepicker'; import { MatDialog } from '@angular/material/dialog'; import { MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field'; import { MatIcon } from '@angular/material/icon'; import { MatInput } from '@angular/material/input'; +import { MatSnackBar } from '@angular/material/snack-bar'; import { MatSort } from '@angular/material/sort'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatHeaderRowDef, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, MatHeaderRow, - MatRowDef, + MatHeaderRowDef, MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, Router } from '@angular/router'; import moment from 'moment'; @@ -31,21 +32,18 @@ import { Period } from 'src/app/period/period'; import { Product } from '../../core/product'; import { ProductSku } from '../../core/product-sku'; -import { MatSnackBar } from '@angular/material/snack-bar'; import { ProductService } from '../../product/product.service'; import { ConfirmDialogComponent } from '../../shared/confirm-dialog/confirm-dialog.component'; import { MathService } from '../../shared/math.service'; import { Recipe } from '../recipe'; import { RecipeItem } from '../recipe-item'; import { RecipeService } from '../recipe.service'; - import { RecipeDetailDatasource } from './recipe-detail-datasource'; @Component({ selector: 'app-product-group-detail', templateUrl: './recipe-detail.component.html', styleUrls: ['./recipe-detail.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -82,6 +80,14 @@ import { RecipeDetailDatasource } from './recipe-detail-datasource'; ], }) export class RecipeDetailComponent implements OnInit, AfterViewInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + private dialog = inject(MatDialog); + private snackBar = inject(MatSnackBar); + private math = inject(MathService); + private ser = inject(RecipeService); + private productSer = inject(ProductService); + @ViewChild('productElement', { static: true }) productElement!: ElementRef; @ViewChild('ingredientElement', { static: true }) ingredientElement!: ElementRef; public itemsObservable = new BehaviorSubject([]); @@ -110,15 +116,7 @@ export class RecipeDetailComponent implements OnInit, AfterViewInit { displayedColumns = ['product', 'quantity', 'action']; - constructor( - private route: ActivatedRoute, - private router: Router, - private dialog: MatDialog, - private snackBar: MatSnackBar, - private math: MathService, - private ser: RecipeService, - private productSer: ProductService, - ) { + constructor() { this.product = null; this.ingredient = null; this.form = new FormGroup({ diff --git a/overlord/src/app/recipe/recipe-list/recipe-list.component.ts b/overlord/src/app/recipe/recipe-list/recipe-list.component.ts index 84440ef3..33076d97 100644 --- a/overlord/src/app/recipe/recipe-list/recipe-list.component.ts +++ b/overlord/src/app/recipe/recipe-list/recipe-list.component.ts @@ -1,7 +1,7 @@ -import { Component, OnInit, ViewChild } from '@angular/core'; +import { Component, inject, OnInit, ViewChild } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; -import { MatIconAnchor, MatAnchor } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitleGroup, MatCardTitle, MatCardContent } from '@angular/material/card'; +import { MatAnchor, MatIconAnchor } from '@angular/material/button'; +import { MatCard, MatCardContent, MatCardHeader, MatCardTitle, MatCardTitleGroup } from '@angular/material/card'; import { MatOption } from '@angular/material/core'; import { MatFormField, MatLabel } from '@angular/material/form-field'; import { MatIcon } from '@angular/material/icon'; @@ -9,16 +9,16 @@ import { MatPaginator } from '@angular/material/paginator'; import { MatSelect } from '@angular/material/select'; import { MatSort, MatSortHeader } from '@angular/material/sort'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatHeaderRowDef, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, MatHeaderRow, - MatRowDef, + MatHeaderRowDef, MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, Router, RouterLink } from '@angular/router'; import { BehaviorSubject } from 'rxjs'; @@ -26,14 +26,12 @@ import { Period } from 'src/app/period/period'; import { ProductGroup } from '../../core/product-group'; import { Recipe } from '../recipe'; - import { RecipeListDatasource } from './recipe-list-datasource'; @Component({ selector: 'app-role-list', templateUrl: './recipe-list.component.html', styleUrls: ['./recipe-list.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -65,6 +63,9 @@ import { RecipeListDatasource } from './recipe-list-datasource'; ], }) export class RecipeListComponent implements OnInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + @ViewChild(MatPaginator, { static: true }) paginator!: MatPaginator; @ViewChild(MatSort, { static: true }) sort!: MatSort; form: FormGroup<{ @@ -90,10 +91,7 @@ export class RecipeListComponent implements OnInit { /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = ['name', 'yield', 'date', 'source']; - constructor( - private route: ActivatedRoute, - private router: Router, - ) { + constructor() { this.form = new FormGroup({ period: new FormControl(new Period(), { nonNullable: true }), productGroup: new FormControl(null), diff --git a/overlord/src/app/recipe/recipe.routes.ts b/overlord/src/app/recipe/recipe.routes.ts index 48329a1a..6c5bf9d1 100644 --- a/overlord/src/app/recipe/recipe.routes.ts +++ b/overlord/src/app/recipe/recipe.routes.ts @@ -3,10 +3,9 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; import { periodListResolver } from '../period/period-list.resolver'; import { productGroupListResolver } from '../product-group/product-group-list.resolver'; - import { RecipeDetailComponent } from './recipe-detail/recipe-detail.component'; -import { RecipeListComponent } from './recipe-list/recipe-list.component'; import { recipeListResolver } from './recipe-list.resolver'; +import { RecipeListComponent } from './recipe-list/recipe-list.component'; import { recipeResolver } from './recipe.resolver'; export const routes: Routes = [ diff --git a/overlord/src/app/recipe/recipe.service.ts b/overlord/src/app/recipe/recipe.service.ts index ca030d64..2d887aaa 100644 --- a/overlord/src/app/recipe/recipe.service.ts +++ b/overlord/src/app/recipe/recipe.service.ts @@ -1,10 +1,9 @@ import { HttpClient, HttpParams } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable, of as observableOf } from 'rxjs'; import { catchError } from 'rxjs/operators'; import { ErrorLoggerService } from '../core/error-logger.service'; - import { Recipe } from './recipe'; const url = '/api/recipes'; @@ -12,10 +11,8 @@ const serviceName = 'RecipeService'; @Injectable({ providedIn: 'root' }) export class RecipeService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); get(id: string | null): Observable { const getUrl: string = id === null ? `${url}` : `${url}/${id}`; diff --git a/overlord/src/app/recipe/recipe.ts b/overlord/src/app/recipe/recipe.ts index c68c2b56..559d57b3 100644 --- a/overlord/src/app/recipe/recipe.ts +++ b/overlord/src/app/recipe/recipe.ts @@ -1,5 +1,4 @@ import { ProductSku } from '../core/product-sku'; - import { RecipeItem } from './recipe-item'; export class Recipe { diff --git a/overlord/src/app/role/role-detail/role-detail.component.ts b/overlord/src/app/role/role-detail/role-detail.component.ts index b9fadfd6..0ee3124c 100644 --- a/overlord/src/app/role/role-detail/role-detail.component.ts +++ b/overlord/src/app/role/role-detail/role-detail.component.ts @@ -1,15 +1,15 @@ -import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; +import { AfterViewInit, Component, ElementRef, inject, OnInit, ViewChild } from '@angular/core'; import { FormArray, FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { MatButton } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitle, MatCardContent, MatCardActions } from '@angular/material/card'; +import { MatCard, MatCardActions, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card'; import { MatCheckbox } from '@angular/material/checkbox'; import { MatDialog } from '@angular/material/dialog'; import { MatDivider } from '@angular/material/divider'; import { MatFormField, MatLabel } from '@angular/material/form-field'; import { MatInput } from '@angular/material/input'; +import { MatSnackBar } from '@angular/material/snack-bar'; import { ActivatedRoute, Router } from '@angular/router'; -import { MatSnackBar } from '@angular/material/snack-bar'; import { ConfirmDialogComponent } from '../../shared/confirm-dialog/confirm-dialog.component'; import { Role } from '../role'; import { RoleService } from '../role.service'; @@ -18,7 +18,6 @@ import { RoleService } from '../role.service'; selector: 'app-role-detail', templateUrl: './role-detail.component.html', styleUrls: ['./role-detail.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -35,6 +34,12 @@ import { RoleService } from '../role.service'; ], }) export class RoleDetailComponent implements OnInit, AfterViewInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + private snackBar = inject(MatSnackBar); + private dialog = inject(MatDialog); + private ser = inject(RoleService); + @ViewChild('nameElement', { static: true }) nameElement!: ElementRef; form: FormGroup<{ name: FormControl; @@ -47,13 +52,7 @@ export class RoleDetailComponent implements OnInit, AfterViewInit { item: Role = new Role(); - constructor( - private route: ActivatedRoute, - private router: Router, - private snackBar: MatSnackBar, - private dialog: MatDialog, - private ser: RoleService, - ) { + constructor() { this.form = new FormGroup({ name: new FormControl(null), permissions: new FormArray }>>([]), diff --git a/overlord/src/app/role/role-list/role-list.component.ts b/overlord/src/app/role/role-list/role-list.component.ts index bbcf77bf..ef33978f 100644 --- a/overlord/src/app/role/role-list/role-list.component.ts +++ b/overlord/src/app/role/role-list/role-list.component.ts @@ -1,32 +1,30 @@ -import { Component, OnInit, ViewChild } from '@angular/core'; +import { Component, inject, OnInit, ViewChild } from '@angular/core'; import { MatAnchor } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitleGroup, MatCardTitle, MatCardContent } from '@angular/material/card'; +import { MatCard, MatCardContent, MatCardHeader, MatCardTitle, MatCardTitleGroup } from '@angular/material/card'; import { MatIcon } from '@angular/material/icon'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort, MatSortHeader } from '@angular/material/sort'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatHeaderRowDef, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, MatHeaderRow, - MatRowDef, + MatHeaderRowDef, MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, RouterLink } from '@angular/router'; import { Role } from '../role'; - import { RoleListDatasource } from './role-list-datasource'; @Component({ selector: 'app-role-list', templateUrl: './role-list.component.html', styleUrls: ['./role-list.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -52,6 +50,8 @@ import { RoleListDatasource } from './role-list-datasource'; ], }) export class RoleListComponent implements OnInit { + private route = inject(ActivatedRoute); + @ViewChild(MatPaginator, { static: true }) paginator!: MatPaginator; @ViewChild(MatSort, { static: true }) sort!: MatSort; list: Role[] = []; @@ -59,8 +59,6 @@ export class RoleListComponent implements OnInit { /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = ['name', 'permissions']; - constructor(private route: ActivatedRoute) {} - ngOnInit() { this.route.data.subscribe((value) => { const data = value as { list: Role[] }; diff --git a/overlord/src/app/role/role.routes.ts b/overlord/src/app/role/role.routes.ts index 47f65093..7b34ab79 100644 --- a/overlord/src/app/role/role.routes.ts +++ b/overlord/src/app/role/role.routes.ts @@ -1,10 +1,9 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; - import { RoleDetailComponent } from './role-detail/role-detail.component'; -import { RoleListComponent } from './role-list/role-list.component'; import { roleListResolver } from './role-list.resolver'; +import { RoleListComponent } from './role-list/role-list.component'; import { roleResolver } from './role.resolver'; export const routes: Routes = [ diff --git a/overlord/src/app/role/role.service.ts b/overlord/src/app/role/role.service.ts index c505f363..eb407d4b 100644 --- a/overlord/src/app/role/role.service.ts +++ b/overlord/src/app/role/role.service.ts @@ -1,10 +1,9 @@ import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; import { ErrorLoggerService } from '../core/error-logger.service'; - import { Role } from './role'; const url = '/api/roles'; @@ -14,10 +13,8 @@ const serviceName = 'RoleService'; providedIn: 'root', }) export class RoleService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); get(id: string | null): Observable { const getUrl: string = id === null ? `${url}` : `${url}/${id}`; diff --git a/overlord/src/app/settings/settings.component.ts b/overlord/src/app/settings/settings.component.ts index a281dddc..48e14bf4 100644 --- a/overlord/src/app/settings/settings.component.ts +++ b/overlord/src/app/settings/settings.component.ts @@ -1,27 +1,28 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, inject, OnInit } from '@angular/core'; import { FormArray, FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { MatButton, MatIconButton } from '@angular/material/button'; import { MatCard, MatCardContent, MatCardSubtitle } from '@angular/material/card'; import { MatCheckbox } from '@angular/material/checkbox'; -import { MatDatepickerInput, MatDatepickerToggle, MatDatepicker } from '@angular/material/datepicker'; +import { MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from '@angular/material/datepicker'; import { MatDialog } from '@angular/material/dialog'; import { MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field'; import { MatIcon } from '@angular/material/icon'; import { MatInput } from '@angular/material/input'; +import { MatSnackBar } from '@angular/material/snack-bar'; import { MatSort } from '@angular/material/sort'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatHeaderRowDef, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, MatHeaderRow, - MatRowDef, + MatHeaderRowDef, MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; -import { MatTabGroup, MatTab } from '@angular/material/tabs'; +import { MatTab, MatTabGroup } from '@angular/material/tabs'; import { ActivatedRoute, Router } from '@angular/router'; import moment from 'moment'; import { BehaviorSubject } from 'rxjs'; @@ -29,9 +30,7 @@ import { BehaviorSubject } from 'rxjs'; import { environment } from '../app.environment'; import { AuthService } from '../auth/auth.service'; import { AccountType } from '../core/account-type'; -import { MatSnackBar } from '@angular/material/snack-bar'; import { ConfirmDialogComponent } from '../shared/confirm-dialog/confirm-dialog.component'; - import { LockDataSource } from './lock-datasource'; import { LockInfo } from './lock-info'; import { SettingsService } from './settings.service'; @@ -40,7 +39,6 @@ import { SettingsService } from './settings.service'; selector: 'app-settings', templateUrl: './settings.component.html', styleUrls: ['./settings.component.css'], - standalone: true, imports: [ MatTabGroup, MatTab, @@ -73,6 +71,13 @@ import { SettingsService } from './settings.service'; ], }) export class SettingsComponent implements OnInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + private dialog = inject(MatDialog); + private snackBar = inject(MatSnackBar); + auth = inject(AuthService); + private ser = inject(SettingsService); + public lockObservable = new BehaviorSubject([]); dataSource: LockDataSource = new LockDataSource(this.lockObservable); @@ -111,14 +116,7 @@ export class SettingsComponent implements OnInit { version: string; - constructor( - private route: ActivatedRoute, - private router: Router, - private dialog: MatDialog, - private snackBar: MatSnackBar, - public auth: AuthService, - private ser: SettingsService, - ) { + constructor() { const startDate = moment().date(1); const finishDate = moment().date(startDate.daysInMonth()); this.lockInfoForm = new FormGroup({ diff --git a/overlord/src/app/settings/settings.routes.ts b/overlord/src/app/settings/settings.routes.ts index 01694ac0..42a8caac 100644 --- a/overlord/src/app/settings/settings.routes.ts +++ b/overlord/src/app/settings/settings.routes.ts @@ -2,7 +2,6 @@ import { Routes } from '@angular/router'; import { accountTypeResolver } from '../account/account-type.resolver'; import { authGuard } from '../auth/auth-guard.service'; - import { lockInformationResolver } from './lock-information.resolver'; import { maintenanceResolver } from './maintenance.resolver'; import { SettingsComponent } from './settings.component'; diff --git a/overlord/src/app/settings/settings.service.ts b/overlord/src/app/settings/settings.service.ts index 061c19e2..9a3430b7 100644 --- a/overlord/src/app/settings/settings.service.ts +++ b/overlord/src/app/settings/settings.service.ts @@ -1,20 +1,17 @@ import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; import { ErrorLoggerService } from '../core/error-logger.service'; - import { LockInfo } from './lock-info'; const serviceName = 'SettingsService'; @Injectable({ providedIn: 'root' }) export class SettingsService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); getLockInformation(): Observable<[LockInfo]> { const url = '/api/lock-information'; diff --git a/overlord/src/app/settings/voucher-type.resolver.ts b/overlord/src/app/settings/voucher-type.resolver.ts index 62d10c86..91543a96 100644 --- a/overlord/src/app/settings/voucher-type.resolver.ts +++ b/overlord/src/app/settings/voucher-type.resolver.ts @@ -2,7 +2,6 @@ import { inject } from '@angular/core'; import { ResolveFn } from '@angular/router'; import { AccountType } from '../core/account-type'; - import { VoucherTypeService } from './voucher-type.service'; export const voucherTypeResolver: ResolveFn = () => { diff --git a/overlord/src/app/settings/voucher-type.service.ts b/overlord/src/app/settings/voucher-type.service.ts index 9b5a9e10..916e5937 100644 --- a/overlord/src/app/settings/voucher-type.service.ts +++ b/overlord/src/app/settings/voucher-type.service.ts @@ -1,5 +1,5 @@ import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; @@ -13,10 +13,8 @@ const serviceName = 'VoucherTypeService'; providedIn: 'root', }) export class VoucherTypeService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); list(): Observable { return this.http.get(url).pipe(catchError(this.log.handleError(serviceName, 'list'))) as Observable< diff --git a/overlord/src/app/shared/confirm-dialog/confirm-dialog.component.ts b/overlord/src/app/shared/confirm-dialog/confirm-dialog.component.ts index 4b422270..bfbcff6d 100644 --- a/overlord/src/app/shared/confirm-dialog/confirm-dialog.component.ts +++ b/overlord/src/app/shared/confirm-dialog/confirm-dialog.component.ts @@ -1,25 +1,25 @@ import { CdkScrollable } from '@angular/cdk/scrolling'; -import { Component, Inject } from '@angular/core'; +import { Component, inject } from '@angular/core'; import { MatButton } from '@angular/material/button'; import { MAT_DIALOG_DATA, - MatDialogRef, - MatDialogTitle, - MatDialogContent, MatDialogActions, MatDialogClose, + MatDialogContent, + MatDialogRef, + MatDialogTitle, } from '@angular/material/dialog'; @Component({ selector: 'app-confirm-dialog', templateUrl: './confirm-dialog.component.html', styleUrls: ['./confirm-dialog.component.css'], - standalone: true, imports: [MatDialogTitle, CdkScrollable, MatDialogContent, MatDialogActions, MatButton, MatDialogClose], }) export class ConfirmDialogComponent { - constructor( - public dialogRef: MatDialogRef, - @Inject(MAT_DIALOG_DATA) public data: { title: string; content: string }, - ) {} + dialogRef = inject>(MatDialogRef); + data = inject<{ + title: string; + content: string; + }>(MAT_DIALOG_DATA); } diff --git a/overlord/src/app/shared/cookie.service.spec.ts b/overlord/src/app/shared/cookie.service.spec.ts index 79bb34c6..2fd83a36 100644 --- a/overlord/src/app/shared/cookie.service.spec.ts +++ b/overlord/src/app/shared/cookie.service.spec.ts @@ -1,4 +1,4 @@ -import { TestBed, inject } from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; import { CookieService } from './cookie.service'; diff --git a/overlord/src/app/shared/image-dialog/image-dialog.component.ts b/overlord/src/app/shared/image-dialog/image-dialog.component.ts index a89b2bdc..2c18c297 100644 --- a/overlord/src/app/shared/image-dialog/image-dialog.component.ts +++ b/overlord/src/app/shared/image-dialog/image-dialog.component.ts @@ -1,4 +1,4 @@ -import { Component, Inject } from '@angular/core'; +import { Component, inject } from '@angular/core'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; @Component({ @@ -8,10 +8,8 @@ import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; standalone: true, }) export class ImageDialogComponent { - constructor( - public dialogRef: MatDialogRef, - @Inject(MAT_DIALOG_DATA) public data: string, - ) {} + dialogRef = inject>(MatDialogRef); + data = inject(MAT_DIALOG_DATA); close(): void { this.dialogRef.close(); diff --git a/overlord/src/app/shared/to-csv.service.spec.ts b/overlord/src/app/shared/to-csv.service.spec.ts index 426793ab..567091ad 100644 --- a/overlord/src/app/shared/to-csv.service.spec.ts +++ b/overlord/src/app/shared/to-csv.service.spec.ts @@ -1,4 +1,4 @@ -import { TestBed, inject } from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; import { ToCsvService } from './to-csv.service'; diff --git a/overlord/src/app/stock-movement/stock-movement.component.ts b/overlord/src/app/stock-movement/stock-movement.component.ts index 8691e9d5..8bf7724f 100644 --- a/overlord/src/app/stock-movement/stock-movement.component.ts +++ b/overlord/src/app/stock-movement/stock-movement.component.ts @@ -1,24 +1,24 @@ import { DecimalPipe } from '@angular/common'; -import { Component, ElementRef, HostListener, OnInit, ViewChild } from '@angular/core'; +import { Component, ElementRef, HostListener, inject, OnInit, ViewChild } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { MatButton } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitle, MatCardContent } from '@angular/material/card'; -import { MatDatepickerInput, MatDatepickerToggle, MatDatepicker } from '@angular/material/datepicker'; +import { MatCard, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card'; +import { MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from '@angular/material/datepicker'; import { MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field'; import { MatInput } from '@angular/material/input'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort, MatSortHeader } from '@angular/material/sort'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatHeaderRowDef, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, MatHeaderRow, - MatRowDef, + MatHeaderRowDef, MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, Router, RouterLink } from '@angular/router'; import moment from 'moment'; @@ -30,7 +30,6 @@ import { StockMovementDataSource } from './stock-movement-datasource'; selector: 'app-stock-movement', templateUrl: './stock-movement.component.html', styleUrls: ['./stock-movement.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -63,6 +62,9 @@ import { StockMovementDataSource } from './stock-movement-datasource'; ], }) export class StockMovementComponent implements OnInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + @ViewChild(MatPaginator, { static: true }) paginator!: MatPaginator; @ViewChild(MatSort, { static: true }) sort!: MatSort; @ViewChild('startDateElement', { static: true }) startDate!: ElementRef; @@ -84,10 +86,7 @@ export class StockMovementComponent implements OnInit { this.startDate.nativeElement.select(); } - constructor( - private route: ActivatedRoute, - private router: Router, - ) { + constructor() { this.form = new FormGroup({ startDate: new FormControl(new Date(), { nonNullable: true }), finishDate: new FormControl(new Date(), { nonNullable: true }), diff --git a/overlord/src/app/stock-movement/stock-movement.routes.ts b/overlord/src/app/stock-movement/stock-movement.routes.ts index 6b25011c..667f4ab2 100644 --- a/overlord/src/app/stock-movement/stock-movement.routes.ts +++ b/overlord/src/app/stock-movement/stock-movement.routes.ts @@ -1,7 +1,6 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; - import { StockMovementComponent } from './stock-movement.component'; import { stockMovementResolver } from './stock-movement.resolver'; diff --git a/overlord/src/app/stock-movement/stock-movement.service.ts b/overlord/src/app/stock-movement/stock-movement.service.ts index dda3552e..96bfda02 100644 --- a/overlord/src/app/stock-movement/stock-movement.service.ts +++ b/overlord/src/app/stock-movement/stock-movement.service.ts @@ -1,10 +1,9 @@ import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; import { ErrorLoggerService } from '../core/error-logger.service'; - import { StockMovement } from './stock-movement'; const url = '/api/stock-movement'; @@ -14,10 +13,8 @@ const serviceName = 'StockMovementService'; providedIn: 'root', }) export class StockMovementService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); list(startDate: string | null, finishDate: string | null): Observable { const startDateWithSlash = startDate ? `/${startDate}` : ''; diff --git a/overlord/src/app/tag-dialog/tag-dialog.component.ts b/overlord/src/app/tag-dialog/tag-dialog.component.ts index 18770f3c..33bde259 100644 --- a/overlord/src/app/tag-dialog/tag-dialog.component.ts +++ b/overlord/src/app/tag-dialog/tag-dialog.component.ts @@ -1,30 +1,29 @@ import { CdkScrollable } from '@angular/cdk/scrolling'; -import { Component, Inject, OnInit } from '@angular/core'; +import { Component, inject, OnInit } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { MatButton } from '@angular/material/button'; +import { MatCheckbox } from '@angular/material/checkbox'; import { MAT_DIALOG_DATA, - MatDialogRef, - MatDialogTitle, - MatDialogContent, MatDialogActions, MatDialogClose, + MatDialogContent, + MatDialogRef, + MatDialogTitle, } from '@angular/material/dialog'; import { MatFormField, MatLabel } from '@angular/material/form-field'; import { MatInput } from '@angular/material/input'; - -import { Tag } from '../tag/tag'; -import { MatCheckbox } from '@angular/material/checkbox'; -import { LedgerItem } from '../ledger/ledger-item'; -import { TagList } from './tag-list'; -import { TagService } from '../tag/tag.service'; import { MatSnackBar } from '@angular/material/snack-bar'; +import { LedgerItem } from '../ledger/ledger-item'; +import { Tag } from '../tag/tag'; +import { TagService } from '../tag/tag.service'; +import { TagList } from './tag-list'; + @Component({ selector: 'app-tag-dialog', templateUrl: './tag-dialog.component.html', styleUrls: ['./tag-dialog.component.css'], - standalone: true, imports: [ CdkScrollable, MatCheckbox, @@ -40,18 +39,21 @@ import { MatSnackBar } from '@angular/material/snack-bar'; ], }) export class TagDialogComponent implements OnInit { + dialogRef = inject>(MatDialogRef); + data = inject<{ + tags: Tag[]; + vouchers: LedgerItem[]; + }>(MAT_DIALOG_DATA); + + private snackBar = inject(MatSnackBar); + private ser = inject(TagService); + tags: TagList[] = []; form: FormGroup<{ name: FormControl; }>; - constructor( - public dialogRef: MatDialogRef, - @Inject(MAT_DIALOG_DATA) public data: { tags: Tag[]; vouchers: LedgerItem[] }, - - private snackBar: MatSnackBar, - private ser: TagService, - ) { + constructor() { this.form = new FormGroup({ name: new FormControl(''), }); diff --git a/overlord/src/app/tag/tag-detail/tag-detail.component.ts b/overlord/src/app/tag/tag-detail/tag-detail.component.ts index acb546fb..1ff952f0 100644 --- a/overlord/src/app/tag/tag-detail/tag-detail.component.ts +++ b/overlord/src/app/tag/tag-detail/tag-detail.component.ts @@ -1,22 +1,21 @@ -import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; +import { AfterViewInit, Component, ElementRef, inject, OnInit, ViewChild } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { MatButton } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitle, MatCardContent, MatCardActions } from '@angular/material/card'; +import { MatCard, MatCardActions, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card'; +import { MatDialog } from '@angular/material/dialog'; import { MatFormField, MatLabel } from '@angular/material/form-field'; import { MatInput } from '@angular/material/input'; +import { MatSnackBar } from '@angular/material/snack-bar'; import { ActivatedRoute, Router } from '@angular/router'; +import { ConfirmDialogComponent } from 'src/app/shared/confirm-dialog/confirm-dialog.component'; import { Tag } from '../tag'; -import { MatSnackBar } from '@angular/material/snack-bar'; import { TagService } from '../tag.service'; -import { MatDialog } from '@angular/material/dialog'; -import { ConfirmDialogComponent } from 'src/app/shared/confirm-dialog/confirm-dialog.component'; @Component({ selector: 'app-tag-detail', templateUrl: './tag-detail.component.html', styleUrls: ['./tag-detail.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -31,6 +30,12 @@ import { ConfirmDialogComponent } from 'src/app/shared/confirm-dialog/confirm-di ], }) export class TagDetailComponent implements OnInit, AfterViewInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + private snackBar = inject(MatSnackBar); + private dialog = inject(MatDialog); + private ser = inject(TagService); + @ViewChild('nameElement', { static: true }) nameElement!: ElementRef; form: FormGroup<{ name: FormControl; @@ -38,13 +43,7 @@ export class TagDetailComponent implements OnInit, AfterViewInit { item: Tag = new Tag(); - constructor( - private route: ActivatedRoute, - private router: Router, - private snackBar: MatSnackBar, - private dialog: MatDialog, - private ser: TagService, - ) { + constructor() { this.form = new FormGroup({ name: new FormControl(null), }); diff --git a/overlord/src/app/tag/tag-list.resolver.spec.ts b/overlord/src/app/tag/tag-list.resolver.spec.ts index 9bb63d9b..a0134cbe 100644 --- a/overlord/src/app/tag/tag-list.resolver.spec.ts +++ b/overlord/src/app/tag/tag-list.resolver.spec.ts @@ -2,7 +2,6 @@ import { TestBed } from '@angular/core/testing'; import { ResolveFn } from '@angular/router'; import { Tag } from '../tag/tag'; - import { tagListResolver } from './tag-list.resolver'; describe('tagListResolver', () => { diff --git a/overlord/src/app/tag/tag-list.resolver.ts b/overlord/src/app/tag/tag-list.resolver.ts index b2f59298..608d19f0 100644 --- a/overlord/src/app/tag/tag-list.resolver.ts +++ b/overlord/src/app/tag/tag-list.resolver.ts @@ -2,7 +2,6 @@ import { inject } from '@angular/core'; import { ResolveFn } from '@angular/router'; import { Tag } from './tag'; - import { TagService } from './tag.service'; export const tagListResolver: ResolveFn = () => { diff --git a/overlord/src/app/tag/tag-list/tag-list.component.ts b/overlord/src/app/tag/tag-list/tag-list.component.ts index d5d7327a..52e37396 100644 --- a/overlord/src/app/tag/tag-list/tag-list.component.ts +++ b/overlord/src/app/tag/tag-list/tag-list.component.ts @@ -1,32 +1,30 @@ -import { Component, OnInit, ViewChild } from '@angular/core'; +import { Component, inject, OnInit, ViewChild } from '@angular/core'; import { MatAnchor } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitleGroup, MatCardTitle, MatCardContent } from '@angular/material/card'; +import { MatCard, MatCardContent, MatCardHeader, MatCardTitle, MatCardTitleGroup } from '@angular/material/card'; import { MatIcon } from '@angular/material/icon'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort, MatSortHeader } from '@angular/material/sort'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatHeaderRowDef, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, MatHeaderRow, - MatRowDef, + MatHeaderRowDef, MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, RouterLink } from '@angular/router'; import { Tag } from '../tag'; - import { TagListDataSource } from './tag-list-datasource'; @Component({ selector: 'app-tag-list', templateUrl: './tag-list.component.html', styleUrls: ['./tag-list.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -52,6 +50,8 @@ import { TagListDataSource } from './tag-list-datasource'; ], }) export class TagListComponent implements OnInit { + private route = inject(ActivatedRoute); + @ViewChild(MatPaginator, { static: true }) paginator!: MatPaginator; @ViewChild(MatSort, { static: true }) sort!: MatSort; list: Tag[] = []; @@ -59,8 +59,6 @@ export class TagListComponent implements OnInit { /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = ['name']; - constructor(private route: ActivatedRoute) {} - ngOnInit() { this.route.data.subscribe((value) => { const data = value as { list: Tag[] }; diff --git a/overlord/src/app/tag/tag.resolver.spec.ts b/overlord/src/app/tag/tag.resolver.spec.ts index e2aec4c4..d370de66 100644 --- a/overlord/src/app/tag/tag.resolver.spec.ts +++ b/overlord/src/app/tag/tag.resolver.spec.ts @@ -2,7 +2,6 @@ import { TestBed } from '@angular/core/testing'; import { ResolveFn } from '@angular/router'; import { Tag } from '../tag/tag'; - import { tagResolver } from './tag.resolver'; describe('tagResolver', () => { diff --git a/overlord/src/app/tag/tag.resolver.ts b/overlord/src/app/tag/tag.resolver.ts index 3569f6d8..68bc8653 100644 --- a/overlord/src/app/tag/tag.resolver.ts +++ b/overlord/src/app/tag/tag.resolver.ts @@ -2,7 +2,6 @@ import { inject } from '@angular/core'; import { ResolveFn } from '@angular/router'; import { Tag } from './tag'; - import { TagService } from './tag.service'; export const tagResolver: ResolveFn = (route) => { diff --git a/overlord/src/app/tag/tag.routes.ts b/overlord/src/app/tag/tag.routes.ts index 7f1aeb4d..44e6af53 100644 --- a/overlord/src/app/tag/tag.routes.ts +++ b/overlord/src/app/tag/tag.routes.ts @@ -1,10 +1,9 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; - import { TagDetailComponent } from './tag-detail/tag-detail.component'; -import { TagListComponent } from './tag-list/tag-list.component'; import { tagListResolver } from './tag-list.resolver'; +import { TagListComponent } from './tag-list/tag-list.component'; import { tagResolver } from './tag.resolver'; export const routes: Routes = [ diff --git a/overlord/src/app/tag/tag.service.ts b/overlord/src/app/tag/tag.service.ts index d2a0c08f..6b36a95b 100644 --- a/overlord/src/app/tag/tag.service.ts +++ b/overlord/src/app/tag/tag.service.ts @@ -1,10 +1,10 @@ import { HttpClient, HttpParams } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; -import { Tag } from './tag'; import { ErrorLoggerService } from '../core/error-logger.service'; +import { Tag } from './tag'; const url = '/api/tags'; const serviceName = 'TagService'; @@ -13,10 +13,8 @@ const serviceName = 'TagService'; providedIn: 'root', }) export class TagService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); get(id: string | null): Observable { const getUrl: string = id === null ? `${url}` : `${url}/${id}`; diff --git a/overlord/src/app/trial-balance/trial-balance.component.ts b/overlord/src/app/trial-balance/trial-balance.component.ts index 9f006424..f1667700 100644 --- a/overlord/src/app/trial-balance/trial-balance.component.ts +++ b/overlord/src/app/trial-balance/trial-balance.component.ts @@ -1,30 +1,29 @@ import { CurrencyPipe } from '@angular/common'; -import { Component, ElementRef, HostListener, OnInit, ViewChild } from '@angular/core'; +import { Component, ElementRef, HostListener, inject, OnInit, ViewChild } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { MatButton } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitle, MatCardContent } from '@angular/material/card'; -import { MatDatepickerInput, MatDatepickerToggle, MatDatepicker } from '@angular/material/datepicker'; +import { MatCard, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card'; +import { MatDatepicker, MatDatepickerInput, MatDatepickerToggle } from '@angular/material/datepicker'; import { MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field'; import { MatInput } from '@angular/material/input'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort, MatSortHeader } from '@angular/material/sort'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatHeaderRowDef, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, MatHeaderRow, - MatRowDef, + MatHeaderRowDef, MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, Router } from '@angular/router'; import moment from 'moment'; import { AccountingPipe } from '../shared/accounting.pipe'; - import { TrialBalance } from './trial-balance'; import { TrialBalanceDataSource } from './trial-balance-datasource'; @@ -32,7 +31,6 @@ import { TrialBalanceDataSource } from './trial-balance-datasource'; selector: 'app-trial-balance', templateUrl: './trial-balance.component.html', styleUrls: ['./trial-balance.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -65,6 +63,9 @@ import { TrialBalanceDataSource } from './trial-balance-datasource'; ], }) export class TrialBalanceComponent implements OnInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + @ViewChild(MatPaginator, { static: true }) paginator!: MatPaginator; @ViewChild(MatSort, { static: true }) sort!: MatSort; @ViewChild('dateElement', { static: true }) dateElement!: ElementRef; @@ -84,10 +85,7 @@ export class TrialBalanceComponent implements OnInit { this.dateElement.nativeElement.select(); } - constructor( - private route: ActivatedRoute, - private router: Router, - ) { + constructor() { this.form = new FormGroup({ date: new FormControl(new Date(), { nonNullable: true }), }); diff --git a/overlord/src/app/trial-balance/trial-balance.routes.ts b/overlord/src/app/trial-balance/trial-balance.routes.ts index 0a979750..e9f47388 100644 --- a/overlord/src/app/trial-balance/trial-balance.routes.ts +++ b/overlord/src/app/trial-balance/trial-balance.routes.ts @@ -1,7 +1,6 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; - import { TrialBalanceComponent } from './trial-balance.component'; import { trialBalanceResolver } from './trial-balance.resolver'; diff --git a/overlord/src/app/trial-balance/trial-balance.service.ts b/overlord/src/app/trial-balance/trial-balance.service.ts index ae9cadbd..f293cb32 100644 --- a/overlord/src/app/trial-balance/trial-balance.service.ts +++ b/overlord/src/app/trial-balance/trial-balance.service.ts @@ -1,10 +1,9 @@ import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; import { ErrorLoggerService } from '../core/error-logger.service'; - import { TrialBalance } from './trial-balance'; const url = '/api/trial-balance'; @@ -14,10 +13,8 @@ const serviceName = 'TrialBalanceService'; providedIn: 'root', }) export class TrialBalanceService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); list(date: string | null): Observable { const listUrl = date === null ? url : `${url}/${date}`; diff --git a/overlord/src/app/user/user-detail/user-detail.component.ts b/overlord/src/app/user/user-detail/user-detail.component.ts index 817d2a4b..910ae38c 100644 --- a/overlord/src/app/user/user-detail/user-detail.component.ts +++ b/overlord/src/app/user/user-detail/user-detail.component.ts @@ -1,16 +1,16 @@ -import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; +import { AfterViewInit, Component, ElementRef, inject, OnInit, ViewChild } from '@angular/core'; import { FormArray, FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { MatButton } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitle, MatCardContent, MatCardActions } from '@angular/material/card'; +import { MatCard, MatCardActions, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card'; import { MatCheckbox } from '@angular/material/checkbox'; import { MatDialog } from '@angular/material/dialog'; import { MatDivider } from '@angular/material/divider'; import { MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field'; import { MatIcon } from '@angular/material/icon'; import { MatInput } from '@angular/material/input'; +import { MatSnackBar } from '@angular/material/snack-bar'; import { ActivatedRoute, Router } from '@angular/router'; -import { MatSnackBar } from '@angular/material/snack-bar'; import { User } from '../../core/user'; import { ConfirmDialogComponent } from '../../shared/confirm-dialog/confirm-dialog.component'; import { UserService } from '../user.service'; @@ -19,7 +19,6 @@ import { UserService } from '../user.service'; selector: 'app-user-detail', templateUrl: './user-detail.component.html', styleUrls: ['./user-detail.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -38,6 +37,12 @@ import { UserService } from '../user.service'; ], }) export class UserDetailComponent implements OnInit, AfterViewInit { + private route = inject(ActivatedRoute); + private router = inject(Router); + private snackBar = inject(MatSnackBar); + private dialog = inject(MatDialog); + private ser = inject(UserService); + @ViewChild('nameElement', { static: true }) nameElement!: ElementRef; form: FormGroup<{ name: FormControl; @@ -53,13 +58,7 @@ export class UserDetailComponent implements OnInit, AfterViewInit { item: User = new User(); hide: boolean; - constructor( - private route: ActivatedRoute, - private router: Router, - private snackBar: MatSnackBar, - private dialog: MatDialog, - private ser: UserService, - ) { + constructor() { this.hide = true; this.form = new FormGroup({ name: new FormControl(null), diff --git a/overlord/src/app/user/user-list.resolver.spec.ts b/overlord/src/app/user/user-list.resolver.spec.ts index 3a8630cd..b0edb25c 100644 --- a/overlord/src/app/user/user-list.resolver.spec.ts +++ b/overlord/src/app/user/user-list.resolver.spec.ts @@ -2,7 +2,6 @@ import { TestBed } from '@angular/core/testing'; import { ResolveFn } from '@angular/router'; import { User } from '../core/user'; - import { userListResolver } from './user-list.resolver'; describe('userListResolver', () => { diff --git a/overlord/src/app/user/user-list.resolver.ts b/overlord/src/app/user/user-list.resolver.ts index eac25ae5..deecc7c5 100644 --- a/overlord/src/app/user/user-list.resolver.ts +++ b/overlord/src/app/user/user-list.resolver.ts @@ -2,7 +2,6 @@ import { inject } from '@angular/core'; import { ResolveFn } from '@angular/router'; import { User } from '../core/user'; - import { UserService } from './user.service'; export const userListResolver: ResolveFn = () => { diff --git a/overlord/src/app/user/user-list/user-list.component.ts b/overlord/src/app/user/user-list/user-list.component.ts index 25ff38bc..c9d9d186 100644 --- a/overlord/src/app/user/user-list/user-list.component.ts +++ b/overlord/src/app/user/user-list/user-list.component.ts @@ -1,33 +1,31 @@ -import { Component, OnInit, ViewChild } from '@angular/core'; +import { Component, inject, OnInit, ViewChild } from '@angular/core'; import { MatAnchor } from '@angular/material/button'; -import { MatCard, MatCardHeader, MatCardTitleGroup, MatCardTitle, MatCardContent } from '@angular/material/card'; +import { MatCard, MatCardContent, MatCardHeader, MatCardTitle, MatCardTitleGroup } from '@angular/material/card'; import { MatIcon } from '@angular/material/icon'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort, MatSortHeader } from '@angular/material/sort'; import { - MatTable, - MatColumnDef, - MatHeaderCellDef, - MatHeaderCell, - MatCellDef, MatCell, - MatHeaderRowDef, + MatCellDef, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, MatHeaderRow, - MatRowDef, + MatHeaderRowDef, MatRow, + MatRowDef, + MatTable, } from '@angular/material/table'; import { ActivatedRoute, RouterLink } from '@angular/router'; import { User } from '../../core/user'; import { LocalTimePipe } from '../../shared/local-time.pipe'; - import { UserListDataSource } from './user-list-datasource'; @Component({ selector: 'app-user-list', templateUrl: './user-list.component.html', styleUrls: ['./user-list.component.css'], - standalone: true, imports: [ MatCard, MatCardHeader, @@ -54,6 +52,8 @@ import { UserListDataSource } from './user-list-datasource'; ], }) export class UserListComponent implements OnInit { + private route = inject(ActivatedRoute); + @ViewChild(MatPaginator, { static: true }) paginator!: MatPaginator; @ViewChild(MatSort, { static: true }) sort!: MatSort; list: User[] = []; @@ -61,8 +61,6 @@ export class UserListComponent implements OnInit { /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ displayedColumns = ['name', 'lockedOut', 'roles', 'last']; - constructor(private route: ActivatedRoute) {} - ngOnInit() { this.route.data.subscribe((value) => { const data = value as { list: User[] }; diff --git a/overlord/src/app/user/user.resolver.spec.ts b/overlord/src/app/user/user.resolver.spec.ts index 708480e8..6ba1a178 100644 --- a/overlord/src/app/user/user.resolver.spec.ts +++ b/overlord/src/app/user/user.resolver.spec.ts @@ -2,7 +2,6 @@ import { TestBed } from '@angular/core/testing'; import { ResolveFn } from '@angular/router'; import { User } from '../core/user'; - import { userResolver } from './user.resolver'; describe('userResolver', () => { diff --git a/overlord/src/app/user/user.resolver.ts b/overlord/src/app/user/user.resolver.ts index 884371cb..fd123954 100644 --- a/overlord/src/app/user/user.resolver.ts +++ b/overlord/src/app/user/user.resolver.ts @@ -2,7 +2,6 @@ import { inject } from '@angular/core'; import { ResolveFn } from '@angular/router'; import { User } from '../core/user'; - import { UserService } from './user.service'; export const userResolver: ResolveFn = (route) => { diff --git a/overlord/src/app/user/user.routes.ts b/overlord/src/app/user/user.routes.ts index 65cfbb4f..532d0c97 100644 --- a/overlord/src/app/user/user.routes.ts +++ b/overlord/src/app/user/user.routes.ts @@ -1,10 +1,9 @@ import { Routes } from '@angular/router'; import { authGuard } from '../auth/auth-guard.service'; - import { UserDetailComponent } from './user-detail/user-detail.component'; -import { UserListComponent } from './user-list/user-list.component'; import { userListResolver } from './user-list.resolver'; +import { UserListComponent } from './user-list/user-list.component'; import { userResolver } from './user.resolver'; export const routes: Routes = [ diff --git a/overlord/src/app/user/user.service.ts b/overlord/src/app/user/user.service.ts index 314b3fac..59f4b896 100644 --- a/overlord/src/app/user/user.service.ts +++ b/overlord/src/app/user/user.service.ts @@ -1,5 +1,5 @@ import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { catchError } from 'rxjs/operators'; @@ -13,10 +13,8 @@ const serviceName = 'UserService'; providedIn: 'root', }) export class UserService { - constructor( - private http: HttpClient, - private log: ErrorLoggerService, - ) {} + private http = inject(HttpClient); + private log = inject(ErrorLoggerService); get(id: string | null): Observable { const getUrl: string = id === null ? `${url}` : `${url}/${id}`; diff --git a/overlord/src/index.html b/overlord/src/index.html index da670e8e..10fb363b 100644 --- a/overlord/src/index.html +++ b/overlord/src/index.html @@ -1,4 +1,4 @@ - + diff --git a/overlord/src/main.ts b/overlord/src/main.ts index df46ffce..07131f12 100644 --- a/overlord/src/main.ts +++ b/overlord/src/main.ts @@ -1,14 +1,10 @@ +import { registerLocaleData } from '@angular/common'; //function to register it. +import enIn from '@angular/common/locales/en-IN'; import { bootstrapApplication } from '@angular/platform-browser'; import { AppComponent } from './app/app.component'; import { appConfig } from './app/app.config'; -import enIn from '@angular/common/locales/en-IN'; -import {registerLocaleData} from '@angular/common'; //function to register it. - registerLocaleData(enIn); -bootstrapApplication(AppComponent, appConfig) - .catch((err) => console.error(err)); - - \ No newline at end of file +bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err)); diff --git a/overlord/src/styles.css b/overlord/src/styles.css index 3767407a..ebcff4f2 100644 --- a/overlord/src/styles.css +++ b/overlord/src/styles.css @@ -1,9 +1,25 @@ /* You can add global styles to this file, and also import other style files */ -@tailwind base; -@tailwind components; -@tailwind utilities; +@import 'tailwindcss'; + +/* + The default border color has changed to `currentcolor` in Tailwind CSS v4, + so we've added these compatibility styles to make sure everything still + looks the same as it did with Tailwind CSS v3. + + If we ever want to remove these styles, we need to add an explicit border + color utility to any element that depends on these defaults. +*/ +@layer base { + *, + ::after, + ::before, + ::backdrop, + ::file-selector-button { + border-color: var(--color-gray-200, currentcolor); + } +} a { color: rgb(0, 0, 238); text-decoration: underline; -} \ No newline at end of file +} diff --git a/overlord/tailwind.config.js b/overlord/tailwind.config.js deleted file mode 100644 index 8974f833..00000000 --- a/overlord/tailwind.config.js +++ /dev/null @@ -1,10 +0,0 @@ -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - "./src/**/*.{html,ts}", - ], - theme: { - extend: {}, - }, - plugins: [], -} diff --git a/overlord/tsconfig.app.json b/overlord/tsconfig.app.json index 0e090b48..2fcb9c60 100644 --- a/overlord/tsconfig.app.json +++ b/overlord/tsconfig.app.json @@ -5,10 +5,6 @@ "outDir": "../frontend", "types": [] }, - "files": [ - "src/main.ts", - ], - "include": [ - "src/**/*.d.ts" - ] + "files": ["src/main.ts"], + "include": ["src/**/*.d.ts"] } diff --git a/overlord/tsconfig.json b/overlord/tsconfig.json index 4a6b165c..1f398cc8 100644 --- a/overlord/tsconfig.json +++ b/overlord/tsconfig.json @@ -15,20 +15,18 @@ "sourceMap": true, "declaration": false, "experimentalDecorators": true, - "moduleResolution": "node", + "moduleResolution": "bundler", "importHelpers": true, "target": "ES2022", "module": "ES2022", "useDefineForClassFields": false, - "lib": [ - "ES2022", - "dom" - ] + "lib": ["ES2022", "dom"] }, "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, "strictInputAccessModifiers": true, - "strictTemplates": true + "strictTemplates": true, + "strictStandaloneComponents": true } } diff --git a/overlord/tsconfig.spec.json b/overlord/tsconfig.spec.json index be7e9da7..47e3dd75 100644 --- a/overlord/tsconfig.spec.json +++ b/overlord/tsconfig.spec.json @@ -3,12 +3,7 @@ "extends": "./tsconfig.json", "compilerOptions": { "outDir": "./out-tsc/spec", - "types": [ - "jasmine" - ] + "types": ["jasmine"] }, - "include": [ - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] + "include": ["src/**/*.spec.ts", "src/**/*.d.ts"] } diff --git a/overlord/yarn.lock b/overlord/yarn.lock new file mode 100644 index 00000000..bb0fcf30 --- /dev/null +++ b/overlord/yarn.lock @@ -0,0 +1,6996 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@alloc/quick-lru@^5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30" + integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== + +"@ampproject/remapping@2.3.0", "@ampproject/remapping@^2.2.0", "@ampproject/remapping@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + +"@angular-devkit/architect@0.2000.3", "@angular-devkit/architect@>= 0.2000.0 < 0.2100.0": + version "0.2000.3" + resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.2000.3.tgz#f97a65f6b8c3e5f86ba87ece142cc4b908152772" + integrity sha512-37S4dzlwB3C8gnBlwxjjvNUqwSeKnDe2j1XWg7sj94kbg/jLJV0Db/Dvb7zJjKher6Ed1Bnj3pMOM206ALJW2A== + dependencies: + "@angular-devkit/core" "20.0.3" + rxjs "7.8.2" + +"@angular-devkit/core@20.0.3", "@angular-devkit/core@>= 20.0.0 < 21.0.0": + version "20.0.3" + resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-20.0.3.tgz#ae2e1d3a9ee71ec8a598334f1ce78e3c106bac73" + integrity sha512-XgEIbIky0pMtJSomHRaf16BT1jzJNQCm2geNZ642n3cj8fYLm4jHJX/r738kIfbHWoWXT/hlTmVgIH9TdQPicA== + 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" + +"@angular-devkit/schematics@20.0.3", "@angular-devkit/schematics@>= 20.0.0 < 21.0.0": + version "20.0.3" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-20.0.3.tgz#bde5bd47cf6585f0ebe6f39c7d55c13de8c5d8ed" + integrity sha512-T679AQXenG6e4fdC/HXrps0Dqy1EYKb4pFNLQqZHR9mfyeq/vxFWs3ga/yMiqvqMPUK5W5FucEpFZJQQmc7M+w== + dependencies: + "@angular-devkit/core" "20.0.3" + jsonc-parser "3.3.1" + magic-string "0.30.17" + ora "8.2.0" + rxjs "7.8.2" + +"@angular-eslint/builder@20.1.1": + version "20.1.1" + resolved "https://registry.yarnpkg.com/@angular-eslint/builder/-/builder-20.1.1.tgz#2f0fcf193012dc339d8b1fbb91adabdfda8751d7" + integrity sha512-pfCYfocX79CZ5nokZF4gVScUGyLWRKQHZsUkQ5V/1hsaGsahvzDRjxsYz0J9rO0ligSa2pwgUCXEwSY8hhHQBw== + dependencies: + "@angular-devkit/architect" ">= 0.2000.0 < 0.2100.0" + "@angular-devkit/core" ">= 20.0.0 < 21.0.0" + +"@angular-eslint/bundled-angular-compiler@20.1.1": + version "20.1.1" + resolved "https://registry.yarnpkg.com/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-20.1.1.tgz#aca45911806a21daf4b1c60aecadfd908f458fcb" + integrity sha512-hEWh/upyTj2bhyRmbNnGtlOXhBSEHwLg8/9YYhwmiNApQwKcvcg7lkstZMEVrKievNHZT6Wh4dWZvjRjMqLNSg== + +"@angular-eslint/eslint-plugin-template@20.1.1": + version "20.1.1" + resolved "https://registry.yarnpkg.com/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-20.1.1.tgz#12f5b66b64aff756b3b9ca3cd6b6e55f39c77791" + integrity sha512-dRqfxYvgOC4DZqvRTmxoIUMeIqTzcIkRcMVEuP8qvR10KHAWDkV7xT4f7BAee9deI/lzoAk3tk5wkQg6POQo7Q== + dependencies: + "@angular-eslint/bundled-angular-compiler" "20.1.1" + "@angular-eslint/utils" "20.1.1" + aria-query "5.3.2" + axobject-query "4.1.0" + +"@angular-eslint/eslint-plugin@20.1.1": + version "20.1.1" + resolved "https://registry.yarnpkg.com/@angular-eslint/eslint-plugin/-/eslint-plugin-20.1.1.tgz#332e0d3efc0420abecf507fafc33effccc37217a" + integrity sha512-h+D6T35UGIuG0keYPH7dc6OTdfTVJ8GoIhCIpoAmVGhdIdfXIISvDvvX/QPiZtTcefik3vEZEGRiI/Nzc5xImw== + dependencies: + "@angular-eslint/bundled-angular-compiler" "20.1.1" + "@angular-eslint/utils" "20.1.1" + ts-api-utils "^2.1.0" + +"@angular-eslint/schematics@20.1.1": + version "20.1.1" + resolved "https://registry.yarnpkg.com/@angular-eslint/schematics/-/schematics-20.1.1.tgz#2643b4e6ce7f30d4dc8f06b652b91be5f6308d71" + integrity sha512-4sXU0Gr/RhdW3xSBFRzjhTO9mk6ugXUhUIPc1FRta1pmNnbmkvx22ewnKZE8IeRl8PMyk6xJuxZHq19CW1oWOA== + dependencies: + "@angular-devkit/core" ">= 20.0.0 < 21.0.0" + "@angular-devkit/schematics" ">= 20.0.0 < 21.0.0" + "@angular-eslint/eslint-plugin" "20.1.1" + "@angular-eslint/eslint-plugin-template" "20.1.1" + ignore "7.0.5" + semver "7.7.2" + strip-json-comments "3.1.1" + +"@angular-eslint/template-parser@20.1.1": + version "20.1.1" + resolved "https://registry.yarnpkg.com/@angular-eslint/template-parser/-/template-parser-20.1.1.tgz#9c3db7050e3e4bf48f87ffc775a30785fe7d8684" + integrity sha512-giIMYORf8P8MbBxh6EUfiR/7Y+omxJtK2C7a8lYTtLSOIGO0D8c8hXx9hTlPcdupVX+xZXDuZ85c9JDen+JSSA== + dependencies: + "@angular-eslint/bundled-angular-compiler" "20.1.1" + eslint-scope "^8.0.2" + +"@angular-eslint/utils@20.1.1": + version "20.1.1" + resolved "https://registry.yarnpkg.com/@angular-eslint/utils/-/utils-20.1.1.tgz#7f64edcc2aa0d1294c8e72d268960a30f253552d" + integrity sha512-hqbzGqa/0Ua90r4TMn4oZVnLuwIF6dqEfH7SlstB224h/7+nKoi67aHkmUq7VItWXpDDe+f1opeR01GKS9fNog== + dependencies: + "@angular-eslint/bundled-angular-compiler" "20.1.1" + +"@angular/animations@^20.0.4": + version "20.0.4" + resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-20.0.4.tgz#975a674895453bc5cc389cdc7f269753b16f18c3" + integrity sha512-s0kRcEply2A1ThvFmb0+o+hEpAbPn08lpK8xjWZryM4cMrwjgsUE0OZHZPBANP4I1xT7Z82l+fmQbH+vX48EyA== + dependencies: + tslib "^2.3.0" + +"@angular/build@^20.0.3": + version "20.0.3" + resolved "https://registry.yarnpkg.com/@angular/build/-/build-20.0.3.tgz#6c985c202e8955c9502fc725402da6ca8dc686b3" + integrity sha512-xA5eTGop85SI/+hfiOSJR/xI1w1NK3qylpEZ277YRaw8Ikh7r1DKPJOMGBfXNd8QsZYBSWGHA8SXvCmOh/hvLQ== + dependencies: + "@ampproject/remapping" "2.3.0" + "@angular-devkit/architect" "0.2000.3" + "@babel/core" "7.27.1" + "@babel/helper-annotate-as-pure" "7.27.1" + "@babel/helper-split-export-declaration" "7.24.7" + "@inquirer/confirm" "5.1.10" + "@vitejs/plugin-basic-ssl" "2.0.0" + beasties "0.3.4" + browserslist "^4.23.0" + esbuild "0.25.5" + https-proxy-agent "7.0.6" + istanbul-lib-instrument "6.0.3" + jsonc-parser "3.3.1" + listr2 "8.3.3" + magic-string "0.30.17" + mrmime "2.0.1" + parse5-html-rewriting-stream "7.1.0" + picomatch "4.0.2" + piscina "5.0.0" + rollup "4.40.2" + sass "1.88.0" + semver "7.7.2" + source-map-support "0.5.21" + tinyglobby "0.2.13" + vite "6.3.5" + watchpack "2.4.2" + optionalDependencies: + lmdb "3.3.0" + +"@angular/cdk@^20.0.3": + version "20.0.3" + resolved "https://registry.yarnpkg.com/@angular/cdk/-/cdk-20.0.3.tgz#d233bcc345cec9a05f1fec3459a4e7bcc3532f07" + integrity sha512-70KG8GpK4aV9j5hUkpDZJQ6oMgCuaCRY6JX1axPxkNtQaiK6PAmTfQLiGqF2cYhbQneeq3uGvTorAjRfvp8NPQ== + dependencies: + parse5 "^7.1.2" + tslib "^2.3.0" + +"@angular/cli@^20.0.3": + version "20.0.3" + resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-20.0.3.tgz#f142e80fbb9fad629cefb25ed768d24bcda3fcc5" + integrity sha512-tDYcUrxq8Y9wK6EqwJ6Gn+4IF+VpPVikmpuqzqrUtYzqvRTqYtkyhJsAu3Ec6d6941mL2U3ZnMm3sjOxPPNkjA== + dependencies: + "@angular-devkit/architect" "0.2000.3" + "@angular-devkit/core" "20.0.3" + "@angular-devkit/schematics" "20.0.3" + "@inquirer/prompts" "7.5.1" + "@listr2/prompt-adapter-inquirer" "2.0.22" + "@schematics/angular" "20.0.3" + "@yarnpkg/lockfile" "1.1.0" + ini "5.0.0" + jsonc-parser "3.3.1" + listr2 "8.3.3" + npm-package-arg "12.0.2" + npm-pick-manifest "10.0.0" + pacote "21.0.0" + resolve "1.22.10" + semver "7.7.2" + yargs "17.7.2" + +"@angular/common@^20.0.4": + version "20.0.4" + resolved "https://registry.yarnpkg.com/@angular/common/-/common-20.0.4.tgz#845ce1673ff6773f39f0ead5f4da876cbfe07619" + integrity sha512-fWgxe2rgSKgI36ummBYnBN4YUrmp4CHbfEG3RMeJho/vhHKguk2/o6BgL9zvnKybvbWmuaqbkHogi+y0LeJ8Ww== + dependencies: + tslib "^2.3.0" + +"@angular/compiler-cli@^20.0.4": + version "20.0.4" + resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-20.0.4.tgz#a74eb1eb6f14a67862cc755122bc8393a2a000e2" + integrity sha512-2FP1WMRexAMcDPNE3YO3zB++sCgND9O/qJC5rgKbAebpbmOrCDMUBRlftkwiLT+UhTM9PjhTtAGtK7C+2iwx1g== + dependencies: + "@babel/core" "7.27.4" + "@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" + +"@angular/compiler@^20.0.4": + version "20.0.4" + resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-20.0.4.tgz#b3c7cf81863e82c8fcef1d1c8129b33e25b84965" + integrity sha512-1bP3P8Ll/KUYMPiE6TDjkMXkqCDVgSUAUsVCgzAxz4mcMuc9PnlbhQazpWHCkCDIjGFZ5XIAsS49V7tfaTbLDw== + dependencies: + tslib "^2.3.0" + +"@angular/core@^20.0.4": + version "20.0.4" + resolved "https://registry.yarnpkg.com/@angular/core/-/core-20.0.4.tgz#56217b804e45cd16572453bf8159d1358eb8ddc0" + integrity sha512-JhSl3B6CrJ9kegLffgWVFGF4D4bWLV/9r8R0+h78vU+ppdPFPWDha7WnirF31cPIg3pBzy6wn103Kcy9Ri5M5w== + dependencies: + tslib "^2.3.0" + +"@angular/forms@^20.0.4": + version "20.0.4" + resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-20.0.4.tgz#ba93a3709d1805db701027fe79015809f4239d6c" + integrity sha512-bFTMgJSHiLr80ELymRykZW6o5QroDlk+g5AFFiY9yxM8I0DV5YpCNBefv8GiuWubE+Lw6LkQ/HMYeXYJMTue3A== + dependencies: + tslib "^2.3.0" + +"@angular/language-service@^20.0.4": + version "20.0.4" + resolved "https://registry.yarnpkg.com/@angular/language-service/-/language-service-20.0.4.tgz#6de93a4be7a674bd71049c75810c7ced2b8e210e" + integrity sha512-DVia9XvaX/VgSfAKcjJNLcoQvYCDw4XY00VXb8X90XYTr9GE472seQ3I/qXf3JpAyNlLJ7iPGWIHsrLvLFcDNA== + +"@angular/material-moment-adapter@^20.0.3": + version "20.0.3" + resolved "https://registry.yarnpkg.com/@angular/material-moment-adapter/-/material-moment-adapter-20.0.3.tgz#85aa4c73b3661ecce6490b569994a54fd852bc61" + integrity sha512-+dECu9bJExfR/KMsQI/5sw1f4UbVstSabe0+0N6cwkms+UPXWkH6MPRbjPOWyOc1SzOjGNAcMQsG7LhhrUghbg== + dependencies: + tslib "^2.3.0" + +"@angular/material@^20.0.3": + version "20.0.3" + resolved "https://registry.yarnpkg.com/@angular/material/-/material-20.0.3.tgz#8ff22bf0870868c0170d290538c99087b8f1cb0d" + integrity sha512-kd5Mi6gVxcjDs1nfm8GG2rId59SXWQjkiBMqrYuhy2Trpb+zG0vrLClrpoe3JdWqoX4GJagxGwl3VRDBIoP/cw== + dependencies: + tslib "^2.3.0" + +"@angular/platform-browser-dynamic@^20.0.4": + version "20.0.4" + resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-20.0.4.tgz#923a570c008437d57dfba066388e97767ea670ac" + integrity sha512-MTjnSd/nuurpBT5FosgPSGsuH5xF9czmZOSvjBRPKDwAKBCBxISYx/Qb7ktqxI8Fp2ER2wbyxrypwcZHpDyysg== + dependencies: + tslib "^2.3.0" + +"@angular/platform-browser@^20.0.4": + version "20.0.4" + resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-20.0.4.tgz#6f0d36cc1265b7d2454a1e279c85613cf308cd48" + integrity sha512-hMJYvtZlNPh4Tt6JrnK+vmBmHWok04EkuJwyPcPhlle1u6/LihuCj4suELLqCanX9EzyNgvyKnws0i6JE/qh8Q== + dependencies: + tslib "^2.3.0" + +"@angular/router@^20.0.4": + version "20.0.4" + resolved "https://registry.yarnpkg.com/@angular/router/-/router-20.0.4.tgz#4b09ea17f640a8f98c1b273b49418b73ad91ed76" + integrity sha512-t02ukwKh+YDZutR09ZYJVLaC+OPyDxu6ll7A2MFK0BNLPpD9oQc0lDwJZSrqfAhlXU0arWUjmwkNvFdh21/Z5Q== + dependencies: + tslib "^2.3.0" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" + integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== + dependencies: + "@babel/helper-validator-identifier" "^7.27.1" + js-tokens "^4.0.0" + picocolors "^1.1.1" + +"@babel/compat-data@^7.27.2": + version "7.27.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.27.5.tgz#7d0658ec1a8420fc866d1df1b03bea0e79934c82" + integrity sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg== + +"@babel/core@7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.27.1.tgz#89de51e86bd12246003e3524704c49541b16c3e6" + integrity sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.27.1" + "@babel/helper-compilation-targets" "^7.27.1" + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helpers" "^7.27.1" + "@babel/parser" "^7.27.1" + "@babel/template" "^7.27.1" + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/core@7.27.4", "@babel/core@^7.12.3", "@babel/core@^7.23.9": + version "7.27.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.27.4.tgz#cc1fc55d0ce140a1828d1dd2a2eba285adbfb3ce" + integrity sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.27.3" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-module-transforms" "^7.27.3" + "@babel/helpers" "^7.27.4" + "@babel/parser" "^7.27.4" + "@babel/template" "^7.27.2" + "@babel/traverse" "^7.27.4" + "@babel/types" "^7.27.3" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.27.1", "@babel/generator@^7.27.3": + version "7.27.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.27.5.tgz#3eb01866b345ba261b04911020cbe22dd4be8c8c" + integrity sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw== + dependencies: + "@babel/parser" "^7.27.5" + "@babel/types" "^7.27.3" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^3.0.2" + +"@babel/helper-annotate-as-pure@7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.1.tgz#4345d81a9a46a6486e24d069469f13e60445c05d" + integrity sha512-WnuuDILl9oOBbKnb4L+DyODx7iC47XfzmNCpTttFsSp6hTG7XZxu60+4IO+2/hPfcGOoKbFiwoI/+zwARbNQow== + dependencies: + "@babel/types" "^7.27.1" + +"@babel/helper-compilation-targets@^7.27.1", "@babel/helper-compilation-targets@^7.27.2": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d" + integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ== + 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" + +"@babel/helper-module-imports@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204" + integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w== + dependencies: + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" + +"@babel/helper-module-transforms@^7.27.1", "@babel/helper-module-transforms@^7.27.3": + version "7.27.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz#db0bbcfba5802f9ef7870705a7ef8788508ede02" + integrity sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg== + dependencies: + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" + "@babel/traverse" "^7.27.3" + +"@babel/helper-split-export-declaration@7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz#83949436890e07fa3d6873c61a96e3bbf692d856" + integrity sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA== + dependencies: + "@babel/types" "^7.24.7" + +"@babel/helper-string-parser@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" + integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== + +"@babel/helper-validator-identifier@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8" + integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== + +"@babel/helper-validator-option@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f" + integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== + +"@babel/helpers@^7.27.1", "@babel/helpers@^7.27.4": + version "7.27.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.27.6.tgz#6456fed15b2cb669d2d1fabe84b66b34991d812c" + integrity sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug== + dependencies: + "@babel/template" "^7.27.2" + "@babel/types" "^7.27.6" + +"@babel/parser@^7.14.7", "@babel/parser@^7.23.9", "@babel/parser@^7.27.1", "@babel/parser@^7.27.2", "@babel/parser@^7.27.4", "@babel/parser@^7.27.5": + version "7.27.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.5.tgz#ed22f871f110aa285a6fd934a0efed621d118826" + integrity sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg== + dependencies: + "@babel/types" "^7.27.3" + +"@babel/runtime@^7.26.10": + version "7.27.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.6.tgz#ec4070a04d76bae8ddbb10770ba55714a417b7c6" + integrity sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q== + +"@babel/template@^7.27.1", "@babel/template@^7.27.2": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d" + integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/parser" "^7.27.2" + "@babel/types" "^7.27.1" + +"@babel/traverse@^7.27.1", "@babel/traverse@^7.27.3", "@babel/traverse@^7.27.4": + version "7.27.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.27.4.tgz#b0045ac7023c8472c3d35effd7cc9ebd638da6ea" + integrity sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.27.3" + "@babel/parser" "^7.27.4" + "@babel/template" "^7.27.2" + "@babel/types" "^7.27.3" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/types@^7.24.7", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.27.6": + version "7.27.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.27.6.tgz#a434ca7add514d4e646c80f7375c0aa2befc5535" + integrity sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q== + dependencies: + "@babel/helper-string-parser" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" + +"@colors/colors@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== + +"@emnapi/core@^1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.4.3.tgz#9ac52d2d5aea958f67e52c40a065f51de59b77d6" + integrity sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g== + dependencies: + "@emnapi/wasi-threads" "1.0.2" + tslib "^2.4.0" + +"@emnapi/runtime@^1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.4.3.tgz#c0564665c80dc81c448adac23f9dfbed6c838f7d" + integrity sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ== + dependencies: + tslib "^2.4.0" + +"@emnapi/wasi-threads@1.0.2", "@emnapi/wasi-threads@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.0.2.tgz#977f44f844eac7d6c138a415a123818c655f874c" + integrity sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA== + dependencies: + tslib "^2.4.0" + +"@esbuild/aix-ppc64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz#4e0f91776c2b340e75558f60552195f6fad09f18" + integrity sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA== + +"@esbuild/android-arm64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz#bc766407f1718923f6b8079c8c61bf86ac3a6a4f" + integrity sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg== + +"@esbuild/android-arm@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.5.tgz#4290d6d3407bae3883ad2cded1081a234473ce26" + integrity sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA== + +"@esbuild/android-x64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.5.tgz#40c11d9cbca4f2406548c8a9895d321bc3b35eff" + integrity sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw== + +"@esbuild/darwin-arm64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz#49d8bf8b1df95f759ac81eb1d0736018006d7e34" + integrity sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ== + +"@esbuild/darwin-x64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz#e27a5d92a14886ef1d492fd50fc61a2d4d87e418" + integrity sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ== + +"@esbuild/freebsd-arm64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz#97cede59d638840ca104e605cdb9f1b118ba0b1c" + integrity sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw== + +"@esbuild/freebsd-x64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz#71c77812042a1a8190c3d581e140d15b876b9c6f" + integrity sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw== + +"@esbuild/linux-arm64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz#f7b7c8f97eff8ffd2e47f6c67eb5c9765f2181b8" + integrity sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg== + +"@esbuild/linux-arm@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz#2a0be71b6cd8201fa559aea45598dffabc05d911" + integrity sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw== + +"@esbuild/linux-ia32@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz#763414463cd9ea6fa1f96555d2762f9f84c61783" + integrity sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA== + +"@esbuild/linux-loong64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz#428cf2213ff786a502a52c96cf29d1fcf1eb8506" + integrity sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg== + +"@esbuild/linux-mips64el@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz#5cbcc7fd841b4cd53358afd33527cd394e325d96" + integrity sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg== + +"@esbuild/linux-ppc64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz#0d954ab39ce4f5e50f00c4f8c4fd38f976c13ad9" + integrity sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ== + +"@esbuild/linux-riscv64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz#0e7dd30730505abd8088321e8497e94b547bfb1e" + integrity sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA== + +"@esbuild/linux-s390x@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz#5669af81327a398a336d7e40e320b5bbd6e6e72d" + integrity sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ== + +"@esbuild/linux-x64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz#b2357dd153aa49038967ddc1ffd90c68a9d2a0d4" + integrity sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw== + +"@esbuild/netbsd-arm64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz#53b4dfb8fe1cee93777c9e366893bd3daa6ba63d" + integrity sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw== + +"@esbuild/netbsd-x64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz#a0206f6314ce7dc8713b7732703d0f58de1d1e79" + integrity sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ== + +"@esbuild/openbsd-arm64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz#2a796c87c44e8de78001d808c77d948a21ec22fd" + integrity sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw== + +"@esbuild/openbsd-x64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz#28d0cd8909b7fa3953af998f2b2ed34f576728f0" + integrity sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg== + +"@esbuild/sunos-x64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz#a28164f5b997e8247d407e36c90d3fd5ddbe0dc5" + integrity sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA== + +"@esbuild/win32-arm64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz#6eadbead38e8bd12f633a5190e45eff80e24007e" + integrity sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw== + +"@esbuild/win32-ia32@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz#bab6288005482f9ed2adb9ded7e88eba9a62cc0d" + integrity sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ== + +"@esbuild/win32-x64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz#7fc114af5f6563f19f73324b5d5ff36ece0803d1" + integrity sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g== + +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.7.0": + version "4.7.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz#607084630c6c033992a082de6e6fbc1a8b52175a" + integrity sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw== + dependencies: + eslint-visitor-keys "^3.4.3" + +"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.12.1": + version "4.12.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" + integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== + +"@eslint/config-array@^0.20.1": + version "0.20.1" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.20.1.tgz#454f89be82b0e5b1ae872c154c7e2f3dd42c3979" + integrity sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw== + dependencies: + "@eslint/object-schema" "^2.1.6" + debug "^4.3.1" + minimatch "^3.1.2" + +"@eslint/config-helpers@^0.2.1": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.2.3.tgz#39d6da64ed05d7662659aa7035b54cd55a9f3672" + integrity sha512-u180qk2Um1le4yf0ruXH3PYFeEZeYC3p/4wCTKrr2U1CmGdzGi3KtY0nuPDH48UJxlKCC5RDzbcbh4X0XlqgHg== + +"@eslint/core@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.14.0.tgz#326289380968eaf7e96f364e1e4cf8f3adf2d003" + integrity sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg== + dependencies: + "@types/json-schema" "^7.0.15" + +"@eslint/core@^0.15.1": + version "0.15.1" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.15.1.tgz#d530d44209cbfe2f82ef86d6ba08760196dd3b60" + integrity sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA== + dependencies: + "@types/json-schema" "^7.0.15" + +"@eslint/eslintrc@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.1.tgz#e55f7f1dd400600dd066dbba349c4c0bac916964" + integrity sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ== + 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" + +"@eslint/js@9.29.0": + version "9.29.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.29.0.tgz#dc6fd117c19825f8430867a662531da36320fe56" + integrity sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ== + +"@eslint/object-schema@^2.1.6": + version "2.1.6" + resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.6.tgz#58369ab5b5b3ca117880c0f6c0b0f32f6950f24f" + integrity sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA== + +"@eslint/plugin-kit@^0.3.1": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.3.3.tgz#32926b59bd407d58d817941e48b2a7049359b1fd" + integrity sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag== + dependencies: + "@eslint/core" "^0.15.1" + levn "^0.4.1" + +"@humanfs/core@^0.19.1": + version "0.19.1" + resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77" + integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA== + +"@humanfs/node@^0.16.6": + version "0.16.6" + resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.6.tgz#ee2a10eaabd1131987bf0488fd9b820174cd765e" + integrity sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw== + dependencies: + "@humanfs/core" "^0.19.1" + "@humanwhocodes/retry" "^0.3.0" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/retry@^0.3.0": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.1.tgz#c72a5c76a9fbaf3488e231b13dc52c0da7bab42a" + integrity sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA== + +"@humanwhocodes/retry@^0.4.2": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.3.tgz#c2b9d2e374ee62c586d3adbea87199b1d7a7a6ba" + integrity sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ== + +"@hutson/parse-repository-url@^3.0.0": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" + integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== + +"@inquirer/checkbox@^4.1.6": + version "4.1.8" + resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-4.1.8.tgz#eee11c7920e1ae07e57be038033c7905e9fc59d0" + integrity sha512-d/QAsnwuHX2OPolxvYcgSj7A9DO9H6gVOy2DvBTx+P2LH2iRTo/RSGV3iwCzW024nP9hw98KIuDmdyhZQj1UQg== + dependencies: + "@inquirer/core" "^10.1.13" + "@inquirer/figures" "^1.0.12" + "@inquirer/type" "^3.0.7" + ansi-escapes "^4.3.2" + yoctocolors-cjs "^2.1.2" + +"@inquirer/confirm@5.1.10": + version "5.1.10" + resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-5.1.10.tgz#de3732cb7ae9333bd3e354afee6a6ef8cf28d951" + integrity sha512-FxbQ9giWxUWKUk2O5XZ6PduVnH2CZ/fmMKMBkH71MHJvWr7WL5AHKevhzF1L5uYWB2P548o1RzVxrNd3dpmk6g== + dependencies: + "@inquirer/core" "^10.1.11" + "@inquirer/type" "^3.0.6" + +"@inquirer/confirm@^5.1.10": + version "5.1.12" + resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-5.1.12.tgz#387037889a5a558ceefe52e978228630aa6e7d0e" + integrity sha512-dpq+ielV9/bqgXRUbNH//KsY6WEw9DrGPmipkpmgC1Y46cwuBTNx7PXFWTjc3MQ+urcc0QxoVHcMI0FW4Ok0hg== + dependencies: + "@inquirer/core" "^10.1.13" + "@inquirer/type" "^3.0.7" + +"@inquirer/core@^10.1.11", "@inquirer/core@^10.1.13": + version "10.1.13" + resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-10.1.13.tgz#8f1ecfaba288fd2d705c7ac0690371464cf687b0" + integrity sha512-1viSxebkYN2nJULlzCxES6G9/stgHSepZ9LqqfdIGPHj5OHhiBUXVS0a6R0bEC2A+VL4D9w6QB66ebCr6HGllA== + dependencies: + "@inquirer/figures" "^1.0.12" + "@inquirer/type" "^3.0.7" + ansi-escapes "^4.3.2" + 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" + +"@inquirer/editor@^4.2.11": + version "4.2.13" + resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-4.2.13.tgz#dc491ed01da4bab0de5e760501d76a81177dd7d0" + integrity sha512-WbicD9SUQt/K8O5Vyk9iC2ojq5RHoCLK6itpp2fHsWe44VxxcA9z3GTWlvjSTGmMQpZr+lbVmrxdHcumJoLbMA== + dependencies: + "@inquirer/core" "^10.1.13" + "@inquirer/type" "^3.0.7" + external-editor "^3.1.0" + +"@inquirer/expand@^4.0.13": + version "4.0.15" + resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-4.0.15.tgz#8b49f3503118bb977a13a9040fa84deb9b043ab6" + integrity sha512-4Y+pbr/U9Qcvf+N/goHzPEXiHH8680lM3Dr3Y9h9FFw4gHS+zVpbj8LfbKWIb/jayIB4aSO4pWiBTrBYWkvi5A== + dependencies: + "@inquirer/core" "^10.1.13" + "@inquirer/type" "^3.0.7" + yoctocolors-cjs "^2.1.2" + +"@inquirer/figures@^1.0.12": + version "1.0.12" + resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.12.tgz#667d6254cc7ba3b0c010a323d78024a1d30c6053" + integrity sha512-MJttijd8rMFcKJC8NYmprWr6hD3r9Gd9qUC0XwPNwoEPWSMVJwA2MlXxF+nhZZNMY+HXsWa+o7KY2emWYIn0jQ== + +"@inquirer/input@^4.1.10": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-4.1.12.tgz#8880b8520f0aad60ef39ea8e0769ce1eb97da713" + integrity sha512-xJ6PFZpDjC+tC1P8ImGprgcsrzQRsUh9aH3IZixm1lAZFK49UGHxM3ltFfuInN2kPYNfyoPRh+tU4ftsjPLKqQ== + dependencies: + "@inquirer/core" "^10.1.13" + "@inquirer/type" "^3.0.7" + +"@inquirer/number@^3.0.13": + version "3.0.15" + resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-3.0.15.tgz#13ac1300ab12d7f1dd1b32c693ac284cfcb04d95" + integrity sha512-xWg+iYfqdhRiM55MvqiTCleHzszpoigUpN5+t1OMcRkJrUrw7va3AzXaxvS+Ak7Gny0j2mFSTv2JJj8sMtbV2g== + dependencies: + "@inquirer/core" "^10.1.13" + "@inquirer/type" "^3.0.7" + +"@inquirer/password@^4.0.13": + version "4.0.15" + resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-4.0.15.tgz#1d48a5a163972dc3b08abe5819bc3c32243cb6e3" + integrity sha512-75CT2p43DGEnfGTaqFpbDC2p2EEMrq0S+IRrf9iJvYreMy5mAWj087+mdKyLHapUEPLjN10mNvABpGbk8Wdraw== + dependencies: + "@inquirer/core" "^10.1.13" + "@inquirer/type" "^3.0.7" + ansi-escapes "^4.3.2" + +"@inquirer/prompts@7.5.1": + version "7.5.1" + resolved "https://registry.yarnpkg.com/@inquirer/prompts/-/prompts-7.5.1.tgz#44e70dacfe20314d233c61410618ceef29a8482f" + integrity sha512-5AOrZPf2/GxZ+SDRZ5WFplCA2TAQgK3OYrXCYmJL5NaTu4ECcoWFlfUZuw7Es++6Njv7iu/8vpYJhuzxUH76Vg== + dependencies: + "@inquirer/checkbox" "^4.1.6" + "@inquirer/confirm" "^5.1.10" + "@inquirer/editor" "^4.2.11" + "@inquirer/expand" "^4.0.13" + "@inquirer/input" "^4.1.10" + "@inquirer/number" "^3.0.13" + "@inquirer/password" "^4.0.13" + "@inquirer/rawlist" "^4.1.1" + "@inquirer/search" "^3.0.13" + "@inquirer/select" "^4.2.1" + +"@inquirer/rawlist@^4.1.1": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-4.1.3.tgz#c97278a2bcd0c31ce846e7e448fb7a6a25bcd3b2" + integrity sha512-7XrV//6kwYumNDSsvJIPeAqa8+p7GJh7H5kRuxirct2cgOcSWwwNGoXDRgpNFbY/MG2vQ4ccIWCi8+IXXyFMZA== + dependencies: + "@inquirer/core" "^10.1.13" + "@inquirer/type" "^3.0.7" + yoctocolors-cjs "^2.1.2" + +"@inquirer/search@^3.0.13": + version "3.0.15" + resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-3.0.15.tgz#419ddff4254cf22018cdfbfc840fa3ef8a0721cb" + integrity sha512-YBMwPxYBrADqyvP4nNItpwkBnGGglAvCLVW8u4pRmmvOsHUtCAUIMbUrLX5B3tFL1/WsLGdQ2HNzkqswMs5Uaw== + dependencies: + "@inquirer/core" "^10.1.13" + "@inquirer/figures" "^1.0.12" + "@inquirer/type" "^3.0.7" + yoctocolors-cjs "^2.1.2" + +"@inquirer/select@^4.2.1": + version "4.2.3" + resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-4.2.3.tgz#3e31b56aff7bce9b46a0e2c8428118a25fe51c32" + integrity sha512-OAGhXU0Cvh0PhLz9xTF/kx6g6x+sP+PcyTiLvCrewI99P3BBeexD+VbuwkNDvqGkk3y2h5ZiWLeRP7BFlhkUDg== + dependencies: + "@inquirer/core" "^10.1.13" + "@inquirer/figures" "^1.0.12" + "@inquirer/type" "^3.0.7" + ansi-escapes "^4.3.2" + yoctocolors-cjs "^2.1.2" + +"@inquirer/type@^1.5.5": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-1.5.5.tgz#303ea04ce7ad2e585b921b662b3be36ef7b4f09b" + integrity sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA== + dependencies: + mute-stream "^1.0.0" + +"@inquirer/type@^3.0.6", "@inquirer/type@^3.0.7": + version "3.0.7" + resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-3.0.7.tgz#b46bcf377b3172dbc768fdbd053e6492ad801a09" + integrity sha512-PfunHQcjwnju84L+ycmcMKB/pTPIngjUJvfnRhKY6FKPuYXlM4aQCb/nIdTFR6BEhMjFvngzvng/vBAJMZpLSA== + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + 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" + +"@isaacs/fs-minipass@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz#2d59ae3ab4b38fb4270bfa23d30f8e2e86c7fe32" + integrity sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w== + dependencies: + minipass "^7.0.4" + +"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.8" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142" + integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== + +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@listr2/prompt-adapter-inquirer@2.0.22": + version "2.0.22" + resolved "https://registry.yarnpkg.com/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-2.0.22.tgz#95f7730de62089be79a87a80aa333f5f4644f3c5" + integrity sha512-hV36ZoY+xKL6pYOt1nPNnkciFkn89KZwqLhAFzJvYysAvL5uBQdiADZx/8bIDXIukzzwG0QlPYolgMzQUtKgpQ== + dependencies: + "@inquirer/type" "^1.5.5" + +"@lmdb/lmdb-darwin-arm64@3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.3.0.tgz#8120e59facefd54c79b86761ef308db2833a494d" + integrity sha512-LipbQobyEfQtu8WixasaFUZZ+JCGlho4OWwWIQ5ol0rB1RKkcZvypu7sS1CBvofBGVAa3vbOh8IOGQMrbmL5dg== + +"@lmdb/lmdb-darwin-x64@3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.3.0.tgz#3e5c7a1ea0e1d5c9c38ad89c9d1dce91e883924c" + integrity sha512-yA+9P+ZeA3vg76BLXWeUomIAjxfmSmR2eg8fueHXDg5Xe1Xmkl9JCKuHXUhtJ+mMVcH12d5k4kJBLbyXTadfGQ== + +"@lmdb/lmdb-linux-arm64@3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.3.0.tgz#cc04c17a35710a46432306c7c12a941aa1590722" + integrity sha512-OeWvSgjXXZ/zmtLqqL78I3910F6UYpUubmsUU+iBHo6nTtjkpXms95rJtGrjkWQqwswKBD7xSMplbYC4LEsiPA== + +"@lmdb/lmdb-linux-arm@3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.3.0.tgz#f36a07eb8f1656cc989ffa4e5a014b18d133079f" + integrity sha512-EDYrW9kle+8wI19JCj/PhRnGoCN9bked5cdOPdo1wdgH/HzjgoLPFTn9DHlZccgTEVhp3O+bpWXdN/rWySVvjw== + +"@lmdb/lmdb-linux-x64@3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.3.0.tgz#0b4b0a73ee69d1d98695905065ff1de415f5ac72" + integrity sha512-wDd02mt5ScX4+xd6g78zKBr6ojpgCJCTrllCAabjgap5FzuETqOqaQfKhO+tJuGWv/J5q+GIds6uY7rNFueOxg== + +"@lmdb/lmdb-win32-arm64@3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@lmdb/lmdb-win32-arm64/-/lmdb-win32-arm64-3.3.0.tgz#e631dbe9bee71d00fb49b158b460a2306429ce46" + integrity sha512-COotWhHJgzXULLiEjOgWQwqig6PoA+6ji6W+sDl6M1HhMXWIymEVHGs0edsVSNtsNSCAWMxJgR3asv6FNX/2EA== + +"@lmdb/lmdb-win32-x64@3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.3.0.tgz#02f81fa98bcd527a493de6009ba65e3758a322c4" + integrity sha512-kqUgQH+l8HDbkAapx+aoko7Ez4X4DqkIraOqY/k0QY5EN/iialVlFpBUXh4wFXzirdmEVjbIUMrceUh0Kh8LeA== + +"@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz#9edec61b22c3082018a79f6d1c30289ddf3d9d11" + integrity sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw== + +"@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz#33677a275204898ad8acbf62734fc4dc0b6a4855" + integrity sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw== + +"@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.3.tgz#19edf7cdc2e7063ee328403c1d895a86dd28f4bb" + integrity sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg== + +"@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz#94fb0543ba2e28766c3fc439cabbe0440ae70159" + integrity sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw== + +"@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz#4a0609ab5fe44d07c9c60a11e4484d3c38bbd6e3" + integrity sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg== + +"@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz#0aa5502d547b57abfc4ac492de68e2006e417242" + integrity sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ== + +"@napi-rs/nice-android-arm-eabi@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.0.1.tgz#9a0cba12706ff56500df127d6f4caf28ddb94936" + integrity sha512-5qpvOu5IGwDo7MEKVqqyAxF90I6aLj4n07OzpARdgDRfz8UbBztTByBp0RC59r3J1Ij8uzYi6jI7r5Lws7nn6w== + +"@napi-rs/nice-android-arm64@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.0.1.tgz#32fc32e9649bd759d2a39ad745e95766f6759d2f" + integrity sha512-GqvXL0P8fZ+mQqG1g0o4AO9hJjQaeYG84FRfZaYjyJtZZZcMjXW5TwkL8Y8UApheJgyE13TQ4YNUssQaTgTyvA== + +"@napi-rs/nice-darwin-arm64@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.0.1.tgz#d3c44c51b94b25a82d45803e2255891e833e787b" + integrity sha512-91k3HEqUl2fsrz/sKkuEkscj6EAj3/eZNCLqzD2AA0TtVbkQi8nqxZCZDMkfklULmxLkMxuUdKe7RvG/T6s2AA== + +"@napi-rs/nice-darwin-x64@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.0.1.tgz#f1b1365a8370c6a6957e90085a9b4873d0e6a957" + integrity sha512-jXnMleYSIR/+TAN/p5u+NkCA7yidgswx5ftqzXdD5wgy/hNR92oerTXHc0jrlBisbd7DpzoaGY4cFD7Sm5GlgQ== + +"@napi-rs/nice-freebsd-x64@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.0.1.tgz#4280f081efbe0b46c5165fdaea8b286e55a8f89e" + integrity sha512-j+iJ/ezONXRQsVIB/FJfwjeQXX7A2tf3gEXs4WUGFrJjpe/z2KB7sOv6zpkm08PofF36C9S7wTNuzHZ/Iiccfw== + +"@napi-rs/nice-linux-arm-gnueabihf@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.0.1.tgz#07aec23a9467ed35eb7602af5e63d42c5d7bd473" + integrity sha512-G8RgJ8FYXYkkSGQwywAUh84m946UTn6l03/vmEXBYNJxQJcD+I3B3k5jmjFG/OPiU8DfvxutOP8bi+F89MCV7Q== + +"@napi-rs/nice-linux-arm64-gnu@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.0.1.tgz#038a77134cc6df3c48059d5a5e199d6f50fb9a90" + integrity sha512-IMDak59/W5JSab1oZvmNbrms3mHqcreaCeClUjwlwDr0m3BoR09ZiN8cKFBzuSlXgRdZ4PNqCYNeGQv7YMTjuA== + +"@napi-rs/nice-linux-arm64-musl@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.0.1.tgz#715d0906582ba0cff025109f42e5b84ea68c2bcc" + integrity sha512-wG8fa2VKuWM4CfjOjjRX9YLIbysSVV1S3Kgm2Fnc67ap/soHBeYZa6AGMeR5BJAylYRjnoVOzV19Cmkco3QEPw== + +"@napi-rs/nice-linux-ppc64-gnu@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.0.1.tgz#ac1c8f781c67b0559fa7a1cd4ae3ca2299dc3d06" + integrity sha512-lxQ9WrBf0IlNTCA9oS2jg/iAjQyTI6JHzABV664LLrLA/SIdD+I1i3Mjf7TsnoUbgopBcCuDztVLfJ0q9ubf6Q== + +"@napi-rs/nice-linux-riscv64-gnu@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.0.1.tgz#b0a430549acfd3920ffd28ce544e2fe17833d263" + integrity sha512-3xs69dO8WSWBb13KBVex+yvxmUeEsdWexxibqskzoKaWx9AIqkMbWmE2npkazJoopPKX2ULKd8Fm9veEn0g4Ig== + +"@napi-rs/nice-linux-s390x-gnu@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.0.1.tgz#5b95caf411ad72a965885217db378c4d09733e97" + integrity sha512-lMFI3i9rlW7hgToyAzTaEybQYGbQHDrpRkg+1gJWEpH0PLAQoZ8jiY0IzakLfNWnVda1eTYYlxxFYzW8Rqczkg== + +"@napi-rs/nice-linux-x64-gnu@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.0.1.tgz#a98cdef517549f8c17a83f0236a69418a90e77b7" + integrity sha512-XQAJs7DRN2GpLN6Fb+ZdGFeYZDdGl2Fn3TmFlqEL5JorgWKrQGRUrpGKbgZ25UeZPILuTKJ+OowG2avN8mThBA== + +"@napi-rs/nice-linux-x64-musl@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.0.1.tgz#5e26843eafa940138aed437c870cca751c8a8957" + integrity sha512-/rodHpRSgiI9o1faq9SZOp/o2QkKQg7T+DK0R5AkbnI/YxvAIEHf2cngjYzLMQSQgUhxym+LFr+UGZx4vK4QdQ== + +"@napi-rs/nice-win32-arm64-msvc@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.0.1.tgz#bd62617d02f04aa30ab1e9081363856715f84cd8" + integrity sha512-rEcz9vZymaCB3OqEXoHnp9YViLct8ugF+6uO5McifTedjq4QMQs3DHz35xBEGhH3gJWEsXMUbzazkz5KNM5YUg== + +"@napi-rs/nice-win32-ia32-msvc@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.0.1.tgz#b8b7aad552a24836027473d9b9f16edaeabecf18" + integrity sha512-t7eBAyPUrWL8su3gDxw9xxxqNwZzAqKo0Szv3IjVQd1GpXXVkb6vBBQUuxfIYaXMzZLwlxRQ7uzM2vdUE9ULGw== + +"@napi-rs/nice-win32-x64-msvc@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.0.1.tgz#37d8718b8f722f49067713e9f1e85540c9a3dd09" + integrity sha512-JlF+uDcatt3St2ntBG8H02F1mM45i5SF9W+bIKiReVE6wiy3o16oBP/yxt+RZ+N6LbCImJXJ6bXNO2kn9AXicg== + +"@napi-rs/nice@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice/-/nice-1.0.1.tgz#483d3ff31e5661829a1efb4825591a135c3bfa7d" + integrity sha512-zM0mVWSXE0a0h9aKACLwKmD6nHcRiKrPpCfvaKqG1CqDEyjEawId0ocXxVzPMCAm6kkWr2P025msfxXEnt8UGQ== + optionalDependencies: + "@napi-rs/nice-android-arm-eabi" "1.0.1" + "@napi-rs/nice-android-arm64" "1.0.1" + "@napi-rs/nice-darwin-arm64" "1.0.1" + "@napi-rs/nice-darwin-x64" "1.0.1" + "@napi-rs/nice-freebsd-x64" "1.0.1" + "@napi-rs/nice-linux-arm-gnueabihf" "1.0.1" + "@napi-rs/nice-linux-arm64-gnu" "1.0.1" + "@napi-rs/nice-linux-arm64-musl" "1.0.1" + "@napi-rs/nice-linux-ppc64-gnu" "1.0.1" + "@napi-rs/nice-linux-riscv64-gnu" "1.0.1" + "@napi-rs/nice-linux-s390x-gnu" "1.0.1" + "@napi-rs/nice-linux-x64-gnu" "1.0.1" + "@napi-rs/nice-linux-x64-musl" "1.0.1" + "@napi-rs/nice-win32-arm64-msvc" "1.0.1" + "@napi-rs/nice-win32-ia32-msvc" "1.0.1" + "@napi-rs/nice-win32-x64-msvc" "1.0.1" + +"@napi-rs/wasm-runtime@^0.2.10": + version "0.2.11" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.11.tgz#192c1610e1625048089ab4e35bc0649ce478500e" + integrity sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA== + dependencies: + "@emnapi/core" "^1.4.3" + "@emnapi/runtime" "^1.4.3" + "@tybys/wasm-util" "^0.9.0" + +"@ngx-loading-bar/core@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@ngx-loading-bar/core/-/core-7.0.0.tgz#8f298fbf4d99f364c07f067f81fda4498a7a813d" + integrity sha512-+YXS+oAXcNf4DGCnZbcgn5EkqTl1qceY/zP7GlVVadVVJab73dzVAss0EnKrh0KENX9R3O83CRciOshTYyG6DQ== + dependencies: + tslib "^2.0.0" + +"@ngx-loading-bar/http-client@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@ngx-loading-bar/http-client/-/http-client-7.0.0.tgz#8a6963f34f25af4feb1ae367d2b432298f9f6cc9" + integrity sha512-m1GEHoTlMLOfXpkHYYhEvpsf7JJxatzjHLqIszqeGUCPM8pskmFJNqEKOwzv/21CfbJdEOWstLiN/1Tz9fkvgA== + dependencies: + tslib "^2.0.0" + +"@ngx-loading-bar/router@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@ngx-loading-bar/router/-/router-7.0.0.tgz#94d985fb5b78a0e72d3d9d9f3e5230075a3eeda3" + integrity sha512-11xZ6oYpjg7Zsve7imUc0PC1iGyo3XQMqS3B5jZEEdukz2hn9X+Q7atotyEVF3uEjtfJofOZ438tV0MofG44Iw== + dependencies: + tslib "^2.0.0" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@npmcli/agent@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/agent/-/agent-3.0.0.tgz#1685b1fbd4a1b7bb4f930cbb68ce801edfe7aa44" + integrity sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q== + 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" + +"@npmcli/fs@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-4.0.0.tgz#a1eb1aeddefd2a4a347eca0fab30bc62c0e1c0f2" + integrity sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q== + dependencies: + semver "^7.3.5" + +"@npmcli/git@^6.0.0": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-6.0.3.tgz#966cbb228514372877de5244db285b199836f3aa" + integrity sha512-GUYESQlxZRAdhs3UhbB6pVRNUELQOHXwK9ruDkwmCv2aZ5y0SApQzUJCg02p3A7Ue2J5hxvlk1YI53c00NmRyQ== + 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" + +"@npmcli/installed-package-contents@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-3.0.0.tgz#2c1170ff4f70f68af125e2842e1853a93223e4d1" + integrity sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q== + dependencies: + npm-bundled "^4.0.0" + npm-normalize-package-bin "^4.0.0" + +"@npmcli/node-gyp@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-4.0.0.tgz#01f900bae62f0f27f9a5a127b40d443ddfb9d4c6" + integrity sha512-+t5DZ6mO/QFh78PByMq1fGSAub/agLJZDRfJRMeOSNCt8s9YVlTjmGpIPwPhvXTGUIJk+WszlT0rQa1W33yzNA== + +"@npmcli/package-json@^6.0.0": + version "6.2.0" + resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-6.2.0.tgz#7c7e61e466eefdf729cb87a34c3adc15d76e2f97" + integrity sha512-rCNLSB/JzNvot0SEyXqWZ7tX2B5dD2a1br2Dp0vSYVo5jh8Z0EZ7lS9TsZ1UtziddB1UfNUaMCc538/HztnJGA== + 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" + +"@npmcli/promise-spawn@^8.0.0": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-8.0.2.tgz#053688f8bc2b4ecc036d2d52c691fd82af58ea5e" + integrity sha512-/bNJhjc+o6qL+Dwz/bqfTQClkEO5nTQ1ZEcdCkAQjhkZMHIh22LPG7fNh1enJP1NKWDqYiiABnjFCY7E0zHYtQ== + dependencies: + which "^5.0.0" + +"@npmcli/redact@^3.0.0": + version "3.2.2" + resolved "https://registry.yarnpkg.com/@npmcli/redact/-/redact-3.2.2.tgz#4a6745e0ae269120ad223780ce374d6c59ae34cd" + integrity sha512-7VmYAmk4csGv08QzrDKScdzn11jHPFGyqJW39FyPgPuAp3zIaUmuCo1yxw9aGs+NEJuTGQ9Gwqpt93vtJubucg== + +"@npmcli/run-script@^9.0.0": + version "9.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-9.1.0.tgz#6168c2be4703fe5ed31acb08a2151cb620ed30a4" + integrity sha512-aoNSbxtkePXUlbZB+anS1LqsJdctG5n3UVhfU47+CDdwMi6uNTBMF9gPcQRnqghQd2FGzcwwIFBruFMxjhBewg== + 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" + +"@parcel/watcher-android-arm64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz#507f836d7e2042f798c7d07ad19c3546f9848ac1" + integrity sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA== + +"@parcel/watcher-darwin-arm64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz#3d26dce38de6590ef79c47ec2c55793c06ad4f67" + integrity sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw== + +"@parcel/watcher-darwin-x64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz#99f3af3869069ccf774e4ddfccf7e64fd2311ef8" + integrity sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg== + +"@parcel/watcher-freebsd-x64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz#14d6857741a9f51dfe51d5b08b7c8afdbc73ad9b" + integrity sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ== + +"@parcel/watcher-linux-arm-glibc@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz#43c3246d6892381db473bb4f663229ad20b609a1" + integrity sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA== + +"@parcel/watcher-linux-arm-musl@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz#663750f7090bb6278d2210de643eb8a3f780d08e" + integrity sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q== + +"@parcel/watcher-linux-arm64-glibc@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz#ba60e1f56977f7e47cd7e31ad65d15fdcbd07e30" + integrity sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w== + +"@parcel/watcher-linux-arm64-musl@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz#f7fbcdff2f04c526f96eac01f97419a6a99855d2" + integrity sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg== + +"@parcel/watcher-linux-x64-glibc@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz#4d2ea0f633eb1917d83d483392ce6181b6a92e4e" + integrity sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A== + +"@parcel/watcher-linux-x64-musl@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz#277b346b05db54f55657301dd77bdf99d63606ee" + integrity sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg== + +"@parcel/watcher-win32-arm64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz#7e9e02a26784d47503de1d10e8eab6cceb524243" + integrity sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw== + +"@parcel/watcher-win32-ia32@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz#2d0f94fa59a873cdc584bf7f6b1dc628ddf976e6" + integrity sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ== + +"@parcel/watcher-win32-x64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz#ae52693259664ba6f2228fa61d7ee44b64ea0947" + integrity sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA== + +"@parcel/watcher@^2.4.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.5.1.tgz#342507a9cfaaf172479a882309def1e991fb1200" + integrity sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg== + dependencies: + detect-libc "^1.0.3" + is-glob "^4.0.3" + micromatch "^4.0.5" + node-addon-api "^7.0.0" + 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" + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + +"@rollup/rollup-android-arm-eabi@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.2.tgz#c228d00a41f0dbd6fb8b7ea819bbfbf1c1157a10" + integrity sha512-JkdNEq+DFxZfUwxvB58tHMHBHVgX23ew41g1OQinthJ+ryhdRk67O31S7sYw8u2lTjHUPFxwar07BBt1KHp/hg== + +"@rollup/rollup-android-arm-eabi@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.44.0.tgz#a3e4e4b2baf0bade6918cf5135c3ef7eee653196" + integrity sha512-xEiEE5oDW6tK4jXCAyliuntGR+amEMO7HLtdSshVuhFnKTYoeYMyXQK7pLouAJJj5KHdwdn87bfHAR2nSdNAUA== + +"@rollup/rollup-android-arm64@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.2.tgz#e2b38d0c912169fd55d7e38d723aada208d37256" + integrity sha512-13unNoZ8NzUmnndhPTkWPWbX3vtHodYmy+I9kuLxN+F+l+x3LdVF7UCu8TWVMt1POHLh6oDHhnOA04n8oJZhBw== + +"@rollup/rollup-android-arm64@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.44.0.tgz#63566b0e76c62d4f96d44448f38a290562280200" + integrity sha512-uNSk/TgvMbskcHxXYHzqwiyBlJ/lGcv8DaUfcnNwict8ba9GTTNxfn3/FAoFZYgkaXXAdrAA+SLyKplyi349Jw== + +"@rollup/rollup-darwin-arm64@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.2.tgz#1fddb3690f2ae33df16d334c613377f05abe4878" + integrity sha512-Gzf1Hn2Aoe8VZzevHostPX23U7N5+4D36WJNHK88NZHCJr7aVMG4fadqkIf72eqVPGjGc0HJHNuUaUcxiR+N/w== + +"@rollup/rollup-darwin-arm64@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.44.0.tgz#60a51a61b22b1f4fdf97b4adf5f0f447f492759d" + integrity sha512-VGF3wy0Eq1gcEIkSCr8Ke03CWT+Pm2yveKLaDvq51pPpZza3JX/ClxXOCmTYYq3us5MvEuNRTaeyFThCKRQhOA== + +"@rollup/rollup-darwin-x64@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.2.tgz#818298d11c8109e1112590165142f14be24b396d" + integrity sha512-47N4hxa01a4x6XnJoskMKTS8XZ0CZMd8YTbINbi+w03A2w4j1RTlnGHOz/P0+Bg1LaVL6ufZyNprSg+fW5nYQQ== + +"@rollup/rollup-darwin-x64@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.44.0.tgz#bfe3059440f7032de11e749ece868cd7f232e609" + integrity sha512-fBkyrDhwquRvrTxSGH/qqt3/T0w5Rg0L7ZIDypvBPc1/gzjJle6acCpZ36blwuwcKD/u6oCE/sRWlUAcxLWQbQ== + +"@rollup/rollup-freebsd-arm64@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.2.tgz#91a28dc527d5bed7f9ecf0e054297b3012e19618" + integrity sha512-8t6aL4MD+rXSHHZUR1z19+9OFJ2rl1wGKvckN47XFRVO+QL/dUSpKA2SLRo4vMg7ELA8pzGpC+W9OEd1Z/ZqoQ== + +"@rollup/rollup-freebsd-arm64@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.44.0.tgz#d5d4c6cd3b8acb7493b76227d8b2b4a2d732a37b" + integrity sha512-u5AZzdQJYJXByB8giQ+r4VyfZP+walV+xHWdaFx/1VxsOn6eWJhK2Vl2eElvDJFKQBo/hcYIBg/jaKS8ZmKeNQ== + +"@rollup/rollup-freebsd-x64@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.2.tgz#28acadefa76b5c7bede1576e065b51d335c62c62" + integrity sha512-C+AyHBzfpsOEYRFjztcYUFsH4S7UsE9cDtHCtma5BK8+ydOZYgMmWg1d/4KBytQspJCld8ZIujFMAdKG1xyr4Q== + +"@rollup/rollup-freebsd-x64@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.44.0.tgz#cb4e1547b572cd0144c5fbd6c4a0edfed5fe6024" + integrity sha512-qC0kS48c/s3EtdArkimctY7h3nHicQeEUdjJzYVJYR3ct3kWSafmn6jkNCA8InbUdge6PVx6keqjk5lVGJf99g== + +"@rollup/rollup-linux-arm-gnueabihf@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.2.tgz#819691464179cbcd9a9f9d3dc7617954840c6186" + integrity sha512-de6TFZYIvJwRNjmW3+gaXiZ2DaWL5D5yGmSYzkdzjBDS3W+B9JQ48oZEsmMvemqjtAFzE16DIBLqd6IQQRuG9Q== + +"@rollup/rollup-linux-arm-gnueabihf@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.44.0.tgz#feb81bd086f6a469777f75bec07e1bdf93352e69" + integrity sha512-x+e/Z9H0RAWckn4V2OZZl6EmV0L2diuX3QB0uM1r6BvhUIv6xBPL5mrAX2E3e8N8rEHVPwFfz/ETUbV4oW9+lQ== + +"@rollup/rollup-linux-arm-musleabihf@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.2.tgz#d149207039e4189e267e8724050388effc80d704" + integrity sha512-urjaEZubdIkacKc930hUDOfQPysezKla/O9qV+O89enqsqUmQm8Xj8O/vh0gHg4LYfv7Y7UsE3QjzLQzDYN1qg== + +"@rollup/rollup-linux-arm-musleabihf@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.44.0.tgz#68bff1c6620c155c9d8f5ee6a83c46eb50486f18" + integrity sha512-1exwiBFf4PU/8HvI8s80icyCcnAIB86MCBdst51fwFmH5dyeoWVPVgmQPcKrMtBQ0W5pAs7jBCWuRXgEpRzSCg== + +"@rollup/rollup-linux-arm64-gnu@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.2.tgz#fa72ebddb729c3c6d88973242f1a2153c83e86ec" + integrity sha512-KlE8IC0HFOC33taNt1zR8qNlBYHj31qGT1UqWqtvR/+NuCVhfufAq9fxO8BMFC22Wu0rxOwGVWxtCMvZVLmhQg== + +"@rollup/rollup-linux-arm64-gnu@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.44.0.tgz#dbc5036a85e3ca3349887c8bdbebcfd011e460b0" + integrity sha512-ZTR2mxBHb4tK4wGf9b8SYg0Y6KQPjGpR4UWwTFdnmjB4qRtoATZ5dWn3KsDwGa5Z2ZBOE7K52L36J9LueKBdOQ== + +"@rollup/rollup-linux-arm64-musl@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.2.tgz#2054216e34469ab8765588ebf343d531fc3c9228" + integrity sha512-j8CgxvfM0kbnhu4XgjnCWJQyyBOeBI1Zq91Z850aUddUmPeQvuAy6OiMdPS46gNFgy8gN1xkYyLgwLYZG3rBOg== + +"@rollup/rollup-linux-arm64-musl@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.44.0.tgz#72efc633aa0b93531bdfc69d70bcafa88e6152fc" + integrity sha512-GFWfAhVhWGd4r6UxmnKRTBwP1qmModHtd5gkraeW2G490BpFOZkFtem8yuX2NyafIP/mGpRJgTJ2PwohQkUY/Q== + +"@rollup/rollup-linux-loongarch64-gnu@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.2.tgz#818de242291841afbfc483a84f11e9c7a11959bc" + integrity sha512-Ybc/1qUampKuRF4tQXc7G7QY9YRyeVSykfK36Y5Qc5dmrIxwFhrOzqaVTNoZygqZ1ZieSWTibfFhQ5qK8jpWxw== + +"@rollup/rollup-linux-loongarch64-gnu@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.44.0.tgz#9b6a49afde86c8f57ca11efdf8fd8d7c52048817" + integrity sha512-xw+FTGcov/ejdusVOqKgMGW3c4+AgqrfvzWEVXcNP6zq2ue+lsYUgJ+5Rtn/OTJf7e2CbgTFvzLW2j0YAtj0Gg== + +"@rollup/rollup-linux-powerpc64le-gnu@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.2.tgz#0bb4cb8fc4a2c635f68c1208c924b2145eb647cb" + integrity sha512-3FCIrnrt03CCsZqSYAOW/k9n625pjpuMzVfeI+ZBUSDT3MVIFDSPfSUgIl9FqUftxcUXInvFah79hE1c9abD+Q== + +"@rollup/rollup-linux-powerpc64le-gnu@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.44.0.tgz#93cb96073efab0cdbf419c8dfc44b5e2bd815139" + integrity sha512-bKGibTr9IdF0zr21kMvkZT4K6NV+jjRnBoVMt2uNMG0BYWm3qOVmYnXKzx7UhwrviKnmK46IKMByMgvpdQlyJQ== + +"@rollup/rollup-linux-riscv64-gnu@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.2.tgz#4b3b8e541b7b13e447ae07774217d98c06f6926d" + integrity sha512-QNU7BFHEvHMp2ESSY3SozIkBPaPBDTsfVNGx3Xhv+TdvWXFGOSH2NJvhD1zKAT6AyuuErJgbdvaJhYVhVqrWTg== + +"@rollup/rollup-linux-riscv64-gnu@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.44.0.tgz#028708f73c8130ae924e5c3755de50fe93687249" + integrity sha512-vV3cL48U5kDaKZtXrti12YRa7TyxgKAIDoYdqSIOMOFBXqFj2XbChHAtXquEn2+n78ciFgr4KIqEbydEGPxXgA== + +"@rollup/rollup-linux-riscv64-musl@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.2.tgz#e065405e67d8bd64a7d0126c931bd9f03910817f" + integrity sha512-5W6vNYkhgfh7URiXTO1E9a0cy4fSgfE4+Hl5agb/U1sa0kjOLMLC1wObxwKxecE17j0URxuTrYZZME4/VH57Hg== + +"@rollup/rollup-linux-riscv64-musl@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.44.0.tgz#878bfb158b2cf6671b7611fd58e5c80d9144ac6c" + integrity sha512-TDKO8KlHJuvTEdfw5YYFBjhFts2TR0VpZsnLLSYmB7AaohJhM8ctDSdDnUGq77hUh4m/djRafw+9zQpkOanE2Q== + +"@rollup/rollup-linux-s390x-gnu@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.2.tgz#dda3265bbbfe16a5d0089168fd07f5ebb2a866fe" + integrity sha512-B7LKIz+0+p348JoAL4X/YxGx9zOx3sR+o6Hj15Y3aaApNfAshK8+mWZEf759DXfRLeL2vg5LYJBB7DdcleYCoQ== + +"@rollup/rollup-linux-s390x-gnu@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.44.0.tgz#59b4ebb2129d34b7807ed8c462ff0baaefca9ad4" + integrity sha512-8541GEyktXaw4lvnGp9m84KENcxInhAt6vPWJ9RodsB/iGjHoMB2Pp5MVBCiKIRxrxzJhGCxmNzdu+oDQ7kwRA== + +"@rollup/rollup-linux-x64-gnu@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.2.tgz#90993269b8b995b4067b7b9d72ff1c360ef90a17" + integrity sha512-lG7Xa+BmBNwpjmVUbmyKxdQJ3Q6whHjMjzQplOs5Z+Gj7mxPtWakGHqzMqNER68G67kmCX9qX57aRsW5V0VOng== + +"@rollup/rollup-linux-x64-gnu@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.44.0.tgz#597d40f60d4b15bedbbacf2491a69c5b67a58e93" + integrity sha512-iUVJc3c0o8l9Sa/qlDL2Z9UP92UZZW1+EmQ4xfjTc1akr0iUFZNfxrXJ/R1T90h/ILm9iXEY6+iPrmYB3pXKjw== + +"@rollup/rollup-linux-x64-musl@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.2.tgz#fdf5b09fd121eb8d977ebb0fda142c7c0167b8de" + integrity sha512-tD46wKHd+KJvsmije4bUskNuvWKFcTOIM9tZ/RrmIvcXnbi0YK/cKS9FzFtAm7Oxi2EhV5N2OpfFB348vSQRXA== + +"@rollup/rollup-linux-x64-musl@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.44.0.tgz#0a062d6fee35ec4fbb607b2a9d933a9372ccf63a" + integrity sha512-PQUobbhLTQT5yz/SPg116VJBgz+XOtXt8D1ck+sfJJhuEsMj2jSej5yTdp8CvWBSceu+WW+ibVL6dm0ptG5fcA== + +"@rollup/rollup-win32-arm64-msvc@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.2.tgz#6397e1e012db64dfecfed0774cb9fcf89503d716" + integrity sha512-Bjv/HG8RRWLNkXwQQemdsWw4Mg+IJ29LK+bJPW2SCzPKOUaMmPEppQlu/Fqk1d7+DX3V7JbFdbkh/NMmurT6Pg== + +"@rollup/rollup-win32-arm64-msvc@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.44.0.tgz#41ffab489857987c75385b0fc8cccf97f7e69d0a" + integrity sha512-M0CpcHf8TWn+4oTxJfh7LQuTuaYeXGbk0eageVjQCKzYLsajWS/lFC94qlRqOlyC2KvRT90ZrfXULYmukeIy7w== + +"@rollup/rollup-win32-ia32-msvc@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.2.tgz#df0991464a52a35506103fe18d29913bf8798a0c" + integrity sha512-dt1llVSGEsGKvzeIO76HToiYPNPYPkmjhMHhP00T9S4rDern8P2ZWvWAQUEJ+R1UdMWJ/42i/QqJ2WV765GZcA== + +"@rollup/rollup-win32-ia32-msvc@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.44.0.tgz#d9fb61d98eedfa52720b6ed9f31442b3ef4b839f" + integrity sha512-3XJ0NQtMAXTWFW8FqZKcw3gOQwBtVWP/u8TpHP3CRPXD7Pd6s8lLdH3sHWh8vqKCyyiI8xW5ltJScQmBU9j7WA== + +"@rollup/rollup-win32-x64-msvc@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.2.tgz#8dae04d01a2cbd84d6297d99356674c6b993f0fc" + integrity sha512-bwspbWB04XJpeElvsp+DCylKfF4trJDa2Y9Go8O6A7YLX2LIKGcNK/CYImJN6ZP4DcuOHB4Utl3iCbnR62DudA== + +"@rollup/rollup-win32-x64-msvc@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.44.0.tgz#a36e79b6ccece1533f777a1bca1f89c13f0c5f62" + integrity sha512-Q2Mgwt+D8hd5FIPUuPDsvPR7Bguza6yTkJxspDGkZj7tBRn2y4KSWYuIXpftFSjBra76TbKerCV7rgFPQrn+wQ== + +"@rtsao/scc@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" + integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== + +"@schematics/angular@20.0.3": + version "20.0.3" + resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-20.0.3.tgz#615d2881051562ea0f4d6eac5c2502ec7fb51d00" + integrity sha512-oWj5UU1gR12KDxQwOUpxweaaF8PPF7t5ymTa/px/nl4YYWd9s5e1skoDNcGHHl0MPHklJzNLxP7O89BORie5vQ== + dependencies: + "@angular-devkit/core" "20.0.3" + "@angular-devkit/schematics" "20.0.3" + jsonc-parser "3.3.1" + +"@sigstore/bundle@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-3.1.0.tgz#74f8f3787148400ddd364be8a9a9212174c66646" + integrity sha512-Mm1E3/CmDDCz3nDhFKTuYdB47EdRFRQMOE/EAbiG1MJW77/w1b3P7Qx7JSrVJs8PfwOLOVcKQCHErIwCTyPbag== + dependencies: + "@sigstore/protobuf-specs" "^0.4.0" + +"@sigstore/core@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sigstore/core/-/core-2.0.0.tgz#f888a8e4c8fdaa27848514a281920b6fd8eca955" + integrity sha512-nYxaSb/MtlSI+JWcwTHQxyNmWeWrUXJJ/G4liLrGG7+tS4vAz6LF3xRXqLH6wPIVUoZQel2Fs4ddLx4NCpiIYg== + +"@sigstore/protobuf-specs@^0.4.0", "@sigstore/protobuf-specs@^0.4.1": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.4.3.tgz#5d974eb16c0a1d44a3f0af6e3e7219b35ac57953" + integrity sha512-fk2zjD9117RL9BjqEwF7fwv7Q/P9yGsMV4MUJZ/DocaQJ6+3pKr+syBq1owU5Q5qGw5CUbXzm+4yJ2JVRDQeSA== + +"@sigstore/sign@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@sigstore/sign/-/sign-3.1.0.tgz#5d098d4d2b59a279e9ac9b51c794104cda0c649e" + integrity sha512-knzjmaOHOov1Ur7N/z4B1oPqZ0QX5geUfhrVaqVlu+hl0EAoL4o+l0MSULINcD5GCWe3Z0+YJO8ues6vFlW0Yw== + 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" + +"@sigstore/tuf@^3.1.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-3.1.1.tgz#b01b261288f646e0da57737782893e7d2695c52e" + integrity sha512-eFFvlcBIoGwVkkwmTi/vEQFSva3xs5Ot3WmBcjgjVdiaoelBLQaQ/ZBfhlG0MnG0cmTYScPpk7eDdGDWUcFUmg== + dependencies: + "@sigstore/protobuf-specs" "^0.4.1" + tuf-js "^3.0.1" + +"@sigstore/verify@^2.1.0": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@sigstore/verify/-/verify-2.1.1.tgz#f67730012cd474f595044c3717f32ac2a1e9d2bc" + integrity sha512-hVJD77oT67aowHxwT4+M6PGOp+E2LtLdTK3+FC0lBO9T7sYwItDMXZ7Z07IDCvR1M717a4axbIWckrW67KMP/w== + dependencies: + "@sigstore/bundle" "^3.1.0" + "@sigstore/core" "^2.0.0" + "@sigstore/protobuf-specs" "^0.4.1" + +"@socket.io/component-emitter@~3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz#821f8442f4175d8f0467b9daf26e3a18e2d02af2" + integrity sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA== + +"@tailwindcss/node@4.1.10": + version "4.1.10" + resolved "https://registry.yarnpkg.com/@tailwindcss/node/-/node-4.1.10.tgz#7a53a224cdd79a926ed990bbf97c74de9dadf595" + integrity sha512-2ACf1znY5fpRBwRhMgj9ZXvb2XZW8qs+oTfotJ2C5xR0/WNL7UHZ7zXl6s+rUqedL1mNi+0O+WQr5awGowS3PQ== + dependencies: + "@ampproject/remapping" "^2.3.0" + enhanced-resolve "^5.18.1" + jiti "^2.4.2" + lightningcss "1.30.1" + magic-string "^0.30.17" + source-map-js "^1.2.1" + tailwindcss "4.1.10" + +"@tailwindcss/oxide-android-arm64@4.1.10": + version "4.1.10" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.10.tgz#ad0f3cbfa219e1ee5fc8ad7170885feda397c4e3" + integrity sha512-VGLazCoRQ7rtsCzThaI1UyDu/XRYVyH4/EWiaSX6tFglE+xZB5cvtC5Omt0OQ+FfiIVP98su16jDVHDEIuH4iQ== + +"@tailwindcss/oxide-darwin-arm64@4.1.10": + version "4.1.10" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.10.tgz#d8d744f93310b45ce16420a9addd1c4329848929" + integrity sha512-ZIFqvR1irX2yNjWJzKCqTCcHZbgkSkSkZKbRM3BPzhDL/18idA8uWCoopYA2CSDdSGFlDAxYdU2yBHwAwx8euQ== + +"@tailwindcss/oxide-darwin-x64@4.1.10": + version "4.1.10" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.10.tgz#476490d1f95592a09801a53b48466e5065d7553f" + integrity sha512-eCA4zbIhWUFDXoamNztmS0MjXHSEJYlvATzWnRiTqJkcUteSjO94PoRHJy1Xbwp9bptjeIxxBHh+zBWFhttbrQ== + +"@tailwindcss/oxide-freebsd-x64@4.1.10": + version "4.1.10" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.10.tgz#7b7ccb813592209216ed39187eb8510ce6b4fc9d" + integrity sha512-8/392Xu12R0cc93DpiJvNpJ4wYVSiciUlkiOHOSOQNH3adq9Gi/dtySK7dVQjXIOzlpSHjeCL89RUUI8/GTI6g== + +"@tailwindcss/oxide-linux-arm-gnueabihf@4.1.10": + version "4.1.10" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.10.tgz#9f223c7994da846b9f3c70ac0b5713371c9b3b32" + integrity sha512-t9rhmLT6EqeuPT+MXhWhlRYIMSfh5LZ6kBrC4FS6/+M1yXwfCtp24UumgCWOAJVyjQwG+lYva6wWZxrfvB+NhQ== + +"@tailwindcss/oxide-linux-arm64-gnu@4.1.10": + version "4.1.10" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.10.tgz#58412e6a359a83144b30b415f637a52c8207f311" + integrity sha512-3oWrlNlxLRxXejQ8zImzrVLuZ/9Z2SeKoLhtCu0hpo38hTO2iL86eFOu4sVR8cZc6n3z7eRXXqtHJECa6mFOvA== + +"@tailwindcss/oxide-linux-arm64-musl@4.1.10": + version "4.1.10" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.10.tgz#3ed868b801a27e8cd35a615855bc94fd2786a6e8" + integrity sha512-saScU0cmWvg/Ez4gUmQWr9pvY9Kssxt+Xenfx1LG7LmqjcrvBnw4r9VjkFcqmbBb7GCBwYNcZi9X3/oMda9sqQ== + +"@tailwindcss/oxide-linux-x64-gnu@4.1.10": + version "4.1.10" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.10.tgz#aca15cc4cf9dcd687eda0f5cd2bc1f4bfb485562" + integrity sha512-/G3ao/ybV9YEEgAXeEg28dyH6gs1QG8tvdN9c2MNZdUXYBaIY/Gx0N6RlJzfLy/7Nkdok4kaxKPHKJUlAaoTdA== + +"@tailwindcss/oxide-linux-x64-musl@4.1.10": + version "4.1.10" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.10.tgz#0c77d1e94e499a9f85c80013e6052dd98d3cfee4" + integrity sha512-LNr7X8fTiKGRtQGOerSayc2pWJp/9ptRYAa4G+U+cjw9kJZvkopav1AQc5HHD+U364f71tZv6XamaHKgrIoVzA== + +"@tailwindcss/oxide-wasm32-wasi@4.1.10": + version "4.1.10" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.10.tgz#6e749424db4f6e076371a66da7c4daf1fcd4f9df" + integrity sha512-d6ekQpopFQJAcIK2i7ZzWOYGZ+A6NzzvQ3ozBvWFdeyqfOZdYHU66g5yr+/HC4ipP1ZgWsqa80+ISNILk+ae/Q== + dependencies: + "@emnapi/core" "^1.4.3" + "@emnapi/runtime" "^1.4.3" + "@emnapi/wasi-threads" "^1.0.2" + "@napi-rs/wasm-runtime" "^0.2.10" + "@tybys/wasm-util" "^0.9.0" + tslib "^2.8.0" + +"@tailwindcss/oxide-win32-arm64-msvc@4.1.10": + version "4.1.10" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.10.tgz#e1663b5a95425f0f458f616399ed9f6707d4a786" + integrity sha512-i1Iwg9gRbwNVOCYmnigWCCgow8nDWSFmeTUU5nbNx3rqbe4p0kRbEqLwLJbYZKmSSp23g4N6rCDmm7OuPBXhDA== + +"@tailwindcss/oxide-win32-x64-msvc@4.1.10": + version "4.1.10" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.10.tgz#de3d4e8b38c31caf2522ad0c6f0efdeb5034fc95" + integrity sha512-sGiJTjcBSfGq2DVRtaSljq5ZgZS2SDHSIfhOylkBvHVjwOsodBhnb3HdmiKkVuUGKD0I7G63abMOVaskj1KpOA== + +"@tailwindcss/oxide@4.1.10": + version "4.1.10" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide/-/oxide-4.1.10.tgz#b8ad6ae678b54bb533c2074092aadebac0a6d8fe" + integrity sha512-v0C43s7Pjw+B9w21htrQwuFObSkio2aV/qPx/mhrRldbqxbWJK6KizM+q7BF1/1CmuLqZqX3CeYF7s7P9fbA8Q== + dependencies: + detect-libc "^2.0.4" + tar "^7.4.3" + optionalDependencies: + "@tailwindcss/oxide-android-arm64" "4.1.10" + "@tailwindcss/oxide-darwin-arm64" "4.1.10" + "@tailwindcss/oxide-darwin-x64" "4.1.10" + "@tailwindcss/oxide-freebsd-x64" "4.1.10" + "@tailwindcss/oxide-linux-arm-gnueabihf" "4.1.10" + "@tailwindcss/oxide-linux-arm64-gnu" "4.1.10" + "@tailwindcss/oxide-linux-arm64-musl" "4.1.10" + "@tailwindcss/oxide-linux-x64-gnu" "4.1.10" + "@tailwindcss/oxide-linux-x64-musl" "4.1.10" + "@tailwindcss/oxide-wasm32-wasi" "4.1.10" + "@tailwindcss/oxide-win32-arm64-msvc" "4.1.10" + "@tailwindcss/oxide-win32-x64-msvc" "4.1.10" + +"@tailwindcss/postcss@^4.1.10": + version "4.1.10" + resolved "https://registry.yarnpkg.com/@tailwindcss/postcss/-/postcss-4.1.10.tgz#28e4edd9266a07e3fbfbdbf802563054c408d56b" + integrity sha512-B+7r7ABZbkXJwpvt2VMnS6ujcDoR2OOcFaqrLIo1xbcdxje4Vf+VgJdBzNNbrAjBj/rLZ66/tlQ1knIGNLKOBQ== + dependencies: + "@alloc/quick-lru" "^5.2.0" + "@tailwindcss/node" "4.1.10" + "@tailwindcss/oxide" "4.1.10" + postcss "^8.4.41" + tailwindcss "4.1.10" + +"@tufjs/canonical-json@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz#a52f61a3d7374833fca945b2549bc30a2dd40d0a" + integrity sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA== + +"@tufjs/models@3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-3.0.1.tgz#5aebb782ebb9e06f071ae7831c1f35b462b0319c" + integrity sha512-UUYHISyhCU3ZgN8yaear3cGATHb3SMuKHsQ/nVbHXcmnBf+LzQ/cQfhNG+rfaSHgqGKNEm2cOCLVLELStUQ1JA== + dependencies: + "@tufjs/canonical-json" "2.0.0" + minimatch "^9.0.5" + +"@tybys/wasm-util@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.9.0.tgz#3e75eb00604c8d6db470bf18c37b7d984a0e3355" + integrity sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw== + dependencies: + tslib "^2.4.0" + +"@types/cors@^2.8.12": + version "2.8.19" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.19.tgz#d93ea2673fd8c9f697367f5eeefc2bbfa94f0342" + integrity sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg== + dependencies: + "@types/node" "*" + +"@types/estree@1.0.7": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.7.tgz#4158d3105276773d5b7695cd4834b1722e4f37a8" + integrity sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ== + +"@types/estree@1.0.8", "@types/estree@^1.0.6": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" + integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== + +"@types/jasmine@~5.1.4": + version "5.1.8" + resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-5.1.8.tgz#b20f78ca416d7a2a8e726f8321e0b2827a78ceaa" + integrity sha512-u7/CnvRdh6AaaIzYjCgUuVbREFgulhX05Qtf6ZtW+aOcjCKKVvKgpkPYJBFTZSHtFBYimzU4zP0V2vrEsq9Wcg== + +"@types/json-schema@^7.0.15": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/minimist@^1.2.0": + version "1.2.5" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.5.tgz#ec10755e871497bcd83efe927e43ec46e8c0747e" + integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag== + +"@types/node@*", "@types/node@>=10.0.0": + version "24.0.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-24.0.4.tgz#dbae889912bda33a7f57669fb8587c1a56bc0c1f" + integrity sha512-ulyqAkrhnuNq9pB76DRBTkcS6YsmDALy6Ua63V8OhrOBgbcYt6IOdzpw5P1+dyRIyMerzLkeYWBeOXPpA9GMAA== + dependencies: + undici-types "~7.8.0" + +"@types/normalize-package-data@^2.4.0": + version "2.4.4" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" + integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== + +"@typescript-eslint/eslint-plugin@8.35.0": + version "8.35.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.35.0.tgz#515170100ff867445fe0a17ce05c14fc5fd9ca63" + integrity sha512-ijItUYaiWuce0N1SoSMrEd0b6b6lYkYt99pqCPfybd+HKVXtEvYhICfLdwp42MhiI5mp0oq7PKEL+g1cNiz/Eg== + dependencies: + "@eslint-community/regexpp" "^4.10.0" + "@typescript-eslint/scope-manager" "8.35.0" + "@typescript-eslint/type-utils" "8.35.0" + "@typescript-eslint/utils" "8.35.0" + "@typescript-eslint/visitor-keys" "8.35.0" + graphemer "^1.4.0" + ignore "^7.0.0" + natural-compare "^1.4.0" + ts-api-utils "^2.1.0" + +"@typescript-eslint/parser@8.35.0": + version "8.35.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.35.0.tgz#20a0e17778a329a6072722f5ac418d4376b767d2" + integrity sha512-6sMvZePQrnZH2/cJkwRpkT7DxoAWh+g6+GFRK6bV3YQo7ogi3SX5rgF6099r5Q53Ma5qeT7LGmOmuIutF4t3lA== + dependencies: + "@typescript-eslint/scope-manager" "8.35.0" + "@typescript-eslint/types" "8.35.0" + "@typescript-eslint/typescript-estree" "8.35.0" + "@typescript-eslint/visitor-keys" "8.35.0" + debug "^4.3.4" + +"@typescript-eslint/project-service@8.35.0": + version "8.35.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.35.0.tgz#00bd77e6845fbdb5684c6ab2d8a400a58dcfb07b" + integrity sha512-41xatqRwWZuhUMF/aZm2fcUsOFKNcG28xqRSS6ZVr9BVJtGExosLAm5A1OxTjRMagx8nJqva+P5zNIGt8RIgbQ== + dependencies: + "@typescript-eslint/tsconfig-utils" "^8.35.0" + "@typescript-eslint/types" "^8.35.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@8.35.0": + version "8.35.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.35.0.tgz#8ccb2ab63383544fab98fc4b542d8d141259ff4f" + integrity sha512-+AgL5+mcoLxl1vGjwNfiWq5fLDZM1TmTPYs2UkyHfFhgERxBbqHlNjRzhThJqz+ktBqTChRYY6zwbMwy0591AA== + dependencies: + "@typescript-eslint/types" "8.35.0" + "@typescript-eslint/visitor-keys" "8.35.0" + +"@typescript-eslint/tsconfig-utils@8.35.0", "@typescript-eslint/tsconfig-utils@^8.35.0": + version "8.35.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.35.0.tgz#6e05aeb999999e31d562ceb4fe144f3cbfbd670e" + integrity sha512-04k/7247kZzFraweuEirmvUj+W3bJLI9fX6fbo1Qm2YykuBvEhRTPl8tcxlYO8kZZW+HIXfkZNoasVb8EV4jpA== + +"@typescript-eslint/type-utils@8.35.0": + version "8.35.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.35.0.tgz#0201eae9d83ffcc3451ef8c94f53ecfbf2319ecc" + integrity sha512-ceNNttjfmSEoM9PW87bWLDEIaLAyR+E6BoYJQ5PfaDau37UGca9Nyq3lBk8Bw2ad0AKvYabz6wxc7DMTO2jnNA== + dependencies: + "@typescript-eslint/typescript-estree" "8.35.0" + "@typescript-eslint/utils" "8.35.0" + debug "^4.3.4" + ts-api-utils "^2.1.0" + +"@typescript-eslint/types@8.35.0", "@typescript-eslint/types@^8.0.0", "@typescript-eslint/types@^8.34.1", "@typescript-eslint/types@^8.35.0": + version "8.35.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.35.0.tgz#e60d062907930e30008d796de5c4170f02618a93" + integrity sha512-0mYH3emanku0vHw2aRLNGqe7EXh9WHEhi7kZzscrMDf6IIRUQ5Jk4wp1QrledE/36KtdZrVfKnE32eZCf/vaVQ== + +"@typescript-eslint/typescript-estree@8.35.0": + version "8.35.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.35.0.tgz#86141e6c55b75bc1eaecc0781bd39704de14e52a" + integrity sha512-F+BhnaBemgu1Qf8oHrxyw14wq6vbL8xwWKKMwTMwYIRmFFY/1n/9T/jpbobZL8vp7QyEUcC6xGrnAO4ua8Kp7w== + dependencies: + "@typescript-eslint/project-service" "8.35.0" + "@typescript-eslint/tsconfig-utils" "8.35.0" + "@typescript-eslint/types" "8.35.0" + "@typescript-eslint/visitor-keys" "8.35.0" + 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" + +"@typescript-eslint/utils@8.35.0", "@typescript-eslint/utils@^8.0.0", "@typescript-eslint/utils@^8.34.1": + version "8.35.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.35.0.tgz#aaf0afab5ab51ea2f1897002907eacd9834606d5" + integrity sha512-nqoMu7WWM7ki5tPgLVsmPM8CkqtoPUG6xXGeefM5t4x3XumOEKMoUZPdi+7F+/EotukN4R9OWdmDxN80fqoZeg== + dependencies: + "@eslint-community/eslint-utils" "^4.7.0" + "@typescript-eslint/scope-manager" "8.35.0" + "@typescript-eslint/types" "8.35.0" + "@typescript-eslint/typescript-estree" "8.35.0" + +"@typescript-eslint/visitor-keys@8.35.0": + version "8.35.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.35.0.tgz#93e905e7f1e94d26a79771d1b1eb0024cb159dbf" + integrity sha512-zTh2+1Y8ZpmeQaQVIc/ZZxsx8UzgKJyNg1PTvjzC7WMhPSVS8bfDX34k1SrwOf016qd5RU3az2UxUNue3IfQ5g== + dependencies: + "@typescript-eslint/types" "8.35.0" + eslint-visitor-keys "^4.2.1" + +"@vitejs/plugin-basic-ssl@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.0.0.tgz#9169bfe748743b8806553e0d1aa78e8227c27b2d" + integrity sha512-gc9Tjg8bUxBVSTzeWT3Njc0Cl3PakHFKdNfABnZWiUgbxqmHDEn7uECv3fHVylxoYgNzAcmU7ZrILz+BwSo3sA== + +"@yarnpkg/lockfile@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" + integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== + +JSONStream@^1.0.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +abbrev@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-3.0.1.tgz#8ac8b3b5024d31464fe2a5feeea9f4536bf44025" + integrity sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg== + +accepts@~1.3.4: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^8.15.0: + version "8.15.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" + integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== + +add-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" + integrity sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ== + +agent-base@^7.1.0, agent-base@^7.1.2: + version "7.1.3" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.3.tgz#29435eb821bc4194633a5b89e5bc4703bafc25a1" + integrity sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw== + +ajv-formats@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-3.0.1.tgz#3d5dc762bca17679c3c2ea7e90ad6b7532309578" + integrity sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ== + dependencies: + ajv "^8.0.0" + +ajv@8.17.1, ajv@^8.0.0: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== + dependencies: + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + +ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + 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" + +angular-eslint@^20.1.1: + version "20.1.1" + resolved "https://registry.yarnpkg.com/angular-eslint/-/angular-eslint-20.1.1.tgz#d75081c7bd3629bacb3213634f8a932db32cc249" + integrity sha512-sJ/7vdBMmmYGq5054UHfBXCWHABo79bPbNiXVznqBu6mV85RZsT+IBV1JKLHmV4JtfHoNx1ElkSL2hR3ZeJbkQ== + dependencies: + "@angular-devkit/core" ">= 20.0.0 < 21.0.0" + "@angular-devkit/schematics" ">= 20.0.0 < 21.0.0" + "@angular-eslint/builder" "20.1.1" + "@angular-eslint/eslint-plugin" "20.1.1" + "@angular-eslint/eslint-plugin-template" "20.1.1" + "@angular-eslint/schematics" "20.1.1" + "@angular-eslint/template-parser" "20.1.1" + "@typescript-eslint/types" "^8.0.0" + "@typescript-eslint/utils" "^8.0.0" + +ansi-escapes@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-escapes@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-7.0.0.tgz#00fc19f491bbb18e1d481b97868204f92109bfe7" + integrity sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw== + dependencies: + environment "^1.0.0" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" + integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^6.0.0, ansi-styles@^6.1.0, ansi-styles@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +aria-query@5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.2.tgz#93f81a43480e33a338f19163a3d10a50c01dcd59" + integrity sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw== + +array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" + integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== + dependencies: + call-bound "^1.0.3" + is-array-buffer "^3.0.5" + +array-ify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== + +array-includes@^3.1.9: + version "3.1.9" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.9.tgz#1f0ccaa08e90cdbc3eb433210f903ad0f17c3f3a" + integrity sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-abstract "^1.24.0" + es-object-atoms "^1.1.1" + get-intrinsic "^1.3.0" + is-string "^1.1.1" + math-intrinsics "^1.1.0" + +array.prototype.findlastindex@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz#cfa1065c81dcb64e34557c9b81d012f6a421c564" + integrity sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-abstract "^1.23.9" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + es-shim-unscopables "^1.1.0" + +array.prototype.flat@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz#534aaf9e6e8dd79fb6b9a9917f839ef1ec63afe5" + integrity sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" + +array.prototype.flatmap@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz#712cc792ae70370ae40586264629e33aab5dd38b" + integrity sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" + +arraybuffer.prototype.slice@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c" + integrity sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + is-array-buffer "^3.0.4" + +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== + +async-function@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-function/-/async-function-1.0.0.tgz#509c9fca60eaf85034c6829838188e4e4c8ffb2b" + integrity sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA== + +autoprefixer@^10.4.19: + version "10.4.21" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.21.tgz#77189468e7a8ad1d9a37fbc08efc9f480cf0a95d" + integrity sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ== + dependencies: + browserslist "^4.24.4" + caniuse-lite "^1.0.30001702" + fraction.js "^4.3.7" + normalize-range "^0.1.2" + picocolors "^1.1.1" + postcss-value-parser "^4.2.0" + +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + +axobject-query@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-4.1.0.tgz#28768c76d0e3cff21bc62a9e2d0b6ac30042a1ee" + integrity sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64id@2.0.0, base64id@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" + integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== + +beasties@0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/beasties/-/beasties-0.3.4.tgz#a2268bd84ee9b51b0a89d208f768e93b7be5ee63" + integrity sha512-NmzN1zN1cvGccXFyZ73335+ASXwBlVWcUPssiUDIlFdfyatHPRRufjCd5w8oPaQPvVnf9ELklaCGb1gi9FBwIw== + dependencies: + css-select "^5.1.0" + css-what "^6.1.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" + +binary-extensions@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== + +body-parser@^1.19.0: + version "1.20.3" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" + integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== + dependencies: + bytes "3.1.2" + content-type "~1.0.5" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.13.0" + raw-body "2.5.2" + type-is "~1.6.18" + unpipe "1.0.0" + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +brace-expansion@^1.1.7: + version "1.1.12" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843" + integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.2.tgz#54fc53237a613d854c7bd37463aad17df87214e7" + integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@^3.0.3, braces@~3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + +browserslist@^4.23.0, browserslist@^4.24.0, browserslist@^4.24.4: + version "4.25.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.25.1.tgz#ba9e8e6f298a1d86f829c9b975e07948967bb111" + integrity sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw== + dependencies: + caniuse-lite "^1.0.30001726" + electron-to-chromium "^1.5.173" + node-releases "^2.0.19" + update-browserslist-db "^1.1.3" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cacache@^19.0.0, cacache@^19.0.1: + version "19.0.1" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-19.0.1.tgz#3370cc28a758434c85c2585008bd5bdcff17d6cd" + integrity sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ== + 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" + +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + +call-bind@^1.0.7, call-bind@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-define-property "^1.0.0" + get-intrinsic "^1.2.4" + set-function-length "^1.2.2" + +call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase-keys@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" + integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== + dependencies: + camelcase "^5.3.1" + map-obj "^4.0.0" + quick-lru "^4.0.1" + +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +caniuse-lite@^1.0.30001702, caniuse-lite@^1.0.30001726: + version "1.0.30001726" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001726.tgz#a15bd87d5a4bf01f6b6f70ae7c97fdfd28b5ae47" + integrity sha512-VQAUIUzBiZ/UnlM28fSp2CRF3ivUn1BWEvxMcVTNwpw91Py1pGbPIyIKtd+tzct9C3ouceCVdGAXxZOpZAsgdw== + +chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^5.3.0, chalk@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.4.1.tgz#1b48bf0963ec158dce2aacf69c093ae2dd2092d8" + integrity sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w== + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +chokidar@^3.5.1: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chokidar@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30" + integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA== + dependencies: + readdirp "^4.0.1" + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +chownr@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-3.0.0.tgz#9855e64ecd240a9cc4267ce8a4aa5d24a1da15e4" + integrity sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g== + +cli-cursor@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-5.0.0.tgz#24a4831ecf5a6b01ddeb32fb71a4b2088b0dce38" + integrity sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw== + dependencies: + restore-cursor "^5.0.0" + +cli-spinners@^2.9.2: + version "2.9.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" + integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== + +cli-truncate@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-4.0.0.tgz#6cc28a2924fee9e25ce91e973db56c7066e6172a" + integrity sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA== + dependencies: + slice-ansi "^5.0.0" + string-width "^7.0.0" + +cli-width@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" + integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +cliui@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-9.0.1.tgz#6f7890f386f6f1f79953adc1f78dec46fcc2d291" + integrity sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w== + dependencies: + string-width "^7.2.0" + strip-ansi "^7.1.0" + wrap-ansi "^9.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colorette@^2.0.20: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + +commander@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-14.0.0.tgz#f244fc74a92343514e56229f16ef5c5e22ced5e9" + integrity sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA== + +compare-func@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" + integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== + dependencies: + array-ify "^1.0.0" + dot-prop "^5.1.0" + +complex.js@^2.2.5: + version "2.4.2" + resolved "https://registry.yarnpkg.com/complex.js/-/complex.js-2.4.2.tgz#76f260a9e7e232d8ad26348484a9b128c13fcc9a" + integrity sha512-qtx7HRhPGSCBtGiST4/WGHuW+zeaND/6Ld+db6PbrulIB1i2Ev/2UPiqcmpQNPSyfBKraC0EOvOKCB5dGZKt3g== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +concat-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" + integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.0.2" + typedarray "^0.0.6" + +connect@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" + integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== + dependencies: + debug "2.6.9" + finalhandler "1.1.2" + parseurl "~1.3.3" + utils-merge "1.0.1" + +content-type@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +conventional-changelog-angular@^5.0.12: + version "5.0.13" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz#896885d63b914a70d4934b59d2fe7bde1832b28c" + integrity sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA== + dependencies: + compare-func "^2.0.0" + q "^1.5.1" + +conventional-changelog-atom@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz#a759ec61c22d1c1196925fca88fe3ae89fd7d8de" + integrity sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw== + dependencies: + q "^1.5.1" + +conventional-changelog-codemirror@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz#398e9530f08ce34ec4640af98eeaf3022eb1f7dc" + integrity sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw== + dependencies: + q "^1.5.1" + +conventional-changelog-config-spec@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-config-spec/-/conventional-changelog-config-spec-2.1.0.tgz#874a635287ef8b581fd8558532bf655d4fb59f2d" + integrity sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ== + +conventional-changelog-conventionalcommits@4.6.3, conventional-changelog-conventionalcommits@^4.5.0: + version "4.6.3" + resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz#0765490f56424b46f6cb4db9135902d6e5a36dc2" + integrity sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g== + dependencies: + compare-func "^2.0.0" + lodash "^4.17.15" + q "^1.5.1" + +conventional-changelog-core@^4.2.1: + version "4.2.4" + resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz#e50d047e8ebacf63fac3dc67bf918177001e1e9f" + integrity sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg== + dependencies: + add-stream "^1.0.0" + conventional-changelog-writer "^5.0.0" + conventional-commits-parser "^3.2.0" + dateformat "^3.0.0" + get-pkg-repo "^4.0.0" + git-raw-commits "^2.0.8" + git-remote-origin-url "^2.0.0" + git-semver-tags "^4.1.1" + lodash "^4.17.15" + normalize-package-data "^3.0.0" + q "^1.5.1" + read-pkg "^3.0.0" + read-pkg-up "^3.0.0" + through2 "^4.0.0" + +conventional-changelog-ember@^2.0.9: + version "2.0.9" + resolved "https://registry.yarnpkg.com/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz#619b37ec708be9e74a220f4dcf79212ae1c92962" + integrity sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A== + dependencies: + q "^1.5.1" + +conventional-changelog-eslint@^3.0.9: + version "3.0.9" + resolved "https://registry.yarnpkg.com/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz#689bd0a470e02f7baafe21a495880deea18b7cdb" + integrity sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA== + dependencies: + q "^1.5.1" + +conventional-changelog-express@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz#420c9d92a347b72a91544750bffa9387665a6ee8" + integrity sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ== + dependencies: + q "^1.5.1" + +conventional-changelog-jquery@^3.0.11: + version "3.0.11" + resolved "https://registry.yarnpkg.com/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz#d142207400f51c9e5bb588596598e24bba8994bf" + integrity sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw== + dependencies: + q "^1.5.1" + +conventional-changelog-jshint@^2.0.9: + version "2.0.9" + resolved "https://registry.yarnpkg.com/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz#f2d7f23e6acd4927a238555d92c09b50fe3852ff" + integrity sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA== + dependencies: + compare-func "^2.0.0" + q "^1.5.1" + +conventional-changelog-preset-loader@^2.3.4: + version "2.3.4" + resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz#14a855abbffd59027fd602581f1f34d9862ea44c" + integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== + +conventional-changelog-writer@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz#e0757072f045fe03d91da6343c843029e702f359" + integrity sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ== + dependencies: + conventional-commits-filter "^2.0.7" + dateformat "^3.0.0" + handlebars "^4.7.7" + json-stringify-safe "^5.0.1" + lodash "^4.17.15" + meow "^8.0.0" + semver "^6.0.0" + split "^1.0.0" + through2 "^4.0.0" + +conventional-changelog@3.1.25: + version "3.1.25" + resolved "https://registry.yarnpkg.com/conventional-changelog/-/conventional-changelog-3.1.25.tgz#3e227a37d15684f5aa1fb52222a6e9e2536ccaff" + integrity sha512-ryhi3fd1mKf3fSjbLXOfK2D06YwKNic1nC9mWqybBHdObPd8KJ2vjaXZfYj1U23t+V8T8n0d7gwnc9XbIdFbyQ== + dependencies: + conventional-changelog-angular "^5.0.12" + conventional-changelog-atom "^2.0.8" + conventional-changelog-codemirror "^2.0.8" + conventional-changelog-conventionalcommits "^4.5.0" + conventional-changelog-core "^4.2.1" + conventional-changelog-ember "^2.0.9" + conventional-changelog-eslint "^3.0.9" + conventional-changelog-express "^2.0.6" + conventional-changelog-jquery "^3.0.11" + conventional-changelog-jshint "^2.0.9" + conventional-changelog-preset-loader "^2.3.4" + +conventional-commits-filter@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz#f8d9b4f182fce00c9af7139da49365b136c8a0b3" + integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA== + dependencies: + lodash.ismatch "^4.4.0" + modify-values "^1.0.0" + +conventional-commits-parser@^3.2.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz#a7d3b77758a202a9b2293d2112a8d8052c740972" + integrity sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q== + dependencies: + JSONStream "^1.0.4" + is-text-path "^1.0.1" + lodash "^4.17.15" + meow "^8.0.0" + split2 "^3.0.0" + through2 "^4.0.0" + +conventional-recommended-bump@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz#cfa623285d1de554012f2ffde70d9c8a22231f55" + integrity sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw== + dependencies: + concat-stream "^2.0.0" + conventional-changelog-preset-loader "^2.3.4" + conventional-commits-filter "^2.0.7" + conventional-commits-parser "^3.2.0" + git-raw-commits "^2.0.8" + git-semver-tags "^4.1.1" + meow "^8.0.0" + q "^1.5.1" + +convert-source-map@^1.5.1: + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +cookie@~0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" + integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cors@~2.8.5: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + +cross-spawn@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +css-select@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" + integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== + dependencies: + boolbase "^1.0.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" + +css-what@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +custom-event@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" + integrity sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg== + +dargs@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" + integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== + +data-view-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570" + integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + +data-view-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735" + integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + +data-view-byte-offset@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191" + integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +date-format@^4.0.14: + version "4.0.14" + resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.14.tgz#7a8e584434fb169a521c8b7aa481f355810d9400" + integrity sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg== + +dateformat@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== + +debug@2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.6, debug@^4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" + integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== + dependencies: + ms "^2.1.3" + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@~4.3.1, debug@~4.3.2, debug@~4.3.4: + version "4.3.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" + integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== + dependencies: + ms "^2.1.3" + +decamelize-keys@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" + integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg== + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== + +decimal.js@^10.4.3: + version "10.5.0" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.5.0.tgz#0f371c7cf6c4898ce0afb09836db73cd82010f22" + integrity sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw== + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-indent@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" + integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== + +detect-libc@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== + +detect-libc@^2.0.1, detect-libc@^2.0.3, detect-libc@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.4.tgz#f04715b8ba815e53b4d8109655b6508a6865a7e8" + integrity sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA== + +detect-newline@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +di@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" + integrity sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA== + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +dom-serialize@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" + integrity sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ== + dependencies: + custom-event "~1.0.0" + ent "~2.2.0" + extend "^3.0.0" + void-elements "^2.0.0" + +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +domutils@^3.0.1, domutils@^3.2.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.2.2.tgz#edbfe2b668b0c1d97c24baf0f1062b132221bc78" + integrity sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + +dot-prop@^5.1.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +dotgitignore@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/dotgitignore/-/dotgitignore-2.1.0.tgz#a4b15a4e4ef3cf383598aaf1dfa4a04bcc089b7b" + integrity sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA== + dependencies: + find-up "^3.0.0" + minimatch "^3.0.4" + +dunder-proto@^1.0.0, dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +electron-to-chromium@^1.5.173: + version "1.5.174" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.174.tgz#c7d273755d4dc9bc4f1d192f6f2092bee42771f3" + integrity sha512-HE43yYdUUiJVjewV2A9EP8o89Kb4AqMKplMQP2IxEPUws1Etu/ZkdsgUDabUZ/WmbP4ZbvJDOcunvbBUPPIfmw== + +emoji-regex@^10.3.0: + version "10.4.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.4.0.tgz#03553afea80b3975749cfcb36f776ca268e413d4" + integrity sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +encoding@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +engine.io-parser@~5.2.1: + version "5.2.3" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.2.3.tgz#00dc5b97b1f233a23c9398d0209504cf5f94d92f" + integrity sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q== + +engine.io@~6.6.0: + version "6.6.4" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.6.4.tgz#0a89a3e6b6c1d4b0c2a2a637495e7c149ec8d8ee" + integrity sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g== + dependencies: + "@types/cors" "^2.8.12" + "@types/node" ">=10.0.0" + accepts "~1.3.4" + base64id "2.0.0" + cookie "~0.7.2" + cors "~2.8.5" + debug "~4.3.1" + engine.io-parser "~5.2.1" + ws "~8.17.1" + +enhanced-resolve@^5.18.1: + version "5.18.2" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz#7903c5b32ffd4b2143eeb4b92472bd68effd5464" + integrity sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +ent@~2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.2.tgz#22a5ed2fd7ce0cbcff1d1474cf4909a44bdb6e85" + integrity sha512-kKvD1tO6BM+oK9HzCPpUdRb4vKFQY/FPTFmurMvh6LlN68VMrdj77w8yp51/kDbpkFOS9J8w5W6zIzgM2H8/hw== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + punycode "^1.4.1" + safe-regex-test "^1.1.0" + +entities@^4.2.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +entities@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-6.0.1.tgz#c28c34a43379ca7f61d074130b2f5f7020a30694" + integrity sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g== + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +environment@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/environment/-/environment-1.1.0.tgz#8e86c66b180f363c7ab311787e0259665f45a9f1" + integrity sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q== + +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.23.2, es-abstract@^1.23.5, es-abstract@^1.23.9, es-abstract@^1.24.0: + version "1.24.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.24.0.tgz#c44732d2beb0acc1ed60df840869e3106e7af328" + integrity sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg== + dependencies: + array-buffer-byte-length "^1.0.2" + arraybuffer.prototype.slice "^1.0.4" + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + data-view-buffer "^1.0.2" + data-view-byte-length "^1.0.2" + data-view-byte-offset "^1.0.1" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + es-set-tostringtag "^2.1.0" + es-to-primitive "^1.3.0" + function.prototype.name "^1.1.8" + get-intrinsic "^1.3.0" + get-proto "^1.0.1" + get-symbol-description "^1.1.0" + globalthis "^1.0.4" + gopd "^1.2.0" + has-property-descriptors "^1.0.2" + has-proto "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + internal-slot "^1.1.0" + is-array-buffer "^3.0.5" + is-callable "^1.2.7" + is-data-view "^1.0.2" + is-negative-zero "^2.0.3" + is-regex "^1.2.1" + is-set "^2.0.3" + is-shared-array-buffer "^1.0.4" + is-string "^1.1.1" + is-typed-array "^1.1.15" + is-weakref "^1.1.1" + math-intrinsics "^1.1.0" + object-inspect "^1.13.4" + object-keys "^1.1.1" + object.assign "^4.1.7" + own-keys "^1.0.1" + regexp.prototype.flags "^1.5.4" + safe-array-concat "^1.1.3" + safe-push-apply "^1.0.0" + safe-regex-test "^1.1.0" + set-proto "^1.0.0" + stop-iteration-iterator "^1.1.0" + string.prototype.trim "^1.2.10" + string.prototype.trimend "^1.0.9" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.3" + typed-array-byte-length "^1.0.3" + typed-array-byte-offset "^1.0.4" + typed-array-length "^1.0.7" + unbox-primitive "^1.1.0" + which-typed-array "^1.1.19" + +es-define-property@^1.0.0, es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +es-shim-unscopables@^1.0.2, es-shim-unscopables@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz#438df35520dac5d105f3943d927549ea3b00f4b5" + integrity sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw== + dependencies: + hasown "^2.0.2" + +es-to-primitive@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz#96c89c82cc49fd8794a24835ba3e1ff87f214e18" + integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== + dependencies: + is-callable "^1.2.7" + is-date-object "^1.0.5" + is-symbol "^1.0.4" + +esbuild@0.25.5, esbuild@^0.25.0: + version "0.25.5" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.5.tgz#71075054993fdfae76c66586f9b9c1f8d7edd430" + integrity sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ== + optionalDependencies: + "@esbuild/aix-ppc64" "0.25.5" + "@esbuild/android-arm" "0.25.5" + "@esbuild/android-arm64" "0.25.5" + "@esbuild/android-x64" "0.25.5" + "@esbuild/darwin-arm64" "0.25.5" + "@esbuild/darwin-x64" "0.25.5" + "@esbuild/freebsd-arm64" "0.25.5" + "@esbuild/freebsd-x64" "0.25.5" + "@esbuild/linux-arm" "0.25.5" + "@esbuild/linux-arm64" "0.25.5" + "@esbuild/linux-ia32" "0.25.5" + "@esbuild/linux-loong64" "0.25.5" + "@esbuild/linux-mips64el" "0.25.5" + "@esbuild/linux-ppc64" "0.25.5" + "@esbuild/linux-riscv64" "0.25.5" + "@esbuild/linux-s390x" "0.25.5" + "@esbuild/linux-x64" "0.25.5" + "@esbuild/netbsd-arm64" "0.25.5" + "@esbuild/netbsd-x64" "0.25.5" + "@esbuild/openbsd-arm64" "0.25.5" + "@esbuild/openbsd-x64" "0.25.5" + "@esbuild/sunos-x64" "0.25.5" + "@esbuild/win32-arm64" "0.25.5" + "@esbuild/win32-ia32" "0.25.5" + "@esbuild/win32-x64" "0.25.5" + +escalade@^3.1.1, escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-latex@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/escape-latex/-/escape-latex-1.2.0.tgz#07c03818cf7dac250cce517f4fda1b001ef2bca1" + integrity sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-prettier@^10.1.5: + version "10.1.5" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-10.1.5.tgz#00c18d7225043b6fbce6a665697377998d453782" + integrity sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw== + +eslint-import-resolver-node@^0.3.9: + version "0.3.9" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== + dependencies: + debug "^3.2.7" + is-core-module "^2.13.0" + resolve "^1.22.4" + +eslint-module-utils@^2.12.1: + version "2.12.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz#f76d3220bfb83c057651359295ab5854eaad75ff" + integrity sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw== + dependencies: + debug "^3.2.7" + +eslint-plugin-import@^2.31.0: + version "2.32.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz#602b55faa6e4caeaa5e970c198b5c00a37708980" + integrity sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA== + dependencies: + "@rtsao/scc" "^1.1.0" + array-includes "^3.1.9" + array.prototype.findlastindex "^1.2.6" + array.prototype.flat "^1.3.3" + array.prototype.flatmap "^1.3.3" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.9" + eslint-module-utils "^2.12.1" + hasown "^2.0.2" + is-core-module "^2.16.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.fromentries "^2.0.8" + object.groupby "^1.0.3" + object.values "^1.2.1" + semver "^6.3.1" + string.prototype.trimend "^1.0.9" + tsconfig-paths "^3.15.0" + +eslint-plugin-perfectionist@^4.15.0: + version "4.15.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-perfectionist/-/eslint-plugin-perfectionist-4.15.0.tgz#320029162b0ec439af522d5b146903f0e47bfbd4" + integrity sha512-pC7PgoXyDnEXe14xvRUhBII8A3zRgggKqJFx2a82fjrItDs1BSI7zdZnQtM2yQvcyod6/ujmzb7ejKPx8lZTnw== + dependencies: + "@typescript-eslint/types" "^8.34.1" + "@typescript-eslint/utils" "^8.34.1" + natural-orderby "^5.0.0" + +eslint-plugin-simple-import-sort@^12.1.1: + version "12.1.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-12.1.1.tgz#e64bfdaf91c5b98a298619aa634a9f7aa43b709e" + integrity sha512-6nuzu4xwQtE3332Uz0to+TxDQYRLTKRESSc2hefVT48Zc8JthmN23Gx9lnYhu0FtkRSL1oxny3kJ2aveVhmOVA== + +eslint-plugin-unused-imports@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-4.1.4.tgz#62ddc7446ccbf9aa7b6f1f0b00a980423cda2738" + integrity sha512-YptD6IzQjDardkl0POxnnRBhU1OEePMV0nd6siHaRBbd+lyh6NAhFEobiznKU7kTsSsDeSD62Pe7kAM1b7dAZQ== + +eslint-scope@^8.0.2, eslint-scope@^8.4.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.4.0.tgz#88e646a207fad61436ffa39eb505147200655c82" + integrity sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint-visitor-keys@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1" + integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== + +eslint@^9.28.0: + version "9.29.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.29.0.tgz#65e3db3b7e5a5b04a8af541741a0f3648d0a81a6" + integrity sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.12.1" + "@eslint/config-array" "^0.20.1" + "@eslint/config-helpers" "^0.2.1" + "@eslint/core" "^0.14.0" + "@eslint/eslintrc" "^3.3.1" + "@eslint/js" "9.29.0" + "@eslint/plugin-kit" "^0.3.1" + "@humanfs/node" "^0.16.6" + "@humanwhocodes/module-importer" "^1.0.1" + "@humanwhocodes/retry" "^0.4.2" + "@types/estree" "^1.0.6" + "@types/json-schema" "^7.0.15" + 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" + +espree@^10.0.1, espree@^10.4.0: + version "10.4.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-10.4.0.tgz#d54f4949d4629005a1fa168d937c3ff1f7e2a837" + integrity sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ== + dependencies: + acorn "^8.15.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^4.2.1" + +esquery@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +eventemitter3@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + +exponential-backoff@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.2.tgz#a8f26adb96bf78e8cd8ad1037928d5e5c0679d91" + integrity sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA== + +extend@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +external-editor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" + integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== + 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" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fast-uri@^3.0.1: + version "3.0.6" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.6.tgz#88f130b77cfaea2378d56bf970dea21257a68748" + integrity sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw== + +fastq@^1.6.0: + version "1.19.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5" + integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== + dependencies: + reusify "^1.0.4" + +fdir@^6.4.4: + version "6.4.6" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.6.tgz#2b268c0232697063111bbf3f64810a2a741ba281" + integrity sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w== + +figures@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" + integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== + dependencies: + flat-cache "^4.0.0" + +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +find-up@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== + dependencies: + locate-path "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c" + integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.4" + +flatted@^3.2.7, flatted@^3.2.9: + version "3.3.3" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" + integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== + +follow-redirects@^1.0.0: + version "1.15.9" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" + integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== + +for-each@^0.3.3, for-each@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" + integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== + dependencies: + is-callable "^1.2.7" + +foreground-child@^3.1.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" + integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== + dependencies: + cross-spawn "^7.0.6" + signal-exit "^4.0.1" + +fraction.js@^4.3.7: + version "4.3.7" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" + integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== + +fraction.js@^5.2.1: + version "5.2.2" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-5.2.2.tgz#c1295bc47307c5f93f75790859645fd74edaa195" + integrity sha512-uXBDv5knpYmv/2gLzWQ5mBHGBRk9wcKTeWu6GLTUEQfjCxO09uM/mHDrojlL+Q1mVGIIFo149Gba7od1XPgSzQ== + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs-minipass@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54" + integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== + dependencies: + minipass "^7.0.3" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2, fsevents@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +function.prototype.name@^1.1.6, function.prototype.name@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.8.tgz#e68e1df7b259a5c949eeef95cdbde53edffabb78" + integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + functions-have-names "^1.2.3" + hasown "^2.0.2" + is-callable "^1.2.7" + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-east-asian-width@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz#21b4071ee58ed04ee0db653371b55b4299875389" + integrity sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ== + +get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + +get-pkg-repo@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz#75973e1c8050c73f48190c52047c4cee3acbf385" + integrity sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA== + dependencies: + "@hutson/parse-repository-url" "^3.0.0" + hosted-git-info "^4.0.0" + through2 "^2.0.0" + yargs "^16.2.0" + +get-proto@^1.0.0, get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + +get-symbol-description@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" + integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + +git-raw-commits@^2.0.8: + version "2.0.11" + resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.11.tgz#bc3576638071d18655e1cc60d7f524920008d723" + integrity sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A== + dependencies: + dargs "^7.0.0" + lodash "^4.17.15" + meow "^8.0.0" + split2 "^3.0.0" + through2 "^4.0.0" + +git-remote-origin-url@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" + integrity sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw== + dependencies: + gitconfiglocal "^1.0.0" + pify "^2.3.0" + +git-semver-tags@^4.0.0, git-semver-tags@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-4.1.1.tgz#63191bcd809b0ec3e151ba4751c16c444e5b5780" + integrity sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA== + dependencies: + meow "^8.0.0" + semver "^6.0.0" + +gitconfiglocal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" + integrity sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ== + dependencies: + ini "^1.3.2" + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@^10.2.2: + version "10.4.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" + integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== + 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" + +glob@^7.1.3, glob@^7.1.7: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + 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" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" + integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== + +globalthis@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== + dependencies: + define-properties "^1.2.1" + gopd "^1.0.1" + +gopd@^1.0.1, gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +handlebars@^4.7.7: + version "4.7.8" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" + integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.2" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + +hard-rejection@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" + integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== + +has-bigints@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.1.0.tgz#28607e965ac967e03cd2a2c70a2636a1edad49fe" + integrity sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5" + integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== + dependencies: + dunder-proto "^1.0.0" + +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" + integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== + dependencies: + lru-cache "^6.0.0" + +hosted-git-info@^8.0.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-8.1.0.tgz#153cd84c03c6721481e16a5709eb74b1a0ab2ed0" + integrity sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw== + dependencies: + lru-cache "^10.0.1" + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +htmlparser2@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-10.0.0.tgz#77ad249037b66bf8cc99c6e286ef73b83aeb621d" + integrity sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.2.1" + entities "^6.0.0" + +http-cache-semantics@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz#205f4db64f8562b76a4ff9235aa5279839a09dd5" + integrity sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-proxy-agent@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" + integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== + dependencies: + agent-base "^7.1.0" + debug "^4.3.4" + +http-proxy@^1.18.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +https-proxy-agent@7.0.6, https-proxy-agent@^7.0.1: + version "7.0.6" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9" + integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== + dependencies: + agent-base "^7.1.2" + debug "4" + +husky@^9.0.11: + version "9.1.7" + resolved "https://registry.yarnpkg.com/husky/-/husky-9.1.7.tgz#d46a38035d101b46a70456a850ff4201344c0b2d" + integrity sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA== + +iconv-lite@0.4.24, iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ignore-walk@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-7.0.0.tgz#8350e475cf4375969c12eb49618b3fd9cca6704f" + integrity sha512-T4gbf83A4NH95zvhVYZc+qWocBBGlpzUXLPGurJggw/WIOwicfXJChLDP/iBZnN5WqROSu5Bm3hhle4z8a8YGQ== + dependencies: + minimatch "^9.0.0" + +ignore@7.0.5, ignore@^7.0.0: + version "7.0.5" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-7.0.5.tgz#4cb5f6cd7d4c7ab0365738c7aea888baa6d7efd9" + integrity sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg== + +ignore@^5.2.0: + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== + +immutable@^5.0.2: + version "5.1.3" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-5.1.3.tgz#e6486694c8b76c37c063cca92399fa64098634d4" + integrity sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg== + +import-fresh@^3.2.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" + integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@5.0.0, ini@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ini/-/ini-5.0.0.tgz#a7a4615339843d9a8ccc2d85c9d81cf93ffbc638" + integrity sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw== + +ini@^1.3.2: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +internal-slot@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" + integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== + dependencies: + es-errors "^1.3.0" + hasown "^2.0.2" + side-channel "^1.1.0" + +ip-address@^9.0.5: + version "9.0.5" + resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" + integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== + dependencies: + jsbn "1.1.0" + sprintf-js "^1.1.3" + +is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" + integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + get-intrinsic "^1.2.6" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-async-function@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.1.1.tgz#3e69018c8e04e73b738793d020bfe884b9fd3523" + integrity sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ== + dependencies: + async-function "^1.0.0" + call-bound "^1.0.3" + get-proto "^1.0.1" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" + +is-bigint@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" + integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== + dependencies: + has-bigints "^1.0.2" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.2.tgz#7067f47709809a393c71ff5bb3e135d8a9215d9e" + integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + +is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.13.0, is-core-module@^2.16.0, is-core-module@^2.16.1, is-core-module@^2.5.0: + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== + dependencies: + hasown "^2.0.2" + +is-data-view@^1.0.1, is-data-view@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e" + integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== + dependencies: + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + is-typed-array "^1.1.13" + +is-date-object@^1.0.5, is-date-object@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" + integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== + dependencies: + call-bound "^1.0.2" + has-tostringtag "^1.0.2" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-finalizationregistry@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz#eefdcdc6c94ddd0674d9c85887bf93f944a97c90" + integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== + dependencies: + call-bound "^1.0.3" + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-fullwidth-code-point@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" + integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== + +is-fullwidth-code-point@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz#9609efced7c2f97da7b60145ef481c787c7ba704" + integrity sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA== + dependencies: + get-east-asian-width "^1.0.0" + +is-generator-function@^1.0.10: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.0.tgz#bf3eeda931201394f57b5dba2800f91a238309ca" + integrity sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ== + dependencies: + call-bound "^1.0.3" + get-proto "^1.0.0" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-interactive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-2.0.0.tgz#40c57614593826da1100ade6059778d597f16e90" + integrity sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ== + +is-map@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== + +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== + +is-number-object@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541" + integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== + +is-regex@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" + integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== + dependencies: + call-bound "^1.0.2" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +is-set@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== + +is-shared-array-buffer@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" + integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== + dependencies: + call-bound "^1.0.3" + +is-string@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" + integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + +is-symbol@^1.0.4, is-symbol@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" + integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== + dependencies: + call-bound "^1.0.2" + has-symbols "^1.1.0" + safe-regex-test "^1.1.0" + +is-text-path@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" + integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== + dependencies: + text-extensions "^1.0.0" + +is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15: + version "1.1.15" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" + integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== + dependencies: + which-typed-array "^1.1.16" + +is-unicode-supported@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714" + integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== + +is-unicode-supported@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz#09f0ab0de6d3744d48d265ebb98f65d11f2a9b3a" + integrity sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ== + +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== + +is-weakref@^1.0.2, is-weakref@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.1.tgz#eea430182be8d64174bd96bffbc46f21bf3f9293" + integrity sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew== + dependencies: + call-bound "^1.0.3" + +is-weakset@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.4.tgz#c9f5deb0bc1906c6d6f1027f284ddf459249daca" + integrity sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ== + dependencies: + call-bound "^1.0.3" + get-intrinsic "^1.2.6" + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isbinaryfile@^4.0.8: + version "4.0.10" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.10.tgz#0c5b5e30c2557a2f06febd37b7322946aaee42b3" + integrity sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isexe@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d" + integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ== + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== + +istanbul-lib-instrument@6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz#fa15401df6c15874bcb2105f773325d78c666765" + integrity sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q== + 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" + +istanbul-lib-instrument@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + +istanbul-lib-report@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^4.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.0.5: + version "3.1.7" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" + integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jackspeak@^3.1.2: + version "3.4.3" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" + integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +jasmine-core@^4.1.0: + version "4.6.1" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-4.6.1.tgz#5ebb8afa07282078f8d7b15871737a83b74e58f2" + integrity sha512-VYz/BjjmC3klLJlLwA4Kw8ytk0zDSmbbDLNs794VnWmkcCB7I9aAL/D48VNQtmITyPvea2C3jdUMfc3kAoy0PQ== + +jasmine-core@~5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-5.1.2.tgz#8f2789faa79ef1ffad7abab6bff8d4bd661094f7" + integrity sha512-2oIUMGn00FdUiqz6epiiJr7xcFyNYj3rDcfmnzfkBnHyBQ3cBQUs4mmyGsOb7TTLb9kxk7dBcmEmqhDKkBoDyA== + +javascript-natural-sort@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz#f9e2303d4507f6d74355a73664d1440fb5a0ef59" + integrity sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw== + +jiti@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.4.2.tgz#d19b7732ebb6116b06e2038da74a55366faef560" + integrity sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsbn@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" + integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== + +jsesc@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-parse-even-better-errors@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz#d3f67bd5925e81d3e31aa466acc821c8375cec43" + integrity sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json-stringify-safe@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + +json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonc-parser@3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.3.1.tgz#f2a524b4f7fd11e3d791e559977ad60b98b798b4" + integrity sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ== + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonparse@^1.2.0, jsonparse@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== + +karma-chrome-launcher@~3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-3.2.0.tgz#eb9c95024f2d6dfbb3748d3415ac9b381906b9a9" + integrity sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q== + dependencies: + which "^1.2.1" + +karma-coverage@~2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/karma-coverage/-/karma-coverage-2.2.1.tgz#e1cc074f93ace9dc4fb7e7aeca7135879c2e358c" + integrity sha512-yj7hbequkQP2qOSb20GuNSIyE//PgJWHwC2IydLE6XRtsnaflv+/OSGNssPjobYUlhVVagy99TQpqUt3vAUG7A== + dependencies: + istanbul-lib-coverage "^3.2.0" + istanbul-lib-instrument "^5.1.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.1" + istanbul-reports "^3.0.5" + minimatch "^3.0.4" + +karma-jasmine-html-reporter@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.1.0.tgz#f951ad00b08d61d03595402c914d1a589c4930e3" + integrity sha512-sPQE1+nlsn6Hwb5t+HHwyy0A1FNCVKuL1192b+XNauMYWThz2kweiBVW1DqloRpVvZIJkIoHVB7XRpK78n1xbQ== + +karma-jasmine@~5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-5.1.0.tgz#3af4558a6502fa16856a0f346ec2193d4b884b2f" + integrity sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ== + dependencies: + jasmine-core "^4.1.0" + +karma@^6.4.2: + version "6.4.4" + resolved "https://registry.yarnpkg.com/karma/-/karma-6.4.4.tgz#dfa5a426cf5a8b53b43cd54ef0d0d09742351492" + integrity sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w== + dependencies: + "@colors/colors" "1.5.0" + body-parser "^1.19.0" + braces "^3.0.2" + chokidar "^3.5.1" + connect "^3.7.0" + di "^0.0.1" + dom-serialize "^2.2.1" + glob "^7.1.7" + graceful-fs "^4.2.6" + http-proxy "^1.18.1" + isbinaryfile "^4.0.8" + lodash "^4.17.21" + log4js "^6.4.1" + mime "^2.5.2" + minimatch "^3.0.4" + mkdirp "^0.5.5" + qjobs "^1.2.0" + range-parser "^1.2.1" + rimraf "^3.0.2" + socket.io "^4.7.2" + source-map "^0.6.1" + tmp "^0.2.1" + ua-parser-js "^0.7.30" + yargs "^16.1.1" + +keyv@^4.5.4: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +kind-of@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lightningcss-darwin-arm64@1.30.1: + version "1.30.1" + resolved "https://registry.yarnpkg.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz#3d47ce5e221b9567c703950edf2529ca4a3700ae" + integrity sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ== + +lightningcss-darwin-x64@1.30.1: + version "1.30.1" + resolved "https://registry.yarnpkg.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz#e81105d3fd6330860c15fe860f64d39cff5fbd22" + integrity sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA== + +lightningcss-freebsd-x64@1.30.1: + version "1.30.1" + resolved "https://registry.yarnpkg.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz#a0e732031083ff9d625c5db021d09eb085af8be4" + integrity sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig== + +lightningcss-linux-arm-gnueabihf@1.30.1: + version "1.30.1" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz#1f5ecca6095528ddb649f9304ba2560c72474908" + integrity sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q== + +lightningcss-linux-arm64-gnu@1.30.1: + version "1.30.1" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz#eee7799726103bffff1e88993df726f6911ec009" + integrity sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw== + +lightningcss-linux-arm64-musl@1.30.1: + version "1.30.1" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz#f2e4b53f42892feeef8f620cbb889f7c064a7dfe" + integrity sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ== + +lightningcss-linux-x64-gnu@1.30.1: + version "1.30.1" + resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz#2fc7096224bc000ebb97eea94aea248c5b0eb157" + integrity sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw== + +lightningcss-linux-x64-musl@1.30.1: + version "1.30.1" + resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz#66dca2b159fd819ea832c44895d07e5b31d75f26" + integrity sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ== + +lightningcss-win32-arm64-msvc@1.30.1: + version "1.30.1" + resolved "https://registry.yarnpkg.com/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz#7d8110a19d7c2d22bfdf2f2bb8be68e7d1b69039" + integrity sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA== + +lightningcss-win32-x64-msvc@1.30.1: + version "1.30.1" + resolved "https://registry.yarnpkg.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz#fd7dd008ea98494b85d24b4bea016793f2e0e352" + integrity sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg== + +lightningcss@1.30.1: + version "1.30.1" + resolved "https://registry.yarnpkg.com/lightningcss/-/lightningcss-1.30.1.tgz#78e979c2d595bfcb90d2a8c0eb632fe6c5bfed5d" + integrity sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg== + dependencies: + detect-libc "^2.0.3" + optionalDependencies: + lightningcss-darwin-arm64 "1.30.1" + lightningcss-darwin-x64 "1.30.1" + lightningcss-freebsd-x64 "1.30.1" + lightningcss-linux-arm-gnueabihf "1.30.1" + lightningcss-linux-arm64-gnu "1.30.1" + lightningcss-linux-arm64-musl "1.30.1" + lightningcss-linux-x64-gnu "1.30.1" + lightningcss-linux-x64-musl "1.30.1" + lightningcss-win32-arm64-msvc "1.30.1" + lightningcss-win32-x64-msvc "1.30.1" + +lilconfig@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4" + integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +lint-staged@^16.1.2: + version "16.1.2" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-16.1.2.tgz#8cb84daa844f39c7a9790dd2c0caa327125ef059" + integrity sha512-sQKw2Si2g9KUZNY3XNvRuDq4UJqpHwF0/FQzZR2M7I5MvtpWvibikCjUVJzZdGE0ByurEl3KQNvsGetd1ty1/Q== + dependencies: + chalk "^5.4.1" + commander "^14.0.0" + debug "^4.4.1" + lilconfig "^3.1.3" + listr2 "^8.3.3" + micromatch "^4.0.8" + nano-spawn "^1.0.2" + pidtree "^0.6.0" + string-argv "^0.3.2" + yaml "^2.8.0" + +listr2@8.3.3, listr2@^8.3.3: + version "8.3.3" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-8.3.3.tgz#815fc8f738260ff220981bf9e866b3e11e8121bf" + integrity sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ== + dependencies: + 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" + +lmdb@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/lmdb/-/lmdb-3.3.0.tgz#85149c8178a3fa57a9230bd1adf9fd96ceb9125f" + integrity sha512-MgJocUI6QEiSXQBFWLeyo1R7eQj8Rke5dlPxX0KFwli8/bsCxpM/KbXO5y0qmV/5llQ3wpneDWcTYxa+4vn8iQ== + 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" + optionalDependencies: + "@lmdb/lmdb-darwin-arm64" "3.3.0" + "@lmdb/lmdb-darwin-x64" "3.3.0" + "@lmdb/lmdb-linux-arm" "3.3.0" + "@lmdb/lmdb-linux-arm64" "3.3.0" + "@lmdb/lmdb-linux-x64" "3.3.0" + "@lmdb/lmdb-win32-arm64" "3.3.0" + "@lmdb/lmdb-win32-x64" "3.3.0" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.ismatch@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" + integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash@^4.17.15, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-6.0.0.tgz#bb95e5f05322651cac30c0feb6404f9f2a8a9439" + integrity sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw== + dependencies: + chalk "^5.3.0" + is-unicode-supported "^1.3.0" + +log-update@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-6.1.0.tgz#1a04ff38166f94647ae1af562f4bd6a15b1b7cd4" + integrity sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w== + 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" + +log4js@^6.4.1: + version "6.9.1" + resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.9.1.tgz#aba5a3ff4e7872ae34f8b4c533706753709e38b6" + integrity sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g== + dependencies: + date-format "^4.0.14" + debug "^4.3.4" + flatted "^3.2.7" + rfdc "^1.3.0" + streamroller "^3.1.5" + +lru-cache@^10.0.1, lru-cache@^10.2.0: + version "10.4.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +magic-string@0.30.17, magic-string@^0.30.17: + version "0.30.17" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453" + integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.0" + +make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + dependencies: + semver "^7.5.3" + +make-fetch-happen@^14.0.0, make-fetch-happen@^14.0.1, make-fetch-happen@^14.0.2, make-fetch-happen@^14.0.3: + version "14.0.3" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-14.0.3.tgz#d74c3ecb0028f08ab604011e0bc6baed483fcdcd" + integrity sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ== + 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" + +map-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== + +map-obj@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" + integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== + +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + +mathjs@^14.5.2: + version "14.5.2" + resolved "https://registry.yarnpkg.com/mathjs/-/mathjs-14.5.2.tgz#0f0aa8e7f11791aa3e26feff8d431b5d70c758e6" + integrity sha512-51U6hp7j4M4Rj+l+q2KbmXAV9EhQVQzUdw1wE67RnUkKKq5ibxdrl9Ky2YkSUEIc2+VU8/IsThZNu6QSHUoyTA== + dependencies: + "@babel/runtime" "^7.26.10" + complex.js "^2.2.5" + decimal.js "^10.4.3" + escape-latex "^1.2.0" + fraction.js "^5.2.1" + javascript-natural-sort "^0.7.1" + seedrandom "^3.0.5" + tiny-emitter "^2.1.0" + typed-function "^4.2.1" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +meow@^8.0.0: + version "8.1.2" + resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" + integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.18.0" + yargs-parser "^20.2.3" + +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.5, micromatch@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@^2.5.2: + version "2.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + +mimic-function@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/mimic-function/-/mimic-function-5.0.1.tgz#acbe2b3349f99b9deaca7fb70e48b83e94e67076" + integrity sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA== + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + +minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^9.0.0, minimatch@^9.0.4, minimatch@^9.0.5: + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + +minimist-options@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" + integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + kind-of "^6.0.3" + +minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minipass-collect@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-2.0.1.tgz#1621bc77e12258a12c60d34e2276ec5c20680863" + integrity sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw== + dependencies: + minipass "^7.0.3" + +minipass-fetch@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-4.0.1.tgz#f2d717d5a418ad0b1a7274f9b913515d3e78f9e5" + integrity sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ== + dependencies: + minipass "^7.0.3" + minipass-sized "^1.0.3" + minizlib "^3.0.1" + optionalDependencies: + encoding "^0.1.13" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0: + version "3.3.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3, minipass@^7.0.4, minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + +minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +minizlib@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-3.0.2.tgz#f33d638eb279f664439aa38dc5f91607468cb574" + integrity sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA== + dependencies: + minipass "^7.1.2" + +mkdirp@^0.5.5: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mkdirp@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mkdirp@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50" + integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== + +modify-values@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" + integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== + +moment@^2.30.1: + version "2.30.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" + integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== + +mrmime@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-2.0.1.tgz#bc3e87f7987853a54c9850eeb1f1078cd44adddc" + integrity sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@^2.1.1, ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +msgpackr-extract@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/msgpackr-extract/-/msgpackr-extract-3.0.3.tgz#e9d87023de39ce714872f9e9504e3c1996d61012" + integrity sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA== + dependencies: + node-gyp-build-optional-packages "5.2.2" + 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" + +msgpackr@^1.11.2: + version "1.11.4" + resolved "https://registry.yarnpkg.com/msgpackr/-/msgpackr-1.11.4.tgz#14703caead8ee0c2e7c89417de5a3ec94adf5d3e" + integrity sha512-uaff7RG9VIC4jacFW9xzL3jc0iM32DNHe4jYVycBcjUePT/Klnfj7pqtWJt9khvDFizmjN2TlYniYmSS2LIaZg== + optionalDependencies: + msgpackr-extract "^3.0.2" + +mute-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" + integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== + +mute-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-2.0.0.tgz#a5446fc0c512b71c83c44d908d5c7b7b4c493b2b" + integrity sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA== + +nano-spawn@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nano-spawn/-/nano-spawn-1.0.2.tgz#9853795681f0e96ef6f39104c2e4347b6ba79bf6" + integrity sha512-21t+ozMQDAL/UGgQVBbZ/xXvNO10++ZPuTmKRO8k9V3AClVRht49ahtDjfY8l1q6nSHOrE5ASfthzH3ol6R/hg== + +nanoid@^3.3.11: + version "3.3.11" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" + integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +natural-orderby@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/natural-orderby/-/natural-orderby-5.0.0.tgz#bb655f669ee9c84e82cdc6cddbba25eb263cd9f4" + integrity sha512-kKHJhxwpR/Okycz4HhQKKlhWe4ASEfPgkSWNmKFHd7+ezuQlxkA5cM3+XkBPvm1gmHen3w53qsYAv+8GwRrBlg== + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +negotiator@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-1.0.0.tgz#b6c91bb47172d69f93cfd7c357bbb529019b5f6a" + integrity sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +node-addon-api@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-6.1.0.tgz#ac8470034e58e67d0c6f1204a18ae6995d9c0d76" + integrity sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA== + +node-addon-api@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.1.tgz#1aba6693b0f255258a049d621329329322aad558" + integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ== + +node-gyp-build-optional-packages@5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz#522f50c2d53134d7f3a76cd7255de4ab6c96a3a4" + integrity sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw== + dependencies: + detect-libc "^2.0.1" + +node-gyp@^11.0.0: + version "11.2.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-11.2.0.tgz#fe2ee7f0511424d6ad70f7a0c88d7346f2fc6a6e" + integrity sha512-T0S1zqskVUSxcsSTkAsLc7xCycrRYmtDHadDinzocrThjyQCn5kMlEBSj6H4qDbgsIOSLmmlRIeb0lZXj+UArA== + 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" + +node-releases@^2.0.19: + version "2.0.19" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" + integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== + +nopt@^8.0.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-8.1.0.tgz#b11d38caf0f8643ce885818518064127f602eae3" + integrity sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A== + dependencies: + abbrev "^3.0.0" + +normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-package-data@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" + integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== + dependencies: + hosted-git-info "^4.0.1" + is-core-module "^2.5.0" + semver "^7.3.4" + validate-npm-package-license "^3.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== + +npm-bundled@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-4.0.0.tgz#f5b983f053fe7c61566cf07241fab2d4e9d513d3" + integrity sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA== + dependencies: + npm-normalize-package-bin "^4.0.0" + +npm-install-checks@^7.1.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-7.1.1.tgz#e9d679fc8a1944c75cdcc96478a22f9d0f763632" + integrity sha512-u6DCwbow5ynAX5BdiHQ9qvexme4U3qHW3MWe5NqH+NeBm0LbiH6zvGjNNew1fY+AZZUtVHbOPF3j7mJxbUzpXg== + dependencies: + semver "^7.1.1" + +npm-normalize-package-bin@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz#df79e70cd0a113b77c02d1fe243c96b8e618acb1" + integrity sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w== + +npm-package-arg@12.0.2, npm-package-arg@^12.0.0: + version "12.0.2" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-12.0.2.tgz#3b1e04ebe651cc45028e298664e8c15ce9c0ca40" + integrity sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA== + dependencies: + hosted-git-info "^8.0.0" + proc-log "^5.0.0" + semver "^7.3.5" + validate-npm-package-name "^6.0.0" + +npm-packlist@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-10.0.0.tgz#35634f0a90f84a811ebdf565eb78d2b36252888c" + integrity sha512-rht9U6nS8WOBDc53eipZNPo5qkAV4X2rhKE2Oj1DYUQ3DieXfj0mKkVmjnf3iuNdtMd8WfLdi2L6ASkD/8a+Kg== + dependencies: + ignore-walk "^7.0.0" + +npm-pick-manifest@10.0.0, npm-pick-manifest@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-10.0.0.tgz#6cc120c6473ceea56dfead500f00735b2b892851" + integrity sha512-r4fFa4FqYY8xaM7fHecQ9Z2nE9hgNfJR+EmoKv0+chvzWkBcORX3r0FpTByP+CbOVJDladMXnPQGVN8PBLGuTQ== + dependencies: + npm-install-checks "^7.1.0" + npm-normalize-package-bin "^4.0.0" + npm-package-arg "^12.0.0" + semver "^7.3.5" + +npm-registry-fetch@^18.0.0: + version "18.0.2" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-18.0.2.tgz#340432f56b5a8b1af068df91aae0435d2de646b5" + integrity sha512-LeVMZBBVy+oQb5R6FDV9OlJCcWDU+al10oKpe+nsvcHnG24Z3uM3SvJYKfGJlfGjVU8v9liejCrUR/M5HO5NEQ== + 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" + +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +object-assign@^4: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.13.3, object-inspect@^1.13.4: + version "1.13.4" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.7: + version "4.1.7" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" + integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + has-symbols "^1.1.0" + object-keys "^1.1.1" + +object.fromentries@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + +object.groupby@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" + integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + +object.values@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.1.tgz#deed520a50809ff7f75a7cfd4bc64c7a038c6216" + integrity sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== + dependencies: + ee-first "1.1.1" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-7.0.0.tgz#9f16c92d8c9ef5120e3acd9dd9957cceecc1ab60" + integrity sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ== + dependencies: + mimic-function "^5.0.0" + +optionator@^0.9.3: + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== + 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" + +ora@8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-8.2.0.tgz#8fbbb7151afe33b540dd153f171ffa8bd38e9861" + integrity sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw== + 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" + +ordered-binary@^1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/ordered-binary/-/ordered-binary-1.5.3.tgz#8bee2aa7a82c3439caeb1e80c272fd4cf51170fb" + integrity sha512-oGFr3T+pYdTGJ+YFEILMpS3es+GiIbs9h/XQrclBXUtd44ey7XwfsMzM31f64I1SQOawDoDr/D823kNCADI8TA== + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +own-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" + integrity sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg== + dependencies: + get-intrinsic "^1.2.6" + object-keys "^1.1.1" + safe-push-apply "^1.0.0" + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-7.0.3.tgz#7ac210a2d36f81ec28b736134810f7ba4418cdb6" + integrity sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA== + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +package-json-from-dist@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== + +pacote@21.0.0: + version "21.0.0" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-21.0.0.tgz#5fe3878a9f808ca5c455c4c1d8ca46eb13351f7b" + integrity sha512-lcqexq73AMv6QNLo7SOpz0JJoaGdS3rBFgF122NZVl1bApo2mfu+XzUBU/X/XsiJu+iUmKpekRayqQYAs+PhkA== + 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" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + 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" + +parse5-html-rewriting-stream@7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.1.0.tgz#ac64eb98ed3681b8b1e514ef22284557a66f2ad9" + integrity sha512-2ifK6Jb+ONoqOy5f+cYHsqvx1obHQdvIk13Jmt/5ezxP0U9p+fqd+R6O73KblGswyuzBYfetmsfK9ThMgnuPPg== + dependencies: + entities "^6.0.0" + parse5 "^7.0.0" + parse5-sax-parser "^7.0.0" + +parse5-sax-parser@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz#4c05064254f0488676aca75fb39ca069ec96dee5" + integrity sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg== + dependencies: + parse5 "^7.0.0" + +parse5@^7.0.0, parse5@^7.1.2: + version "7.3.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.3.0.tgz#d7e224fa72399c7a175099f45fc2ad024b05ec05" + integrity sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw== + dependencies: + entities "^6.0.0" + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-scurry@^1.11.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== + dependencies: + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +picomatch@4.0.2, picomatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" + integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pidtree@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" + integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== + +pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== + +piscina@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/piscina/-/piscina-5.0.0.tgz#9a4f11e4b4ff137ea6b90a66c3ceb7755b2be56f" + integrity sha512-R+arufwL7sZvGjAhSMK3TfH55YdGOqhpKXkcwQJr432AAnJX/xxX19PA4QisrmJ+BTTfZVggaz6HexbkQq1l1Q== + optionalDependencies: + "@napi-rs/nice" "^1.0.1" + +possible-typed-array-names@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" + integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== + +postcss-media-query-parser@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" + integrity sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig== + +postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss@^8.4.41, postcss@^8.4.49, postcss@^8.5.3, postcss@^8.5.6: + version "8.5.6" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c" + integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== + dependencies: + nanoid "^3.3.11" + picocolors "^1.1.1" + source-map-js "^1.2.1" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier@^3.2.5: + version "3.6.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.6.1.tgz#cc3bce21c09a477b1e987b76ce9663925d86ae44" + integrity sha512-5xGWRa90Sp2+x1dQtNpIpeOQpTDBs9cZDmA/qs2vDNN2i18PdapqY7CmBeyLlMuGqXJRIOPaCaVZTLNQRWUH/A== + +proc-log@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-5.0.0.tgz#e6c93cf37aef33f835c53485f314f50ea906a9d8" + integrity sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== + +punycode@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +q@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== + +qjobs@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" + integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== + +qs@6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" + integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== + dependencies: + side-channel "^1.0.6" + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +quick-lru@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" + integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== + +range-parser@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw== + dependencies: + find-up "^2.0.0" + read-pkg "^3.0.0" + +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@~2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readdirp@^4.0.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.2.tgz#eb85801435fbf2a7ee58f19e0921b068fc69948d" + integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg== + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + +reflect-metadata@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.2.2.tgz#400c845b6cba87a21f2c65c4aeb158f4fa4d9c5b" + integrity sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q== + +reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9" + integrity sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.9" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.7" + get-proto "^1.0.1" + which-builtin-type "^1.2.1" + +regexp.prototype.flags@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" + integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-errors "^1.3.0" + get-proto "^1.0.1" + gopd "^1.2.0" + set-function-name "^2.0.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve@1.22.10, resolve@^1.10.0, resolve@^1.22.4: + version "1.22.10" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" + integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== + dependencies: + is-core-module "^2.16.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +restore-cursor@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-5.1.0.tgz#0766d95699efacb14150993f55baf0953ea1ebe7" + integrity sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA== + dependencies: + onetime "^7.0.0" + signal-exit "^4.1.0" + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +reusify@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" + integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== + +rfdc@^1.3.0, rfdc@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" + integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rollup@4.40.2: + version "4.40.2" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.40.2.tgz#778e88b7a197542682b3e318581f7697f55f0619" + integrity sha512-tfUOg6DTP4rhQ3VjOO6B4wyrJnGOX85requAXvqYTHsOgb2TFJdZ3aWpT8W2kPoypSGP7dZUyzxJ9ee4buM5Fg== + dependencies: + "@types/estree" "1.0.7" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.40.2" + "@rollup/rollup-android-arm64" "4.40.2" + "@rollup/rollup-darwin-arm64" "4.40.2" + "@rollup/rollup-darwin-x64" "4.40.2" + "@rollup/rollup-freebsd-arm64" "4.40.2" + "@rollup/rollup-freebsd-x64" "4.40.2" + "@rollup/rollup-linux-arm-gnueabihf" "4.40.2" + "@rollup/rollup-linux-arm-musleabihf" "4.40.2" + "@rollup/rollup-linux-arm64-gnu" "4.40.2" + "@rollup/rollup-linux-arm64-musl" "4.40.2" + "@rollup/rollup-linux-loongarch64-gnu" "4.40.2" + "@rollup/rollup-linux-powerpc64le-gnu" "4.40.2" + "@rollup/rollup-linux-riscv64-gnu" "4.40.2" + "@rollup/rollup-linux-riscv64-musl" "4.40.2" + "@rollup/rollup-linux-s390x-gnu" "4.40.2" + "@rollup/rollup-linux-x64-gnu" "4.40.2" + "@rollup/rollup-linux-x64-musl" "4.40.2" + "@rollup/rollup-win32-arm64-msvc" "4.40.2" + "@rollup/rollup-win32-ia32-msvc" "4.40.2" + "@rollup/rollup-win32-x64-msvc" "4.40.2" + fsevents "~2.3.2" + +rollup@^4.34.9: + version "4.44.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.44.0.tgz#0e10b98339b306edad1e612f1e5590a79aef521c" + integrity sha512-qHcdEzLCiktQIfwBq420pn2dP+30uzqYxv9ETm91wdt2R9AFcWfjNAmje4NWlnCIQ5RMTzVf0ZyisOKqHR6RwA== + dependencies: + "@types/estree" "1.0.8" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.44.0" + "@rollup/rollup-android-arm64" "4.44.0" + "@rollup/rollup-darwin-arm64" "4.44.0" + "@rollup/rollup-darwin-x64" "4.44.0" + "@rollup/rollup-freebsd-arm64" "4.44.0" + "@rollup/rollup-freebsd-x64" "4.44.0" + "@rollup/rollup-linux-arm-gnueabihf" "4.44.0" + "@rollup/rollup-linux-arm-musleabihf" "4.44.0" + "@rollup/rollup-linux-arm64-gnu" "4.44.0" + "@rollup/rollup-linux-arm64-musl" "4.44.0" + "@rollup/rollup-linux-loongarch64-gnu" "4.44.0" + "@rollup/rollup-linux-powerpc64le-gnu" "4.44.0" + "@rollup/rollup-linux-riscv64-gnu" "4.44.0" + "@rollup/rollup-linux-riscv64-musl" "4.44.0" + "@rollup/rollup-linux-s390x-gnu" "4.44.0" + "@rollup/rollup-linux-x64-gnu" "4.44.0" + "@rollup/rollup-linux-x64-musl" "4.44.0" + "@rollup/rollup-win32-arm64-msvc" "4.44.0" + "@rollup/rollup-win32-ia32-msvc" "4.44.0" + "@rollup/rollup-win32-x64-msvc" "4.44.0" + fsevents "~2.3.2" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rxjs@7.8.2, rxjs@~7.8.0: + version "7.8.2" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.2.tgz#955bc473ed8af11a002a2be52071bf475638607b" + integrity sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA== + dependencies: + tslib "^2.1.0" + +safe-array-concat@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.3.tgz#c9e54ec4f603b0bbb8e7e5007a5ee7aecd1538c3" + integrity sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + has-symbols "^1.1.0" + isarray "^2.0.5" + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-push-apply@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-push-apply/-/safe-push-apply-1.0.0.tgz#01850e981c1602d398c85081f360e4e6d03d27f5" + integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== + dependencies: + es-errors "^1.3.0" + isarray "^2.0.5" + +safe-regex-test@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" + integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-regex "^1.2.1" + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sass@1.88.0: + version "1.88.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.88.0.tgz#cd1495749bebd9e4aca86e93ee60b3904a107789" + integrity sha512-sF6TWQqjFvr4JILXzG4ucGOLELkESHL+I5QJhh7CNaE+Yge0SI+ehCatsXhJ7ymU1hAFcIS3/PBpjdIbXoyVbg== + dependencies: + chokidar "^4.0.0" + immutable "^5.0.2" + source-map-js ">=0.6.2 <2.0.0" + optionalDependencies: + "@parcel/watcher" "^2.4.1" + +seedrandom@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.5.tgz#54edc85c95222525b0c7a6f6b3543d8e0b3aa0a7" + integrity sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg== + +"semver@2 || 3 || 4 || 5": + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +semver@7.7.2, semver@^7.0.0, semver@^7.1.1, semver@^7.3.4, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0: + version "7.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" + integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== + +semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +set-function-length@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +set-function-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" + +set-proto@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/set-proto/-/set-proto-1.0.0.tgz#0760dbcff30b2d7e801fd6e19983e56da337565e" + integrity sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw== + dependencies: + dunder-proto "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + 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" + +side-channel@^1.0.6, side-channel@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + 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" + +signal-exit@^4.0.1, signal-exit@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +sigstore@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-3.1.0.tgz#08dc6c0c425263e9fdab85ffdb6477550e2c511d" + integrity sha512-ZpzWAFHIFqyFE56dXqgX/DkDRZdz+rRcjoIk/RQU4IX0wiCv1l8S7ZrXDHcCc+uaf+6o7w3h2l3g6GYG5TKN9Q== + 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" + +slice-ansi@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" + integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== + dependencies: + ansi-styles "^6.0.0" + is-fullwidth-code-point "^4.0.0" + +slice-ansi@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-7.1.0.tgz#cd6b4655e298a8d1bdeb04250a433094b347b9a9" + integrity sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg== + dependencies: + ansi-styles "^6.2.1" + is-fullwidth-code-point "^5.0.0" + +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +socket.io-adapter@~2.5.2: + version "2.5.5" + resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz#c7a1f9c703d7756844751b6ff9abfc1780664082" + integrity sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg== + dependencies: + debug "~4.3.4" + ws "~8.17.1" + +socket.io-parser@~4.2.4: + version "4.2.4" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.4.tgz#c806966cf7270601e47469ddeec30fbdfda44c83" + integrity sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew== + dependencies: + "@socket.io/component-emitter" "~3.1.0" + debug "~4.3.1" + +socket.io@^4.7.2: + version "4.8.1" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.8.1.tgz#fa0eaff965cc97fdf4245e8d4794618459f7558a" + integrity sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg== + dependencies: + accepts "~1.3.4" + base64id "~2.0.0" + cors "~2.8.5" + debug "~4.3.2" + engine.io "~6.6.0" + socket.io-adapter "~2.5.2" + socket.io-parser "~4.2.4" + +socks-proxy-agent@^8.0.3: + version "8.0.5" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz#b9cdb4e7e998509d7659d689ce7697ac21645bee" + integrity sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw== + dependencies: + agent-base "^7.1.2" + debug "^4.3.4" + socks "^2.8.3" + +socks@^2.8.3: + version "2.8.5" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.5.tgz#bfe18f5ead1efc93f5ec90c79fa8bdccbcee2e64" + integrity sha512-iF+tNDQla22geJdTyJB1wM/qrX9DMRwWrciEPwWLPRWAUEM8sQiyxgckLxWT1f7+9VabJS0jTGGr4QgBuvi6Ww== + dependencies: + ip-address "^9.0.5" + smart-buffer "^4.2.0" + +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== + +source-map-support@0.5.21: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== + +source-map@^0.6.0, source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +spdx-correct@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" + integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.21" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz#6d6e980c9df2b6fc905343a3b2d702a6239536c3" + integrity sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg== + +split2@^3.0.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" + integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== + dependencies: + readable-stream "^3.0.0" + +split@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== + dependencies: + through "2" + +sprintf-js@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" + integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== + +ssri@^12.0.0: + version "12.0.0" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-12.0.0.tgz#bcb4258417c702472f8191981d3c8a771fee6832" + integrity sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ== + dependencies: + minipass "^7.0.3" + +standard-version@^9.5.0: + version "9.5.0" + resolved "https://registry.yarnpkg.com/standard-version/-/standard-version-9.5.0.tgz#851d6dcddf5320d5079601832aeb185dbf497949" + integrity sha512-3zWJ/mmZQsOaO+fOlsa0+QK90pwhNd042qEcw6hKFNoLFs7peGyvPffpEBbK/DSGPbyOvli0mUIFv5A4qTjh2Q== + dependencies: + chalk "^2.4.2" + conventional-changelog "3.1.25" + conventional-changelog-config-spec "2.1.0" + conventional-changelog-conventionalcommits "4.6.3" + conventional-recommended-bump "6.1.0" + detect-indent "^6.0.0" + detect-newline "^3.1.0" + dotgitignore "^2.1.0" + figures "^3.1.0" + find-up "^5.0.0" + git-semver-tags "^4.0.0" + semver "^7.1.1" + stringify-package "^1.0.1" + yargs "^16.0.0" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + +stdin-discarder@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/stdin-discarder/-/stdin-discarder-0.2.2.tgz#390037f44c4ae1a1ae535c5fe38dc3aba8d997be" + integrity sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ== + +stop-iteration-iterator@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz#f481ff70a548f6124d0312c3aa14cbfa7aa542ad" + integrity sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ== + dependencies: + es-errors "^1.3.0" + internal-slot "^1.1.0" + +streamroller@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-3.1.5.tgz#1263182329a45def1ffaef58d31b15d13d2ee7ff" + integrity sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw== + dependencies: + date-format "^4.0.14" + debug "^4.3.4" + fs-extra "^8.1.0" + +string-argv@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" + integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== + +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string-width@^7.0.0, string-width@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-7.2.0.tgz#b5bb8e2165ce275d4d43476dd2700ad9091db6dc" + integrity sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ== + dependencies: + emoji-regex "^10.3.0" + get-east-asian-width "^1.0.0" + strip-ansi "^7.1.0" + +string.prototype.trim@^1.2.10: + version "1.2.10" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81" + integrity sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + define-data-property "^1.1.4" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-object-atoms "^1.0.0" + has-property-descriptors "^1.0.2" + +string.prototype.trimend@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz#62e2731272cd285041b36596054e9f66569b6942" + integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +stringify-package@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stringify-package/-/stringify-package-1.0.1.tgz#e5aa3643e7f74d0f28628b72f3dad5cecfc3ba85" + integrity sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg== + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1, strip-ansi@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +strip-json-comments@3.1.1, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +tailwindcss@4.1.10, tailwindcss@^4.1.10: + version "4.1.10" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-4.1.10.tgz#515741b0a79316d1971d182f7fbc435b68679373" + integrity sha512-P3nr6WkvKV/ONsTzj6Gb57sWPMX29EPNPopo7+FcpkQaNsrNpZ1pv8QmrYI2RqEKD7mlGqLnGovlcYnBK0IqUA== + +tapable@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.2.tgz#ab4984340d30cb9989a490032f086dbb8b56d872" + integrity sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg== + +tar@^6.1.11: + version "6.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" + integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== + 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" + +tar@^7.4.3: + version "7.4.3" + resolved "https://registry.yarnpkg.com/tar/-/tar-7.4.3.tgz#88bbe9286a3fcd900e94592cda7a22b192e80571" + integrity sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw== + dependencies: + "@isaacs/fs-minipass" "^4.0.0" + chownr "^3.0.0" + minipass "^7.1.2" + minizlib "^3.0.1" + mkdirp "^3.0.1" + yallist "^5.0.0" + +text-extensions@^1.0.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" + integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through2@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" + integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== + dependencies: + readable-stream "3" + +through@2, "through@>=2.2.7 <3": + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +tiny-emitter@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" + integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== + +tinyglobby@0.2.13: + version "0.2.13" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.13.tgz#a0e46515ce6cbcd65331537e57484af5a7b2ff7e" + integrity sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw== + dependencies: + fdir "^6.4.4" + picomatch "^4.0.2" + +tinyglobby@^0.2.12, tinyglobby@^0.2.13: + version "0.2.14" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.14.tgz#5280b0cf3f972b050e74ae88406c0a6a58f4079d" + integrity sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ== + dependencies: + fdir "^6.4.4" + picomatch "^4.0.2" + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmp@^0.2.1: + version "0.2.3" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" + integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +trim-newlines@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" + integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== + +ts-api-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.1.0.tgz#595f7094e46eed364c13fd23e75f9513d29baf91" + integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ== + +tsconfig-paths@^3.15.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^2.0.0, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0, tslib@^2.6.0, tslib@^2.8.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + +tuf-js@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-3.0.1.tgz#e3f07ed3d8e87afaa70607bd1ef801d5c1f57177" + integrity sha512-+68OP1ZzSF84rTckf3FA95vJ1Zlx/uaXyiiKyPd1pA4rZNkpEvDAKmsu1xUSmbF/chCRYgZ6UZkDwC7PmzmAyA== + dependencies: + "@tufjs/models" "3.0.1" + debug "^4.3.6" + make-fetch-happen "^14.0.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.18.0: + version "0.18.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" + integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typed-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" + integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-typed-array "^1.1.14" + +typed-array-byte-length@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce" + integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== + dependencies: + call-bind "^1.0.8" + for-each "^0.3.3" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.14" + +typed-array-byte-offset@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz#ae3698b8ec91a8ab945016108aef00d5bff12355" + integrity sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + for-each "^0.3.3" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.15" + reflect.getprototypeof "^1.0.9" + +typed-array-length@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d" + integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + reflect.getprototypeof "^1.0.6" + +typed-function@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/typed-function/-/typed-function-4.2.1.tgz#19aa51847aa2dea9ef5e7fb7641c060179a74426" + integrity sha512-EGjWssW7Tsk4DGfE+5yluuljS1OGYWiI1J6e8puZz9nTMM51Oug8CD5Zo4gWMsOhq5BI+1bF+rWTm4Vbj3ivRA== + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== + +typescript-eslint@^8.33.1: + version "8.35.0" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.35.0.tgz#65afcdde973614b8f44fa89293919420ca9b904e" + integrity sha512-uEnz70b7kBz6eg/j0Czy6K5NivaYopgxRjsnAJ2Fx5oTLo3wefTHIbL7AkQr1+7tJCRVpTs/wiM8JR/11Loq9A== + dependencies: + "@typescript-eslint/eslint-plugin" "8.35.0" + "@typescript-eslint/parser" "8.35.0" + "@typescript-eslint/utils" "8.35.0" + +typescript@~5.8.3: + version "5.8.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.3.tgz#92f8a3e5e3cf497356f4178c34cd65a7f5e8440e" + integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== + +ua-parser-js@^0.7.30: + version "0.7.40" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.40.tgz#c87d83b7bb25822ecfa6397a0da5903934ea1562" + integrity sha512-us1E3K+3jJppDBa3Tl0L3MOJiGhe1C6P0+nIvQAFYbxlMAx0h81eOwLmU57xgqToduDDPx3y5QsdjPfDu+FgOQ== + +uglify-js@^3.1.4: + version "3.19.3" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.19.3.tgz#82315e9bbc6f2b25888858acd1fff8441035b77f" + integrity sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ== + +unbox-primitive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" + integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== + dependencies: + call-bound "^1.0.3" + has-bigints "^1.0.2" + has-symbols "^1.1.0" + which-boxed-primitive "^1.1.1" + +undici-types@~7.8.0: + version "7.8.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.8.0.tgz#de00b85b710c54122e44fbfd911f8d70174cd294" + integrity sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw== + +unique-filename@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-4.0.0.tgz#a06534d370e7c977a939cd1d11f7f0ab8f1fed13" + integrity sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ== + dependencies: + unique-slug "^5.0.0" + +unique-slug@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-5.0.0.tgz#ca72af03ad0dbab4dad8aa683f633878b1accda8" + integrity sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg== + dependencies: + imurmurhash "^0.1.4" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +update-browserslist-db@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" + integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.1" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +validate-npm-package-name@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-6.0.1.tgz#7b928e5fe23996045a6de5b5a22eedb3611264dd" + integrity sha512-OaI//3H0J7ZkR1OqlhGA8cA+Cbk/2xFOQpJOt5+s27/ta9eZwpeervh4Mxh4w0im/kdgktowaqVNR7QOrUd7Yg== + +vary@^1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +vite@6.3.5: + version "6.3.5" + resolved "https://registry.yarnpkg.com/vite/-/vite-6.3.5.tgz#fec73879013c9c0128c8d284504c6d19410d12a3" + integrity sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ== + dependencies: + esbuild "^0.25.0" + fdir "^6.4.4" + picomatch "^4.0.2" + postcss "^8.5.3" + rollup "^4.34.9" + tinyglobby "^0.2.13" + optionalDependencies: + fsevents "~2.3.3" + +void-elements@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" + integrity sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung== + +watchpack@2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.2.tgz#2feeaed67412e7c33184e5a79ca738fbd38564da" + integrity sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +weak-lru-cache@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz#fdbb6741f36bae9540d12f480ce8254060dccd19" + integrity sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw== + +which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" + integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== + dependencies: + is-bigint "^1.1.0" + is-boolean-object "^1.2.1" + is-number-object "^1.1.1" + is-string "^1.1.1" + is-symbol "^1.1.1" + +which-builtin-type@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" + integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== + dependencies: + call-bound "^1.0.2" + function.prototype.name "^1.1.6" + has-tostringtag "^1.0.2" + is-async-function "^2.0.0" + is-date-object "^1.1.0" + is-finalizationregistry "^1.1.0" + is-generator-function "^1.0.10" + is-regex "^1.2.1" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.1.0" + which-collection "^1.0.2" + which-typed-array "^1.1.16" + +which-collection@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== + dependencies: + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" + +which-typed-array@^1.1.16, which-typed-array@^1.1.19: + version "1.1.19" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.19.tgz#df03842e870b6b88e117524a4b364b6fc689f956" + integrity sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + for-each "^0.3.5" + get-proto "^1.0.1" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + +which@^1.2.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +which@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/which/-/which-5.0.0.tgz#d93f2d93f79834d4363c7d0c23e00d07c466c8d6" + integrity sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ== + dependencies: + isexe "^3.1.1" + +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrap-ansi@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-9.0.0.tgz#1a3dc8b70d85eeb8398ddfb1e4a02cd186e58b3e" + integrity sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q== + dependencies: + ansi-styles "^6.2.1" + string-width "^7.0.0" + strip-ansi "^7.1.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +ws@~8.17.1: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" + integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== + +xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yallist@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-5.0.0.tgz#00e2de443639ed0d78fd87de0d27469fbcffb533" + integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw== + +yaml@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.0.tgz#15f8c9866211bdc2d3781a0890e44d4fa1a5fff6" + integrity sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ== + +yargs-parser@^20.2.2, yargs-parser@^20.2.3: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs-parser@^22.0.0: + version "22.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-22.0.0.tgz#87b82094051b0567717346ecd00fd14804b357c8" + integrity sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw== + +yargs@17.7.2: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + 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" + +yargs@^16.0.0, yargs@^16.1.1, yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^18.0.0: + version "18.0.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-18.0.0.tgz#6c84259806273a746b09f579087b68a3c2d25bd1" + integrity sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg== + 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" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +yoctocolors-cjs@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz#f4b905a840a37506813a7acaa28febe97767a242" + integrity sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA== diff --git a/version_bump.sh b/version_bump.sh index 77951449..7f7b55df 100755 --- a/version_bump.sh +++ b/version_bump.sh @@ -20,8 +20,4 @@ then else echo "No version bump" fi -git push -git tag --delete latest -git tag latest -git push --delete origin latest git push --tags