From 900b36ed71aa684e8ab9d0a36316646d1c95fc5b Mon Sep 17 00:00:00 2001 From: sdairs Date: Sun, 4 Oct 2026 18:30:03 +0100 Subject: [PATCH] Add Angular asset audit workbench backed by managed Postgres --- .github/workflows/asset-audit.yml | 32 + applications/asset-audit/.env.example | 12 + applications/asset-audit/.gitignore | 9 + applications/asset-audit/README.md | 234 + applications/asset-audit/api/ace.js | 2 + applications/asset-audit/api/adonisrc.ts | 12 + .../app/controllers/stocktakes_controller.ts | 38 + .../middleware/local_operator_middleware.ts | 19 + .../asset-audit/api/app/models/stocktake.ts | 10 + .../api/app/services/count_sheets.ts | 54 + .../api/app/validators/count_sheet.ts | 11 + applications/asset-audit/api/bin/console.ts | 7 + applications/asset-audit/api/bin/server.ts | 9 + .../asset-audit/api/commands/db_probe.ts | 28 + applications/asset-audit/api/config/app.ts | 5 + .../asset-audit/api/config/bodyparser.ts | 5 + .../asset-audit/api/config/database.ts | 25 + .../asset-audit/api/config/encryption.ts | 6 + applications/asset-audit/api/config/logger.ts | 3 + applications/asset-audit/api/config/static.ts | 2 + .../database/migrations/001_asset_audit.ts | 59 + .../asset-audit/api/database/seeders/main.ts | 28 + .../asset-audit/api/package-lock.json | 4103 +++++++++ applications/asset-audit/api/package.json | 36 + applications/asset-audit/api/start/env.ts | 12 + applications/asset-audit/api/start/kernel.ts | 4 + applications/asset-audit/api/start/routes.ts | 8 + applications/asset-audit/api/tsconfig.json | 7 + .../asset-audit/assets/stocktake-draft.png | Bin 0 -> 112378 bytes applications/asset-audit/package-lock.json | 64 + applications/asset-audit/package.json | 19 + applications/asset-audit/scripts/copy-ui.mjs | 3 + applications/asset-audit/sql/bootstrap.sql | 13 + applications/asset-audit/sql/grants.sql | 6 + applications/asset-audit/tests/README.md | 7 + applications/asset-audit/tests/browser.mjs | 86 + applications/asset-audit/tests/helpers.mjs | 52 + .../asset-audit/tests/integration.mjs | 75 + applications/asset-audit/ui/angular.json | 44 + applications/asset-audit/ui/package-lock.json | 8000 +++++++++++++++++ applications/asset-audit/ui/package.json | 31 + applications/asset-audit/ui/proxy.conf.json | 7 + applications/asset-audit/ui/src/app.html | 60 + applications/asset-audit/ui/src/app.ts | 137 + applications/asset-audit/ui/src/dto.ts | 7 + applications/asset-audit/ui/src/index.html | 2 + applications/asset-audit/ui/src/main.ts | 8 + applications/asset-audit/ui/src/styles.css | 28 + applications/asset-audit/ui/tsconfig.json | 21 + 49 files changed, 13450 insertions(+) create mode 100644 .github/workflows/asset-audit.yml create mode 100644 applications/asset-audit/.env.example create mode 100644 applications/asset-audit/.gitignore create mode 100644 applications/asset-audit/README.md create mode 100644 applications/asset-audit/api/ace.js create mode 100644 applications/asset-audit/api/adonisrc.ts create mode 100644 applications/asset-audit/api/app/controllers/stocktakes_controller.ts create mode 100644 applications/asset-audit/api/app/middleware/local_operator_middleware.ts create mode 100644 applications/asset-audit/api/app/models/stocktake.ts create mode 100644 applications/asset-audit/api/app/services/count_sheets.ts create mode 100644 applications/asset-audit/api/app/validators/count_sheet.ts create mode 100644 applications/asset-audit/api/bin/console.ts create mode 100644 applications/asset-audit/api/bin/server.ts create mode 100644 applications/asset-audit/api/commands/db_probe.ts create mode 100644 applications/asset-audit/api/config/app.ts create mode 100644 applications/asset-audit/api/config/bodyparser.ts create mode 100644 applications/asset-audit/api/config/database.ts create mode 100644 applications/asset-audit/api/config/encryption.ts create mode 100644 applications/asset-audit/api/config/logger.ts create mode 100644 applications/asset-audit/api/config/static.ts create mode 100644 applications/asset-audit/api/database/migrations/001_asset_audit.ts create mode 100644 applications/asset-audit/api/database/seeders/main.ts create mode 100644 applications/asset-audit/api/package-lock.json create mode 100644 applications/asset-audit/api/package.json create mode 100644 applications/asset-audit/api/start/env.ts create mode 100644 applications/asset-audit/api/start/kernel.ts create mode 100644 applications/asset-audit/api/start/routes.ts create mode 100644 applications/asset-audit/api/tsconfig.json create mode 100644 applications/asset-audit/assets/stocktake-draft.png create mode 100644 applications/asset-audit/package-lock.json create mode 100644 applications/asset-audit/package.json create mode 100644 applications/asset-audit/scripts/copy-ui.mjs create mode 100644 applications/asset-audit/sql/bootstrap.sql create mode 100644 applications/asset-audit/sql/grants.sql create mode 100644 applications/asset-audit/tests/README.md create mode 100644 applications/asset-audit/tests/browser.mjs create mode 100644 applications/asset-audit/tests/helpers.mjs create mode 100644 applications/asset-audit/tests/integration.mjs create mode 100644 applications/asset-audit/ui/angular.json create mode 100644 applications/asset-audit/ui/package-lock.json create mode 100644 applications/asset-audit/ui/package.json create mode 100644 applications/asset-audit/ui/proxy.conf.json create mode 100644 applications/asset-audit/ui/src/app.html create mode 100644 applications/asset-audit/ui/src/app.ts create mode 100644 applications/asset-audit/ui/src/dto.ts create mode 100644 applications/asset-audit/ui/src/index.html create mode 100644 applications/asset-audit/ui/src/main.ts create mode 100644 applications/asset-audit/ui/src/styles.css create mode 100644 applications/asset-audit/ui/tsconfig.json diff --git a/.github/workflows/asset-audit.yml b/.github/workflows/asset-audit.yml new file mode 100644 index 00000000..98721601 --- /dev/null +++ b/.github/workflows/asset-audit.yml @@ -0,0 +1,32 @@ +name: Asset audit build +on: + pull_request: + paths: + - 'applications/asset-audit/**' + - '.github/workflows/asset-audit.yml' + push: + branches: [main] + paths: + - 'applications/asset-audit/**' + - '.github/workflows/asset-audit.yml' +permissions: + contents: read +jobs: + build: + runs-on: ubuntu-latest + defaults: + run: + working-directory: applications/asset-audit + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: '24.21.0' + cache: npm + cache-dependency-path: | + applications/asset-audit/package-lock.json + applications/asset-audit/api/package-lock.json + applications/asset-audit/ui/package-lock.json + - run: npm ci + - run: npm run typecheck + - run: npm run build diff --git a/applications/asset-audit/.env.example b/applications/asset-audit/.env.example new file mode 100644 index 00000000..2e88ecbb --- /dev/null +++ b/applications/asset-audit/.env.example @@ -0,0 +1,12 @@ +NODE_ENV=production +HOST=127.0.0.1 +PORT=3333 +LOG_LEVEL=info +APP_KEY=GENERATE_WITH_NODE_ACE_GENERATE_KEY +APP_ORIGIN=http://127.0.0.1:3333 +DB_HOST=YOUR_DIRECT_POSTGRES_HOSTNAME +DB_PORT=5432 +DB_DATABASE=postgres +DB_USER=asset_audit_app +DB_PASSWORD=YOUR_RUNTIME_PASSWORD +PG_CA_CERT_PATH=/ABSOLUTE/PATH/postgres-ca.pem diff --git a/applications/asset-audit/.gitignore b/applications/asset-audit/.gitignore new file mode 100644 index 00000000..e005be5b --- /dev/null +++ b/applications/asset-audit/.gitignore @@ -0,0 +1,9 @@ +node_modules/ +api/build/ +ui/dist/ +ui/.angular/ +.deployment/ +.env +.env.* +!.env.example +*.log diff --git a/applications/asset-audit/README.md b/applications/asset-audit/README.md new file mode 100644 index 00000000..93d924b6 --- /dev/null +++ b/applications/asset-audit/README.md @@ -0,0 +1,234 @@ +# Asset audit workbench + +Count equipment with **Angular 21**, **PrimeNG**, and **AG Grid Community**, backed by an **AdonisJS** API, **Lucid ORM**, **VineJS**, and [ClickHouse Managed Postgres](https://clickhouse.com/cloud/postgres). + +Open a seeded stocktake, enter quantities in the grid, review discrepancies, save a draft, and finalize the sheet. Draft saves update all submitted counts and the sheet revision in one Postgres transaction. Competing saves return a visible conflict. Finalized sheets remain readable and cannot be edited. + +![An equipment stocktake with eight entered counts and two discrepancies](assets/stocktake-draft.png) + +This is a trusted local operator workbench using synthetic equipment. It runs on loopback with same-origin mutations. It contains no user accounts, procurement workflow, or stock valuation. + +## How the pieces fit + +```mermaid +flowchart LR + Grid[Angular + AG Grid Community] -->|Typed HttpClient requests| API[AdonisJS + VineJS] + Controls[PrimeNG controls and dialogs] --> Grid + API --> Lucid[Lucid transaction and model] + Lucid -->|Verified TLS| PG[ClickHouse Managed Postgres] +``` + +| Piece | Demonstrated behavior | +| --- | --- | +| Angular | Standalone component, signals, typed HttpClient, forms | +| AG Grid Community | Editable count cells, sorting, column filters, quick filter, derived differences | +| PrimeNG | Sheet selection, status/message components, action buttons and confirmation dialogs | +| AdonisJS and VineJS | Routes/controllers, JSON parsing and validated count payloads | +| Lucid | Migration, seeder, Stocktake model, header locks and managed transactions | +| Postgres | Quantity snapshots, constraints, revisions, atomic updates and finalization guards | + +`items` describes equipment. `stocktakes` stores location, draft/finalized status and revision. `count_rows` captures expected quantities when a sheet starts, plus nullable counted quantities. An empty cell means uncounted; zero is a valid count. + +The example pins Angular **21.2.25**, PrimeNG **21.1.10**, and AG Grid **36.2.0**. PrimeNG 21.1.10 is the MIT community package, without the `-lts` suffix. PrimeNG 22 uses different licensing and is not an interchangeable upgrade. Angular 21 is a supported LTS line; use the committed lockfiles. The API pins AdonisJS **7.5.2**, Lucid **22.4.2**, VineJS **4.4.0**, and pg **8.23.1**. + +## Set up the example + +Use Bash, Node **24.21.0**, npm 11, Git, curl, jq, OpenSSL and psql 15 or later. Install runtimes and application dependencies in Linux. On macOS, use an [isolated OrbStack machine](https://docs.orbstack.dev/machines/isolated) and copy source into its own `/home` directory. + +### 1. Install dependencies and build + +```sh +git clone https://github.com/ClickHouse/examples.git +cd examples/applications/asset-audit +node --version +npm ci +npm run typecheck +npm run build +``` + +Run these commands inside Linux. `npm ci` installs the pinned API/UI dependencies as well as the browser test runner. `npm run build` compiles Angular, compiles AdonisJS, and copies the browser build into `api/build/public`. The API serves the frontend and JSON routes on one origin. + +### 2. Authenticate clickhousectl + +Install [clickhousectl](https://clickhouse.com/docs/interfaces/cli) on the machine used to manage Cloud resources: + +```sh +curl -fsSL https://clickhouse.com/cli | sh +export PATH="$HOME/.local/bin:$PATH" +clickhousectl --version +clickhousectl cloud auth login --interactive +clickhousectl cloud auth status +clickhousectl cloud org list +umask 077 +mkdir -p .deployment +``` + +Creation requires an Admin API key. Enter credentials at the interactive prompt; keep them outside the application and browser. For the isolated maintainer workflow, Cloud management stays on the host and only database credentials and the CA enter the VM. + +Create `.deployment/resources.env` with your organization and supported AWS region/size: + +```dotenv +CH_ORG_ID=YOUR_ORGANIZATION_UUID +DEPLOYMENT_NAME=asset-audit-example +CLOUD_REGION=YOUR_AVAILABLE_AWS_REGION +PG_SIZE=YOUR_AVAILABLE_POSTGRES_SIZE +``` + +The recorded fixture used `us-east-1`, `c6gd.large`, Postgres 18, and no HA. Review [pricing](https://clickhouse.com/pricing) before creation. The database incurs charges until deleted; stopping the application or VM does not stop database billing. + +### 3. Create the service, wait, and retrieve its CA + +```sh +source .deployment/resources.env +clickhousectl cloud postgres create \ + --org-id "$CH_ORG_ID" --name "$DEPLOYMENT_NAME" \ + --provider aws --region "$CLOUD_REGION" --size "$PG_SIZE" \ + --pg-version 18 --ha-type none --tag project=asset-audit --json \ + > .deployment/postgres-create.json + +PG_SERVICE_ID="$(jq -er '.id' .deployment/postgres-create.json)" +printf 'PG_SERVICE_ID=%s\n' "$PG_SERVICE_ID" >> .deployment/resources.env +``` + +The creation receipt includes the one-time administrator password. Keep it private. Repeat the following **get** command until `state` is `running`; do not repeat creation: + +```sh +clickhousectl cloud postgres get "$PG_SERVICE_ID" \ + --org-id "$CH_ORG_ID" --json > .deployment/postgres-status.json +jq '{id, state, hostname, username, postgresVersion, size}' \ + .deployment/postgres-status.json + +clickhousectl cloud postgres certs get "$PG_SERVICE_ID" \ + --org-id "$CH_ORG_ID" --output .deployment/postgres-ca.pem +``` + +Use the direct endpoint from your receipt, port `5432`, and database `postgres`. If creation was interrupted, reconcile the saved receipt with `clickhousectl cloud postgres list --org-id "$CH_ORG_ID" --json` before taking further action. + +### 4. Bootstrap roles and migrate + +Perform database setup inside Linux with the private receipt and CA available there. Generate passwords once and preserve this file on retries: + +```sh +cat > .deployment/passwords.env < .deployment/owner.env < .deployment/app.env +chmod 600 .deployment/*.env +unset PG_OWNER_PASSWORD PG_APP_PASSWORD + +set -a +source .deployment/app.env +set +a +npm start +``` + +Open `http://127.0.0.1:3333` in the same Linux environment. For an isolated VM, use a browser inside the VM or an SSH tunnel to its loopback port; keep the configured host and origin identical. The app rejects unrelated Host headers and mutations without its origin/custom header. The `HOST` configuration permits only loopback addresses. + +[database.ts](api/config/database.ts) supplies the CA and hostname to pg through Lucid with certificate verification enabled. Database credentials use separate fields; there is no URL query string that can overwrite SSL options. + +## Try the workflow + +1. Open **October equipment stocktake**. +2. Double-click the camera's **Counted** cell, enter `10`, and press Enter. Expected is `12`, so its difference is `-2`. +3. Enter `21` microphones and the expected quantities for the remaining six lines. The summary shows two discrepancies and a net difference of `-1`. +4. Sort an AG Grid column or filter equipment. Filtering changes the grid display; summary cards still cover the whole sheet. +5. Click **Save draft**, then reload. The saved quantities and incremented revision return from Postgres. +6. To see a conflict, load the same sheet in two tabs. Save a change in one, then save an edit from the older tab. The second tab keeps its edits visible and asks you to reload before reapplying them. +7. Save all eight counts, click **Finalize sheet**, and confirm the PrimeNG dialog. The grid becomes read-only. + +The API accepts whole counts from zero to one million, or null for uncounted. It requires every sheet item exactly once in a save payload. Finalization uses the revision the operator saw and refuses incomplete sheets. If any row update fails, the draft revision and all count changes roll back together. + +## Verify changes + +Inside Linux: + +```sh +npm run typecheck +npm run build +npx playwright install --with-deps chromium +``` + +For live tests, stop the running API and use a dedicated example database. Copy `.deployment/app.env` to a separate `.deployment/test.env`, adding `TEST_OWNER_PASSWORD` with this example's schema-owner password. Keep it out of runtime configuration. + +```sh +node --env-file=.deployment/test.env tests/integration.mjs +node --env-file=.deployment/test.env tests/browser.mjs +``` + +The tests start the real production API, create their own sheets, and remove them afterward. They check persisted counts after a genuine process restart, competing revisions, a late-row database failure, final immutability, restricted grants, and actual browser interactions. See [tests/README.md](tests/README.md) for fixture scope. The integration suite briefly adds a fixture-specific check constraint; use a dedicated schema. + +The recorded managed run used PostgreSQL **18.6**. The Lucid probe succeeded with the service CA; deliberately wrong CA and hostname controls failed: + +```sh +(cd api && node --env-file="$DEPLOYMENT_DIR/app.env" ace.js db:probe) +(cd api && node --env-file="$DEPLOYMENT_DIR/app.env" ace.js db:probe --servername wrong.example) +``` + +The second command is a deliberate failure: it resolves the same service IP and sends an incorrect TLS name. For a wrong-CA control, point `PG_CA_CERT_PATH` at an unrelated test CA and run the probe. Preserve failing controls separately from passing results. + +## Scope and cleanup + +The grid loads a small seeded set of equipment; it is not a large-inventory benchmark. The API uses at most five database connections per process. Finalization closes a count sheet; it does not change the source equipment quantities. The local workbench has no authentication, user identity or audit-author claim. A hosted application needs its own authentication and deployment work. + +The pinned API has an unresolved upstream [braces advisory (GHSA-vfj7-8cjw-p6xm)](https://github.com/advisories/GHSA-vfj7-8cjw-p6xm). It appears in the production dependency graph through `@adonisjs/core → @adonisjs/assembler → fast-glob → micromatch → braces 3.0.3`. The application accepts no glob patterns from HTTP clients. This records dependency scope; it does not establish exploitability or a clean audit. No incompatible force downgrade was applied. + +Stop the API with Ctrl-C. For a service created exclusively for this example, verify its ID against the private receipt, then delete it through clickhousectl: + +```sh +source .deployment/resources.env +clickhousectl cloud postgres get "$PG_SERVICE_ID" --org-id "$CH_ORG_ID" --json +clickhousectl cloud postgres delete "$PG_SERVICE_ID" --org-id "$CH_ORG_ID" +clickhousectl cloud postgres list --org-id "$CH_ORG_ID" --json +``` + +Deletion removes the service and its data. Confirm that its ID is absent from the list, then remove unneeded private credential files. Keep the source, lockfiles and any evidence you want to retain. diff --git a/applications/asset-audit/api/ace.js b/applications/asset-audit/api/ace.js new file mode 100644 index 00000000..fffc1145 --- /dev/null +++ b/applications/asset-audit/api/ace.js @@ -0,0 +1,2 @@ +import '@poppinss/ts-exec' +await import('./bin/console.js') diff --git a/applications/asset-audit/api/adonisrc.ts b/applications/asset-audit/api/adonisrc.ts new file mode 100644 index 00000000..c882f066 --- /dev/null +++ b/applications/asset-audit/api/adonisrc.ts @@ -0,0 +1,12 @@ +import { defineConfig } from '@adonisjs/core/app' +export default defineConfig({ + commands: [() => import('@adonisjs/core/commands'), () => import('@adonisjs/lucid/commands')], + providers: [ + () => import('@adonisjs/core/providers/app_provider'), + () => import('@adonisjs/core/providers/vinejs_provider'), + () => import('@adonisjs/lucid/database_provider'), + () => import('@adonisjs/static/static_provider'), + ], + preloads: [() => import('#start/routes'), () => import('#start/kernel')], + metaFiles: [{ pattern: 'public/**', reloadServer: false }], +}) diff --git a/applications/asset-audit/api/app/controllers/stocktakes_controller.ts b/applications/asset-audit/api/app/controllers/stocktakes_controller.ts new file mode 100644 index 00000000..fa691651 --- /dev/null +++ b/applications/asset-audit/api/app/controllers/stocktakes_controller.ts @@ -0,0 +1,38 @@ +import type { HttpContext } from '@adonisjs/core/http' +import Stocktake from '#models/stocktake' +import { readSheet, changeSheet, SheetError } from '#services/count_sheets' +import { draftValidator, finalizeValidator } from '#validators/count_sheet' + +export default class StocktakesController { + async index() { + return Stocktake.query().select('id', 'name', 'location', 'status', 'revision').orderBy('id') + } + private id(value: string) { + const id = Number(value) + if (!Number.isSafeInteger(id) || id < 1) throw new SheetError(404, 'missing', 'This count sheet does not exist.') + return id + } + private failure(error: unknown, { response, logger }: HttpContext) { + if (error instanceof SheetError) return response.status(error.status).send({ error: { code: error.code, message: error.message } }) + if (typeof error === 'object' && error !== null && 'code' in error && error.code === 'E_VALIDATION_ERROR') { + return response.unprocessableEntity({ error: { code: 'validation', message: 'Counts must be whole numbers from 0 to 1,000,000, or empty.' } }) + } + logger.error({ event: 'count_sheet_failure' }, 'Count sheet operation failed') + return response.internalServerError({ error: { code: 'database', message: 'The change could not be saved. Your draft remains unchanged.' } }) + } + async show(ctx: HttpContext) { + try { return await readSheet(this.id(ctx.params.id)) } catch (error) { return this.failure(error, ctx) } + } + async update(ctx: HttpContext) { + try { + const input = await ctx.request.validateUsing(draftValidator) + return await changeSheet(this.id(ctx.params.id), input.revision, input.counts) + } catch (error) { return this.failure(error, ctx) } + } + async finalize(ctx: HttpContext) { + try { + const input = await ctx.request.validateUsing(finalizeValidator) + return await changeSheet(this.id(ctx.params.id), input.revision) + } catch (error) { return this.failure(error, ctx) } + } +} diff --git a/applications/asset-audit/api/app/middleware/local_operator_middleware.ts b/applications/asset-audit/api/app/middleware/local_operator_middleware.ts new file mode 100644 index 00000000..4810bab6 --- /dev/null +++ b/applications/asset-audit/api/app/middleware/local_operator_middleware.ts @@ -0,0 +1,19 @@ +import type { HttpContext } from '@adonisjs/core/http' +import type { NextFn } from '@adonisjs/core/types/http' +import env from '#start/env' +export default class LocalOperatorMiddleware { + async handle({ request, response }: HttpContext, next: NextFn) { + response.header('Cache-Control', 'no-store') + if (request.header('host') !== new URL(env.get('APP_ORIGIN')).host) { + return response.forbidden({ error: { code: 'host', message: 'Use the workbench on its configured host.' } }) + } + if (!['GET', 'HEAD'].includes(request.method())) { + if (request.header('origin') !== env.get('APP_ORIGIN') || + request.header('x-asset-audit') !== '1' || + !request.header('content-type')?.startsWith('application/json')) { + return response.forbidden({ error: { code: 'origin', message: 'Use the workbench on its configured origin.' } }) + } + } + return next() + } +} diff --git a/applications/asset-audit/api/app/models/stocktake.ts b/applications/asset-audit/api/app/models/stocktake.ts new file mode 100644 index 00000000..070e9489 --- /dev/null +++ b/applications/asset-audit/api/app/models/stocktake.ts @@ -0,0 +1,10 @@ +import { BaseModel, column } from '@adonisjs/lucid/orm' +export default class Stocktake extends BaseModel { + static table = 'asset_audit.stocktakes' + @column({ isPrimary: true }) declare id: number + @column() declare name: string + @column() declare location: string + @column() declare status: 'draft' | 'finalized' + @column() declare revision: number + @column({ columnName: 'finalized_at' }) declare finalizedAt: string | null +} diff --git a/applications/asset-audit/api/app/services/count_sheets.ts b/applications/asset-audit/api/app/services/count_sheets.ts new file mode 100644 index 00000000..ec3aa2ae --- /dev/null +++ b/applications/asset-audit/api/app/services/count_sheets.ts @@ -0,0 +1,54 @@ +import db from '@adonisjs/lucid/services/db' +import Stocktake from '#models/stocktake' + +export class SheetError extends Error { + constructor(public status: number, public code: string, message: string) { super(message) } +} + +export async function readSheet(id: number) { + // Share the header lock with writers so revision and row counts form one view. + return db.transaction(async (trx) => { + const sheet = await Stocktake.query({ client: trx }).where('id', id).forShare().first() + if (!sheet) throw new SheetError(404, 'missing', 'This count sheet does not exist.') + const rows = await trx.from('asset_audit.count_rows as c') + .join('asset_audit.items as i', 'i.id', 'c.item_id') + .where('c.stocktake_id', id) + .select('i.id as itemId', 'i.sku', 'i.name', 'i.category', 'c.expected_quantity as expected', 'c.counted_quantity as counted') + .orderBy('i.id') + return { id: sheet.id, name: sheet.name, location: sheet.location, + status: sheet.status, revision: sheet.revision, finalizedAt: sheet.finalizedAt, rows } + }) +} + +export async function changeSheet(id: number, revision: number, + counts?: { itemId: number; counted: number | null }[]) { + await db.transaction(async (trx) => { + const sheet = await Stocktake.query({ client: trx }).where('id', id).forUpdate().first() + if (!sheet) throw new SheetError(404, 'missing', 'This count sheet does not exist.') + if (sheet.status === 'finalized') throw new SheetError(409, 'finalized', 'This count sheet has already been finalized.') + if (sheet.revision !== revision) throw new SheetError(409, 'conflict', 'Someone saved a newer revision. Reload the sheet before editing again.') + + const existing = await trx.from('asset_audit.count_rows').where('stocktake_id', id).select('item_id', 'counted_quantity') + if (counts) { + const ids = new Set(counts.map((row) => row.itemId)) + if (ids.size !== counts.length || counts.length !== existing.length || + existing.some((row) => !ids.has(row.item_id))) { + throw new SheetError(422, 'rows', 'Submit each item on this count sheet exactly once.') + } + for (const row of counts) { + await trx.from('asset_audit.count_rows').where('stocktake_id', id).where('item_id', row.itemId) + .update({ counted_quantity: row.counted }) + } + } else { + if (existing.some((row) => row.counted_quantity === null)) { + throw new SheetError(422, 'incomplete', 'Count every item and save the draft before finalizing.') + } + sheet.status = 'finalized' + // Set a database-compatible timestamp without a generated client date. + sheet.finalizedAt = new Date().toISOString() + } + sheet.revision += 1 + await sheet.save() + }) + return readSheet(id) +} diff --git a/applications/asset-audit/api/app/validators/count_sheet.ts b/applications/asset-audit/api/app/validators/count_sheet.ts new file mode 100644 index 00000000..ac911a9f --- /dev/null +++ b/applications/asset-audit/api/app/validators/count_sheet.ts @@ -0,0 +1,11 @@ +import vine from '@vinejs/vine' +export const draftValidator = vine.compile(vine.object({ + revision: vine.number().withoutDecimals().min(0).max(2147483646), + counts: vine.array(vine.object({ + itemId: vine.number().withoutDecimals().min(1), + counted: vine.number().withoutDecimals().min(0).max(1000000).nullable(), + })).minLength(1).maxLength(100), +})) +export const finalizeValidator = vine.compile(vine.object({ + revision: vine.number().withoutDecimals().min(0).max(2147483646), +})) diff --git a/applications/asset-audit/api/bin/console.ts b/applications/asset-audit/api/bin/console.ts new file mode 100644 index 00000000..c3f9f51e --- /dev/null +++ b/applications/asset-audit/api/bin/console.ts @@ -0,0 +1,7 @@ +await import('reflect-metadata') +const { Ignitor, prettyPrintError } = await import('@adonisjs/core/ignitor') +const root = new URL('../', import.meta.url) +const importer = (path: string) => path.startsWith('.') ? import(new URL(path, root).href) : import(path) +new Ignitor(root, { importer }).tap((app) => { + app.booting(async () => { await import('#start/env') }) +}).ace().handle(process.argv.splice(2)).catch((error) => { process.exitCode = 1; prettyPrintError(error) }) diff --git a/applications/asset-audit/api/bin/server.ts b/applications/asset-audit/api/bin/server.ts new file mode 100644 index 00000000..9057105b --- /dev/null +++ b/applications/asset-audit/api/bin/server.ts @@ -0,0 +1,9 @@ +await import('reflect-metadata') +const { Ignitor, prettyPrintError } = await import('@adonisjs/core/ignitor') +const root = new URL('../', import.meta.url) +const importer = (path: string) => path.startsWith('.') ? import(new URL(path, root).href) : import(path) +new Ignitor(root, { importer }).tap((app) => { + app.booting(async () => { await import('#start/env') }) + app.listen('SIGTERM', () => app.terminate()) + app.listen('SIGINT', () => app.terminate()) +}).httpServer().start().catch((error) => { process.exitCode = 1; prettyPrintError(error) }) diff --git a/applications/asset-audit/api/commands/db_probe.ts b/applications/asset-audit/api/commands/db_probe.ts new file mode 100644 index 00000000..8d71b005 --- /dev/null +++ b/applications/asset-audit/api/commands/db_probe.ts @@ -0,0 +1,28 @@ +import { BaseCommand, flags } from '@adonisjs/core/ace' +import { lookup } from 'node:dns/promises' +import db from '@adonisjs/lucid/services/db' +import config from '#config/database' +export default class DbProbe extends BaseCommand { + static commandName = 'db:probe' + static description = 'Verify the Lucid connection (or deliberately test a wrong hostname)' + static options = { startApp: true } + @flags.string() declare servername: string | undefined + async run() { + if (this.servername) { + const connection = config.connections!.postgres.connection as { host: string; ssl: { servername: string } } + // pg supplies SNI from a DNS host, overriding ssl.servername. Connect to + // the same service's resolved IP so this deliberate negative control + // can send the incorrect TLS name without changing the destination. + connection.host = (await lookup(connection.host)).address + connection.ssl.servername = this.servername + db.manager.patch('postgres', config.connections!.postgres) + } + try { + const result = await db.rawQuery('SELECT current_user AS role, version() AS version') + this.logger.info(JSON.stringify(result.rows[0])) + } catch (error) { + this.logger.error(error instanceof Error ? error.message : 'Database connection failed') + this.exitCode = 1 + } finally { await db.manager.closeAll() } + } +} diff --git a/applications/asset-audit/api/config/app.ts b/applications/asset-audit/api/config/app.ts new file mode 100644 index 00000000..8335aa6b --- /dev/null +++ b/applications/asset-audit/api/config/app.ts @@ -0,0 +1,5 @@ +import { defineConfig } from '@adonisjs/core/http' +export const http = defineConfig({ + generateRequestId: true, allowMethodSpoofing: false, useAsyncLocalStorage: true, + cookie: { domain: '', path: '/', maxAge: '2h', httpOnly: true, secure: false, sameSite: 'lax' }, +}) diff --git a/applications/asset-audit/api/config/bodyparser.ts b/applications/asset-audit/api/config/bodyparser.ts new file mode 100644 index 00000000..3a7d6b3f --- /dev/null +++ b/applications/asset-audit/api/config/bodyparser.ts @@ -0,0 +1,5 @@ +import { defineConfig } from '@adonisjs/core/bodyparser' +export default defineConfig({ + allowedMethods: ['POST', 'PUT', 'PATCH'], + json: { limit: '32kb', types: ['application/json'] }, +}) diff --git a/applications/asset-audit/api/config/database.ts b/applications/asset-audit/api/config/database.ts new file mode 100644 index 00000000..987dad39 --- /dev/null +++ b/applications/asset-audit/api/config/database.ts @@ -0,0 +1,25 @@ +import { readFileSync } from 'node:fs' +import { defineConfig } from '@adonisjs/lucid' +import env from '#start/env' +// Separate fields avoid URL sslmode parsing overwriting the verified TLS options. +export default defineConfig({ + connection: 'postgres', + connections: { + postgres: { + client: 'pg', + connection: { + host: env.get('DB_HOST'), port: env.get('DB_PORT'), + database: env.get('DB_DATABASE'), user: env.get('DB_USER'), + password: env.get('DB_PASSWORD').release(), + ssl: { + ca: readFileSync(env.get('PG_CA_CERT_PATH'), 'utf8'), + rejectUnauthorized: true, + servername: env.get('DB_HOST'), + }, + }, + pool: { min: 0, max: 5 }, + migrations: { naturalSort: true, paths: ['database/migrations'] }, + seeders: { paths: ['database/seeders'] }, + }, + }, +}) diff --git a/applications/asset-audit/api/config/encryption.ts b/applications/asset-audit/api/config/encryption.ts new file mode 100644 index 00000000..aea37bc7 --- /dev/null +++ b/applications/asset-audit/api/config/encryption.ts @@ -0,0 +1,6 @@ +import env from '#start/env' +import { defineConfig, drivers } from '@adonisjs/core/encryption' +export default defineConfig({ + default: 'gcm', + list: { gcm: drivers.aes256gcm({ keys: [env.get('APP_KEY')], id: 'gcm' }) }, +}) diff --git a/applications/asset-audit/api/config/logger.ts b/applications/asset-audit/api/config/logger.ts new file mode 100644 index 00000000..74445f76 --- /dev/null +++ b/applications/asset-audit/api/config/logger.ts @@ -0,0 +1,3 @@ +import { defineConfig } from '@adonisjs/core/logger' +import env from '#start/env' +export default defineConfig({ default: 'app', loggers: { app: { enabled: true, name: 'asset-audit', level: env.get('LOG_LEVEL') } } }) diff --git a/applications/asset-audit/api/config/static.ts b/applications/asset-audit/api/config/static.ts new file mode 100644 index 00000000..b68b000f --- /dev/null +++ b/applications/asset-audit/api/config/static.ts @@ -0,0 +1,2 @@ +import { defineConfig } from '@adonisjs/static' +export default defineConfig({ enabled: true, etag: true, lastModified: true }) diff --git a/applications/asset-audit/api/database/migrations/001_asset_audit.ts b/applications/asset-audit/api/database/migrations/001_asset_audit.ts new file mode 100644 index 00000000..5751d8a3 --- /dev/null +++ b/applications/asset-audit/api/database/migrations/001_asset_audit.ts @@ -0,0 +1,59 @@ +import { BaseSchema } from '@adonisjs/lucid/schema' +export default class extends BaseSchema { + async up() { + this.schema.createTable('items', (table) => { + table.increments('id') + table.string('sku', 40).notNullable().unique() + table.string('name', 120).notNullable() + table.string('category', 40).notNullable() + table.integer('quantity').notNullable() + }) + this.schema.createTable('stocktakes', (table) => { + table.increments('id') + table.string('name', 120).notNullable() + table.string('location', 80).notNullable() + table.string('status', 12).notNullable().defaultTo('draft') + table.integer('revision').notNullable().defaultTo(0) + table.timestamp('finalized_at', { useTz: true }).nullable() + }) + this.schema.createTable('count_rows', (table) => { + table.integer('stocktake_id').notNullable().references('id').inTable('stocktakes') + table.integer('item_id').notNullable().references('id').inTable('items') + table.integer('expected_quantity').notNullable() + table.integer('counted_quantity').nullable() + table.primary(['stocktake_id', 'item_id']) + }) + this.defer(async (db) => { + await db.rawQuery(` + ALTER TABLE items ADD CHECK (quantity BETWEEN 0 AND 1000000); + ALTER TABLE stocktakes ADD CHECK (revision >= 0), + ADD CHECK (status IN ('draft', 'finalized')), + ADD CHECK ((status = 'finalized') = (finalized_at IS NOT NULL)); + ALTER TABLE count_rows ADD CHECK (expected_quantity BETWEEN 0 AND 1000000), + ADD CHECK (counted_quantity BETWEEN 0 AND 1000000); + CREATE FUNCTION guard_finalized_sheet() RETURNS trigger LANGUAGE plpgsql + SET search_path = asset_audit, pg_catalog AS $$ + BEGIN + IF TG_TABLE_NAME = 'stocktakes' THEN + IF OLD.status = 'finalized' THEN RAISE EXCEPTION 'Finalized sheets are immutable'; END IF; + RETURN NEW; + END IF; + PERFORM 1 FROM asset_audit.stocktakes WHERE id = OLD.stocktake_id AND status = 'draft' FOR UPDATE; + IF NOT FOUND THEN RAISE EXCEPTION 'Finalized sheets are immutable'; END IF; + RETURN NEW; + END; + $$; + CREATE TRIGGER immutable_sheet BEFORE UPDATE ON stocktakes + FOR EACH ROW EXECUTE FUNCTION guard_finalized_sheet(); + CREATE TRIGGER immutable_count BEFORE UPDATE ON count_rows + FOR EACH ROW EXECUTE FUNCTION guard_finalized_sheet(); + `) + }) + } + async down() { + this.schema.dropTable('count_rows') + this.schema.dropTable('stocktakes') + this.schema.dropTable('items') + this.defer(async (db) => { await db.rawQuery('DROP FUNCTION guard_finalized_sheet()') }) + } +} diff --git a/applications/asset-audit/api/database/seeders/main.ts b/applications/asset-audit/api/database/seeders/main.ts new file mode 100644 index 00000000..8782fa82 --- /dev/null +++ b/applications/asset-audit/api/database/seeders/main.ts @@ -0,0 +1,28 @@ +import { BaseSeeder } from '@adonisjs/lucid/seeders' +import db from '@adonisjs/lucid/services/db' +export default class extends BaseSeeder { + async run() { + // Insert missing fixtures only: rerunning never resets an operator's count. + await db.transaction(async (trx) => { + await trx.table('items').insert([ + { id: 1, sku: 'AV-CAMERA', name: 'Conference cameras', category: 'AV', quantity: 12 }, + { id: 2, sku: 'AV-MIC', name: 'Wireless microphones', category: 'AV', quantity: 20 }, + { id: 3, sku: 'IT-DOCK', name: 'USB-C docks', category: 'IT', quantity: 36 }, + { id: 4, sku: 'IT-MONITOR', name: 'Desk monitors', category: 'IT', quantity: 48 }, + { id: 5, sku: 'IT-KEYBOARD', name: 'Keyboards', category: 'IT', quantity: 64 }, + { id: 6, sku: 'LAB-METER', name: 'Digital multimeters', category: 'Lab', quantity: 15 }, + { id: 7, sku: 'LAB-KIT', name: 'Sensor kits', category: 'Lab', quantity: 18 }, + { id: 8, sku: 'FAC-TOOL', name: 'Maintenance tool bags', category: 'Facilities', quantity: 9 }, + ]).onConflict('id').ignore() + for (const sheet of [ + { id: 1, name: 'October equipment stocktake', location: 'North workshop' }, + { id: 2, name: 'Satellite room stocktake', location: 'South studio' }, + ]) { + const inserted = await trx.table('stocktakes').insert(sheet).onConflict('id').ignore().returning('id') + if (inserted.length) { + await trx.rawQuery('INSERT INTO count_rows (stocktake_id, item_id, expected_quantity) SELECT ?, id, quantity FROM items', [sheet.id]) + } + } + }) + } +} diff --git a/applications/asset-audit/api/package-lock.json b/applications/asset-audit/api/package-lock.json new file mode 100644 index 00000000..13b14d36 --- /dev/null +++ b/applications/asset-audit/api/package-lock.json @@ -0,0 +1,4103 @@ +{ + "name": "asset-audit-api", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "asset-audit-api", + "version": "1.0.0", + "dependencies": { + "@adonisjs/core": "7.5.2", + "@adonisjs/lucid": "22.4.2", + "@adonisjs/static": "2.0.1", + "@vinejs/vine": "4.4.0", + "luxon": "3.7.2", + "pg": "8.23.1", + "reflect-metadata": "0.2.2" + }, + "devDependencies": { + "@adonisjs/assembler": "8.5.2", + "@adonisjs/tsconfig": "2.0.0", + "@poppinss/ts-exec": "1.4.4", + "@types/luxon": "3.7.6", + "@types/node": "24.19.1", + "typescript": "6.0.3" + } + }, + "node_modules/@adonisjs/ace": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/@adonisjs/ace/-/ace-14.1.1.tgz", + "integrity": "sha512-6MP2eZicAP8hd1US1PR2b6hEzWVaNlEbbAxanwDAyTOMW8PysefQam7b59ipbxw4+ADTJsgIyQWVt815W9f6WQ==", + "license": "MIT", + "dependencies": { + "@poppinss/cliui": "^6.8.0", + "@poppinss/hooks": "^7.3.0", + "@poppinss/macroable": "^1.1.2", + "@poppinss/prompts": "^3.1.6", + "@poppinss/utils": "^7.0.1", + "fastest-levenshtein": "^1.0.16", + "jsonschema": "^1.5.0", + "string-width": "^8.2.0", + "yargs-parser": "^22.0.0" + }, + "engines": { + "node": ">=24.0.0" + }, + "peerDependencies": { + "youch": "^4.1.0-beta.11 || ^4.1.0" + } + }, + "node_modules/@adonisjs/application": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@adonisjs/application/-/application-9.1.0.tgz", + "integrity": "sha512-KWsTfkITDozW4csD4YofDEbbWuORKI056VgEr9WBwjIdrzIC7hqPxLtnszFVmyv14THPi0SRBTN/fIYQ6/SQ4Q==", + "license": "MIT", + "dependencies": { + "@poppinss/hooks": "^7.3.1", + "@poppinss/macroable": "^1.1.2", + "@poppinss/utils": "^7.0.1", + "glob-parent": "^6.0.2", + "tempura": "^0.4.1" + }, + "engines": { + "node": ">=24.0.0" + }, + "peerDependencies": { + "@adonisjs/assembler": "^8.0.0-next.23 || ^8.0.0", + "@adonisjs/config": "^6.1.0-next.0 || ^6.0.0", + "@adonisjs/fold": "^11.0.0-next.3 || ^11.0.0" + }, + "peerDependenciesMeta": { + "@adonisjs/assembler": { + "optional": true + } + } + }, + "node_modules/@adonisjs/assembler": { + "version": "8.5.2", + "resolved": "https://registry.npmjs.org/@adonisjs/assembler/-/assembler-8.5.2.tgz", + "integrity": "sha512-CipLZEl/2zBa6ejoMogXsXAg4+8hIf0CAhRaHjf9KXfeUininRc9Wg3zFv+To1xgHLjnuPiQfqKBhP6I44KVlA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@adonisjs/env": "^7.1.0", + "@antfu/install-pkg": "^2.0.1", + "@ast-grep/napi": "^0.45.1", + "@poppinss/cliui": "^6.8.1", + "@poppinss/hooks": "^7.3.1", + "@poppinss/utils": "^7.0.1", + "chokidar": "^5.0.0", + "dedent": "^1.7.2", + "execa": "^9.6.1", + "fast-glob": "^3.3.3", + "fdir": "^6.5.0", + "get-port": "^7.2.0", + "get-tsconfig": "^4.14.3", + "import-meta-resolve": "^4.2.0", + "junk": "^4.0.1", + "open": "^11.0.1", + "parse-imports": "^3.0.0", + "picomatch": "^4.0.5", + "pretty-hrtime": "^1.0.3", + "tmp-cache": "^1.1.0", + "ts-morph": "^28.0.0" + }, + "engines": { + "node": ">=24.0.0" + }, + "peerDependencies": { + "typescript": "^5.0.0 || ^6.0.0" + } + }, + "node_modules/@adonisjs/bodyparser": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@adonisjs/bodyparser/-/bodyparser-11.0.4.tgz", + "integrity": "sha512-amqMPVFbzxkOoCMbkFs5sC+rTu7cER2rSv+1v8dsGKszolk5lnGuyNjkha1Lqksvw1qykIIbC1fXr37B9WJTdg==", + "license": "MIT", + "dependencies": { + "@poppinss/macroable": "^1.1.2", + "@poppinss/middleware": "^3.2.7", + "@poppinss/multiparty": "^3.0.0", + "@poppinss/qs": "^6.15.0", + "@poppinss/utils": "^7.0.1", + "file-type": "^22.0.1", + "inflation": "^2.1.0", + "media-typer": "^1.1.0", + "raw-body": "^3.0.2" + }, + "engines": { + "node": ">=24.0.0" + }, + "peerDependencies": { + "@adonisjs/http-server": "^8.0.0-next.17 || ^8.0.0 || ^9.0.0" + } + }, + "node_modules/@adonisjs/config": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@adonisjs/config/-/config-6.1.0.tgz", + "integrity": "sha512-YVDRL8xHCtM6iMnAefOBaz6iXVpojwBPDQWPKxnVSucycYeNGrGitJiLy+cGaeAU7Gjm8al9SJRJt3rRPr5PKg==", + "license": "MIT", + "dependencies": { + "@poppinss/utils": "^7.0.0" + }, + "engines": { + "node": ">=24.0.0" + } + }, + "node_modules/@adonisjs/core": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/@adonisjs/core/-/core-7.5.2.tgz", + "integrity": "sha512-dnNEerJ5Vhz7WtMrzjtJh7OTiGKdQrH0Ng3plzRWgHrwcS6zwNG+uxVK5f9bUGKHdCIv0WT2KhvViKIxx5OftQ==", + "license": "MIT", + "dependencies": { + "@adonisjs/ace": "^14.1.1", + "@adonisjs/application": "^9.1.0", + "@adonisjs/bodyparser": "^11.0.4", + "@adonisjs/config": "^6.1.0", + "@adonisjs/env": "^7.1.0", + "@adonisjs/events": "^10.2.0", + "@adonisjs/fold": "^11.1.0", + "@adonisjs/hash": "^10.1.1", + "@adonisjs/health": "^3.1.0", + "@adonisjs/http-server": "^9.3.1", + "@adonisjs/http-transformers": "^2.3.1", + "@adonisjs/logger": "^7.1.1", + "@adonisjs/repl": "^5.0.0", + "@boringnode/encryption": "^1.0.1", + "@poppinss/colors": "^4.1.6", + "@poppinss/dumper": "^0.7.0", + "@poppinss/macroable": "^1.1.2", + "@poppinss/utils": "^7.1.1", + "@sindresorhus/is": "^8.1.0", + "@types/he": "^1.2.3", + "error-stack-parser-es": "^2.0.1", + "he": "^1.2.0", + "pretty-hrtime": "^1.0.3", + "string-width": "^8.2.2" + }, + "bin": { + "adonis-kit": "build/toolkit/main.js" + }, + "engines": { + "node": ">=24.0.0" + }, + "peerDependencies": { + "@adonisjs/assembler": "^8.0.0-next.23 || ^8.0.0", + "@vinejs/vine": "^4.0.0", + "argon2": "^0.44.0 || ^0.45.1", + "bcrypt": "^6.0.0", + "edge.js": "^6.2.0", + "pino-pretty": "^13.1.3", + "youch": "^4.1.0-beta.13 || ^4.1.0" + }, + "peerDependenciesMeta": { + "@adonisjs/assembler": { + "optional": true + }, + "@vinejs/vine": { + "optional": true + }, + "argon2": { + "optional": true + }, + "bcrypt": { + "optional": true + }, + "edge.js": { + "optional": true + }, + "pino-pretty": { + "optional": true + }, + "youch": { + "optional": true + } + } + }, + "node_modules/@adonisjs/env": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@adonisjs/env/-/env-7.1.0.tgz", + "integrity": "sha512-DXKCDIDoHzjxx9O7HvFYYBGQENmF5ANTUXBGE65ygOcJTtXyrLBISUkjrIQGVAKUmcLPF9WInkXQfxMnfO2VJw==", + "license": "MIT", + "dependencies": { + "@poppinss/utils": "^7.0.0", + "@poppinss/validator-lite": "^2.1.2", + "split-lines": "^3.0.0" + }, + "engines": { + "node": ">=24.0.0" + } + }, + "node_modules/@adonisjs/events": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@adonisjs/events/-/events-10.2.0.tgz", + "integrity": "sha512-SzwzbmTLsybSZd47zZMZ3df7puwhY7D8vZ5Uy79SiHjLKbr2eVzUuKjjoYB6/0pZu6IwK9Qx06dI43sl+tLoDw==", + "license": "MIT", + "dependencies": { + "@poppinss/utils": "^7.0.0", + "@sindresorhus/is": "^7.2.0", + "emittery": "^1.2.0" + }, + "engines": { + "node": ">=24.0.0" + }, + "peerDependencies": { + "@adonisjs/application": "^9.0.0-next.14 || ^9.0.0", + "@adonisjs/fold": "^11.0.0-next.4 || ^11.0.0" + } + }, + "node_modules/@adonisjs/events/node_modules/@sindresorhus/is": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.2.0.tgz", + "integrity": "sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@adonisjs/fold": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/@adonisjs/fold/-/fold-11.1.0.tgz", + "integrity": "sha512-M3/AUZ6w8s/3uLJ4RBPwkzpOaXAdYh1EezRA11j+S9/WfUyxx4aiIm9FpjitSJC1Hrc5ap6AqlYu2m6dfzHVRA==", + "license": "MIT", + "dependencies": { + "@poppinss/utils": "^7.0.0", + "parse-imports": "^3.0.0" + }, + "engines": { + "node": ">=24.0.0" + } + }, + "node_modules/@adonisjs/hash": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@adonisjs/hash/-/hash-10.1.1.tgz", + "integrity": "sha512-i12srCoJ2uomD8fTMPEp16lcRTsB9pI8AlGFrtkrq7xcoLPBVi67lovXkdS6BNHdvdciH9HLcRe73KB2kUvgfw==", + "license": "MIT", + "dependencies": { + "@phc/format": "^1.0.0", + "@poppinss/utils": "^7.0.1" + }, + "engines": { + "node": ">=20.6.0" + }, + "peerDependencies": { + "argon2": "^0.31.2 || ^0.41.0 || ^0.43.0 || ^0.44.0 || ^0.45.1", + "bcrypt": "^5.1.1 || ^6.0.0" + }, + "peerDependenciesMeta": { + "argon2": { + "optional": true + }, + "bcrypt": { + "optional": true + } + } + }, + "node_modules/@adonisjs/health": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@adonisjs/health/-/health-3.1.0.tgz", + "integrity": "sha512-m3doBnSwi/l9v1DO79xmjAoSPl9b2XCp+crGwF8QUlhe5CgWgtfnL0SeFNEiZGliD3c4gYdihKz4Pnydctva8A==", + "license": "MIT", + "dependencies": { + "@poppinss/utils": "^7.0.0", + "check-disk-space": "^3.4.0" + }, + "engines": { + "node": ">=24.0.0" + } + }, + "node_modules/@adonisjs/http-server": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/@adonisjs/http-server/-/http-server-9.3.1.tgz", + "integrity": "sha512-SX3JATI2PtSNYYia/I0rfJvUR4IHJ9GSluORTIwLfwpqi01nVkkXdokxea9XVh4Wn1z4OOIXy/5gfa8OlFrBxQ==", + "license": "MIT", + "dependencies": { + "@boringnode/route-matcher": "^0.1.1", + "@poppinss/macroable": "^1.1.2", + "@poppinss/matchit": "^3.2.0", + "@poppinss/middleware": "^3.2.7", + "@poppinss/qs": "^6.15.0", + "@poppinss/types": "^1.2.1", + "@poppinss/utils": "^7.0.1", + "@sindresorhus/is": "^8.1.0", + "content-disposition": "^1.1.0", + "cookie-es": "^3.1.1", + "destroy": "^1.2.0", + "encodeurl": "^2.0.0", + "etag": "^1.8.1", + "fresh": "^0.5.2", + "mime-types": "^3.0.2", + "on-finished": "^2.4.1", + "proxy-addr": "^2.0.7", + "tmp-cache": "^1.1.0", + "type-is": "^2.1.0", + "vary": "^1.1.2" + }, + "engines": { + "node": ">=24.0.0" + }, + "peerDependencies": { + "@adonisjs/application": "^9.0.0-next.14 || ^9.0.0", + "@adonisjs/events": "^10.1.0-next.4 || ^10.1.0", + "@adonisjs/fold": "^11.0.0-next.4 || ^11.0.0", + "@adonisjs/logger": "^7.1.0-next.3 || ^7.1.0", + "@boringnode/encryption": "^0.2.0 || ^1.0.0", + "youch": "^4.1.0-beta.13 || ^4.1.0" + }, + "peerDependenciesMeta": { + "youch": { + "optional": true + } + } + }, + "node_modules/@adonisjs/http-transformers": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@adonisjs/http-transformers/-/http-transformers-2.3.1.tgz", + "integrity": "sha512-N3gBcKyoPHDeVvVIedTzc+ARSUURwNGTPid/e3iLdM4v/myoSnXd76FL/GGzMmjfqqxegpjI2IEMibG7ylrKSQ==", + "license": "MIT", + "dependencies": { + "@poppinss/exception": "^1.2.3", + "@poppinss/types": "^1.2.1" + }, + "engines": { + "node": ">=24.0.0" + }, + "peerDependencies": { + "@adonisjs/fold": "^11.0.0-next.2" + } + }, + "node_modules/@adonisjs/logger": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@adonisjs/logger/-/logger-7.1.1.tgz", + "integrity": "sha512-MmUlp8xBMT6zZy0+vnQcQjHIlNfU4pUJARlINr7Bqha9BvhIn03QZgJL5QJ+kJe1tl6ZpNAryoRTJUiOk/wINQ==", + "license": "MIT", + "dependencies": { + "@poppinss/utils": "^7.0.0", + "abstract-logging": "^2.0.1", + "pino": "^10.3.1" + }, + "engines": { + "node": ">=24.0.0" + }, + "peerDependencies": { + "pino-pretty": "^13.1.1" + }, + "peerDependenciesMeta": { + "pino-pretty": { + "optional": true + } + } + }, + "node_modules/@adonisjs/lucid": { + "version": "22.4.2", + "resolved": "https://registry.npmjs.org/@adonisjs/lucid/-/lucid-22.4.2.tgz", + "integrity": "sha512-3ztENqBQIFSGAWREHKCGbL1g4ehtsxxsuFX72Uf5bq+oSc0D6UcumjzYpU8TPyBxhmgS6HuRSfz2rG42iuz7AA==", + "license": "MIT", + "dependencies": { + "@adonisjs/presets": "^3.0.0", + "@faker-js/faker": "^10.4.0", + "@poppinss/hooks": "^7.3.0", + "@poppinss/macroable": "^1.1.2", + "@poppinss/qs": "^6.15.0", + "@poppinss/utils": "^7.0.1", + "deepmerge": "^4.3.1", + "fast-deep-equal": "^3.1.3", + "igniculus": "^1.5.0", + "kleur": "^4.1.5", + "knex": "^3.2.8", + "knex-dynamic-connection": "^5.0.1", + "pretty-hrtime": "^1.0.3", + "slash": "^5.1.0", + "tarn": "^3.0.2" + }, + "engines": { + "node": ">=24.0.0" + }, + "peerDependencies": { + "@adonisjs/assembler": "^8.0.0-next.29 || ^8.0.0", + "@adonisjs/core": "^7.0.0-next.21 || ^7.0.0", + "@vinejs/vine": "^3.0.0 || ^4.0.0", + "luxon": "^3.4.4" + }, + "peerDependenciesMeta": { + "@adonisjs/assembler": { + "optional": true + }, + "@vinejs/vine": { + "optional": true + }, + "luxon": { + "optional": true + } + } + }, + "node_modules/@adonisjs/presets": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@adonisjs/presets/-/presets-3.0.0.tgz", + "integrity": "sha512-+gVIvyEiM7jiN5Gb93200TAC8ed3vZIPfxFFo0pIVgX8k40BleuYhWxFhI6TPocVXXIIpw2JuMFV2Pqjk36W2A==", + "license": "MIT", + "engines": { + "node": ">=24.0.0" + }, + "peerDependencies": { + "@adonisjs/assembler": "^8.0.0-next.9 || ^8.0.0", + "@adonisjs/core": "^7.0.0-next.1 || ^7.0.0" + }, + "peerDependenciesMeta": { + "@adonisjs/assembler": { + "optional": true + } + } + }, + "node_modules/@adonisjs/repl": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@adonisjs/repl/-/repl-5.0.0.tgz", + "integrity": "sha512-cPp0w5svYUA3M1gdxQBO2Mx5g+SZfPweqKCAxk7C1Os/Qu67JKgWqXqNnl1q0Tzv/l0L19Ms1C7ivzQxeBNajg==", + "license": "MIT", + "dependencies": { + "@poppinss/colors": "^4.1.6", + "string-width": "^8.2.0" + }, + "engines": { + "node": ">=24.0.0" + } + }, + "node_modules/@adonisjs/static": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@adonisjs/static/-/static-2.0.1.tgz", + "integrity": "sha512-pXSyQgha1yfyQDXPp0ywv7hJqk4JgCCkzWLkku2PW3Y6i/9GUTyzzNTCpz29loZzSF0b/EpiHXQE/sqBhW+p7w==", + "license": "MIT", + "dependencies": { + "serve-static": "^2.2.1" + }, + "engines": { + "node": ">=24.0.0" + }, + "peerDependencies": { + "@adonisjs/assembler": "^8.0.0-next.7 || ^8.0.0", + "@adonisjs/core": "^7.0.0-next.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "@adonisjs/assembler": { + "optional": true + } + } + }, + "node_modules/@adonisjs/tsconfig": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@adonisjs/tsconfig/-/tsconfig-2.0.0.tgz", + "integrity": "sha512-Uz8qvB6KR9otCh9zei2VEj7tPwdsrT7R+voYoN4tUfEijWRdTNgJ8d1CtyLKHaggCCOwZIwZLVklV/h2FDHgNw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@antfu/install-pkg": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-2.1.0.tgz", + "integrity": "sha512-sdg9NxU3zR4Mnawfbc/x6GB5Wf17WYud5qOuEuxXjaKpYpMkISSJEjItGebXJ2bQ4DIcly4NYH23mtkGJjvKUw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "package-manager-detector": "^1.8.0", + "tinyexec": "^1.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@arr/every": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@arr/every/-/every-1.0.1.tgz", + "integrity": "sha512-UQFQ6SgyJ6LX42W8rHCs8KVc0JS0tzVL9ct4XYedJukskYVWTo49tNiMEK9C2HTyarbNiT/RVIRSY82vH+6sTg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@ast-grep/napi": { + "version": "0.45.3", + "resolved": "https://registry.npmjs.org/@ast-grep/napi/-/napi-0.45.3.tgz", + "integrity": "sha512-bjJsUt0g3UCwbn9bjv7MnoR15rszSm79yPCXn4DWWK0NuYUUqBU/srtNMR4WnpfR7TnfBRdYFoqSNx0pGCNWJg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@ast-grep/napi-darwin-arm64": "0.45.3", + "@ast-grep/napi-darwin-x64": "0.45.3", + "@ast-grep/napi-linux-arm64-gnu": "0.45.3", + "@ast-grep/napi-linux-arm64-musl": "0.45.3", + "@ast-grep/napi-linux-x64-gnu": "0.45.3", + "@ast-grep/napi-linux-x64-musl": "0.45.3", + "@ast-grep/napi-win32-arm64-msvc": "0.45.3", + "@ast-grep/napi-win32-ia32-msvc": "0.45.3", + "@ast-grep/napi-win32-x64-msvc": "0.45.3" + } + }, + "node_modules/@ast-grep/napi-darwin-arm64": { + "version": "0.45.3", + "resolved": "https://registry.npmjs.org/@ast-grep/napi-darwin-arm64/-/napi-darwin-arm64-0.45.3.tgz", + "integrity": "sha512-rMZJ6frSpR/xSbeV4hiA9WR5hHqk3rVYX8lOqEoUCaUnjEuFXvHdGN4WawJ8pVDq/IqM1UnTtsDSYgUdVmO5DA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ast-grep/napi-darwin-x64": { + "version": "0.45.3", + "resolved": "https://registry.npmjs.org/@ast-grep/napi-darwin-x64/-/napi-darwin-x64-0.45.3.tgz", + "integrity": "sha512-tIclZ5pM+YSgk8NNTBoTkaclbS39cU5lbVfSrFWX4LUnxXfUPG+F+ppxyFjKwJTBELsGHEO4LdX3/Lc+FDwPNA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ast-grep/napi-linux-arm64-gnu": { + "version": "0.45.3", + "resolved": "https://registry.npmjs.org/@ast-grep/napi-linux-arm64-gnu/-/napi-linux-arm64-gnu-0.45.3.tgz", + "integrity": "sha512-Bm8F7/oRHQkDXbjH+gBi9oB5huJ0q12r/AIOMIypf5PWlAVvh206Tsw468phw4Oh6kd4Ad1Z+gflNW1MutgK2g==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ast-grep/napi-linux-arm64-musl": { + "version": "0.45.3", + "resolved": "https://registry.npmjs.org/@ast-grep/napi-linux-arm64-musl/-/napi-linux-arm64-musl-0.45.3.tgz", + "integrity": "sha512-yr5xcRerV41GeRxmZ8SKbfGeyZRhQePoNNCgTAb4OrWMelWwbMI80aY7/IlF2bo1sN40BSW4hZdGIO/akTd1RQ==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ast-grep/napi-linux-x64-gnu": { + "version": "0.45.3", + "resolved": "https://registry.npmjs.org/@ast-grep/napi-linux-x64-gnu/-/napi-linux-x64-gnu-0.45.3.tgz", + "integrity": "sha512-lluRK3hxfHMQdFuVID6seAKVx4FH0kEwF6rCh5/I40Sf3EtNR2UCBXAqd6RBA6hqlSckktvBxCfw+h4aescDmg==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ast-grep/napi-linux-x64-musl": { + "version": "0.45.3", + "resolved": "https://registry.npmjs.org/@ast-grep/napi-linux-x64-musl/-/napi-linux-x64-musl-0.45.3.tgz", + "integrity": "sha512-09wJQKq86LqILqQtw0+X09SzhcPwUnMVFKyia7S3XLbLqSeQpAMF55Y+zll53JRQ1dCzFEZJyvTT/7j9vwfE3w==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ast-grep/napi-win32-arm64-msvc": { + "version": "0.45.3", + "resolved": "https://registry.npmjs.org/@ast-grep/napi-win32-arm64-msvc/-/napi-win32-arm64-msvc-0.45.3.tgz", + "integrity": "sha512-/HiVgw2cdtzXLDLoG4eBBcauekNXewfagy7qiVbjkVu/KcCH8dJ9lpj8DzeWwuBNtZxuD8jpiwP0M1pz3Bc3uw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ast-grep/napi-win32-ia32-msvc": { + "version": "0.45.3", + "resolved": "https://registry.npmjs.org/@ast-grep/napi-win32-ia32-msvc/-/napi-win32-ia32-msvc-0.45.3.tgz", + "integrity": "sha512-/gwJrJQUw65uNtAFcG2rtSTr117Gqqy3bfjaljCPKsa65dTeRcMMnjKLlZ6V9/g8z+4Xf78kdhp5ECbir4yfSw==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ast-grep/napi-win32-x64-msvc": { + "version": "0.45.3", + "resolved": "https://registry.npmjs.org/@ast-grep/napi-win32-x64-msvc/-/napi-win32-x64-msvc-0.45.3.tgz", + "integrity": "sha512-CEZAMAsaDoQoVE3MT2c/ry3/ydfyaqlTjxv8DK5PG355SrdAYPgevGC2Me6tz4dhphJin89Y20VsnrS5UrYV5Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@borewit/text-codec": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.2.2.tgz", + "integrity": "sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/@boringnode/encryption": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@boringnode/encryption/-/encryption-1.0.1.tgz", + "integrity": "sha512-+UL9erFUngnxNEDdXSKCnGQA8D62C/x2vxLF5vc9zaX7T2JolV/bGjpZAvFLzlY2gIffHyw+KsqsEWod5+zV0w==", + "license": "MIT", + "dependencies": { + "@poppinss/utils": "^7.0.1" + }, + "engines": { + "node": ">=20.6" + } + }, + "node_modules/@boringnode/route-matcher": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@boringnode/route-matcher/-/route-matcher-0.1.1.tgz", + "integrity": "sha512-Iim6TZdwX3BuQ+m4wg5wIEviIoi0Xy6j6cpw4B2o1wppByUxafbLMgMIFJ6yS/l1XKXifEGcds9M1Gw7Fk8DUg==", + "license": "MIT", + "engines": { + "node": ">=20.6" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@faker-js/faker": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-10.6.0.tgz", + "integrity": "sha512-3RQHgEtvL1Frl/d1cSreo7qhJ3Gk1OdNUai/CtZ8G+wYeRQnJih3s9xJ9/kgYekPQRdwgh0HXRPqMlzWGwivIQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/fakerjs" + } + ], + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.13.0 || ^23.5.0 || >=24.0.0", + "npm": ">=10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@phc/format": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@phc/format/-/format-1.0.0.tgz", + "integrity": "sha512-m7X9U6BG2+J+R1lSOdCiITLLrxm+cWlNI3HUFA92oLO77ObGNzaKdh8pMLqdZcshtkKuV84olNNXDfMc4FezBQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/@pinojs/redact": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz", + "integrity": "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==", + "license": "MIT" + }, + "node_modules/@poppinss/cliui": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/@poppinss/cliui/-/cliui-6.8.1.tgz", + "integrity": "sha512-o/ssbwr+r6woG65rk9eFHnn9dVUphZr/Rk+4+05ENVMBWYpYhTJGdE9RobTG5JLFubvO4gWIyFeNlC+I4EM6eA==", + "license": "MIT", + "dependencies": { + "@poppinss/colors": "^4.1.6", + "cli-boxes": "^4.0.1", + "cli-table3": "^0.6.5", + "cli-truncate": "^5.2.0", + "log-update": "^7.2.0", + "pretty-hrtime": "^1.0.3", + "string-width": "^8.2.0", + "supports-color": "^10.2.2", + "terminal-size": "^4.0.1" + } + }, + "node_modules/@poppinss/colors": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@poppinss/colors/-/colors-4.1.6.tgz", + "integrity": "sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==", + "license": "MIT", + "dependencies": { + "kleur": "^4.1.5" + } + }, + "node_modules/@poppinss/dumper": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@poppinss/dumper/-/dumper-0.7.0.tgz", + "integrity": "sha512-0UTYalzk2t6S4rA2uHOz5bSSW2CHdv4vggJI6Alg90yvl0UgXs6XSXpH96OH+bRkX4J/06djv29pqXJ0lq5Kag==", + "license": "MIT", + "dependencies": { + "@poppinss/colors": "^4.1.5", + "@sindresorhus/is": "^7.0.2", + "supports-color": "^10.0.0" + } + }, + "node_modules/@poppinss/dumper/node_modules/@sindresorhus/is": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.2.0.tgz", + "integrity": "sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@poppinss/exception": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@poppinss/exception/-/exception-1.2.3.tgz", + "integrity": "sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==", + "license": "MIT" + }, + "node_modules/@poppinss/hooks": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@poppinss/hooks/-/hooks-7.3.1.tgz", + "integrity": "sha512-MyBiHAOmUPT8fY++IQIeiYnxknrLQ9WzrAlZlyyGbFh+C5Srdb+FhQbQkLivAQxIKkhiCeeoSpiGPcv5gDvirA==", + "license": "MIT" + }, + "node_modules/@poppinss/macroable": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@poppinss/macroable/-/macroable-1.1.2.tgz", + "integrity": "sha512-FAVBRzzWhYP5mA3lCwLH1A0fKBqq5anyjGet90Z81aRK5c/+LTGUE1zJhZrErjaenBSOOI9BVUs3WVmotneFQA==", + "license": "MIT" + }, + "node_modules/@poppinss/matchit": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@poppinss/matchit/-/matchit-3.2.0.tgz", + "integrity": "sha512-9SoMICN+LMO7ZtMj2ja8N7RHlC4mmuv5WwIBXWjabMd2SyXE1dIydh29exlgm+dGMP84PjwvfJH1TmWL4qz1og==", + "license": "MIT", + "dependencies": { + "@arr/every": "^1.0.0" + } + }, + "node_modules/@poppinss/middleware": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@poppinss/middleware/-/middleware-3.2.7.tgz", + "integrity": "sha512-MZC0Z97ozSz+PpfyxUPUy/ImuthpqvBbY7qku7f4Q2maHz+2uXfchfO8OggXLS6zEJ078l+jpAHZ2rDIRdjeVg==", + "license": "MIT" + }, + "node_modules/@poppinss/multiparty": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@poppinss/multiparty/-/multiparty-3.0.0.tgz", + "integrity": "sha512-z9jchUzsv7E+7sa4tWHb0+95Byx7w0ydlPGxg3nzyb7h3QlRdeW8/QkU9SexUY4lsT12do93AfNBAhSuOoVqjA==", + "license": "MIT", + "dependencies": { + "http-errors": "^2.0.0" + } + }, + "node_modules/@poppinss/object-builder": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@poppinss/object-builder/-/object-builder-1.1.0.tgz", + "integrity": "sha512-FOrOq52l7u8goR5yncX14+k+Ewi5djnrt1JwXeS/FvnwAPOiveFhiczCDuvXdssAwamtrV2hp5Rw9v+n2T7hQg==", + "license": "MIT", + "engines": { + "node": ">=20.6.0" + } + }, + "node_modules/@poppinss/prompts": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@poppinss/prompts/-/prompts-3.1.6.tgz", + "integrity": "sha512-cKHfkID6b3wl1kbHJJRC/pznQ3KnRVydyk7CE38NfTV3VS45BDYCxeZZ7bfDin71qMzITh18lKnu8iuLxBngHA==", + "license": "MIT", + "dependencies": { + "@poppinss/colors": "^4.1.6", + "@poppinss/exception": "^1.2.2", + "@poppinss/object-builder": "^1.1.0", + "enquirer": "^2.4.1" + } + }, + "node_modules/@poppinss/qs": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@poppinss/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-QzfMhxrRB5EPeGz0l8hTwKZ5dFX6ed0aETGbuD369StCO8Ad3SW4wWBYamOK5IKeM/dfOeKaCwUZPTnGcj+jKg==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@poppinss/string": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@poppinss/string/-/string-1.7.2.tgz", + "integrity": "sha512-A182GLDfi36iDCbhDrHB0xzrPM1fO3GHnhCDIdadf8C6eycgct4m7zusbLwEh6GPaj2Pz5BVos7XK16w7tZ7wQ==", + "license": "MIT", + "dependencies": { + "@types/pluralize": "^0.0.33", + "case-anything": "^3.1.2", + "pluralize": "^8.0.0", + "slugify": "^1.6.9" + } + }, + "node_modules/@poppinss/ts-exec": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/@poppinss/ts-exec/-/ts-exec-1.4.4.tgz", + "integrity": "sha512-jQLbeQG3n9B+hpygIAQpNaNd3y9+7sLn0Jioo9qEo84Vd3XeRMKr3Qql/u2bixzONO2+RsBbzEJ3AWb2iCPARw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@swc/core": "~1.15.11", + "get-tsconfig": "^4.13.0" + }, + "engines": { + "node": ">=24.0.0" + } + }, + "node_modules/@poppinss/types": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@poppinss/types/-/types-1.2.1.tgz", + "integrity": "sha512-qUYnzl0m9HJTWsXtr8Xo7CwDx6wcjrvo14bOVbIMIlKJCzKrm3LX55dRTDr1/x4PpSvKVgmxvC6Ly2YiqXKOvQ==", + "license": "MIT" + }, + "node_modules/@poppinss/utils": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-7.1.1.tgz", + "integrity": "sha512-m1pR6EsycFyDHWDyoWnTI2sgEpOAZuKECQRgZ9i+uGzU/DNoEXn70ldt1V3u2EKp2tNf9T9QqX1wBMHm+xcpiw==", + "license": "MIT", + "dependencies": { + "@poppinss/exception": "^1.2.3", + "@poppinss/object-builder": "^1.1.0", + "@poppinss/string": "^1.7.2", + "@poppinss/types": "^1.2.1", + "flattie": "^1.1.1" + } + }, + "node_modules/@poppinss/validator-lite": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@poppinss/validator-lite/-/validator-lite-2.1.2.tgz", + "integrity": "sha512-UhSG1ouT6r67VbEFHK/8ax3EMZYHioew9PqGmEZjV41G15aPZi6cyhXtBVvF9xqkHMflA5V680k7bQzV0kfD5w==", + "license": "MIT" + }, + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@sindresorhus/is": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-8.1.0.tgz", + "integrity": "sha512-2SX/1jW6CIMAiebvVv5ZInoCEuWQmMyBoJXXGC6Vjakjp/fpxP5eHs7/V6WKuPEIbuK06+VpjH+vjLQhr98rDQ==", + "license": "MIT", + "engines": { + "node": ">=22" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@speed-highlight/core": { + "version": "1.2.24", + "resolved": "https://registry.npmjs.org/@speed-highlight/core/-/core-1.2.24.tgz", + "integrity": "sha512-qeW2e1l78afw8VhRPfPQ1Gjj+KU5XFQ/OFV5ti6eTa9bruO7mJyZtA4vw0ofqmA3tKCkROE9xLk3VZoeRc98nw==", + "license": "CC0-1.0", + "peer": true + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "license": "MIT" + }, + "node_modules/@swc/core": { + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.47.tgz", + "integrity": "sha512-FbsO5JcfOjfH38W/rohBRBweJeERsAuIP4f377lmkmxTcq9exjtx4SkRuZY5CdfhR2CBVwDIJegBpJDffwNsOg==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3", + "@swc/types": "^0.1.27" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.15.47", + "@swc/core-darwin-x64": "1.15.47", + "@swc/core-linux-arm-gnueabihf": "1.15.47", + "@swc/core-linux-arm64-gnu": "1.15.47", + "@swc/core-linux-arm64-musl": "1.15.47", + "@swc/core-linux-ppc64-gnu": "1.15.47", + "@swc/core-linux-s390x-gnu": "1.15.47", + "@swc/core-linux-x64-gnu": "1.15.47", + "@swc/core-linux-x64-musl": "1.15.47", + "@swc/core-win32-arm64-msvc": "1.15.47", + "@swc/core-win32-ia32-msvc": "1.15.47", + "@swc/core-win32-x64-msvc": "1.15.47" + }, + "peerDependencies": { + "@swc/helpers": ">=0.5.17" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.47.tgz", + "integrity": "sha512-GsoMtan3ojGGMGFbl31mmRu5ctZ56re8grGE8mO/OHJ8O+JRkzod02fe7X6ZQ8JvamA3imkEkx/h3u+vsOgPgA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.47.tgz", + "integrity": "sha512-leTi7Rx3KF4zcC637iqWgk9SoV8VXAD8ppQYXsep63px5A/UftOcxLN1pmr8Z1si/YvX90ompP/rHgpYkgwXWg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.47.tgz", + "integrity": "sha512-hBqHuoWKKIsKmDBn9qVeWqj5GWZhtlcczVaqQmNRXsDfq+voR5CxKRfamA367QjJXtceYuliLFfEL8QsskRM2g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.47.tgz", + "integrity": "sha512-TBxvRz+B4K205TWHHZxWVxkC2RFNP/Mz3PNcECBos5PsKwxjg3QSJzdoebr0VCf0Bfh8HOPldKxAP/8XkFe9gA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.47.tgz", + "integrity": "sha512-3Yu3Uq/VgytqsPjTMbkPU1ExADytbdWbruJYhA584E9jrpE2Ki+R6VVPoZCeAVk1Cb7QxcRTgblw6bSa6a/R+w==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-ppc64-gnu": { + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core-linux-ppc64-gnu/-/core-linux-ppc64-gnu-1.15.47.tgz", + "integrity": "sha512-wfdMi5IaOaNtmh2/6geRoxIdNfqylUZFdtzTKS655y1axWfIWyx7As74vv0wVdjeCIZ3WmCI9odDd4rUttXOSQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-s390x-gnu": { + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core-linux-s390x-gnu/-/core-linux-s390x-gnu-1.15.47.tgz", + "integrity": "sha512-3hHYBY0yx8Ez7GMRrkhXHQzMdR5IZA6Wq5Ee4svlgwvSECLpnAJ9+0AimEGUFDvuLwE7nV/2+PYe8+Nm4rvNcQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.47.tgz", + "integrity": "sha512-TjfhjgP/jGCfFHYC3JQPhJA1HwErbIJ9JfREDc1KNkvY6P0LodCgKVIlQ5deeTbkG7ih3bF5PHJLuLpaZjdRyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.47.tgz", + "integrity": "sha512-CQpS8Ge/avfjZd0UEwG/sds83Uu32deQXcV1Jo3jD0mmvQQqtYAjpsDZXugmheeAwmt+YIuoVtVHro8LMYHqsQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.47.tgz", + "integrity": "sha512-0W8IKHsUTYiT7G2RqtOoVWk+89yzZikIiDUb/sCK6BmQDBhN91hQSfyUtW12jhEWLzYgcfmisfsZrmZE+84U1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.47.tgz", + "integrity": "sha512-ZIp49d2Z4/ka2jO9otOg4hDvTdPmp86kVOgS2M5FCPI7eKKZ1W0boxWn+8XeZrfERtFGW0AlMRm4JhlJa7l3NA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.47.tgz", + "integrity": "sha512-2h8Iek95vnixkBRCo+H8p09+Q5ll2NgSMFrWTy0iKt7+/t+8/T5mBpiT6c0ZxSS7wcWjwZ9sGZkK70tTSYHdDw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@swc/types": { + "version": "0.1.28", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.28.tgz", + "integrity": "sha512-V6Mnml8v09QALx6K0elJ7o9K/MkVDtW3t6L+7Ou/JcWtb3xwId2AH4FeOceySd2JaO87IMw4+6vSZxLm34LPbw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3" + } + }, + "node_modules/@tokenizer/inflate": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.4.1.tgz", + "integrity": "sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "token-types": "^6.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", + "license": "MIT" + }, + "node_modules/@ts-morph/common": { + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.29.0.tgz", + "integrity": "sha512-35oUmphHbJvQ/+UTwFNme/t2p3FoKiGJ5auTjjpNTop2dyREspirjMy82PLSC1pnDJ8ah1GU98hwpVt64YXQsg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "minimatch": "^10.0.1", + "path-browserify": "^1.0.1", + "tinyglobby": "^0.2.14" + } + }, + "node_modules/@types/he": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/he/-/he-1.2.3.tgz", + "integrity": "sha512-q67/qwlxblDzEDvzHhVkwc1gzVWxaNxeyHUBF4xElrvjL11O+Ytze+1fGpBHlr/H9myiBUaUXNnNPmBHxxfAcA==", + "license": "MIT" + }, + "node_modules/@types/luxon": { + "version": "3.7.6", + "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.7.6.tgz", + "integrity": "sha512-6KSjliQAXK8ZLgFQO4B7iE4Rpf/B3rItzCFuXezBY/XIAGxOdLd7vRNK9/StRPwiS/yJsVbB7HKpW46B8tcEuQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.19.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.19.1.tgz", + "integrity": "sha512-aS3/DG0oM05K0RIXXP+hKjinGG5IgSSVGzswZxW3O0sS3pH4/fycXundUC9XsszgKCk4gHXylTEK6hyFxVxnoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": ">=7.24.0 <7.24.7" + } + }, + "node_modules/@types/pluralize": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/pluralize/-/pluralize-0.0.33.tgz", + "integrity": "sha512-JOqsl+ZoCpP4e8TDke9W79FDcSgPAR0l6pixx2JHkhnRjvShyYiAYw2LVsnA7K08Y6DeOnaU6ujmENO4os/cYg==", + "license": "MIT" + }, + "node_modules/@types/validator": { + "version": "13.15.10", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.15.10.tgz", + "integrity": "sha512-T8L6i7wCuyoK8A/ZeLYt1+q0ty3Zb9+qbSSvrIVitzT3YjZqkTZ40IbRsPanlB4h1QB3JVL1SYCdR6ngtFYcuA==", + "license": "MIT" + }, + "node_modules/@vinejs/compiler": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@vinejs/compiler/-/compiler-4.1.3.tgz", + "integrity": "sha512-UyH7Zn8dkTMLeU+PF2WjCnWkFb2qYaOxAcvp/uXW0njtKNcJOnVJaPsnWYwqewkTcHN47yvOdzosj3kj3RAP5w==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@vinejs/vine": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@vinejs/vine/-/vine-4.4.0.tgz", + "integrity": "sha512-cfnNXjs9+f+22d3Eb8koyg2qlCbaT394XBlL4AeEr1WM+NH1omFcXwe1zrkW4hHwPDSfUd4lFUdNO6E+YnTeWQ==", + "license": "MIT", + "dependencies": { + "@poppinss/macroable": "^1.1.0", + "@poppinss/types": "^1.2.1", + "@standard-schema/spec": "^1.1.0", + "@types/validator": "^13.15.10", + "@vinejs/compiler": "^4.1.3", + "camelcase": "^9.0.0", + "dayjs": "^1.11.19", + "dlv": "^1.1.3", + "normalize-url": "^8.1.1", + "validator": "^13.15.26" + }, + "engines": { + "node": ">=18.16.0" + } + }, + "node_modules/abstract-logging": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz", + "integrity": "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==", + "license": "MIT" + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", + "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/brace-expansion": { + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.12.tgz", + "integrity": "sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bundle-name": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.1.tgz", + "integrity": "sha512-DdH81/zPLVS11EUgWq3tEu/xn+EzljlMYooDNdzWEnFha3R3NBMpMV1UqYIpjYHV/SgpFKMIX1Oh7o06SjM/oA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/camelcase": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-9.0.0.tgz", + "integrity": "sha512-TO9xmyXTZ9HUHI8M1OnvExxYB0eYVS/1e5s7IDMTAoIcwUd+aNcFODs6Xk83mobk0velyHFQgA1yIrvYc6wclw==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/case-anything": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/case-anything/-/case-anything-3.1.7.tgz", + "integrity": "sha512-52UPzAJDZgxaNsYK4kvmov1kVaAfPc+OU2j0OSUZWbdWMuJd7Axi94XWSfSuafMd7K9avhsEnU6W6rXJdAd+Ug==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/check-disk-space": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/check-disk-space/-/check-disk-space-3.4.0.tgz", + "integrity": "sha512-drVkSqfwA+TvuEhFipiR1OC9boEGZL5RrWvVsOthdcvQNXyCCuKkEiTOTXZ7qxSf/GLwq4GvzfrQD/Wz325hgw==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/cli-boxes": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-4.0.1.tgz", + "integrity": "sha512-5IOn+jcCEHEraYolBPs/sT4BxYCe2nHg374OPiItB1O96KZFseS2gthU4twyYzeDcFew4DaUM/xwc5BQf08JJw==", + "license": "MIT", + "engines": { + "node": ">=18.20 <19 || >=20.10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cli-table3/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-table3/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-truncate": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.2.0.tgz", + "integrity": "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==", + "license": "MIT", + "dependencies": { + "slice-ansi": "^8.0.0", + "string-width": "^8.2.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/code-block-writer": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-13.0.3.tgz", + "integrity": "sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "license": "MIT" + }, + "node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/content-disposition": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", + "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cookie-es": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-3.1.1.tgz", + "integrity": "sha512-UaXxwISYJPTr9hwQxMFYZ7kNhSXboMXP+Z3TRX6f1/NyaGPfuNUZOWP1pUEb75B2HjfklIYLVRfWiFZJyC6Npg==", + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/dayjs": { + "version": "1.11.23", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.23.tgz", + "integrity": "sha512-QDTCU0M0MxR3hQfnlDJfwekQiaanm1ubOD231u73WBckQ/fsamwRLiE2GBz6D3a/xF1NgfiDLJjXBa1hYOYTtQ==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/dedent": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.2.tgz", + "integrity": "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==", + "devOptional": true, + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.1.tgz", + "integrity": "sha512-m1pAzaJgZ/gssEqlOhJkPJp8Xly7QyW6xcrkUa2KKcDeDSEMP7X8xipU3snUcfisTQx0w1AGae+9UtJSfVnXGw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/emittery": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-1.2.1.tgz", + "integrity": "sha512-sFz64DCRjirhwHLxofFqxYQm6DCp6o0Ix7jwKQvuCHPn4GMRZNuBZyLPu9Ccmk/QSCAMZt6FOUqA8JZCQvA9fw==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/error-stack-parser-es": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-2.0.1.tgz", + "integrity": "sha512-J36ntO+rMQVRuR/umlmxmfLi4TpWwtmTnHoJoXTiC2xDNazs0VDPKcX6pbhZMDd2HFtH9isMBJXMdbki+A++Pg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "license": "MIT" + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/esm": { + "version": "3.2.25", + "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", + "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/execa": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.6.1.tgz", + "integrity": "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^4.0.0", + "cross-spawn": "^7.0.6", + "figures": "^6.1.0", + "get-stream": "^9.0.0", + "human-signals": "^8.0.1", + "is-plain-obj": "^4.1.0", + "is-stream": "^4.0.1", + "npm-run-path": "^6.0.0", + "pretty-ms": "^9.2.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^4.0.0", + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": "^18.19.0 || >=20.5.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastq": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.3.tgz", + "integrity": "sha512-XKv5nnLs6nLF71NgiKJLIZFLkPyIEuOselLG7ujZnGrRfQK8HpvY+WqKhAJUAdLomwVHErVS4LfxFlPq0/FTAw==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/figures": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", + "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "is-unicode-supported": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-type": { + "version": "22.1.1", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-22.1.1.tgz", + "integrity": "sha512-sEB0oStmeLGtpmSAD88RDNuLsvhv4iC3u0lE25CUvfCULvj49xoQ3l3K525Vn+ZzsZ6DOLajQCV6RmhwwhqiJg==", + "license": "MIT", + "dependencies": { + "@tokenizer/inflate": "^0.4.1", + "strtok3": "^10.3.5", + "token-types": "^6.1.2", + "uint8array-extras": "^1.5.0" + }, + "engines": { + "node": ">=22" + }, + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flattie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz", + "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.7.0.tgz", + "integrity": "sha512-XjH1AECxf0giL2V1aU8vKyRR2ppRUb5c0EvT7zuJTokQ74bNo52zOtghqdWIqrhUD79fo3x0WfKZdOqxF6LG1Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-port": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-7.2.0.tgz", + "integrity": "sha512-afP4W205ONCuMoPBqcR6PSXnzX35KTcJygfJfcp+QY+uwm3p20p1YczWXhlICIzGMCxYBQcySEcOgsJcrkyobg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-tsconfig": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.3.tgz", + "integrity": "sha512-++QEw4DIY7WGoukz+/+A/8dGYPT9l9yIadnmSgZ8Rjr3YVSVDipQSO9CdnJo9ePqFqUUqh+wk9uIaoiAwsiPkA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/getopts": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/getopts/-/getopts-2.3.0.tgz", + "integrity": "sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA==", + "license": "MIT" + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/human-signals": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", + "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", + "devOptional": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz", + "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/igniculus": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/igniculus/-/igniculus-1.5.0.tgz", + "integrity": "sha512-vhj2J/cSzNg2G5tcK4Z1KZdeYmQa5keoxFULUYAxctK/zHJb1oraO7noCqnJxKe1b2eZdiiaSL1IHPOFAI8UYQ==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/import-meta-resolve": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", + "devOptional": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/inflation": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.1.0.tgz", + "integrity": "sha512-t54PPJHG1Pp7VQvxyVCJ9mBbjG3Hqryges9bXoOO6GExCPa+//i/d5GSuFtpx3ALLd7lgIAur6zrIlBQyJuMlQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-core-module": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.17.0.tgz", + "integrity": "sha512-J/vG0zBCbIKOQFfufSwyXdMrsohyJIUNkrnmo6WZGzoM7tr/lsbfW5b2BvisL6zsyMzK9UxV9L6c7AoFbyXHOA==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "devOptional": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-in-ssh": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-in-ssh/-/is-in-ssh-1.0.0.tgz", + "integrity": "sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "devOptional": true, + "license": "ISC" + }, + "node_modules/jsonschema": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.5.0.tgz", + "integrity": "sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/junk": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/junk/-/junk-4.0.1.tgz", + "integrity": "sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/knex": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/knex/-/knex-3.3.0.tgz", + "integrity": "sha512-LgWl031hNuLv9Lhxdd9093zULa2aNcoP04Bk29e5NidgRcEr/T0rAr2WYi4BhjTiCDoQiRU56meUE5rppLKZzQ==", + "license": "MIT", + "dependencies": { + "colorette": "2.0.19", + "commander": "^10.0.0", + "debug": "4.3.4", + "escalade": "^3.1.1", + "esm": "^3.2.25", + "get-package-type": "^0.1.0", + "getopts": "2.3.0", + "interpret": "^2.2.0", + "lodash": "^4.18.1", + "pg-connection-string": "2.6.2", + "rechoir": "^0.8.0", + "resolve-from": "^5.0.0", + "tarn": "^3.1.0", + "tildify": "2.0.0" + }, + "bin": { + "knex": "bin/cli.js" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "pg-query-stream": "^4.14.0" + }, + "peerDependenciesMeta": { + "better-sqlite3": { + "optional": true + }, + "mariadb": { + "optional": true + }, + "mysql": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "pg": { + "optional": true + }, + "pg-native": { + "optional": true + }, + "pg-query-stream": { + "optional": true + }, + "sqlite3": { + "optional": true + }, + "tedious": { + "optional": true + } + } + }, + "node_modules/knex-dynamic-connection": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/knex-dynamic-connection/-/knex-dynamic-connection-5.1.1.tgz", + "integrity": "sha512-xtl22O5I8e+G3ie90FfRaiODnYDgLD1erJeaeKVP+zuj4WMNJpgdmhs0qVaeigAJXsthCYA+pjmegXZh4xg2TA==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "knex": "3.3.0" + }, + "engines": { + "node": ">=24.0.0" + } + }, + "node_modules/knex/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/knex/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT" + }, + "node_modules/lodash": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "license": "MIT" + }, + "node_modules/log-update": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-7.2.0.tgz", + "integrity": "sha512-iLs7dGSyjZiUgvrUvuD3FndAxVJk+TywBkkkwUSm9HdYoskJalWg5qVsEiXeufPvRVPbCUmNQewg798rx+sPXg==", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^7.3.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^8.0.0", + "strip-ansi": "^7.2.0", + "wrap-ansi": "^10.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-regex": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.4.0.tgz", + "integrity": "sha512-KzTVk2tCWAHtYrvvvaP8bJKJq2pVinhLcGEQdtLIYPbmNGNyYe8QwNaTUYQp2J7/vIsUKt5QCqAfUkYyG9DkOw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/log-update/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/luxon": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.7.2.tgz", + "integrity": "sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/media-typer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.1.tgz", + "integrity": "sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", + "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", + "devOptional": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.8" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/normalize-url": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.1.tgz", + "integrity": "sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/on-exit-leak-free": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/open/-/open-11.0.4.tgz", + "integrity": "sha512-++Zlftm0kVLPmzC06t6epuWmcRMDbI4z5P3NNX979WA/k23+NtSOynEGzsVfZwguKw2mi5umVgnBlJQMwRz4Pg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "default-browser": "^5.5.1", + "define-lazy-prop": "^3.0.0", + "is-in-ssh": "^1.0.0", + "is-inside-container": "^1.0.0", + "powershell-utils": "^0.2.1", + "wsl-utils": "^1.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-manager-detector": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.8.0.tgz", + "integrity": "sha512-yQA4H19AmPEoMUeavPMDIe1higySl/gH/yaQrkT/s07Qp+7pp2hYz30N3z2l5BkjVkF9Ow6o0wjJamm2y7Sn0A==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/parse-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/parse-imports/-/parse-imports-3.0.0.tgz", + "integrity": "sha512-IwiqoJANa4O6M76LBWEvoS2iPIUqBOnKG1lV3/J0oVM6V2XjED+mYAXedEMX5xUglVjfGpZOfaEyuOUjBuUE4g==", + "license": "Apache-2.0 AND MIT", + "dependencies": { + "es-module-lexer": "^1.7.0", + "slashes": "^3.0.12" + }, + "engines": { + "node": ">= 22" + }, + "funding": { + "url": "https://github.com/sponsors/TomerAberbach" + } + }, + "node_modules/parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/pg": { + "version": "8.23.1", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.23.1.tgz", + "integrity": "sha512-aL96AHANtWjPLDOLqnhx+ngp9+UK7ETEU8VJrDCGvsSSi/mGLcWYsS6Herg7lmaBJe4uwrfqsa7gTEFaSizDoQ==", + "license": "MIT", + "dependencies": { + "pg-connection-string": "^2.14.1", + "pg-pool": "^3.14.0", + "pg-protocol": "^1.16.1", + "pg-types": "2.2.0", + "pgpass": "1.0.5" + }, + "engines": { + "node": ">= 16.0.0" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.4.1" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-cloudflare": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.4.1.tgz", + "integrity": "sha512-6PQbsFWZcp9EmJEwy5cGQ2La+AMWpP46lgbb8X+U/XsHIUweYDNCpeuKck5RxL2MdVFi7krbbEi5nX4Zh7JhrQ==", + "license": "MIT", + "optional": true + }, + "node_modules/pg-connection-string": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.2.tgz", + "integrity": "sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==", + "license": "MIT" + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "license": "ISC", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-pool": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.14.0.tgz", + "integrity": "sha512-gKtPkFdQPU3DksooVLi9LsjZxrsBUZIpa+7aVx+LV5pNh0KzP4Zleud2po+ConrxbuXGBJ6Hfer6hdgpIBpBaw==", + "license": "MIT", + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.16.1.tgz", + "integrity": "sha512-p9VOFMiHB/ZbJATetbg+99PxssTVSQRnyuPSQ67mN1+1KBOjZaZ83ZQzltnxPhJwSsC3nwVjJ10DVJlerbFzLg==", + "license": "MIT" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "license": "MIT", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pg/node_modules/pg-connection-string": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.14.1.tgz", + "integrity": "sha512-qR3kGNPBLpCNtz0evbKA0Y/MRFXwSSdT+pTJvYp/bXTcReZbvX1kzF0IyTc1QnxqF7AZbOeBhNL8R5mYQZV/MA==", + "license": "MIT" + }, + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "license": "MIT", + "dependencies": { + "split2": "^4.1.0" + } + }, + "node_modules/picomatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", + "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pino": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-10.4.0.tgz", + "integrity": "sha512-bk1ZMTwG/Vymx+zPoa28MhNzucFvXJWp3csrSuxuHPSMeUettaCoQ5Jvg07mtC4JGNpcfTwz41oVCnNgBK9+vA==", + "license": "MIT", + "dependencies": { + "@pinojs/redact": "^0.4.0", + "atomic-sleep": "^1.0.0", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^3.0.0", + "pino-std-serializers": "^7.0.0", + "process-warning": "^5.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^1.0.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^4.0.1", + "thread-stream": "^4.0.0" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-abstract-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-3.0.0.tgz", + "integrity": "sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==", + "license": "MIT", + "dependencies": { + "split2": "^4.0.0" + } + }, + "node_modules/pino-std-serializers": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz", + "integrity": "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==", + "license": "MIT" + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.1.tgz", + "integrity": "sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "license": "MIT", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/powershell-utils": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/powershell-utils/-/powershell-utils-0.2.1.tgz", + "integrity": "sha512-C+y9x90UElAddDZmV4qOx9W53B61PO7cIqWz2dQsWlwswuq4mr8NEwytdGKboYbQlGZ3awrkTeNvcZiZNHnQ8A==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pretty-ms": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.1.tgz", + "integrity": "sha512-HzMy3Geq23nVALD/M2LliU+F+M+gVNsvkQWWqeBZ8HDiCgzo6YPJ/Omrmtq24EFrIsk0a3EkQGEd7bDOo+IhGA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "parse-ms": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/process-warning": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.1.0.tgz", + "integrity": "sha512-jQSaVHsPgtyw60e1rQ/A+/ArPEj/S8pS/vFnyGa/gYFXrKk/6RuDkoqVDQ5NI5MmS01698ltlAk0NoDBNLujRw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" + }, + "node_modules/proxy-addr": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.8.tgz", + "integrity": "sha512-5nnx0yGyVUcY6t9RnWcARWtwT9F1D8O9rt08htPvnd49W1IgZtmLkhu9WfMzQj1cFxjHIO6connUNVW5k7AVyQ==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "devOptional": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", + "license": "MIT" + }, + "node_modules/range-parser": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.3.0.tgz", + "integrity": "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/raw-body": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/readdirp": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.1.1.tgz", + "integrity": "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/real-require": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-1.0.0.tgz", + "integrity": "sha512-P4nbQYQfePJxRSmY+v/KINxVucm4NF3p3s7pJveMTtom52FR4YGltUQLB8idDXwDDWW+eYrWDFbuzUnjoWHF7g==", + "license": "MIT" + }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "license": "MIT", + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "license": "Apache-2.0" + }, + "node_modules/resolve": { + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "devOptional": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "devOptional": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "devOptional": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/send/node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/slashes": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/slashes/-/slashes-3.0.12.tgz", + "integrity": "sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==", + "license": "ISC" + }, + "node_modules/slice-ansi": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-8.0.0.tgz", + "integrity": "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.3", + "is-fullwidth-code-point": "^5.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slugify": { + "version": "1.6.9", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.9.tgz", + "integrity": "sha512-vZ7rfeehZui7wQs438JXBckYLkIIdfHOXsaVEUMyS5fHo1483l1bMdo0EDSWYclY0yZKFOipDy4KHuKs6ssvdg==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/sonic-boom": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz", + "integrity": "sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==", + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, + "node_modules/split-lines": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/split-lines/-/split-lines-3.0.0.tgz", + "integrity": "sha512-d0TpRBL/VfKDXsk8JxPF7zgF5pCUDdBMSlEL36xBgVeaX448t+yGXcJaikUyzkoKOJ0l6KpMfygzJU9naIuivw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string-width": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.3.0.tgz", + "integrity": "sha512-ZbmZM0JCihQN91dWnxoipT2KOEyHqEyfRXUyjuRhW8b/xnqPDoq4gWEVApTVa9db2wN8mmoikgFBbjh71+cGeQ==", + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.4.0.tgz", + "integrity": "sha512-KzTVk2tCWAHtYrvvvaP8bJKJq2pVinhLcGEQdtLIYPbmNGNyYe8QwNaTUYQp2J7/vIsUKt5QCqAfUkYyG9DkOw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strtok3": { + "version": "10.3.5", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.5.tgz", + "integrity": "sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==", + "license": "MIT", + "dependencies": { + "@tokenizer/token": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/supports-color": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz", + "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tarn": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/tarn/-/tarn-3.1.2.tgz", + "integrity": "sha512-3RTvqKZcK/17jnJ8rMKFXbyNogywTs1z0gVPPwFsJGX46rkmUHOdIaSQ/aVO1rS7nH+soiXiWk7rvUXxndm8Dg==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/tempura": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/tempura/-/tempura-0.4.1.tgz", + "integrity": "sha512-NQ4Cs23jM6UUp3CcS5vjmyjTC6dtA5EsflBG2cyG0wZvP65AV26tJ920MGvTRYIImCY13RBpOhc7q4/pu+FG5A==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/terminal-size": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/terminal-size/-/terminal-size-4.0.1.tgz", + "integrity": "sha512-avMLDQpUI9I5XFrklECw1ZEUPJhqzcwSWsyyI8blhRLT+8N1jLJWLWWYQpB2q2xthq8xDvjZPISVh53T/+CLYQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/thread-stream": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-4.2.0.tgz", + "integrity": "sha512-e2zZ96wSChazBsbENf/Pcm/4swHt2cEKQ92rhUjkL9GCKiTDJIaTBenjE/m9DXi0QBmTMDkFDdOomUy20A1tDQ==", + "license": "MIT", + "dependencies": { + "real-require": "^1.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/tildify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tildify/-/tildify-2.0.0.tgz", + "integrity": "sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tinyexec": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.3.1.tgz", + "integrity": "sha512-GCvB3aoys96IuDFBMcTB46JOR6mdMtAToqwiW8JlWhsoh1mhHi/xn9ss/Dg7N555GiJyEt2qzoG/NHCwM6h1EA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tmp-cache": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tmp-cache/-/tmp-cache-1.1.0.tgz", + "integrity": "sha512-j040fkL/x+XAZQ9K3bKGEPwgYhOZNBQLa3NXEADUiuno9C+3N2JJA4bVPDREixp604G3/vTXWA3DIPpA9lu1RQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/token-types": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.1.2.tgz", + "integrity": "sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==", + "license": "MIT", + "dependencies": { + "@borewit/text-codec": "^0.2.1", + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/ts-morph": { + "version": "28.0.0", + "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-28.0.0.tgz", + "integrity": "sha512-Wp3tnZ2bzwxyTZMtgWVzXDfm7lB1Drz+y9DmmYH/L702PQhPyVrp3pkou3yIz4qjS14GY9kcpmLiOOMvl8oG1g==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@ts-morph/common": "~0.29.0", + "code-block-writer": "^13.0.3" + } + }, + "node_modules/type-is": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", + "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==", + "license": "MIT", + "dependencies": { + "content-type": "^2.0.0", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/typescript": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uint8array-extras": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.6.0.tgz", + "integrity": "sha512-8iAasVS4wUx0gPLjH8Xtz2PeDzTSiy8QiLGu2DT3X5GU+egFEQhpnbtkehbAwjvDcxIERmCYcysiODFmE3Ud0Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/undici-types": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.24.6.tgz", + "integrity": "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==", + "dev": true, + "license": "MIT" + }, + "node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/validator": { + "version": "13.15.35", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.35.tgz", + "integrity": "sha512-TQ5pAGhd5whStmqWvYF4OjQROlmv9SMFVt37qoCBdqRffuuklWYQlCNnEs2ZaIBD1kZRNnikiZOS1eqgkar0iw==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-10.0.2.tgz", + "integrity": "sha512-6OLRNZqRntVGBm26ghZ5eZhCuWWyOkRCSn8XsOIuq5stpCE/tjLbdozd93naILZig0lmD8ANfRwnhn0DLeXGlg==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.3", + "string-width": "^8.2.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wsl-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-1.0.1.tgz", + "integrity": "sha512-c16PKLIRxBYpR3jSWsdS7SFp0COm5SOQdiFjY818dYFHJbMGuLBszpF07LBWmOS1uzrHa9VGdynsEgoeKy0oOQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0", + "powershell-utils": "^0.2.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yargs-parser": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "license": "ISC", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/yoctocolors": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.2.0.tgz", + "integrity": "sha512-xYqdZFUK/VYazNl/oCDYN+3WloWQwMfZxBoiNt6qNyk+xfOdi598muWE42rNZFp1kNOiqW936q5RhUdnpqElSg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/youch": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/youch/-/youch-4.1.1.tgz", + "integrity": "sha512-mxW3qiSnl+GRxXsaUMzv2Mbada1Y8CDltET9UxejDQe6DBYlSekghl5U5K0ReAikcHDi0G1vKZEmmo/NWAGKLA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@poppinss/colors": "^4.1.6", + "@poppinss/dumper": "^0.7.0", + "@speed-highlight/core": "^1.2.14", + "cookie-es": "^3.0.1", + "youch-core": "^0.3.3" + } + }, + "node_modules/youch-core": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/youch-core/-/youch-core-0.3.3.tgz", + "integrity": "sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@poppinss/exception": "^1.2.2", + "error-stack-parser-es": "^1.0.5" + } + }, + "node_modules/youch-core/node_modules/error-stack-parser-es": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-1.0.5.tgz", + "integrity": "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==", + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + } + } +} diff --git a/applications/asset-audit/api/package.json b/applications/asset-audit/api/package.json new file mode 100644 index 00000000..4c515279 --- /dev/null +++ b/applications/asset-audit/api/package.json @@ -0,0 +1,36 @@ +{ + "name": "asset-audit-api", + "version": "1.0.0", + "private": true, + "type": "module", + "scripts": { + "typecheck": "tsc --noEmit", + "build": "node ace build" + }, + "imports": { + "#controllers/*": "./app/controllers/*.js", + "#models/*": "./app/models/*.js", + "#services/*": "./app/services/*.js", + "#validators/*": "./app/validators/*.js", + "#middleware/*": "./app/middleware/*.js", + "#start/*": "./start/*.js", + "#config/*": "./config/*.js" + }, + "dependencies": { + "@adonisjs/core": "7.5.2", + "@adonisjs/lucid": "22.4.2", + "@adonisjs/static": "2.0.1", + "@vinejs/vine": "4.4.0", + "pg": "8.23.1", + "luxon": "3.7.2", + "reflect-metadata": "0.2.2" + }, + "devDependencies": { + "@adonisjs/assembler": "8.5.2", + "@adonisjs/tsconfig": "2.0.0", + "@poppinss/ts-exec": "1.4.4", + "@types/node": "24.19.1", + "@types/luxon": "3.7.6", + "typescript": "6.0.3" + } +} diff --git a/applications/asset-audit/api/start/env.ts b/applications/asset-audit/api/start/env.ts new file mode 100644 index 00000000..b889adc4 --- /dev/null +++ b/applications/asset-audit/api/start/env.ts @@ -0,0 +1,12 @@ +import { Env } from '@adonisjs/core/env' +export default await Env.create(new URL('../', import.meta.url), { + NODE_ENV: Env.schema.enum(['development', 'production', 'test'] as const), + HOST: Env.schema.enum(['127.0.0.1', '::1'] as const), + PORT: Env.schema.number(), + LOG_LEVEL: Env.schema.string(), + APP_KEY: Env.schema.secret(), + APP_ORIGIN: Env.schema.string({ format: 'url', tld: false }), + DB_HOST: Env.schema.string(), DB_PORT: Env.schema.number(), + DB_DATABASE: Env.schema.string(), DB_USER: Env.schema.string(), + DB_PASSWORD: Env.schema.secret(), PG_CA_CERT_PATH: Env.schema.string(), +}) diff --git a/applications/asset-audit/api/start/kernel.ts b/applications/asset-audit/api/start/kernel.ts new file mode 100644 index 00000000..f476eec5 --- /dev/null +++ b/applications/asset-audit/api/start/kernel.ts @@ -0,0 +1,4 @@ +import router from '@adonisjs/core/services/router' +import server from '@adonisjs/core/services/server' +server.use([() => import('#middleware/local_operator_middleware'), () => import('@adonisjs/static/static_middleware')]) +router.use([() => import('@adonisjs/core/bodyparser_middleware')]) diff --git a/applications/asset-audit/api/start/routes.ts b/applications/asset-audit/api/start/routes.ts new file mode 100644 index 00000000..cf527dc8 --- /dev/null +++ b/applications/asset-audit/api/start/routes.ts @@ -0,0 +1,8 @@ +import router from '@adonisjs/core/services/router' +import app from '@adonisjs/core/services/app' +const StocktakesController = () => import('#controllers/stocktakes_controller') +router.get('/', ({ response }) => response.download(app.publicPath('index.html'))) +router.get('/api/stocktakes', [StocktakesController, 'index']) +router.get('/api/stocktakes/:id', [StocktakesController, 'show']) +router.put('/api/stocktakes/:id', [StocktakesController, 'update']) +router.post('/api/stocktakes/:id/finalize', [StocktakesController, 'finalize']) diff --git a/applications/asset-audit/api/tsconfig.json b/applications/asset-audit/api/tsconfig.json new file mode 100644 index 00000000..86b69e8b --- /dev/null +++ b/applications/asset-audit/api/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "@adonisjs/tsconfig/tsconfig.app.json", + "compilerOptions": { + "rootDir": "./", + "outDir": "./build" + } +} diff --git a/applications/asset-audit/assets/stocktake-draft.png b/applications/asset-audit/assets/stocktake-draft.png new file mode 100644 index 0000000000000000000000000000000000000000..c8eb74297cba085541391f4600bfdfd51129cf5a GIT binary patch literal 112378 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

$Z14ZB(J{lz4bi9P^gWES=;G$z2zSjxaM}g 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

8`vDrD{6IBHPeD~eC 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 literal 0 HcmV?d00001 diff --git a/applications/asset-audit/package-lock.json b/applications/asset-audit/package-lock.json new file mode 100644 index 00000000..eeb5b8c2 --- /dev/null +++ b/applications/asset-audit/package-lock.json @@ -0,0 +1,64 @@ +{ + "name": "asset-audit", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "asset-audit", + "version": "1.0.0", + "hasInstallScript": true, + "devDependencies": { + "@playwright/test": "1.63.0" + }, + "engines": { + "node": ">=24.0.0" + } + }, + "node_modules/@playwright/test": { + "version": "1.63.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.63.0.tgz", + "integrity": "sha512-oxMK4vllB9RK5NQ2l1pq1IfOf2AvnEuj/vYGDj0H2nMtmtZpKtCwt/l00GEO6xjGfpBNAvjovvYdCm50dRQkpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright": "1.63.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/playwright": { + "version": "1.63.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.63.0.tgz", + "integrity": "sha512-+7ziBLidS4NaNCdt57SUDT+wYmmd5fmiQejUic/kb+YsYSCPyOOE9sebzMjNmQrsnNpDJqd4WHvV/8lfKfUDUg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.63.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/playwright-core": { + "version": "1.63.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.63.0.tgz", + "integrity": "sha512-rYCsBF/M5HjUch52bbtVONEFjv6Xu8sm8h72dNlR5bzIE1fvC/bxgspzkjSfU+MweEMmPM8KJebG6nnyxo5mCg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=20" + } + } + } +} diff --git a/applications/asset-audit/package.json b/applications/asset-audit/package.json new file mode 100644 index 00000000..b38a6f6f --- /dev/null +++ b/applications/asset-audit/package.json @@ -0,0 +1,19 @@ +{ + "name": "asset-audit", + "private": true, + "version": "1.0.0", + "scripts": { + "install": "npm ci --prefix api && npm ci --prefix ui", + "typecheck": "npm run typecheck --prefix api && npm run typecheck --prefix ui", + "build": "npm run build --prefix ui && npm run build --prefix api && node scripts/copy-ui.mjs", + "start": "cd api/build && node bin/server.js", + "test:integration": "node tests/integration.mjs", + "test:browser": "node tests/browser.mjs" + }, + "engines": { + "node": ">=24.0.0" + }, + "devDependencies": { + "@playwright/test": "1.63.0" + } +} diff --git a/applications/asset-audit/scripts/copy-ui.mjs b/applications/asset-audit/scripts/copy-ui.mjs new file mode 100644 index 00000000..4d3657db --- /dev/null +++ b/applications/asset-audit/scripts/copy-ui.mjs @@ -0,0 +1,3 @@ +import { cp, mkdir } from 'node:fs/promises' +await mkdir('api/build/public', { recursive: true }) +await cp('ui/dist/asset-audit/browser', 'api/build/public', { recursive: true }) diff --git a/applications/asset-audit/sql/bootstrap.sql b/applications/asset-audit/sql/bootstrap.sql new file mode 100644 index 00000000..e6cdb172 --- /dev/null +++ b/applications/asset-audit/sql/bootstrap.sql @@ -0,0 +1,13 @@ +\set ON_ERROR_STOP on +\getenv owner_password PG_OWNER_PASSWORD +\getenv app_password PG_APP_PASSWORD +BEGIN; +CREATE ROLE asset_audit_owner LOGIN PASSWORD :'owner_password'; +CREATE ROLE asset_audit_app LOGIN PASSWORD :'app_password'; +CREATE SCHEMA asset_audit AUTHORIZATION asset_audit_owner; +GRANT USAGE ON SCHEMA asset_audit TO asset_audit_app; +ALTER ROLE asset_audit_owner SET search_path = asset_audit, pg_catalog; +ALTER ROLE asset_audit_app SET search_path = asset_audit, pg_catalog; +ALTER ROLE asset_audit_app SET statement_timeout = '5s'; +ALTER ROLE asset_audit_app SET lock_timeout = '3s'; +COMMIT; diff --git a/applications/asset-audit/sql/grants.sql b/applications/asset-audit/sql/grants.sql new file mode 100644 index 00000000..65b6baf0 --- /dev/null +++ b/applications/asset-audit/sql/grants.sql @@ -0,0 +1,6 @@ +\set ON_ERROR_STOP on +BEGIN; +GRANT SELECT ON asset_audit.items, asset_audit.stocktakes, asset_audit.count_rows TO asset_audit_app; +GRANT UPDATE (counted_quantity) ON asset_audit.count_rows TO asset_audit_app; +GRANT UPDATE (status, revision, finalized_at) ON asset_audit.stocktakes TO asset_audit_app; +COMMIT; diff --git a/applications/asset-audit/tests/README.md b/applications/asset-audit/tests/README.md new file mode 100644 index 00000000..23d81e82 --- /dev/null +++ b/applications/asset-audit/tests/README.md @@ -0,0 +1,7 @@ +Run tests inside the Linux VM against a dedicated asset-audit database. The API must be stopped: the suites start the real production API and need its configured port. Supply runtime variables from .env.example plus TEST_OWNER_PASSWORD in a separate private test environment. No test is silently skipped when credentials are absent. + +The integration test creates a uniquely numbered sheet and removes it afterward. It verifies restart persistence, revision races, invalid quantities, incomplete/duplicate rows, origin/host checks, immutable finalization and runtime permissions. To prove transaction rollback after a late row error, it temporarily adds one fixture-scoped check constraint; it removes that constraint in finally. Do not run it against a shared production schema. + +The browser test uses Chromium installed inside the VM. It edits real AG Grid cells, checks invalid-entry feedback, saves/reloads, filters/sorts, demonstrates a two-tab conflict, and finalizes through PrimeNG's dialog. Evidence screenshots go to TEST_EVIDENCE_DIR (default /tmp/asset-audit-browser). + +The db:probe Ace command uses the application's Lucid configuration. Successful query, wrong CA and wrong servername runs are deliberate positive/negative controls; preserve each result separately. diff --git a/applications/asset-audit/tests/browser.mjs b/applications/asset-audit/tests/browser.mjs new file mode 100644 index 00000000..70038f39 --- /dev/null +++ b/applications/asset-audit/tests/browser.mjs @@ -0,0 +1,86 @@ +import assert from 'node:assert/strict' +import { chromium, expect } from '@playwright/test' +import { mkdir } from 'node:fs/promises' +import { client, fixture, removeFixture, startServer, stopServer, base, request } from './helpers.mjs' +const owner = await client(true) +const evidence = process.env.TEST_EVIDENCE_DIR ?? '/tmp/asset-audit-browser' +await mkdir(evidence, { recursive: true }) +let id, server, browser +try { + id = await fixture(owner, 'October equipment browser audit') + server = await startServer() + browser = await chromium.launch({ headless: true }) + const context = await browser.newContext({ viewport: { width: 1512, height: 1080 } }) + const page = await context.newPage() + const errors = [] + page.on('pageerror', (e) => errors.push(e.message)) + const openSheet = async (p) => { + await p.goto(base) + await p.getByText('Equipment count', { exact: true }).waitFor() + await p.locator('.p-select').click() + await p.getByRole('option', { name: 'October equipment browser audit' }).click() + await p.getByText('Equipment count', { exact: true }).waitFor() + } + const edit = async (p, rowIndex, value) => { + const cell = p.locator('.ag-row[row-index="' + rowIndex + '"] [col-id="counted"]') + await cell.dblclick() + const input = p.locator('.ag-cell-inline-editing input') + await input.fill(String(value)) + await input.press('Enter') + } + await openSheet(page) + assert.equal(await page.locator('#p-license-host').count(), 0) + await edit(page, 0, '-1') + await page.getByText('Enter a whole count from 0 to 1,000,000, or leave the cell empty.').waitFor() + assert.equal(await page.getByRole('button', { name: 'Save draft', exact: true }).isDisabled(), true) + const original = (await request('/api/stocktakes/' + id)).body + for (let i = 0; i < original.rows.length; i++) await edit(page, i, original.rows[i].expected + (i === 0 ? -2 : i === 1 ? 1 : 0)) + await page.getByText('Unsaved changes', { exact: true }).waitFor() + await page.screenshot({ path: evidence + '/stocktake-draft.png', fullPage: true }) + await page.getByRole('button', { name: 'Save draft', exact: true }).click() + await page.getByText('Draft saved. Your counts are stored in Postgres.').waitFor() + await page.reload() + await page.getByText('Equipment count', { exact: true }).waitFor() + await page.locator('.p-select').click() + await page.getByRole('option', { name: 'October equipment browser audit' }).click() + await page.getByText('Equipment count', { exact: true }).waitFor() + assert.equal((await request('/api/stocktakes/' + id)).body.rows[0].counted, 10) + await page.getByRole('textbox', { name: 'Filter equipment' }).fill('camera') + await expect(page.locator('.ag-row [col-id="sku"]')).toHaveCount(1) + await page.getByRole('textbox', { name: 'Filter equipment' }).fill('') + await page.locator('.ag-header-cell[col-id="sku"]').click() + await page.locator('.ag-row[row-index="2"] [col-id="sku"]').filter({ hasText: 'FAC-TOOL' }).waitFor() + // Reload resets grid sort so row indexes represent the original equipment order. + await openSheet(page) + const other = await context.newPage() + await openSheet(other) + await edit(page, 0, 9) + await page.getByRole('button', { name: 'Save draft', exact: true }).click() + await page.getByText('Draft saved. Your counts are stored in Postgres.').waitFor() + await edit(other, 0, 13) + await other.getByRole('button', { name: 'Save draft', exact: true }).click() + await other.getByText('Someone saved a newer revision. Reload the sheet before editing again.').waitFor() + assert.equal(await other.getByRole('button', { name: 'Save draft', exact: true }).isDisabled(), true) + await other.screenshot({ path: evidence + '/stocktake-conflict.png', fullPage: true }) + await other.getByRole('button', { name: 'Reload sheet', exact: true }).click() + await other.getByRole('button', { name: 'Discard and reload', exact: true }).click() + await other.getByText('Equipment count', { exact: true }).waitFor() + await other.getByRole('button', { name: 'Finalize sheet', exact: true }).click() + await other.getByRole('button', { name: 'Confirm finalization', exact: true }).click() + await other.getByText('Count sheet finalized. These counts are now read-only.').waitFor() + assert.equal(await other.getByRole('button', { name: 'Save draft', exact: true }).count(), 0) + assert.equal((await request('/api/stocktakes/' + id)).body.status, 'finalized') + await other.screenshot({ path: evidence + '/stocktake-finalized.png', fullPage: true }) + assert.deepEqual(errors, []) + console.log('PASS real Angular/PrimeNG/AG Grid editing, invalid entry, save/reload, filter/sort, two-tab conflict and finalization') + // An initial API failure must have visible feedback before a sheet exists. + await page.route('**/api/stocktakes', (route) => route.fulfill({ status: 503, contentType: 'application/json', body: '{}' })) + await page.goto(base) + await page.getByText('The count sheets could not be loaded. Check that the API is running.').waitFor() + console.log('PASS visible initial loading failure') +} finally { + if (browser) await browser.close() + if (server) await stopServer(server) + if (id) await removeFixture(owner, id) + await owner.end() +} diff --git a/applications/asset-audit/tests/helpers.mjs b/applications/asset-audit/tests/helpers.mjs new file mode 100644 index 00000000..5a2b0e11 --- /dev/null +++ b/applications/asset-audit/tests/helpers.mjs @@ -0,0 +1,52 @@ +import { createRequire } from 'node:module' +import { readFileSync } from 'node:fs' +import { spawn } from 'node:child_process' +const require = createRequire(new URL('../api/package.json', import.meta.url)) +const { Client } = require('pg') +export const base = process.env.APP_ORIGIN ?? 'http://127.0.0.1:3333' +export async function client(owner = false) { + if (owner && !process.env.TEST_OWNER_PASSWORD) throw new Error('TEST_OWNER_PASSWORD is required; use a dedicated fixture') + const c = new Client({ + host: process.env.DB_HOST, port: Number(process.env.DB_PORT), database: process.env.DB_DATABASE, + user: owner ? 'asset_audit_owner' : process.env.DB_USER, + password: owner ? process.env.TEST_OWNER_PASSWORD : process.env.DB_PASSWORD, + ssl: { ca: readFileSync(process.env.PG_CA_CERT_PATH, 'utf8'), rejectUnauthorized: true, servername: process.env.DB_HOST }, + }) + await c.connect() + return c +} +export async function fixture(owner, name = 'Browser equipment stocktake') { + const id = 100000 + Math.floor(Math.random() * 100000000) + await owner.query('INSERT INTO asset_audit.stocktakes (id, name, location) VALUES ($1, $2, $3)', [id, name, 'North workshop']) + await owner.query('INSERT INTO asset_audit.count_rows (stocktake_id,item_id,expected_quantity) SELECT $1,id,quantity FROM asset_audit.items', [id]) + return id +} +export async function removeFixture(owner, id) { + await owner.query('DELETE FROM asset_audit.count_rows WHERE stocktake_id=$1', [id]) + await owner.query('DELETE FROM asset_audit.stocktakes WHERE id=$1', [id]) +} +export async function request(path, method = 'GET', body) { + const response = await fetch(base + path, { + method, headers: { Origin: base, 'X-Asset-Audit': '1', 'Content-Type': 'application/json' }, + body: body === undefined ? undefined : JSON.stringify(body), + }) + return { status: response.status, body: await response.json() } +} +export async function startServer() { + const child = spawn(process.execPath, ['bin/server.js'], { cwd: new URL('../api/build/', import.meta.url), env: process.env, stdio: ['ignore', 'ignore', 'pipe'] }) + let stderr = '' + child.stderr.on('data', (chunk) => { stderr += chunk }) + for (let i = 0; i < 100; i++) { + if (child.exitCode !== null) throw new Error('API exited before readiness: ' + stderr.slice(-1000)) + try { const r = await request('/api/stocktakes'); if (r.status === 200) return child } catch {} + await new Promise((resolve) => setTimeout(resolve, 100)) + } + child.kill('SIGTERM') + throw new Error('API did not become ready') +} +export async function stopServer(child) { + if (child.exitCode !== null) return + const closed = new Promise((resolve) => child.once('exit', resolve)) + child.kill('SIGTERM') + await closed +} diff --git a/applications/asset-audit/tests/integration.mjs b/applications/asset-audit/tests/integration.mjs new file mode 100644 index 00000000..b132ec2d --- /dev/null +++ b/applications/asset-audit/tests/integration.mjs @@ -0,0 +1,75 @@ +import assert from 'node:assert/strict' +import { request as httpRequest } from 'node:http' +import { client, fixture, removeFixture, request, startServer, stopServer, base } from './helpers.mjs' +const owner = await client(true) +const runtime = await client() +let server +let id +try { + id = await fixture(owner, 'HTTP transaction test') + server = await startServer() + let result = await request('/api/stocktakes/' + id) + assert.equal(result.status, 200) + const initial = result.body + const counts = initial.rows.map((r) => ({ itemId: r.itemId, counted: r.expected })) + const save = (revision, rows = counts) => request('/api/stocktakes/' + id, 'PUT', { revision, counts: rows }) + const finalize = (revision) => request('/api/stocktakes/' + id + '/finalize', 'POST', { revision }) + + assert.equal((await finalize(0)).status, 422) + assert.equal((await save(0, counts.map((r, i) => ({ ...r, counted: i === 0 ? -1 : r.counted })))).status, 422) + assert.equal((await save(0, counts.map((r, i) => ({ ...r, counted: i === 0 ? 1.5 : r.counted })))).status, 422) + assert.equal((await save(0, counts.slice(1))).status, 422) + assert.equal((await save(0, counts.map((r, i) => i === 1 ? counts[0] : r))).status, 422) + const badOrigin = await fetch(base + '/api/stocktakes/' + id, { method: 'PUT', headers: { Origin: 'https://wrong.example', 'X-Asset-Audit': '1', 'Content-Type': 'application/json' }, body: JSON.stringify({ revision: 0, counts }) }) + assert.equal(badOrigin.status, 403) + const badHostStatus = await new Promise((resolve, reject) => { + const req = httpRequest(base + '/api/stocktakes', { headers: { Host: 'wrong.example' } }, (res) => { res.resume(); resolve(res.statusCode) }) + req.on('error', reject) + req.end() + }) + assert.equal(badHostStatus, 403) + + const attempts = await Promise.all([save(0), save(0)]) + assert.deepEqual(attempts.map((r) => r.status).sort(), [200, 409]) + result = await request('/api/stocktakes/' + id) + assert.equal(result.body.revision, 1) + assert.deepEqual(result.body.rows.map((r) => r.counted), counts.map((r) => r.counted)) + await stopServer(server) + server = await startServer() + result = await request('/api/stocktakes/' + id) + assert.equal(result.body.revision, 1) + assert.deepEqual(result.body.rows.map((r) => r.counted), counts.map((r) => r.counted)) + console.log('PASS persisted draft after genuine API process restart; input, origin, row membership and competing saves') + + // Force the last row update to fail after earlier rows were changed. + const last = counts.at(-1) + await owner.query(`ALTER TABLE asset_audit.count_rows ADD CONSTRAINT test_asset_failure CHECK (stocktake_id <> ${id} OR item_id <> ${last.itemId} OR counted_quantity <> 887)`) + const failedCounts = counts.map((r) => ({ ...r, counted: r.itemId === last.itemId ? 887 : r.counted + 1 })) + assert.equal((await save(1, failedCounts)).status, 500) + result = await request('/api/stocktakes/' + id) + assert.equal(result.body.revision, 1) + assert.deepEqual(result.body.rows.map((r) => r.counted), counts.map((r) => r.counted)) + await owner.query('ALTER TABLE asset_audit.count_rows DROP CONSTRAINT test_asset_failure') + console.log('PASS late-row database failure rolls back every count and header revision') + + const race = await Promise.all([save(1), finalize(1)]) + assert.deepEqual(race.map((r) => r.status).sort(), [200, 409]) + result = await request('/api/stocktakes/' + id) + if (result.body.status === 'draft') assert.equal((await finalize(result.body.revision)).status, 200) + result = await request('/api/stocktakes/' + id) + assert.equal(result.body.status, 'finalized') + assert.equal((await save(result.body.revision)).status, 409) + assert.equal((await finalize(result.body.revision)).status, 409) + await assert.rejects(runtime.query('UPDATE asset_audit.count_rows SET counted_quantity=1 WHERE stocktake_id=$1', [id]), /immutable/) + await assert.rejects(runtime.query('UPDATE asset_audit.stocktakes SET revision=revision+1 WHERE id=$1', [id]), /immutable/) + await assert.rejects(runtime.query("UPDATE asset_audit.items SET quantity=0"), /permission denied/) + await assert.rejects(runtime.query('CREATE TABLE asset_audit.runtime_should_not_create (id integer)'), /permission denied/) + await assert.rejects(runtime.query('DELETE FROM asset_audit.count_rows WHERE stocktake_id=$1', [id]), /permission denied/) + console.log('PASS save/finalize race; immutable finalized sheets; restricted runtime grants') +} finally { + if (server) await stopServer(server) + await owner.query('ALTER TABLE asset_audit.count_rows DROP CONSTRAINT IF EXISTS test_asset_failure') + if (id) await removeFixture(owner, id) + await runtime.end() + await owner.end() +} diff --git a/applications/asset-audit/ui/angular.json b/applications/asset-audit/ui/angular.json new file mode 100644 index 00000000..bfdadee2 --- /dev/null +++ b/applications/asset-audit/ui/angular.json @@ -0,0 +1,44 @@ +{ + "version": 1, + "projects": { + "asset-audit": { + "projectType": "application", + "root": "", + "sourceRoot": "src", + "architect": { + "build": { + "builder": "@angular/build:application", + "options": { + "outputPath": "dist/asset-audit", + "index": "src/index.html", + "browser": "src/main.ts", + "tsConfig": "tsconfig.json", + "styles": [ + "src/styles.css" + ] + }, + "configurations": { + "production": { + "optimization": true, + "outputHashing": "all", + "budgets": [ + { + "type": "initial", + "maximumWarning": "2mb", + "maximumError": "3mb" + } + ] + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular/build:dev-server", + "options": { + "buildTarget": "asset-audit:build" + } + } + } + } + } +} diff --git a/applications/asset-audit/ui/package-lock.json b/applications/asset-audit/ui/package-lock.json new file mode 100644 index 00000000..eb8e0d8c --- /dev/null +++ b/applications/asset-audit/ui/package-lock.json @@ -0,0 +1,8000 @@ +{ + "name": "asset-audit-ui", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "asset-audit-ui", + "version": "1.0.0", + "dependencies": { + "@angular/cdk": "21.2.14", + "@angular/common": "21.2.25", + "@angular/compiler": "21.2.25", + "@angular/core": "21.2.25", + "@angular/forms": "21.2.25", + "@angular/platform-browser": "21.2.25", + "@angular/router": "21.2.25", + "@primeuix/themes": "2.0.3", + "ag-grid-angular": "36.2.0", + "ag-grid-community": "36.2.0", + "primeng": "21.1.10", + "rxjs": "7.8.2", + "tslib": "2.8.1" + }, + "devDependencies": { + "@angular/build": "21.2.24", + "@angular/cli": "21.2.24", + "@angular/compiler-cli": "21.2.25", + "typescript": "5.9.3" + } + }, + "node_modules/@algolia/abtesting": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.14.1.tgz", + "integrity": "sha512-Dkj0BgPiLAaim9sbQ97UKDFHJE/880wgStAM18U++NaJ/2Cws34J5731ovJifr6E3Pv4T2CqvMXf8qLCC417Ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.48.1", + "@algolia/requester-browser-xhr": "5.48.1", + "@algolia/requester-fetch": "5.48.1", + "@algolia/requester-node-http": "5.48.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-abtesting": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.48.1.tgz", + "integrity": "sha512-LV5qCJdj+/m9I+Aj91o+glYszrzd7CX6NgKaYdTOj4+tUYfbS62pwYgUfZprYNayhkQpVFcrW8x8ZlIHpS23Vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.48.1", + "@algolia/requester-browser-xhr": "5.48.1", + "@algolia/requester-fetch": "5.48.1", + "@algolia/requester-node-http": "5.48.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.48.1.tgz", + "integrity": "sha512-/AVoMqHhPm14CcHq7mwB+bUJbfCv+jrxlNvRjXAuO+TQa+V37N8k1b0ijaRBPdmSjULMd8KtJbQyUyabXOu6Kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.48.1", + "@algolia/requester-browser-xhr": "5.48.1", + "@algolia/requester-fetch": "5.48.1", + "@algolia/requester-node-http": "5.48.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-common": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.48.1.tgz", + "integrity": "sha512-VXO+qu2Ep6ota28ktvBm3sG53wUHS2n7bgLWmce5jTskdlCD0/JrV4tnBm1l7qpla1CeoQb8D7ShFhad+UoSOw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-insights": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.48.1.tgz", + "integrity": "sha512-zl+Qyb0nLg+Y5YvKp1Ij+u9OaPaKg2/EPzTwKNiVyOHnQJlFxmXyUZL1EInczAZsEY8hVpPCLtNfhMhfxluXKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.48.1", + "@algolia/requester-browser-xhr": "5.48.1", + "@algolia/requester-fetch": "5.48.1", + "@algolia/requester-node-http": "5.48.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.48.1.tgz", + "integrity": "sha512-r89Qf9Oo9mKWQXumRu/1LtvVJAmEDpn8mHZMc485pRfQUMAwSSrsnaw1tQ3sszqzEgAr1c7rw6fjBI+zrAXTOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.48.1", + "@algolia/requester-browser-xhr": "5.48.1", + "@algolia/requester-fetch": "5.48.1", + "@algolia/requester-node-http": "5.48.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-query-suggestions": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.48.1.tgz", + "integrity": "sha512-TPKNPKfghKG/bMSc7mQYD9HxHRUkBZA4q1PEmHgICaSeHQscGqL4wBrKkhfPlDV1uYBKW02pbFMUhsOt7p4ZpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.48.1", + "@algolia/requester-browser-xhr": "5.48.1", + "@algolia/requester-fetch": "5.48.1", + "@algolia/requester-node-http": "5.48.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-search": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.48.1.tgz", + "integrity": "sha512-4Fu7dnzQyQmMFknYwTiN/HxPbH4DyxvQ1m+IxpPp5oslOgz8m6PG5qhiGbqJzH4HiT1I58ecDiCAC716UyVA8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.48.1", + "@algolia/requester-browser-xhr": "5.48.1", + "@algolia/requester-fetch": "5.48.1", + "@algolia/requester-node-http": "5.48.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/ingestion": { + "version": "1.48.1", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.48.1.tgz", + "integrity": "sha512-/RFq3TqtXDUUawwic/A9xylA2P3LDMO8dNhphHAUOU51b1ZLHrmZ6YYJm3df1APz7xLY1aht6okCQf+/vmrV9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.48.1", + "@algolia/requester-browser-xhr": "5.48.1", + "@algolia/requester-fetch": "5.48.1", + "@algolia/requester-node-http": "5.48.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/monitoring": { + "version": "1.48.1", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.48.1.tgz", + "integrity": "sha512-Of0jTeAZRyRhC7XzDSjJef0aBkgRcvRAaw0ooYRlOw57APii7lZdq+layuNdeL72BRq1snaJhoMMwkmLIpJScw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.48.1", + "@algolia/requester-browser-xhr": "5.48.1", + "@algolia/requester-fetch": "5.48.1", + "@algolia/requester-node-http": "5.48.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/recommend": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.48.1.tgz", + "integrity": "sha512-bE7JcpFXzxF5zHwj/vkl2eiCBvyR1zQ7aoUdO+GDXxGp0DGw7nI0p8Xj6u8VmRQ+RDuPcICFQcCwRIJT5tDJFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.48.1", + "@algolia/requester-browser-xhr": "5.48.1", + "@algolia/requester-fetch": "5.48.1", + "@algolia/requester-node-http": "5.48.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.48.1.tgz", + "integrity": "sha512-MK3wZ2koLDnvH/AmqIF1EKbJlhRS5j74OZGkLpxI4rYvNi9Jn/C7vb5DytBnQ4KUWts7QsmbdwHkxY5txQHXVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.48.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-fetch": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.48.1.tgz", + "integrity": "sha512-2oDT43Y5HWRSIQMPQI4tA/W+TN/N2tjggZCUsqQV440kxzzoPGsvv9QP1GhQ4CoDa+yn6ygUsGp6Dr+a9sPPSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.48.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-node-http": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.48.1.tgz", + "integrity": "sha512-xcaCqbhupVWhuBP1nwbk1XNvwrGljozutEiLx06mvqDf3o8cHyEgQSHS4fKJM+UAggaWVnnFW+Nne5aQ8SUJXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.48.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular-devkit/architect": { + "version": "0.2102.24", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2102.24.tgz", + "integrity": "sha512-U/d5l/1rfrNSlbGjMTunyzwxh+2vJce3y0r0tIx/NOFZbnYhq+gx+e33mR6oxI4yk/1Jks67ltvstrJuBbVbYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "21.2.24", + "rxjs": "7.8.2" + }, + "bin": { + "architect": "bin/cli.js" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/core": { + "version": "21.2.24", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-21.2.24.tgz", + "integrity": "sha512-QLYLd6OcfQS5qWTlzG1/d8lFTcJDFcsY6sOaGVtrruYiDxrbeM2iJttoIoKzvbNPROFyo3fANVQJOVhytpXWPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "8.18.0", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.3.1", + "picomatch": "4.0.4", + "rxjs": "7.8.2", + "source-map": "0.7.6" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^5.0.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "21.2.24", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-21.2.24.tgz", + "integrity": "sha512-mLOme2vfbLrHFmMyM6ybPuGCnCvPiemXWdHnptY2Q7Hzum72DabfgtTNsrMcI2F5zrQV2DDQunNjC5cXqtq4/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "21.2.24", + "jsonc-parser": "3.3.1", + "magic-string": "0.30.21", + "ora": "9.3.0", + "rxjs": "7.8.2" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/build": { + "version": "21.2.24", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-21.2.24.tgz", + "integrity": "sha512-NurM2W7Q/lCGonkYgSNNxGrh9AYH3LksekYRVxl0KxVKa8Z5x6oMYlLfyI4Lv9Q4C1/x1SXv3xNxgYu/nIW4vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.2102.24", + "@babel/core": "7.29.7", + "@babel/helper-annotate-as-pure": "7.27.3", + "@babel/helper-split-export-declaration": "7.24.7", + "@inquirer/confirm": "5.1.21", + "@vitejs/plugin-basic-ssl": "2.1.4", + "beasties": "0.4.1", + "browserslist": "^4.26.0", + "esbuild": "0.28.1", + "https-proxy-agent": "7.0.6", + "istanbul-lib-instrument": "6.0.3", + "jsonc-parser": "3.3.1", + "listr2": "9.0.5", + "magic-string": "0.30.21", + "mrmime": "2.0.1", + "parse5-html-rewriting-stream": "8.0.0", + "picomatch": "4.0.4", + "piscina": "5.2.0", + "rolldown": "1.0.0-rc.4", + "sass": "1.97.3", + "semver": "7.7.4", + "source-map-support": "0.5.21", + "tinyglobby": "0.2.15", + "undici": "7.29.1", + "vite": "7.3.6", + "watchpack": "2.5.1" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "lmdb": "3.5.1" + }, + "peerDependencies": { + "@angular/compiler": "^21.0.0", + "@angular/compiler-cli": "^21.0.0", + "@angular/core": "^21.0.0", + "@angular/localize": "^21.0.0", + "@angular/platform-browser": "^21.0.0", + "@angular/platform-server": "^21.0.0", + "@angular/service-worker": "^21.0.0", + "@angular/ssr": "^21.2.24", + "karma": "^6.4.0", + "less": "^4.2.0", + "ng-packagr": "^21.0.0", + "postcss": "^8.4.0", + "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", + "tslib": "^2.3.0", + "typescript": ">=5.9 <6.0", + "vitest": "^4.0.8" + }, + "peerDependenciesMeta": { + "@angular/core": { + "optional": true + }, + "@angular/localize": { + "optional": true + }, + "@angular/platform-browser": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "@angular/ssr": { + "optional": true + }, + "karma": { + "optional": true + }, + "less": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tailwindcss": { + "optional": true + }, + "vitest": { + "optional": true + } + } + }, + "node_modules/@angular/build/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular/cdk": { + "version": "21.2.14", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-21.2.14.tgz", + "integrity": "sha512-806REq/CLf37nEhmmd8Q+ILN8z/RVG2vk2n8YZ/4TdHpcBCi5ux4AxLbpMmduLwGPOzPagJ6ggRzE5fnX0rmcQ==", + "license": "MIT", + "dependencies": { + "parse5": "^8.0.0", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "^21.0.0 || ^22.0.0", + "@angular/core": "^21.0.0 || ^22.0.0", + "@angular/platform-browser": "^21.0.0 || ^22.0.0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/cli": { + "version": "21.2.24", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-21.2.24.tgz", + "integrity": "sha512-lx8baI3gssBv+xuwEf5wvAoBi7XSIB1RRuAmSnuAO2E4CAlJmU4eiVhKxd/haXvONH6peYxFGH2N6mSrkkHfIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/architect": "0.2102.24", + "@angular-devkit/core": "21.2.24", + "@angular-devkit/schematics": "21.2.24", + "@inquirer/prompts": "7.10.1", + "@listr2/prompt-adapter-inquirer": "3.0.5", + "@modelcontextprotocol/sdk": "1.30.0", + "@schematics/angular": "21.2.24", + "@yarnpkg/lockfile": "1.1.0", + "algoliasearch": "5.48.1", + "ini": "6.0.0", + "jsonc-parser": "3.3.1", + "listr2": "9.0.5", + "npm-package-arg": "13.0.2", + "pacote": "21.5.1", + "parse5-html-rewriting-stream": "8.0.0", + "semver": "7.7.4", + "yargs": "18.0.0", + "zod": "4.3.6" + }, + "bin": { + "ng": "bin/ng.js" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/cli/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular/cli/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@angular/cli/node_modules/yargs": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", + "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^9.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "string-width": "^7.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^22.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/@angular/common": { + "version": "21.2.25", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-21.2.25.tgz", + "integrity": "sha512-1oxSrFqMyJF6xYXBDrciZSe3A67E5feYQXhmxH3d0hLe0wWM/pFZTvCvSnA65wHj8NTonuI7/HMBPwRKddHoGw==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/core": "21.2.25", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/compiler": { + "version": "21.2.25", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-21.2.25.tgz", + "integrity": "sha512-jR/TiwrHeLEOPT3fVp9q14UkCsBNni8xUIfof8F7JZW4Ze7/LpTLI2OWxajckWmR0+kCKam5RhWeFd5m/F553Q==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/@angular/compiler-cli": { + "version": "21.2.25", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-21.2.25.tgz", + "integrity": "sha512-5qMekFc1QNJ7zxTqekOTRnY9WgYSo5nfqED14sou15uScepL+yDM07UrvVsR94CGc78/nhevYWLXbb4iPPZ00Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "7.29.7", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^5.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.2.0", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^18.0.0" + }, + "bin": { + "ng-xi18n": "bundles/src/bin/ng_xi18n.js", + "ngc": "bundles/src/bin/ngc.js" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/compiler": "21.2.25", + "typescript": ">=5.9 <6.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@angular/core": { + "version": "21.2.25", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-21.2.25.tgz", + "integrity": "sha512-cku7EX0igTPnuqEWZ1NiQY4Pn1g2xBljQSk1+bXRKnudJiZCK8e1u2v0byNzWuKwmdz7kKXjz71o224HrtccVA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/compiler": "21.2.25", + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.15.0 || ~0.16.0" + }, + "peerDependenciesMeta": { + "@angular/compiler": { + "optional": true + }, + "zone.js": { + "optional": true + } + } + }, + "node_modules/@angular/forms": { + "version": "21.2.25", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-21.2.25.tgz", + "integrity": "sha512-EQADo64/BaCKO1uGcQyHcYW1y2JwQMOfWQUteBsqFODMwoRQK96VH5Lf/8vUwvV7gvFrlA4FhVXjsv2KVdfPuw==", + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "tslib": "^2.3.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/common": "21.2.25", + "@angular/core": "21.2.25", + "@angular/platform-browser": "21.2.25", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/platform-browser": { + "version": "21.2.25", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-21.2.25.tgz", + "integrity": "sha512-hQgeKZiKt42P+jcf9j7o3c1GSOwOXrAYX2hXCs4A0+/AQ1neAQ20bjjUAgz1fGC4P3bNdurw1ZLLhMA+ZBKPtg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/animations": "21.2.25", + "@angular/common": "21.2.25", + "@angular/core": "21.2.25" + }, + "peerDependenciesMeta": { + "@angular/animations": { + "optional": true + } + } + }, + "node_modules/@angular/router": { + "version": "21.2.25", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-21.2.25.tgz", + "integrity": "sha512-85ZwJCBEpaXBmezusZLlgW2JzEEByzerlWT34I6IK/ZN4AKG8m2B/vlbTkKmHuzCOGWx1L7xFtPg/URkGGKwSA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@angular/common": "21.2.25", + "@angular/core": "21.2.25", + "@angular/platform-browser": "21.2.25", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz", + "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.8", + "@babel/types": "^7.29.8", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.9.tgz", + "integrity": "sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.8" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz", + "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.8", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.8", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.8", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emnapi/core": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.3.tgz", + "integrity": "sha512-zLpS5asjEb7lq8jYLq37N6XKaE41DIexlY1rF/z4/tIl3wo13Sqm28fRyfIsKZD+NZ8mM5RoKkpW/rBcuoSZSg==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.3", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.3.tgz", + "integrity": "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.3.tgz", + "integrity": "sha512-ELEBe8PsLvvJ6QMr0zLt8ffvOHW/dc1m3CEzNMg7aJUv3bMaoDtw2TXyDAwkYBuroxxuHEwhRTLJSe5sya547g==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz", + "integrity": "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.1.tgz", + "integrity": "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.1.tgz", + "integrity": "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.1.tgz", + "integrity": "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz", + "integrity": "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.1.tgz", + "integrity": "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.1.tgz", + "integrity": "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.1.tgz", + "integrity": "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz", + "integrity": "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz", + "integrity": "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz", + "integrity": "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.1.tgz", + "integrity": "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.1.tgz", + "integrity": "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.1.tgz", + "integrity": "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.1.tgz", + "integrity": "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.1.tgz", + "integrity": "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz", + "integrity": "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.1.tgz", + "integrity": "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.1.tgz", + "integrity": "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.1.tgz", + "integrity": "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.1.tgz", + "integrity": "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.1.tgz", + "integrity": "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.1.tgz", + "integrity": "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.1.tgz", + "integrity": "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.1.tgz", + "integrity": "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.1.tgz", + "integrity": "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@gar/promise-retry": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@gar/promise-retry/-/promise-retry-1.0.3.tgz", + "integrity": "sha512-GmzA9ckNokPypTg10pgpeHNQe7ph+iIKKmhKu3Ob9ANkswreCx7R3cKmY781K8QK3AqVL3xVh9A42JvIAbkkSA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@harperfast/extended-iterable": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@harperfast/extended-iterable/-/extended-iterable-1.0.3.tgz", + "integrity": "sha512-sSAYhQca3rDWtQUHSAPeO7axFIUJOI6hn1gjRC5APVE1a90tuyT8f5WIgRsFhhWA7htNkju2veB9eWL6YHi/Lw==", + "dev": true, + "license": "Apache-2.0", + "optional": true + }, + "node_modules/@hono/node-server": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-2.1.3.tgz", + "integrity": "sha512-TA//nWMqPhbfdfneACk6t5a9eqbS9lABEPyKn0/xZTah3H3U2XaVg85rJFl0/Fyit0I552YDHgXGVSf3GwqbUw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "hono": "^4" + } + }, + "node_modules/@inquirer/ansi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.2.tgz", + "integrity": "sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/checkbox": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.3.2.tgz", + "integrity": "sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/confirm": { + "version": "5.1.21", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.21.tgz", + "integrity": "sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core": { + "version": "10.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.3.2.tgz", + "integrity": "sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/editor": { + "version": "4.2.23", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.23.tgz", + "integrity": "sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/external-editor": "^1.0.3", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/expand": { + "version": "4.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.23.tgz", + "integrity": "sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/external-editor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz", + "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^2.1.1", + "iconv-lite": "^0.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz", + "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/input": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.3.1.tgz", + "integrity": "sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/number": { + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.23.tgz", + "integrity": "sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/password": { + "version": "4.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.23.tgz", + "integrity": "sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/prompts": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.10.1.tgz", + "integrity": "sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/checkbox": "^4.3.2", + "@inquirer/confirm": "^5.1.21", + "@inquirer/editor": "^4.2.23", + "@inquirer/expand": "^4.0.23", + "@inquirer/input": "^4.3.1", + "@inquirer/number": "^3.0.23", + "@inquirer/password": "^4.0.23", + "@inquirer/rawlist": "^4.1.11", + "@inquirer/search": "^3.2.2", + "@inquirer/select": "^4.4.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/rawlist": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.11.tgz", + "integrity": "sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/search": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.2.2.tgz", + "integrity": "sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/select": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.4.2.tgz", + "integrity": "sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/type": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.10.tgz", + "integrity": "sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", + "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz", + "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@listr2/prompt-adapter-inquirer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-3.0.5.tgz", + "integrity": "sha512-WELs+hj6xcilkloBXYf9XXK8tYEnKsgLj01Xl5ONUJpKjmT5hGVUzNUS5tooUxs7pGMrw+jFD/41WpqW4V3LDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/type": "^3.0.8" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@inquirer/prompts": ">= 3 < 8", + "listr2": "9.0.5" + } + }, + "node_modules/@lmdb/lmdb-darwin-arm64": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.5.1.tgz", + "integrity": "sha512-tpfN4kKrrMpQ+If1l8bhmoNkECJi0iOu6AEdrTJvWVC+32sLxTARX5Rsu579mPImRP9YFWfWgeRQ5oav7zApQQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-darwin-x64": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.5.1.tgz", + "integrity": "sha512-+a2tTfc3rmWhLAolFUWRgJtpSuu+Fw/yjn4rF406NMxhfjbMuiOUTDRvRlMFV+DzyjkwnokisskHbCWkS3Ly5w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.5.1.tgz", + "integrity": "sha512-0EgcE6reYr8InjD7V37EgXcYrloqpxVPINy3ig1MwDSbl6LF/vXTYRH9OE1Ti1D8YZnB35ZH9aTcdfSb5lql2A==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm64": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.5.1.tgz", + "integrity": "sha512-aoERa5B6ywXdyFeYGQ1gbQpkMkDbEo45qVoXE5QpIRavqjnyPwjOulMkmkypkmsbJ5z4Wi0TBztON8agCTG0Vg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-x64": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.5.1.tgz", + "integrity": "sha512-SqNDY1+vpji7bh0sFH5wlWyFTOzjbDOl0/kB5RLLYDAFyd/uw3n7wyrmas3rYPpAW7z18lMOi1yKlTPv967E3g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-win32-arm64": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-arm64/-/lmdb-win32-arm64-3.5.1.tgz", + "integrity": "sha512-50v0O1Lt37cwrmR9vWZK5hRW0Aw+KEmxJJ75fge/zIYdvNKB/0bSMSVR5Uc2OV9JhosIUyklOmrEvavwNJ8D6w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@lmdb/lmdb-win32-x64": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.5.1.tgz", + "integrity": "sha512-qwosvPyl+zpUlp3gRb7UcJ3H8S28XHCzkv0Y0EgQToXjQP91ZD67EHSCDmaLjtKhe+GVIW5om1KUpzVLA0l6pg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.30.0.tgz", + "integrity": "sha512-xKd8OIzlqNzcqcNumGAa6g+PW2kjD5vrpcKOnfldAUPP3j7lnqMPwlTXQm8gF+UwH72z0lqaRbjr9hqGz0eITA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@hono/node-server": "^1.19.9 || ^2.0.5", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "express": "^5.2.1", + "express-rate-limit": "^8.2.1", + "hono": "^4.11.4", + "jose": "^6.1.3", + "json-schema-typed": "^8.0.2", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.25 || ^4.0", + "zod-to-json-schema": "^3.25.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@cfworker/json-schema": "^4.1.1", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "@cfworker/json-schema": { + "optional": true + }, + "zod": { + "optional": false + } + } + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.4.tgz", + "integrity": "sha512-LCkGo6JDfaBhgST7UpPWgNgLINpcpabaHfyz5OBx75nUYxBsaEPxjnyNjWpeb/xBup/682QnBfRBy2/LvPutZQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.4.tgz", + "integrity": "sha512-zExlW9zUJKZH/tOtVMttwjKa4Xm/3KcNjnE3dPN92uCktwavMxpgCA3MoJK/DOnTWsQgo224OaST27/mPNAf+w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.4.tgz", + "integrity": "sha512-Tg3yX65f5GbtXLkrYEHE5oibZG9epyYWas7FogTTEJeDEF9JlXJzKgXaNhT3UXlTOeA+AfZpYZYZ0uPj7Cfquw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.4.tgz", + "integrity": "sha512-dgX0P/9wGPJeHFBG+ZmhgE6bmtMt7NP5CRBGyyktpopdk/mW4POnrpQsSLtKI1dwpc+pPLuXHDh6vvskyQE/sw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.4.tgz", + "integrity": "sha512-8TNXMEjJc3QEy7R/x1INhgiU+XakDAFUzBhaz7+Rbrs8NH5UQeHQxxmzsSBJGyV6I1jW79undiQm8tOI+D+8FQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.4.tgz", + "integrity": "sha512-CmCXPQrkbwExx3j946/PtHWHbYJiCRBRDl4BlkRQcJB/YOwQxJRTpoo7aTsortjgoJ1x7opzTSxn7C+ASSLVjQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@napi-rs/lzma-linux-x64-gnu": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz", + "integrity": "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^22.20 || ^24.12 || >=25" + } + }, + "node_modules/@napi-rs/nice": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.1.1.tgz", + "integrity": "sha512-xJIPs+bYuc9ASBl+cvGsKbGrJmS6fAKaSZCnT0lhahT5rhA2VVy9/EcIgd2JhtEuFOJNx7UHNn/qiTPTY4nrQw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/nice-android-arm-eabi": "1.1.1", + "@napi-rs/nice-android-arm64": "1.1.1", + "@napi-rs/nice-darwin-arm64": "1.1.1", + "@napi-rs/nice-darwin-x64": "1.1.1", + "@napi-rs/nice-freebsd-x64": "1.1.1", + "@napi-rs/nice-linux-arm-gnueabihf": "1.1.1", + "@napi-rs/nice-linux-arm64-gnu": "1.1.1", + "@napi-rs/nice-linux-arm64-musl": "1.1.1", + "@napi-rs/nice-linux-ppc64-gnu": "1.1.1", + "@napi-rs/nice-linux-riscv64-gnu": "1.1.1", + "@napi-rs/nice-linux-s390x-gnu": "1.1.1", + "@napi-rs/nice-linux-x64-gnu": "1.1.1", + "@napi-rs/nice-linux-x64-musl": "1.1.1", + "@napi-rs/nice-openharmony-arm64": "1.1.1", + "@napi-rs/nice-win32-arm64-msvc": "1.1.1", + "@napi-rs/nice-win32-ia32-msvc": "1.1.1", + "@napi-rs/nice-win32-x64-msvc": "1.1.1" + } + }, + "node_modules/@napi-rs/nice-android-arm-eabi": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.1.1.tgz", + "integrity": "sha512-kjirL3N6TnRPv5iuHw36wnucNqXAO46dzK9oPb0wj076R5Xm8PfUVA9nAFB5ZNMmfJQJVKACAPd/Z2KYMppthw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-android-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.1.1.tgz", + "integrity": "sha512-blG0i7dXgbInN5urONoUCNf+DUEAavRffrO7fZSeoRMJc5qD+BJeNcpr54msPF6qfDD6kzs9AQJogZvT2KD5nw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-darwin-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.1.1.tgz", + "integrity": "sha512-s/E7w45NaLqTGuOjC2p96pct4jRfo61xb9bU1unM/MJ/RFkKlJyJDx7OJI/O0ll/hrfpqKopuAFDV8yo0hfT7A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-darwin-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.1.1.tgz", + "integrity": "sha512-dGoEBnVpsdcC+oHHmW1LRK5eiyzLwdgNQq3BmZIav+9/5WTZwBYX7r5ZkQC07Nxd3KHOCkgbHSh4wPkH1N1LiQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-freebsd-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.1.1.tgz", + "integrity": "sha512-kHv4kEHAylMYmlNwcQcDtXjklYp4FCf0b05E+0h6nDHsZ+F0bDe04U/tXNOqrx5CmIAth4vwfkjjUmp4c4JktQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm-gnueabihf": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.1.1.tgz", + "integrity": "sha512-E1t7K0efyKXZDoZg1LzCOLxgolxV58HCkaEkEvIYQx12ht2pa8hoBo+4OB3qh7e+QiBlp1SRf+voWUZFxyhyqg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.1.1.tgz", + "integrity": "sha512-CIKLA12DTIZlmTaaKhQP88R3Xao+gyJxNWEn04wZwC2wmRapNnxCUZkVwggInMJvtVElA+D4ZzOU5sX4jV+SmQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm64-musl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.1.1.tgz", + "integrity": "sha512-+2Rzdb3nTIYZ0YJF43qf2twhqOCkiSrHx2Pg6DJaCPYhhaxbLcdlV8hCRMHghQ+EtZQWGNcS2xF4KxBhSGeutg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-ppc64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.1.1.tgz", + "integrity": "sha512-4FS8oc0GeHpwvv4tKciKkw3Y4jKsL7FRhaOeiPei0X9T4Jd619wHNe4xCLmN2EMgZoeGg+Q7GY7BsvwKpL22Tg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-riscv64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.1.1.tgz", + "integrity": "sha512-HU0nw9uD4FO/oGCCk409tCi5IzIZpH2agE6nN4fqpwVlCn5BOq0MS1dXGjXaG17JaAvrlpV5ZeyZwSon10XOXw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-s390x-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.1.1.tgz", + "integrity": "sha512-2YqKJWWl24EwrX0DzCQgPLKQBxYDdBxOHot1KWEq7aY2uYeX+Uvtv4I8xFVVygJDgf6/92h9N3Y43WPx8+PAgQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-x64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.1.1.tgz", + "integrity": "sha512-/gaNz3R92t+dcrfCw/96pDopcmec7oCcAQ3l/M+Zxr82KT4DljD37CpgrnXV+pJC263JkW572pdbP3hP+KjcIg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-x64-musl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.1.1.tgz", + "integrity": "sha512-xScCGnyj/oppsNPMnevsBe3pvNaoK7FGvMjT35riz9YdhB2WtTG47ZlbxtOLpjeO9SqqQ2J2igCmz6IJOD5JYw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-openharmony-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-openharmony-arm64/-/nice-openharmony-arm64-1.1.1.tgz", + "integrity": "sha512-6uJPRVwVCLDeoOaNyeiW0gp2kFIM4r7PL2MczdZQHkFi9gVlgm+Vn+V6nTWRcu856mJ2WjYJiumEajfSm7arPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-arm64-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.1.1.tgz", + "integrity": "sha512-uoTb4eAvM5B2aj/z8j+Nv8OttPf2m+HVx3UjA5jcFxASvNhQriyCQF1OB1lHL43ZhW+VwZlgvjmP5qF3+59atA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-ia32-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.1.1.tgz", + "integrity": "sha512-CNQqlQT9MwuCsg1Vd/oKXiuH+TcsSPJmlAFc5frFyX/KkOh0UpBLEj7aoY656d5UKZQMQFP7vJNa1DNUNORvug==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-x64-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.1.1.tgz", + "integrity": "sha512-vB+4G/jBQCAh0jelMTY3+kgFy00Hlx2f2/1zjMoH821IbplbWZOkLiTYXQkygNTzQJTq5cvwBDgn2ppHD+bglQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.4.tgz", + "integrity": "sha512-AJxoUD2/15ESHbvpcyjU274nsAPLuOtPHCk0vKJM5pj//Fg/B1FXNWjPnXTT9PymCYYiHo4zPj0ZomXBKhoy7g==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.3" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=23.5.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.4", + "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.4" + } + }, + "node_modules/@npmcli/agent": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-4.0.2.tgz", + "integrity": "sha512-EUEuWAxnL07Sp5/iC/1X6Xj+XThUvnbei9zfRWZdEXa7lss9RTHMhAHBeg+MZ5To9s/gGaSI+UwZTPdYMvKSeg==", + "dev": true, + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^11.2.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/agent/node_modules/lru-cache": { + "version": "11.5.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.3.tgz", + "integrity": "sha512-U4N8FgzmWxc8k1VH8Kr6lQg18U7Fjvby6wXHVRX/ZZ7IwWbRMgrRbP0Wrb5q5NVinryp4SQampHKdvtecItxUg==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@npmcli/fs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-5.0.0.tgz", + "integrity": "sha512-7OsC1gNORBEawOa5+j2pXN9vsicaIOH5cPXxoR6fJOmH6/EXpJB2CajXOu1fPRFun2m1lktEFX11+P89hqO/og==", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/git": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-7.0.2.tgz", + "integrity": "sha512-oeolHDjExNAJAnlYP2qzNjMX/Xi9bmu78C9dIGr4xjobrSKbuMYCph8lTzn4vnW3NjIqVmw/f8BCfouqyJXlRg==", + "dev": true, + "license": "ISC", + "dependencies": { + "@gar/promise-retry": "^1.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "ini": "^6.0.0", + "lru-cache": "^11.2.1", + "npm-pick-manifest": "^11.0.1", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "which": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/git/node_modules/isexe": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", + "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=20" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "11.5.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.3.tgz", + "integrity": "sha512-U4N8FgzmWxc8k1VH8Kr6lQg18U7Fjvby6wXHVRX/ZZ7IwWbRMgrRbP0Wrb5q5NVinryp4SQampHKdvtecItxUg==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", + "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^4.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-4.0.0.tgz", + "integrity": "sha512-yNyAdkBxB72gtZ4GrwXCM0ZUedo9nIbOMKfGjt6Cu6DXf0p8y1PViZAKDC8q8kv/fufx0WTjRBdSlyrvnP7hmA==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^5.0.0", + "npm-normalize-package-bin": "^5.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-5.0.0.tgz", + "integrity": "sha512-uuG5HZFXLfyFKqg8QypsmgLQW7smiRjVc45bqD/ofZZcR/uxEjgQU8qDPv0s9TEeMUiAAU/GC5bR6++UdTirIQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/package-json": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-7.0.5.tgz", + "integrity": "sha512-iVuTlG3ORq2iaVa1IWUxAO/jIp77tUKBhoMjuzYW2kL4MLN1bi/ofqkZ7D7OOwh8coAx1/S2ge0rMdGv8sLSOQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^7.0.0", + "glob": "^13.0.0", + "hosted-git-info": "^9.0.0", + "json-parse-even-better-errors": "^5.0.0", + "proc-log": "^6.0.0", + "semver": "^7.5.3", + "spdx-expression-parse": "^4.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-9.0.1.tgz", + "integrity": "sha512-OLUaoqBuyxeTqUvjA3FZFiXUfYC1alp3Sa99gW3EUDz3tZ3CbXDdcZ7qWKBzicrJleIgucoWamWH1saAmH/l2Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "which": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/isexe": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", + "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=20" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", + "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^4.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/redact": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-4.0.0.tgz", + "integrity": "sha512-gOBg5YHMfZy+TfHArfVogwgfBeQnKbbGo3pSUyK/gSI0AVu+pEiDVcKlQb0D8Mg1LNRZILZ6XG8I5dJ4KuAd9Q==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-10.0.4.tgz", + "integrity": "sha512-mGUWr1uMnf0le2TwfOZY4SFxZGXGfm4Jtay/nwAa2FLNAKXUoUwaGwBMNH36UHPtinWfTSJ3nqFQr0091CxVGg==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^5.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "node-gyp": "^12.1.0", + "proc-log": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.113.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.113.0.tgz", + "integrity": "sha512-Tp3XmgxwNQ9pEN9vxgJBAqdRamHibi76iowQ38O2I4PMpcvNRQNVsU2n1x1nv9yh0XoTrGFzf7cZSGxmixxrhA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.6.0.tgz", + "integrity": "sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.6.0", + "@parcel/watcher-darwin-arm64": "2.6.0", + "@parcel/watcher-darwin-x64": "2.6.0", + "@parcel/watcher-freebsd-x64": "2.6.0", + "@parcel/watcher-linux-arm-glibc": "2.6.0", + "@parcel/watcher-linux-arm-musl": "2.6.0", + "@parcel/watcher-linux-arm64-glibc": "2.6.0", + "@parcel/watcher-linux-arm64-musl": "2.6.0", + "@parcel/watcher-linux-x64-glibc": "2.6.0", + "@parcel/watcher-linux-x64-musl": "2.6.0", + "@parcel/watcher-win32-arm64": "2.6.0", + "@parcel/watcher-win32-x64": "2.6.0" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.6.0.tgz", + "integrity": "sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.6.0.tgz", + "integrity": "sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.6.0.tgz", + "integrity": "sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.6.0.tgz", + "integrity": "sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.6.0.tgz", + "integrity": "sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.6.0.tgz", + "integrity": "sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.6.0.tgz", + "integrity": "sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.6.0.tgz", + "integrity": "sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.6.0.tgz", + "integrity": "sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.6.0.tgz", + "integrity": "sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.6.0.tgz", + "integrity": "sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.6.0.tgz", + "integrity": "sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher/node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/@primeuix/motion": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/@primeuix/motion/-/motion-0.0.10.tgz", + "integrity": "sha512-PsZwOPq79Scp7/ionshRcQ5xKVf9+zuLcyY5mf6onK8chHT5C9JGphmcIZ4CzcqxuGEpsm8AIbTGy+zS3RtzLA==", + "license": "MIT", + "dependencies": { + "@primeuix/utils": "^0.6.3" + }, + "engines": { + "node": ">=12.11.0" + } + }, + "node_modules/@primeuix/styled": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@primeuix/styled/-/styled-0.7.4.tgz", + "integrity": "sha512-QSO/NpOQg8e9BONWRBx9y8VGMCMYz0J/uKfNJEya/RGEu7ARx0oYW0ugI1N3/KB1AAvyGxzKBzGImbwg0KUiOQ==", + "license": "MIT", + "dependencies": { + "@primeuix/utils": "^0.6.1" + }, + "engines": { + "node": ">=12.11.0" + } + }, + "node_modules/@primeuix/styles": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@primeuix/styles/-/styles-2.0.3.tgz", + "integrity": "sha512-2ykAB6BaHzR/6TwF8ShpJTsZrid6cVIEBVlookSdvOdmlWuevGu5vWOScgIwqWwlZcvkFYAGR/SUV3OHCTBMdw==", + "license": "MIT", + "dependencies": { + "@primeuix/styled": "^0.7.4" + } + }, + "node_modules/@primeuix/themes": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@primeuix/themes/-/themes-2.0.3.tgz", + "integrity": "sha512-3fS1883mtCWhgUgNf/feiaaDSOND4EBIOu9tZnzJlJ8QtYyL6eFLcA6V3ymCWqLVXQ1+lTVEZv1gl47FIdXReg==", + "license": "MIT", + "dependencies": { + "@primeuix/styled": "^0.7.4" + } + }, + "node_modules/@primeuix/utils": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@primeuix/utils/-/utils-0.6.4.tgz", + "integrity": "sha512-pZ5f+vj7wSzRhC7KoEQRU5fvYAe+RP9+m39CTscZ3UywCD1Y2o6Fe1rRgklMPSkzUcty2jzkA0zMYkiJBD1hgg==", + "license": "MIT", + "engines": { + "node": ">=12.11.0" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.4.tgz", + "integrity": "sha512-vRq9f4NzvbdZavhQbjkJBx7rRebDKYR9zHfO/Wg486+I7bSecdUapzCm5cyXoK+LHokTxgSq7A5baAXUZkIz0w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.4.tgz", + "integrity": "sha512-kFgEvkWLqt3YCgKB5re9RlIrx9bRsvyVUnaTakEpOPuLGzLpLapYxE9BufJNvPg8GjT6mB1alN4yN1NjzoeM8Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.4.tgz", + "integrity": "sha512-JXmaOJGsL/+rsmMfutcDjxWM2fTaVgCHGoXS7nE8Z3c9NAYjGqHvXrAhMUZvMpHS/k7Mg+X7n/MVKb7NYWKKww==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.4.tgz", + "integrity": "sha512-ep3Catd6sPnHTM0P4hNEvIv5arnDvk01PfyJIJ+J3wVCG1eEaPo09tvFqdtcaTrkwQy0VWR24uz+cb4IsK53Qw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.4.tgz", + "integrity": "sha512-LwA5ayKIpnsgXJEwWc3h8wPiS33NMIHd9BhsV92T8VetVAbGe2qXlJwNVDGHN5cOQ22R9uYvbrQir2AB+ntT2w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.4.tgz", + "integrity": "sha512-AC1WsGdlV1MtGay/OQ4J9T7GRadVnpYRzTcygV1hKnypbYN20Yh4t6O1Sa2qRBMqv1etulUknqXjc3CTIsBu6A==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.4.tgz", + "integrity": "sha512-lU+6rgXXViO61B4EudxtVMXSOfiZONR29Sys5VGSetUY7X8mg9FCKIIjcPPj8xNDeYzKl+H8F/qSKOBVFJChCQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.4.tgz", + "integrity": "sha512-DZaN1f0PGp/bSvKhtw50pPsnln4T13ycDq1FrDWRiHmWt1JeW+UtYg9touPFf8yt993p8tS2QjybpzKNTxYEwg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.4.tgz", + "integrity": "sha512-RnGxwZLN7fhMMAItnD6dZ7lvy+TI7ba+2V54UF4dhaWa/p8I/ys1E73KO6HmPmgz92ZkfD8TXS1IMV8+uhbR9g==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.4.tgz", + "integrity": "sha512-6lcI79+X8klGiGd8yHuTgQRjuuJYNggmEml+RsyN596P23l/zf9FVmJ7K0KVKkFAeYEdg0iMUKyIxiV5vebDNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.4.tgz", + "integrity": "sha512-wz7ohsKCAIWy91blZ/1FlpPdqrsm1xpcEOQVveWoL6+aSPKL4VUcoYmmzuLTssyZxRpEwzuIxL/GDsvpjaBtOw==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^1.1.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.4.tgz", + "integrity": "sha512-cfiMrfuWCIgsFmcVG0IPuO6qTRHvF7NuG3wngX1RZzc6dU8FuBFb+J3MIR5WrdTNozlumfgL4cvz+R4ozBCvsQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.4.tgz", + "integrity": "sha512-p6UeR9y7ht82AH57qwGuFYn69S6CZ7LLKdCKy/8T3zS9VTrJei2/CGsTUV45Da4Z9Rbhc7G4gyWQ/Ioamqn09g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.4.tgz", + "integrity": "sha512-1BrrmTu0TWfOP1riA8uakjFc9bpIUGzVKETsOtzY39pPga8zELGDl8eu1Dx7/gjM5CAz14UknsUMpBO8L+YntQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.64.0.tgz", + "integrity": "sha512-FLLpX941CD/7aBvX3GqLGBM9OvY5PGXTryPJkG5r5/OuBpZpV5k45Uo3RxAvqd35tsyc3hH1bhtz921IKzoIzg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.64.0.tgz", + "integrity": "sha512-iI32XM/jnDYJsvx5ai/za/7gWO9XoSeFFtU06/ZCaRgyilfJOjaopD3nOpk2WrTCGOyeDt4hleUiGOAnd5tHNg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.64.0.tgz", + "integrity": "sha512-dRBZlbt2sEtF8Mn4MODThze9fIPdDoOhVSlXMAKy5dQbOYK9pOOoPY4Fat3OTtr0+8zbJo5TTZwlsfxY/kDNJg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.64.0.tgz", + "integrity": "sha512-Y3whrJOMucfkhgNkvcM93M6j8C53iEAMmPMYD99C6G1kUy4ELigLWk9ar2/4aCBSRgsql0zdlOemLgW2m5GZgQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.64.0.tgz", + "integrity": "sha512-S6S1GEzPjFF6IONYJX3AKt/799+8RgBgCcwRnUo+Ep1IvBxUbw5M51iU0TDdK2NWWVnSvCQ8yi6Em0fGASMOng==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.64.0.tgz", + "integrity": "sha512-Ed1DPoFENkXj4IGzSB12SesV40iP6LxCCrbTIkSGIQBpOOxpBM+0kj62lmaeIHfMWTDoddqTOtqc7s8LYfn+Pw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.64.0.tgz", + "integrity": "sha512-J/6xhutJPtFyIkmHdf4olOdHHKH5kOJNumojdWn+Elv5ICEYTVOa362Vw27TxsK0BLzb1le3EDlO3UbvFK1lnQ==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.64.0.tgz", + "integrity": "sha512-G4L/Nnx59d2LvDoV/P4S5lZ7oVLT6hodOHMacqjiq2LL2gts86KbkEBTYL53+fBt0odhf7XPIbIATGoYiJctxg==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.64.0.tgz", + "integrity": "sha512-zF16pvJDEUksGYRbfnXne7pdklAyj2XDmJeYKgP93oq0cUyX9Y8O7lUo1R+IY1GagP/YBvCEDCe7eEcAKpw//g==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.64.0.tgz", + "integrity": "sha512-nIggWn8n+w12+R5lsV+PYYoUY8vuObxPAQqJI7WES+9v0qspYuAHoZMfYM0yLxlipasT5BY9ht5W8t5c/rSCkg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.64.0.tgz", + "integrity": "sha512-WLOTiHPzszP0dxIMsHpFeDSOSB5I49Mj8K4+yKE3H1X/D0JRG5XZ5jrctJLMjnUc/LUzaKiwq6EHWNJ8pup8PA==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.64.0.tgz", + "integrity": "sha512-35RK9aRhh7g7Pmeu5gQ01aCvrhXzj9LoBE6xtUcEH1ns+nyTaSzxSpADmBQINu4QiTDGvmQYwo1j5hlg1rRXFw==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.64.0.tgz", + "integrity": "sha512-RqTfnpoTjuWfPAmqK5p2edt2AMCDJWm6oTn7sKfmyx+6tRga0ip05SJ977o6udTcIiDeF/CJMUfkaN4gtWt6Aw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.64.0.tgz", + "integrity": "sha512-RQjZPigjxFvFZDijG6rjlSXxhRaTf9zLYVpGK+lVcga64oMqP1GbgVqCb46eHTTceSIgp89Ja0y5aPe3GFBYHg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.64.0.tgz", + "integrity": "sha512-tjL58mgQcTRnDRpeky+Sth1MKQeYi2Ct6r3Luq9E5aTSjnM/i/JbozqZkKqp9thM5+oDSZxo+05f9kdQedfTGA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.64.0.tgz", + "integrity": "sha512-ictoRyVaoZ8C67myHef+8hhCa6IplXJJ/xUCkVCxziV4zxMZh+jvhkhGsPBLqj1S72fnqD0QH5zL4lcaa4X7DQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.64.0.tgz", + "integrity": "sha512-8aVvZ2hfr9RLFzBQkQNmYeHLDja8fLeQAmLt757zdKN/B+8L809KlLJKctQjS22wZotptV8G6o7fVPuAs8S1tQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.64.0.tgz", + "integrity": "sha512-2dEF8GAcDKwshUfydD+GhosppNyBzhVUHkdFF3CXd3FpOkzj/RZzF5aoEtzklujklT5qFVRU2GK/cFeLaTNKVg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.64.0.tgz", + "integrity": "sha512-3XHTvoo2hKkh0MiOfS7SkhHjMaaWF7P4F3drocZZaho/Z8w7h/jpnuBHm91BOQLfvrKHs1yR+zir4E8RI3XzTQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.64.0.tgz", + "integrity": "sha512-HKtkzodL4a3KFWDXDoO61cRynAWTR3LnAE0oGtfG9lcNFpNuVYUFOByxDgNqEvic9rvaQbAj+SFwTEWDptRaIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.64.0.tgz", + "integrity": "sha512-JBsxqiY16uyyCujtoC3s7zL+SrYyNElptD7K4V+KUoJ2V8/XG3hPWpheK+SuPwNh1cikJvIZmIdsrYXvD6PLJw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.64.0.tgz", + "integrity": "sha512-S5Qrijh37qhnUYQ0ay8WN3LuWeKjow7wTUyCOPMZtnXiBXYXdsZETI6ZLfYnQAKovltckPLBFdNeD61P2rJc7g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.64.0.tgz", + "integrity": "sha512-zbZ6iMmLFEsCtTdc2/y1F/cDFVNNCPF7Ae8PCT/wdPE//hGwYp6r+MyCLMFX+kOeIe09Pz6ASfnnfpSTN1FJQQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.64.0.tgz", + "integrity": "sha512-L6Hw69oNpuYaOr1zCG30v0/DqKYCSRwodPGwIcVZ/6f8SOzq9rxtL/xNVI5MO4wjli+Ko0ErK9uHJL3mNPt8wQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.64.0.tgz", + "integrity": "sha512-nl+CTWIgOGszQmUz/kanfgrfFZ4qiwxKIfT/ryl3N3Ewk5tqizmYtNXiqb7Bu/fDtNgu1kyxdFiAUJNur3iysg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@schematics/angular": { + "version": "21.2.24", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-21.2.24.tgz", + "integrity": "sha512-eGBr4Yhg/A8Lt8QGtWxmXAyKboX8QBwbDG1hSyApQfHAh9iNFbV7mgWSmk0qPWvRJM38s0t3EEkEg79QZ98dWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "21.2.24", + "@angular-devkit/schematics": "21.2.24", + "jsonc-parser": "3.3.1" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@sigstore/bundle": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-4.0.0.tgz", + "integrity": "sha512-NwCl5Y0V6Di0NexvkTqdoVfmjTaQwoLM236r89KEojGmq/jMls8S+zb7yOwAPdXvbwfKDlP+lmXgAL4vKSQT+A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.5.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@sigstore/core": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-3.2.1.tgz", + "integrity": "sha512-qRsxPnCrbC/puegGxKuynfnxgLiHqWStrSjxkoB4YKqq3Z3s4cyZyj42ZdWFAEblNP65C+rBH8EuREHIXoi83g==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.5.2.tgz", + "integrity": "sha512-SQqvFMt4V78fdjcDdYX6HbiVSOR4QK3ZgwCa2KOsopAgPIHy1rU5UDUmzLl02r5oyyaYcYHR1hpwDRk/yUe+Mw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-4.1.1.tgz", + "integrity": "sha512-Hf4xglukg0XXQ2RiD5vSoLjdPe8OBUPA8XeVjUObheuDcWdYWrnH/BNmxZCzkAy68MzmNCxXLeurJvs6hcP2OQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@gar/promise-retry": "^1.0.2", + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.2.0", + "@sigstore/protobuf-specs": "^0.5.0", + "make-fetch-happen": "^15.0.4", + "proc-log": "^6.1.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@sigstore/tuf": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-4.0.2.tgz", + "integrity": "sha512-TCAzTy0xzdP79EnxSjq9KQ3eaR7+FmudLC6eRKknVKZbV7ZNlGLClAAQb/HMNJ5n2OBNk2GT1tEmU0xuPr+SLQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.5.0", + "tuf-js": "^4.1.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@sigstore/verify": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-3.1.1.tgz", + "integrity": "sha512-qv7+G3J2cc6wwFj3yKvXOamzqhMwSk1ogPGmhpS8iXllcPrJaIIBA+4HbttlHVu1pqWTdmaCH/WE7UOC51kdoA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.2.1", + "@sigstore/protobuf-specs": "^0.5.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "license": "MIT" + }, + "node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-4.1.0.tgz", + "integrity": "sha512-Y8cK9aggNRsqJVaKUlEYs4s7CvQ1b1ta2DVPyAimb0I2qhzjNk+A+mxvll/klL0RlfuIUei8BF7YWiua4kQqww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^10.1.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.4.tgz", + "integrity": "sha512-W3c4gRigFS0T/Ma4qIYF3GDAc5AQdHb1yL5znJT1Zv1YaD9Kitx656wBjvr19qbiosmZT8lWDM5BEMynUqX65A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vitejs/plugin-basic-ssl": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.1.4.tgz", + "integrity": "sha512-HXciTXN/sDBYWgeAD4V4s0DN0g72x5mlxQhHxtYu3Tt8BLa6MzcJZUyDVFCdtjNs3bfENVHVzOsmooTVuNgAAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "peerDependencies": { + "vite": "^6.0.0 || ^7.0.0" + } + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/abbrev": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-4.0.0.tgz", + "integrity": "sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ag-charts-types": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/ag-charts-types/-/ag-charts-types-14.2.0.tgz", + "integrity": "sha512-4pDV6/4zbzPN7t607Gr1o6DO9RhmPafQGr+hIpTJBaerbaMoC+WOO3v/wkxFbvCNrHKOexEKSfNTH7PaAR4UzA==", + "license": "MIT" + }, + "node_modules/ag-grid-angular": { + "version": "36.2.0", + "resolved": "https://registry.npmjs.org/ag-grid-angular/-/ag-grid-angular-36.2.0.tgz", + "integrity": "sha512-efr4sZVLUX9y+5sLdwub9IV0vqpSpkKknZPLoLvF4+pRbCXUjneybiI9uiFTJCOk/xIvIFdNhUYPbVgb/rVceA==", + "license": "MIT", + "dependencies": { + "ag-grid-community": "36.2.0", + "tslib": "^2.8.1" + }, + "peerDependencies": { + "@angular/common": ">= 20.0.0", + "@angular/core": ">= 20.0.0" + } + }, + "node_modules/ag-grid-community": { + "version": "36.2.0", + "resolved": "https://registry.npmjs.org/ag-grid-community/-/ag-grid-community-36.2.0.tgz", + "integrity": "sha512-tK0Toj7t0fV/OMLPnDc0xlYKAqDbnCT3iJodYSn2TJ541caU8jPdYwWhMdW+AP2+pUNwFiJVgc04eJNfvBPsWw==", + "license": "MIT", + "dependencies": { + "ag-charts-types": "14.2.0", + "ag-stack": "36.2.0" + } + }, + "node_modules/ag-stack": { + "version": "36.2.0", + "resolved": "https://registry.npmjs.org/ag-stack/-/ag-stack-36.2.0.tgz", + "integrity": "sha512-f3XT2htFs9dUPcHni2z9ak69QNta5ODEpooHuuNvbjN98JkokpEqRQ9YLQHQJFdCcgi9Ybs/j3zkkvmNRamIPg==", + "license": "MIT" + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ajv": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/algoliasearch": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.48.1.tgz", + "integrity": "sha512-Rf7xmeuIo7nb6S4mp4abW2faW8DauZyE2faBIKFaUfP3wnpOvNSbiI5AwVhqBNj0jPgBWEvhyCu0sLjN2q77Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@algolia/abtesting": "1.14.1", + "@algolia/client-abtesting": "5.48.1", + "@algolia/client-analytics": "5.48.1", + "@algolia/client-common": "5.48.1", + "@algolia/client-insights": "5.48.1", + "@algolia/client-personalization": "5.48.1", + "@algolia/client-query-suggestions": "5.48.1", + "@algolia/client-search": "5.48.1", + "@algolia/ingestion": "1.48.1", + "@algolia/monitoring": "1.48.1", + "@algolia/recommend": "5.48.1", + "@algolia/requester-browser-xhr": "5.48.1", + "@algolia/requester-fetch": "5.48.1", + "@algolia/requester-node-http": "5.48.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/ansi-escapes": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.4.0.tgz", + "integrity": "sha512-KzTVk2tCWAHtYrvvvaP8bJKJq2pVinhLcGEQdtLIYPbmNGNyYe8QwNaTUYQp2J7/vIsUKt5QCqAfUkYyG9DkOw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.11.27", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.27.tgz", + "integrity": "sha512-ElY12DaROGuan+lMmZ8Cvo/ZUbXPe7Enc/9VU/b1T3Kp4dwytRcNdR8DoSJN5SNJT/CuvcCA0DHDVmMOCePdRQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/beasties": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/beasties/-/beasties-0.4.1.tgz", + "integrity": "sha512-2Imdcw3LznDuxAbJM26RHniOLAzE6WgrK8OuvVXCQtNBS8rsnD9zsSEa3fHl4hHpUY7BYTlrpvtPVbvu9G6neg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "css-select": "^6.0.0", + "css-what": "^7.0.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "htmlparser2": "^10.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.49", + "postcss-media-query-parser": "^0.2.3", + "postcss-safe-parser": "^7.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/body-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.3.0.tgz", + "integrity": "sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^2.0.0", + "debug": "^4.4.3", + "http-errors": "^2.0.1", + "iconv-lite": "^0.7.2", + "on-finished": "^2.4.1", + "qs": "^6.15.2", + "raw-body": "^3.0.2", + "type-is": "^2.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/body-parser/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.12.tgz", + "integrity": "sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/browserslist": { + "version": "4.29.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.29.3.tgz", + "integrity": "sha512-1R4kiYKXGViqEN0CnoDrXc1StD9niAwu+j2dukWzrD4bJgsD4lDmEp0CRbc6E/vYJIfTHwPmwyaKtVSudICdPA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.11.26", + "caniuse-lite": "^1.0.30001813", + "electron-to-chromium": "^1.5.439", + "node-releases": "^2.0.57", + "update-browserslist-db": "^1.3.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "20.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-20.0.4.tgz", + "integrity": "sha512-M3Lab8NPYlZU2exsL3bMVvMrMqgwCnMWfdZbK28bn3pK6APT/Te/I8hjRPNu1uwORY9a1eEQoifXbKPQMfMTOA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^5.0.0", + "fs-minipass": "^3.0.0", + "glob": "^13.0.0", + "lru-cache": "^11.1.0", + "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": "^13.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "11.5.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.3.tgz", + "integrity": "sha512-U4N8FgzmWxc8k1VH8Kr6lQg18U7Fjvby6wXHVRX/ZZ7IwWbRMgrRbP0Wrb5q5NVinryp4SQampHKdvtecItxUg==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001814", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001814.tgz", + "integrity": "sha512-/Uaf1lAzr59XcMpW0o96WoEfr+VXK2OX4U9AgFoiSHsVJ4HppnIFUjtYzsyDH2+tgANaQb2/oxYGwCPapN1FpA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chardet": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.2.0.tgz", + "integrity": "sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==", + "dev": true, + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-spinners": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-3.4.0.tgz", + "integrity": "sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.2.0.tgz", + "integrity": "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^8.0.0", + "string-width": "^8.2.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/cliui": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", + "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/cors": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", + "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-select": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-6.0.0.tgz", + "integrity": "sha512-rZZVSLle8v0+EY8QAkDWrKhpgt6SA5OtHsgBnsj6ZaLb5dmDVOWUDtQitd9ydxxvEjhewNudS6eTVU7uOyzvXw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^7.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "nth-check": "^2.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-7.0.0.tgz", + "integrity": "sha512-wD5oz5xibMOPHzy13CyGmogB3phdvcDaB5t0W/Nr5Z2O/agcB8YwOz6e2Lsp10pNDzBoDO9nVa3RGs/2BttpHQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.444", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.444.tgz", + "integrity": "sha512-5ss/uJfoDYDHT0lfJzT6FbcskIzROIOPf0BbbFkGcvDzoJU7i//9GDrwwIHQVmIsrAGiF3ihpADBRIsrEFt1rQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/entities": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-8.1.0.tgz", + "integrity": "sha512-kxL7msIffSuh9aaFAMD7rxAIuTRMAHMeBtgHW2yUdWw732ZNh4MehkF2gdjvtdmikkaIP9bFDDJOPlsvm7avrA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.1.tgz", + "integrity": "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.1", + "@esbuild/android-arm": "0.28.1", + "@esbuild/android-arm64": "0.28.1", + "@esbuild/android-x64": "0.28.1", + "@esbuild/darwin-arm64": "0.28.1", + "@esbuild/darwin-x64": "0.28.1", + "@esbuild/freebsd-arm64": "0.28.1", + "@esbuild/freebsd-x64": "0.28.1", + "@esbuild/linux-arm": "0.28.1", + "@esbuild/linux-arm64": "0.28.1", + "@esbuild/linux-ia32": "0.28.1", + "@esbuild/linux-loong64": "0.28.1", + "@esbuild/linux-mips64el": "0.28.1", + "@esbuild/linux-ppc64": "0.28.1", + "@esbuild/linux-riscv64": "0.28.1", + "@esbuild/linux-s390x": "0.28.1", + "@esbuild/linux-x64": "0.28.1", + "@esbuild/netbsd-arm64": "0.28.1", + "@esbuild/netbsd-x64": "0.28.1", + "@esbuild/openbsd-arm64": "0.28.1", + "@esbuild/openbsd-x64": "0.28.1", + "@esbuild/openharmony-arm64": "0.28.1", + "@esbuild/sunos-x64": "0.28.1", + "@esbuild/win32-arm64": "0.28.1", + "@esbuild/win32-ia32": "0.28.1", + "@esbuild/win32-x64": "0.28.1" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eventsource-parser": "^3.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/eventsource-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.1.1.tgz", + "integrity": "sha512-EKN1vKAMcZ8MlYMpaNuxN6R9yakzH6uajHcHVTqWJzvu5pWw9DyhbP35HH8MVBQ+dZjAfDxk+A8NiR9KWaXiyQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", + "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express-rate-limit": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.7.0.tgz", + "integrity": "sha512-hOwV7WOxXfjRpAM1DSJWZDXx3GhplwD8IfwuwvogD8i1Qnkgosw/H45s4ZnFAUHDAhPjlY9hLBvJhKmGMyY26g==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "ip-address": "^10.2.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.8.tgz", + "integrity": "sha512-GZMtZUTNRpOVIECoXwLNZS5xUGE+mVNbTB8h/7Rwh2TFWcBQiPzTgyZi05BF9UMZKkLJv8XBRJTlU7zg8+ZfMg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.7.0.tgz", + "integrity": "sha512-XjH1AECxf0giL2V1aU8vKyRR2ppRUb5c0EvT7zuJTokQ74bNo52zOtghqdWIqrhUD79fo3x0WfKZdOqxF6LG1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob": { + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hono": { + "version": "4.13.13", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.13.13.tgz", + "integrity": "sha512-CQ46U0ZkAGmbT/4UxdzzGJpacP2IeKgY4a5/tOI9AABbpOMfK739wfDXmv1usCk+3RkKj1hQy4/fjhiwa2xlrA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/hosted-git-info": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.3.tgz", + "integrity": "sha512-Hc+ghLoSt6QaYZUv0WBiIvmMDZuZZ7oaDvdH8MbfOO4lOsxdXLEvuC6ePoGs9H1X9oCLyq6+NVN0MKqD+ydxyg==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^11.1.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "11.5.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.3.tgz", + "integrity": "sha512-U4N8FgzmWxc8k1VH8Kr6lQg18U7Fjvby6wXHVRX/ZZ7IwWbRMgrRbP0Wrb5q5NVinryp4SQampHKdvtecItxUg==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/htmlparser2": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", + "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "entities": "^7.0.1" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.3.0.tgz", + "integrity": "sha512-M5t5LlJpS1UHMjvwRQVdFHvPISGeLAxNcrWuJkeGh0KxsqCHZ1O3NXZU/8x7cD0BDcGW8kapxMKTvwlqrNkHkA==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz", + "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/ignore-walk": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-8.0.0.tgz", + "integrity": "sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A==", + "dev": true, + "license": "ISC", + "dependencies": { + "minimatch": "^10.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/immutable": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.9.tgz", + "integrity": "sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==", + "dev": true, + "license": "MIT" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ini": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-6.0.0.tgz", + "integrity": "sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/ip-address": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.7.3.tgz", + "integrity": "sha512-A1kdq/tSb5QjvKvAMgIoEvDBIgL7qaqVP/jkvSwYYRZ9iEzvPpopxp2wQfu3SuZRHtpHNxMn8Fs0bS+gf5Xmwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jose": { + "version": "6.2.12", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.12.tgz", + "integrity": "sha512-9NiFmJEex0sy2Dk58j2UGBSHgUs2ypF9eZSu4L6vjOX3Dp96Sw1F3uL+H+D1sx02jZZdzUT0HgvCy59CuvXcWw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-5.0.0.tgz", + "integrity": "sha512-ZF1nxZ28VhQouRWhUcVlUIN3qwSgPuswK05s/HIaoetAoE/9tngVmCHjSxmSQPav1nd+lPtTL0YZ/2AFdR/iYQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-typed": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", + "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "node_modules/listr2": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-9.0.5.tgz", + "integrity": "sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^5.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/listr2/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/lmdb": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.5.1.tgz", + "integrity": "sha512-NYHA0MRPjvNX+vSw8Xxg6FLKxzAG+e7Pt8RqAQA/EehzHVXq9SxDqJIN3JL1hK0dweb884y8kIh6rkWvPyg9Wg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@harperfast/extended-iterable": "^1.0.3", + "msgpackr": "^1.11.2", + "node-addon-api": "^6.1.0", + "node-gyp-build-optional-packages": "5.2.2", + "ordered-binary": "^1.5.3", + "weak-lru-cache": "^1.2.2" + }, + "bin": { + "download-lmdb-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@lmdb/lmdb-darwin-arm64": "3.5.1", + "@lmdb/lmdb-darwin-x64": "3.5.1", + "@lmdb/lmdb-linux-arm": "3.5.1", + "@lmdb/lmdb-linux-arm64": "3.5.1", + "@lmdb/lmdb-linux-x64": "3.5.1", + "@lmdb/lmdb-win32-arm64": "3.5.1", + "@lmdb/lmdb-win32-x64": "3.5.1" + } + }, + "node_modules/log-symbols": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-7.0.1.tgz", + "integrity": "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-unicode-supported": "^2.0.0", + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", + "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/make-fetch-happen": { + "version": "15.0.6", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-15.0.6.tgz", + "integrity": "sha512-Je0fLJ0F5atA7F+eIlLzk+Wkcl57JDf4kf+EW8xiP5E31xOQxkIxTbgf1Oi1Lw9tRI9UEMRdI5Vz2xTzoNU1Jw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@gar/promise-retry": "^1.0.0", + "@npmcli/agent": "^4.0.0", + "@npmcli/redact": "^4.0.0", + "cacache": "^20.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^5.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", + "proc-log": "^6.0.0", + "ssri": "^13.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.1.tgz", + "integrity": "sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", + "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.8" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-fetch": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-5.0.2.tgz", + "integrity": "sha512-2d0q2a8eCi2IRg/IGubCNRJoYbA1+YPXAzQVRFmB45gdGZafyivnZ5YSEfo3JikbjGxOdntGFvBQGqaSMXlAFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^2.0.0", + "minizlib": "^3.0.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + }, + "optionalDependencies": { + "iconv-lite": "^0.7.2" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.7.tgz", + "integrity": "sha512-TbqTz9cUwWyHS2Dy89P3ocAGUGxKjjLuR9z8w4WUTGAVgEj17/4nhgo2Du56i0Fm3Pm30g4iA8Lcqctc76jCzA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minipass-sized": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-2.0.0.tgz", + "integrity": "sha512-zSsHhto5BcUVM2m1LurnXY6M//cGhVaegT71OfOXoprxT6o780GZd792ea6FfrQkuU4usHZIUczAQMRUE2plzA==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/msgpackr": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.12.1.tgz", + "integrity": "sha512-4EUH9tQHnMmEgzW/MdAP0KIfa1T9AF+htl0ffe2n5vb2EKn9y2co8ccpgWko6S52Jy1PQZKwRnx5/KkYjtd9MQ==", + "dev": true, + "license": "MIT", + "optional": true, + "optionalDependencies": { + "msgpackr-extract": "^3.0.2" + } + }, + "node_modules/msgpackr-extract": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.4.tgz", + "integrity": "sha512-4kmO/MdyUIkLIvTPr8VHLil4AtoKIoniWPIEk5+CDy0xnWC84azhSFmuJ7PxZdsYtiP5kEeQsORAVIeMgxT+Hw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-gyp-build-optional-packages": "5.2.2" + }, + "bin": { + "download-msgpackr-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.4", + "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.4", + "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.4", + "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.4", + "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.4", + "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.4" + } + }, + "node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.19", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.19.tgz", + "integrity": "sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.1.0.tgz", + "integrity": "sha512-NMPBRMJgiQHjbd8phG3Vebdx4kZ1H121rbl5IkMqeOsahptB9BKo/d7oJ3zTXqTgagn2bWlNSXkh0QUGM31RYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "content-type": "^2.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/negotiator/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/node-addon-api": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/node-gyp": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-12.4.0.tgz", + "integrity": "sha512-OMcPNvqTCFUnNaBlmdgq+lfNqY7gTiSmNRDjY3uAXRyudeKZEZxu3CLtjMQrx4zZxCX2b/mpNqTtwuCJgXhHkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "graceful-fs": "^4.2.6", + "nopt": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "tar": "^7.5.4", + "tinyglobby": "^0.2.12", + "undici": "^6.25.0", + "which": "^6.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/node-gyp-build-optional-packages": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz", + "integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.1" + }, + "bin": { + "node-gyp-build-optional-packages": "bin.js", + "node-gyp-build-optional-packages-optional": "optional.js", + "node-gyp-build-optional-packages-test": "build-test.js" + } + }, + "node_modules/node-gyp/node_modules/isexe": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", + "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=20" + } + }, + "node_modules/node-gyp/node_modules/undici": { + "version": "6.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.29.0.tgz", + "integrity": "sha512-R+RODBqp6i2pPflGdq+xIOUkl+RNfGgHwoinecKu/JCuf2uO06cOKoDbI2P7Dn6KcswdKwrczbU6IYJ6K8X+wg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.17" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", + "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^4.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.57", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.57.tgz", + "integrity": "sha512-kQK9LGGFiHtrWiNhZtA7Qbw17AQz+dmsEKODRIVTXA9+e5MS/2gZEBhYJt13GrAz5/IOZKddH/0Z3TP/Zgo+yw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/nopt": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-9.0.0.tgz", + "integrity": "sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^4.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-bundled": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-5.0.0.tgz", + "integrity": "sha512-JLSpbzh6UUXIEoqPsYBvVNVmyrjVZ1fzEFbqxKkTJQkWBO3xFzFT+KDnSKQWwOQNbuWRwt5LSD6HOTLGIWzfrw==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^5.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-install-checks": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-8.0.0.tgz", + "integrity": "sha512-ScAUdMpyzkbpxoNekQ3tNRdFI8SJ86wgKZSQZdUxT+bj0wVFpsEMWnkXP0twVe1gJyNF5apBWDJhhIbgrIViRA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-5.0.0.tgz", + "integrity": "sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-package-arg": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-13.0.2.tgz", + "integrity": "sha512-IciCE3SY3uE84Ld8WZU23gAPPV9rIYod4F+rc+vJ7h7cwAJt9Vk6TVsK60ry7Uj3SRS3bqRRIGuTp9YVlk6WNA==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^7.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-packlist": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-10.0.4.tgz", + "integrity": "sha512-uMW73iajD8hiH4ZBxEV3HC+eTnppIqwakjOYuvgddnalIw2lJguKviK1pcUJDlIWm1wSJkchpDZDSVVsZEYRng==", + "dev": true, + "license": "ISC", + "dependencies": { + "ignore-walk": "^8.0.0", + "proc-log": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-11.0.3.tgz", + "integrity": "sha512-buzyCfeoGY/PxKqmBqn1IUJrZnUi1VVJTdSSRPGI60tJdUhUoSQFhs0zycJokDdOznQentgrpf8LayEHyyYlqQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^8.0.0", + "npm-normalize-package-bin": "^5.0.0", + "npm-package-arg": "^13.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-19.1.1.tgz", + "integrity": "sha512-TakBap6OM1w0H73VZVDf44iFXsOS3h+L4wVMXmbWOQroZgFhMch0juN6XSzBNlD965yIKvWg2dfu7NSiaYLxtw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/redact": "^4.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^15.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^5.0.0", + "minizlib": "^3.0.1", + "npm-package-arg": "^13.0.0", + "proc-log": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-9.3.0.tgz", + "integrity": "sha512-lBX72MWFduWEf7v7uWf5DHp9Jn5BI8bNPGuFgtXMmr2uDz2Gz2749y3am3agSDdkhHPHYmmxEGSKH85ZLGzgXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.6.2", + "cli-cursor": "^5.0.0", + "cli-spinners": "^3.2.0", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^2.1.0", + "log-symbols": "^7.0.1", + "stdin-discarder": "^0.3.1", + "string-width": "^8.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ordered-binary": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.6.2.tgz", + "integrity": "sha512-BY+qgDArmYpvvmij141xbkB4Cw8RFLBQM5Zj4MODFb1SyXBRE/xO4Xj/QWbR7aUEBxbkjuNdsFVCL2TmbYrlNg==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/p-map": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.8.tgz", + "integrity": "sha512-MitaVsCuCFIvOLLPIU7NnfrZvS9H9h7kwMUkDo+T2pEISaJD48IV9S8iIdXB7PsvvdxyYcsSTTrr90XKsbulNw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pacote": { + "version": "21.5.1", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-21.5.1.tgz", + "integrity": "sha512-KvcJ9iy3crysCsgqc4+PknH/w6jkrp8JN36mpZBPwNaDRwTfMZD37YzRazNstiZUOhuF5pno9f78n9mEJBavwg==", + "dev": true, + "license": "ISC", + "dependencies": { + "@gar/promise-retry": "^1.0.0", + "@npmcli/git": "^7.0.0", + "@npmcli/installed-package-contents": "^4.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "@npmcli/run-script": "^10.0.0", + "cacache": "^20.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^13.0.0", + "npm-packlist": "^10.0.1", + "npm-pick-manifest": "^11.0.1", + "npm-registry-fetch": "^19.0.0", + "proc-log": "^6.0.0", + "sigstore": "^4.0.0", + "ssri": "^13.0.0", + "tar": "^7.4.3" + }, + "bin": { + "pacote": "bin/index.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.1.tgz", + "integrity": "sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==", + "license": "MIT", + "dependencies": { + "entities": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-8.0.0.tgz", + "integrity": "sha512-wzh11mj8KKkno1pZEu+l2EVeWsuKDfR5KNWZOTsslfUX8lPDZx77m9T0kIoAVkFtD1nx6YF8oh4BnPHvxMtNMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0", + "parse5": "^8.0.0", + "parse5-sax-parser": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/parse5-sax-parser": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-8.0.0.tgz", + "integrity": "sha512-/dQ8UzHZwnrzs3EvDj6IkKrD/jIZyTlB+8XrHJvcjNgRdmWruNdN9i9RK/JtxakmlUdPwKubKPTCqvbTgzGhrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "11.5.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.3.tgz", + "integrity": "sha512-U4N8FgzmWxc8k1VH8Kr6lQg18U7Fjvby6wXHVRX/ZZ7IwWbRMgrRbP0Wrb5q5NVinryp4SQampHKdvtecItxUg==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/path-to-regexp": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/piscina": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-5.2.0.tgz", + "integrity": "sha512-DszUCKeVN/5G5QKo6jAVHL8fmKnkJvQ0ACiVgY7YGCq3TUB2oznAOayvZPIAdEThvhczkXR+qm3IHsNXpFCYfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.x" + }, + "optionalDependencies": { + "@napi-rs/nice": "^1.0.4" + } + }, + "node_modules/pkce-challenge": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", + "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/postcss": { + "version": "8.5.28", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.28.tgz", + "integrity": "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.18", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss-safe-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.1.0.tgz", + "integrity": "sha512-1WzZxRLaAFwEh6Do+zyGpjWV3nGJNxxhuh7Ubu/q1ICImMgZJnLwhoaEpRbG4pJppp2Y1ncL9ffA2f+LhrefQg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/primeng": { + "version": "21.1.10", + "resolved": "https://registry.npmjs.org/primeng/-/primeng-21.1.10.tgz", + "integrity": "sha512-1dNoVrrmdif95iuPwcSyzS0MwBy4yrbB/44s4gp+UeoZU11G9+SNFd6P/3tiiun7bAh2vbe4Uf0juy7DMtnRbA==", + "license": "SEE LICENSE IN LICENSE.md", + "dependencies": { + "@primeuix/motion": "^0.0.10", + "@primeuix/styled": "^0.7.4", + "@primeuix/styles": "^2.0.3", + "@primeuix/utils": "^0.7.2", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/cdk": "^21.0.0", + "@angular/common": "^21.0.0", + "@angular/core": "^21.0.7", + "@angular/forms": "^21.0.0", + "@angular/platform-browser": "^21.0.0", + "@angular/router": "^21.0.0", + "rxjs": "^6.0.0 || ^7.8.1" + } + }, + "node_modules/primeng/node_modules/@primeuix/utils": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@primeuix/utils/-/utils-0.7.2.tgz", + "integrity": "sha512-pmEbSfP0Phf9W9RweiM66zXnkn73ZeKyYINElbX3uZ2+stzzaba2svLAl3B1pHVcRw5t43O0VciaGe4ye2EXKw==", + "license": "MIT", + "engines": { + "node": ">=12.11.0" + } + }, + "node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.8.tgz", + "integrity": "sha512-5nnx0yGyVUcY6t9RnWcARWtwT9F1D8O9rt08htPvnd49W1IgZtmLkhu9WfMzQj1cFxjHIO6connUNVW5k7AVyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/qs": { + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.16.0.tgz", + "integrity": "sha512-h6fhOIaRrID2CbEY2fqs+7t+UXZo+MLAnU5gRIq85uFtdiUPCdsApMlHhXogKVM4HM2DVbIjGNTTYH2OcmP1vA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "es-define-property": "^1.0.1", + "side-channel": "^1.1.1" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.3.0.tgz", + "integrity": "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/raw-body": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/readdirp": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.1.1.tgz", + "integrity": "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/rolldown": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.4.tgz", + "integrity": "sha512-V2tPDUrY3WSevrvU2E41ijZlpF+5PbZu4giH+VpNraaadsJGHa4fR6IFwsocVwEXDoAdIv5qgPPxgrvKAOIPtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.113.0", + "@rolldown/pluginutils": "1.0.0-rc.4" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.0.0-rc.4", + "@rolldown/binding-darwin-arm64": "1.0.0-rc.4", + "@rolldown/binding-darwin-x64": "1.0.0-rc.4", + "@rolldown/binding-freebsd-x64": "1.0.0-rc.4", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.4", + "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.4", + "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.4", + "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.4", + "@rolldown/binding-linux-x64-musl": "1.0.0-rc.4", + "@rolldown/binding-openharmony-arm64": "1.0.0-rc.4", + "@rolldown/binding-wasm32-wasi": "1.0.0-rc.4", + "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.4", + "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.4" + } + }, + "node_modules/rollup": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.64.0.tgz", + "integrity": "sha512-gjA/kFeDfffII8COoPsvLPvE16hWDTEc1+0QKQNKUkuV8iJjqsC4xXs8/FzuL0v9EV39kuxTbAgcFoTRyy2TGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.9" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@napi-rs/lzma-linux-x64-gnu": "1.5.1", + "@rollup/rollup-android-arm-eabi": "4.64.0", + "@rollup/rollup-android-arm64": "4.64.0", + "@rollup/rollup-darwin-arm64": "4.64.0", + "@rollup/rollup-darwin-x64": "4.64.0", + "@rollup/rollup-freebsd-arm64": "4.64.0", + "@rollup/rollup-freebsd-x64": "4.64.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.64.0", + "@rollup/rollup-linux-arm-musleabihf": "4.64.0", + "@rollup/rollup-linux-arm64-gnu": "4.64.0", + "@rollup/rollup-linux-arm64-musl": "4.64.0", + "@rollup/rollup-linux-loong64-gnu": "4.64.0", + "@rollup/rollup-linux-loong64-musl": "4.64.0", + "@rollup/rollup-linux-ppc64-gnu": "4.64.0", + "@rollup/rollup-linux-ppc64-musl": "4.64.0", + "@rollup/rollup-linux-riscv64-gnu": "4.64.0", + "@rollup/rollup-linux-riscv64-musl": "4.64.0", + "@rollup/rollup-linux-s390x-gnu": "4.64.0", + "@rollup/rollup-linux-x64-gnu": "4.64.0", + "@rollup/rollup-linux-x64-musl": "4.64.0", + "@rollup/rollup-openbsd-x64": "4.64.0", + "@rollup/rollup-openharmony-arm64": "4.64.0", + "@rollup/rollup-win32-arm64-msvc": "4.64.0", + "@rollup/rollup-win32-ia32-msvc": "4.64.0", + "@rollup/rollup-win32-x64-gnu": "4.64.0", + "@rollup/rollup-win32-x64-msvc": "4.64.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/sass": { + "version": "1.97.3", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.97.3.tgz", + "integrity": "sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.0", + "immutable": "^5.0.2", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/sass/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/sass/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true, + "license": "ISC" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sigstore": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-4.1.1.tgz", + "integrity": "sha512-endqECJkfhozrXMK5ngu/UAA0xVcVEFdnHJCElGaExypjW+HK5i6zu3NteLoaX/iFbRUbC3+DjttQs0GARr+5w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.2.1", + "@sigstore/protobuf-specs": "^0.5.0", + "@sigstore/sign": "^4.1.1", + "@sigstore/tuf": "^4.0.2", + "@sigstore/verify": "^3.1.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/slice-ansi": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-8.0.0.tgz", + "integrity": "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.3", + "is-fullwidth-code-point": "^5.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.10", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.10.tgz", + "integrity": "sha512-e0VyvkVTwVYViNovRkZ9aodhxVlyoMn7eJhVUPxZ+eK9P/7CBkxvvsBOHqFPEH416726W8tLXXXjKwqgTErrCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ip-address": "^10.1.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/source-map-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz", + "integrity": "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", + "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.24", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.24.tgz", + "integrity": "sha512-cLS9TtWkIQFyLkJ3/5aFQAOHOSKTlOs/7WDut/XPSdjom1fJhUdkepeJAKXa9Y05+FabHd0sti+Et559vDtkpQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/ssri": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-13.0.1.tgz", + "integrity": "sha512-QUiRf1+u9wPTL/76GTYlKttDEBWV1ga9ZXW8BG6kfdeyyM8LGPix9gROyg9V2+P0xNyF3X2Go526xKFdMZrHSQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stdin-discarder": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.3.2.tgz", + "integrity": "sha512-eCPu1qRxPVkl5605OTWF8Wz40b4Mf45NY5LQmVPQ599knfs5QhASUm9GbJ5BDMDOXgrnh0wyEdvzmL//YMlw0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.3.0.tgz", + "integrity": "sha512-ZbmZM0JCihQN91dWnxoipT2KOEyHqEyfRXUyjuRhW8b/xnqPDoq4gWEVApTVa9db2wN8mmoikgFBbjh71+cGeQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/tar": { + "version": "7.5.22", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.22.tgz", + "integrity": "sha512-MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tuf-js": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-4.1.0.tgz", + "integrity": "sha512-50QV99kCKH5P/Vs4E2Gzp7BopNV+KzTXqWeaxrfu5IQJBOULRsTIS9seSsOVT8ZnGXzCyx55nYWAi4qJzpZKEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/models": "4.1.0", + "debug": "^4.4.3", + "make-fetch-happen": "^15.0.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/type-is": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", + "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==", + "dev": true, + "license": "MIT", + "dependencies": { + "content-type": "^2.0.0", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/type-is/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.29.1.tgz", + "integrity": "sha512-RYONW2MeafgYlkVOKYKkA/Ag7BmXqgIWCa8t1m0JcxrQg9pI9lEqRhAOruOBCbAohOa/gkCF+iPi9hrgvTzu6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.3.tgz", + "integrity": "sha512-pJ2sYawQS0R/WI928Gj5GlPhTGzbMelq0+4INtSYNDV9ErKJcX6xjGWkoG/VnB3dpUm00zALaqkrUD77pO5TDQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-7.0.2.tgz", + "integrity": "sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.6.tgz", + "integrity": "sha512-4XP60spRGjSZFf1qYH+dJIkK2znL3zQfl9KkOV9MkkRR/3Dls0dxaBsQPTloEc5BLXWPL9vsOxopxyKoMmDueg==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.27.0 || ^0.28.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/watchpack": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", + "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/weak-lru-cache": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", + "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.1.0.tgz", + "integrity": "sha512-2rAgRKu54VsHkqI0/tYkmluGXHD4KW7yZoycuqDQ15QOTnc2VVfy0nN/1eMhnQLO00A+dwtK20xuCnc1YGeUyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^9.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "string-width": "^8.2.1", + "y18n": "^5.0.5", + "yargs-parser": "^22.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/yargs-parser": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/yoctocolors": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.2.0.tgz", + "integrity": "sha512-xYqdZFUK/VYazNl/oCDYN+3WloWQwMfZxBoiNt6qNyk+xfOdi598muWE42rNZFp1kNOiqW936q5RhUdnpqElSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", + "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.25.2", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz", + "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==", + "dev": true, + "license": "ISC", + "peerDependencies": { + "zod": "^3.25.28 || ^4" + } + } + } +} diff --git a/applications/asset-audit/ui/package.json b/applications/asset-audit/ui/package.json new file mode 100644 index 00000000..48ff386e --- /dev/null +++ b/applications/asset-audit/ui/package.json @@ -0,0 +1,31 @@ +{ + "name": "asset-audit-ui", + "version": "1.0.0", + "private": true, + "scripts": { + "build": "ng build", + "typecheck": "ngc --noEmit", + "dev": "ng serve --proxy-config proxy.conf.json" + }, + "dependencies": { + "@angular/common": "21.2.25", + "@angular/compiler": "21.2.25", + "@angular/core": "21.2.25", + "@angular/forms": "21.2.25", + "@angular/platform-browser": "21.2.25", + "@angular/router": "21.2.25", + "@angular/cdk": "21.2.14", + "primeng": "21.1.10", + "@primeuix/themes": "2.0.3", + "ag-grid-angular": "36.2.0", + "ag-grid-community": "36.2.0", + "rxjs": "7.8.2", + "tslib": "2.8.1" + }, + "devDependencies": { + "@angular/build": "21.2.24", + "@angular/cli": "21.2.24", + "@angular/compiler-cli": "21.2.25", + "typescript": "5.9.3" + } +} diff --git a/applications/asset-audit/ui/proxy.conf.json b/applications/asset-audit/ui/proxy.conf.json new file mode 100644 index 00000000..fcc93ff3 --- /dev/null +++ b/applications/asset-audit/ui/proxy.conf.json @@ -0,0 +1,7 @@ +{ + "/api": { + "target": "http://127.0.0.1:3333", + "secure": false, + "changeOrigin": false + } +} diff --git a/applications/asset-audit/ui/src/app.html b/applications/asset-audit/ui/src/app.html new file mode 100644 index 00000000..87bcb191 --- /dev/null +++ b/applications/asset-audit/ui/src/app.html @@ -0,0 +1,60 @@ +

+ +
+
Equipment / Count sheetsLOCAL OPERATOR
+
PHYSICAL INVENTORY

Make every count count.

Record what's on the shelf. Review the differences. Close the sheet.

+
+
+
+ @if (sheet(); as current) { + + Revision {{ current.revision }} + @if (dirty()) { Unsaved changes } + } +
+
+ @if (message()) { } + @if (!sheet()) { +
+

{{ busy() ? 'Loading count sheet…' : sheets().length ? 'Count sheet unavailable' : 'No count sheets available' }}

+

{{ busy() ? 'Reading the saved revision and equipment counts.' : sheets().length ? 'Reload to try reading the saved sheet again.' : 'Run the database seed to add the example equipment and sheets.' }}

+ @if (!busy() && sheets().length) { } +
+ } + @if (sheet(); as current) { +
+
LOCATION{{ current.location }}{{ rows().length }} equipment lines
+
COUNTED{{ counted() }} / {{ rows().length }}{{ rows().length - counted() }} lines remaining
+
DISCREPANCIES{{ discrepancies() }}Counted lines differing from expected
+
NET DIFFERENCE{{ difference() > 0 ? '+' : '' }}{{ difference() }}Across counted lines only
+
+
+

Equipment count

{{ current.status === 'draft' ? 'Double-click a Counted cell, or select it and press Enter.' : 'Finalized count sheet · editing is closed.' }}

+
+ + +
+
{{ conflict() ? 'Reload to review the saved revision; reapply your changes afterward.' : dirty() ? 'Save this draft before switching sheets or finalizing.' : current.status === 'finalized' ? 'Finalized sheets remain available for review.' : 'Your saved draft can be resumed at any time.' }}
+ + @if (current.status === 'draft') { + + + } +
+ } +
Angular · PrimeNG · AG Grid Community AdonisJS + Lucid + ClickHouse Managed Postgres
+
+
+ +

Every line has a saved count. Finalization makes these quantities read-only.

+
+
+ +

Reloading replaces your local edits with the saved count sheet.

+
+
diff --git a/applications/asset-audit/ui/src/app.ts b/applications/asset-audit/ui/src/app.ts new file mode 100644 index 00000000..af442e8b --- /dev/null +++ b/applications/asset-audit/ui/src/app.ts @@ -0,0 +1,137 @@ +import { Component, computed, signal } from '@angular/core' +import { HttpClient, HttpErrorResponse } from '@angular/common/http' +import { FormsModule } from '@angular/forms' +import { ButtonModule } from 'primeng/button' +import { SelectModule } from 'primeng/select' +import { DialogModule } from 'primeng/dialog' +import { MessageModule } from 'primeng/message' +import { TagModule } from 'primeng/tag' +import { AgGridAngular } from 'ag-grid-angular' +import { AllCommunityModule, ModuleRegistry, themeQuartz, type ColDef, type GridApi, type GridReadyEvent } from 'ag-grid-community' +import type { CountRow, CountSheet, SheetSummary } from './dto' +ModuleRegistry.registerModules([AllCommunityModule]) + +@Component({ + selector: 'app-root', standalone: true, + imports: [FormsModule, ButtonModule, SelectModule, DialogModule, MessageModule, TagModule, AgGridAngular], + templateUrl: './app.html', +}) +export class AppComponent { + readonly sheets = signal([]) + readonly sheet = signal(null) + readonly rows = signal([]) + readonly dirty = signal(false) + readonly busy = signal(true) + readonly conflict = signal(false) + readonly message = signal('') + readonly error = signal(false) + readonly counted = computed(() => this.rows().filter((r) => r.counted !== null).length) + readonly discrepancies = computed(() => this.rows().filter((r) => r.counted !== null && r.counted !== r.expected).length) + readonly difference = computed(() => this.rows().reduce((sum, r) => sum + (r.counted === null ? 0 : r.counted - r.expected), 0)) + selectedId = 1 + filter = '' + confirmFinalize = false + confirmReload = false + private grid?: GridApi + readonly theme = themeQuartz.withParams({ + accentColor: '#c55a36', backgroundColor: '#ffffff', headerBackgroundColor: '#f6f5f1', + foregroundColor: '#283b46', borderColor: '#e1e5e5', fontFamily: 'inherit', + fontSize: 14, rowHeight: 58, headerHeight: 44, + }) + readonly defaultColDef: ColDef = { sortable: true, filter: true, resizable: true, flex: 1, minWidth: 110 } + readonly columns: ColDef[] = [ + { field: 'sku', headerName: 'Asset code', minWidth: 150, flex: 0.8 }, + { field: 'name', headerName: 'Equipment', minWidth: 220, flex: 1.8 }, + { field: 'category', minWidth: 125 }, + { field: 'expected', headerName: 'Expected', minWidth: 105, flex: 0.7 }, + { + field: 'counted', headerName: 'Counted · edit', minWidth: 145, + editable: () => this.sheet()?.status === 'draft' && !this.busy() && !this.conflict(), + cellEditor: 'agTextCellEditor', + cellClass: (p) => p.data?.counted === null ? 'unentered' : 'counted-cell', + valueFormatter: (p) => p.value === null ? '—' : String(p.value), + valueSetter: (p) => { + const value = String(p.newValue ?? '').trim() + if (value !== '' && (!/^\d+$/.test(value) || Number(value) > 1000000)) { + this.notify('Enter a whole count from 0 to 1,000,000, or leave the cell empty.', true) + return false + } + const next = value === '' ? null : Number(value) + if (p.data.counted === next) return false + p.data.counted = next + return true + }, + }, + { + headerName: 'Difference', colId: 'difference', minWidth: 115, flex: 0.8, + valueGetter: (p) => p.data?.counted === null || !p.data ? null : p.data.counted - p.data.expected, + valueFormatter: (p) => p.value === null ? 'Not counted' : p.value > 0 ? '+' + p.value : String(p.value), + cellClass: (p) => p.value ? 'discrepancy-cell' : '', + }, + ] + + constructor(private http: HttpClient) { + this.http.get('/api/stocktakes').subscribe({ + next: (sheets) => { this.sheets.set(sheets); if (sheets.length) { this.selectedId = sheets[0].id; this.load() } else this.busy.set(false) }, + error: () => { this.busy.set(false); this.notify('The count sheets could not be loaded. Check that the API is running.', true) }, + }) + } + ready(event: GridReadyEvent) { this.grid = event.api } + edited() { + this.rows.set(this.rows().map((row) => ({ ...row }))) + this.dirty.set(true) + this.message.set('') + } + private notify(text: string, error = false) { this.message.set(text); this.error.set(error) } + private apply(sheet: CountSheet) { + this.sheet.set(sheet) + this.rows.set(sheet.rows.map((row) => ({ ...row }))) + this.dirty.set(false) + this.conflict.set(false) + this.sheets.update((sheets) => sheets.map((s) => s.id === sheet.id ? { ...s, status: sheet.status, revision: sheet.revision } : s)) + } + load() { + this.busy.set(true) + this.sheet.set(null) + this.rows.set([]) + this.http.get('/api/stocktakes/' + this.selectedId).subscribe({ + next: (sheet) => { this.apply(sheet); this.busy.set(false); this.message.set('') }, + error: () => { this.busy.set(false); this.notify('The sheet could not be loaded.', true) }, + }) + } + requestReload() { + this.grid?.stopEditing() + if (this.dirty()) this.confirmReload = true + else this.load() + } + private failed(err: HttpErrorResponse) { + this.busy.set(false) + this.conflict.set(err.status === 409) + this.grid?.refreshCells({ force: true }) + this.notify(err.error?.error?.message ?? 'The change could not be saved. Try again.', true) + } + save() { + this.grid?.stopEditing() + const sheet = this.sheet() + if (!sheet || !this.dirty() || this.busy() || this.conflict()) return + this.busy.set(true) + this.http.put('/api/stocktakes/' + sheet.id, { + revision: sheet.revision, + counts: this.rows().map((r) => ({ itemId: r.itemId, counted: r.counted })), + }, { headers: { 'X-Asset-Audit': '1' } }).subscribe({ + next: (updated) => { this.apply(updated); this.busy.set(false); this.notify('Draft saved. Your counts are stored in Postgres.') }, + error: (err) => this.failed(err), + }) + } + finalize() { + const sheet = this.sheet() + this.confirmFinalize = false + if (!sheet || this.dirty() || this.busy() || this.counted() !== this.rows().length) return + this.busy.set(true) + this.http.post('/api/stocktakes/' + sheet.id + '/finalize', + { revision: sheet.revision }, { headers: { 'X-Asset-Audit': '1' } }).subscribe({ + next: (updated) => { this.apply(updated); this.busy.set(false); this.grid?.refreshCells({ force: true }); this.notify('Count sheet finalized. These counts are now read-only.') }, + error: (err) => this.failed(err), + }) + } +} diff --git a/applications/asset-audit/ui/src/dto.ts b/applications/asset-audit/ui/src/dto.ts new file mode 100644 index 00000000..d2d1068e --- /dev/null +++ b/applications/asset-audit/ui/src/dto.ts @@ -0,0 +1,7 @@ +export interface CountRow { + itemId: number; sku: string; name: string; category: string; expected: number; counted: number | null +} +export interface SheetSummary { + id: number; name: string; location: string; status: 'draft' | 'finalized'; revision: number +} +export interface CountSheet extends SheetSummary { finalizedAt: string | null; rows: CountRow[] } diff --git a/applications/asset-audit/ui/src/index.html b/applications/asset-audit/ui/src/index.html new file mode 100644 index 00000000..2191fa7e --- /dev/null +++ b/applications/asset-audit/ui/src/index.html @@ -0,0 +1,2 @@ + +Asset audit · Equipment stocktake diff --git a/applications/asset-audit/ui/src/main.ts b/applications/asset-audit/ui/src/main.ts new file mode 100644 index 00000000..1959fbb3 --- /dev/null +++ b/applications/asset-audit/ui/src/main.ts @@ -0,0 +1,8 @@ +import { bootstrapApplication } from '@angular/platform-browser' +import { provideHttpClient } from '@angular/common/http' +import { providePrimeNG } from 'primeng/config' +import Aura from '@primeuix/themes/aura' +import { AppComponent } from './app' +bootstrapApplication(AppComponent, { + providers: [provideHttpClient(), providePrimeNG({ theme: { preset: Aura, options: { darkModeSelector: '.dark-mode' } } })], +}).catch(console.error) diff --git a/applications/asset-audit/ui/src/styles.css b/applications/asset-audit/ui/src/styles.css new file mode 100644 index 00000000..403dd4bc --- /dev/null +++ b/applications/asset-audit/ui/src/styles.css @@ -0,0 +1,28 @@ +@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=Manrope:wght@400;500;600;700;800&display=swap'); +:root { color-scheme: light; font-family: 'DM Sans', system-ui, sans-serif; color: #253a43; background: #f4f5f2; --p-primary-color:#c55a36; --p-primary-hover-color:#ad4625; --p-primary-active-color:#913b22; } +* { box-sizing:border-box } body { margin:0 } .shell { display:flex; min-height:100vh } +.sidebar { width:250px; flex-shrink:0; background:#172d38; color:#d7e4e6; padding:35px 23px; position:relative; min-height:100vh } +.brand { display:flex; align-items:center; gap:12px; font-family:Manrope,sans-serif; font-size:20px; font-weight:800 } +.brand small { display:block; color:#8aa5af; font-size:8px; letter-spacing:1.5px; margin-top:7px } +.brand-mark { display:grid; place-items:center; width:38px; height:42px; border-radius:10px; background:#c65b37; color:white; font-size:24px } +.sidebar-label { font-size:10px; font-weight:700; letter-spacing:1.4px; color:#7f9da8; margin:58px 8px 18px } +.nav-current { font-size:13px; padding:16px 10px; background:#29424d; border-radius:8px; display:flex; align-items:center; gap:10px } +.nav-current > span:first-child { font-size:21px; color:#b9cdd2 } .nav-dot { margin-left:auto; width:6px; height:6px; border-radius:100%; background:#d27555 } +.sidebar-note { position:absolute; bottom:35px; left:25px; right:22px; font-size:11px; line-height:1.8; color:#a4bac2 } +.sidebar-note small { display:block; color:#758f9b; font-size:10px; line-height:1.5; margin-top:7px }.status-dot { display:inline-block; width:6px; height:6px; border-radius:100%; background:#80b59c; margin-right:5px } +main { flex:1; padding:0 42px; min-width:0; max-width:1550px }.topbar { height:70px; border-bottom:1px solid #e2e7e4; display:flex; align-items:center; justify-content:space-between; font-size:12px; color:#809297 }.topbar strong { color:#415860; font-weight:500 } +.operator { border:1px solid #dce2df; padding:7px 10px; border-radius:5px; font-size:9px; letter-spacing:1px; color:#5f757c } +.page-heading { padding:30px 0 27px }.eyebrow { color:#a8583e; font-size:10px; letter-spacing:1.8px; font-weight:700 } +h1 { font-family:Manrope,sans-serif; font-size:32px; letter-spacing:-1.2px; margin:8px 0; font-weight:800 }.page-heading p { font-size:13px; color:#72858a; margin:0 } +.sheet-toolbar { display:flex; justify-content:space-between; align-items:center; margin-bottom:22px; gap:20px } +.sheet-toolbar label { display:block; font-size:11px; font-weight:600; margin-bottom:8px; color:#64787f }.sheet-toolbar .p-select { min-width:340px } +.sheet-state { display:flex; align-items:center; gap:12px; font-size:11px; color:#70838a }.unsaved { color:#ad4625; font-weight:600 } +.summary-grid { display:grid; grid-template-columns:1.4fr 1fr 1fr 1fr; gap:14px; margin-bottom:24px } +.metric { border:1px solid #e2e7e3; border-radius:9px; padding:18px 20px; background:#fff; min-height:122px } +.metric > span { display:block; font-size:9px; letter-spacing:1.3px; color:#7a8d91; font-weight:700 }.metric strong { display:block; font-family:Manrope,sans-serif; font-size:32px; font-weight:800; margin:8px 0 3px }.metric strong.location { font-size:19px; padding:8px 0 5px }.metric em { font-size:16px; font-style:normal; color:#b0bdbe; font-weight:500 }.metric small { font-size:10px; color:#829398 }.accent { color:#be5b3b } +.grid-panel { background:white; border:1px solid #dfe5e2; border-radius:10px; overflow:hidden }.grid-header { padding:21px 21px; display:flex; align-items:center; justify-content:space-between; gap:12px }.grid-header h2 { font-family:Manrope,sans-serif; font-size:16px; margin:0 0 6px }.grid-header p { font-size:11px; color:#839399; margin:0 }.search { background:#fafbf9; border:1px solid #e0e5e2; border-radius:6px; padding:10px 12px; font:inherit; font-size:12px; width:205px } +.equipment-grid { display:block; height:510px; width:100% }.grid-footer { display:flex; justify-content:space-between; padding:15px 22px; font-size:10px; color:#87979b }.ag-cell { display:flex; align-items:center }.unentered { color:#99aaa9; background:#fffcf7 }.counted-cell { font-weight:700; background:#fff9f3 }.discrepancy-cell { color:#b95738; font-weight:700 } +.actions { display:flex; gap:10px; align-items:center; margin-top:22px }.action-note { flex:1; font-size:11px; color:#6e848a; max-width:460px; margin-right:auto; line-height:1.6 }.p-button { font-size:12px }.feedback { margin:0 0 18px }.dialog-actions { display:flex; justify-content:flex-end; gap:10px; margin-top:22px } +footer { color:#93a3a5; font-size:10px; border-top:1px solid #e2e7e3; margin-top:30px; padding:20px 0; display:flex; justify-content:space-between } +@media(max-width:1100px) { .sidebar { width:210px; padding:30px 18px } main { padding:0 25px }.summary-grid { grid-template-columns:repeat(2,1fr) }.actions { flex-wrap:wrap }.action-note { max-width:none; flex-basis:100% } } +@media(max-width:750px) { .sidebar { display:none } main { padding:0 18px }.sheet-toolbar { align-items:flex-start; flex-direction:column }.sheet-toolbar .p-select { min-width:0; width:100% }.grid-header { align-items:flex-start; flex-direction:column }.search { width:100% } footer { flex-direction:column; gap:8px } h1 { font-size:27px } } diff --git a/applications/asset-audit/ui/tsconfig.json b/applications/asset-audit/ui/tsconfig.json new file mode 100644 index 00000000..99046ac9 --- /dev/null +++ b/applications/asset-audit/ui/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "preserve", + "moduleResolution": "bundler", + "lib": [ + "ES2022", + "dom" + ], + "experimentalDecorators": true, + "strict": true, + "skipLibCheck": true, + "useDefineForClassFields": false + }, + "angularCompilerOptions": { + "strictTemplates": true + }, + "files": [ + "src/main.ts" + ] +}