From f464fa5017c993e750e919942ead87e2cdc6e5c3 Mon Sep 17 00:00:00 2001 From: mifi Date: Fri, 21 Aug 2026 11:45:47 -0300 Subject: [PATCH] fix(docs):Docs and Exports - Add documentation for recently released changes - Update some exports to include enums --- .prettierrc.json | 2 +- .woodpecker/ci.yaml | 2 +- README.md | 101 +- pnpm-lock.yaml | 1924 +++++++++++++++++----------------- release.config.cjs | 22 +- src/constants.ts | 18 +- src/index.ts | 16 +- src/logger.ts | 114 +- src/sentry.ts | 2 +- src/sinks/console.ts | 38 +- src/sinks/sentry.ts | 32 +- src/types.ts | 8 +- test/console.test.ts | 30 +- test/logger.test.ts | 192 ++-- test/sentry-assignability.ts | 4 +- test/sentry.test.ts | 138 +-- tsup.config.ts | 10 +- vitest.config.ts | 4 +- 18 files changed, 1350 insertions(+), 1307 deletions(-) diff --git a/.prettierrc.json b/.prettierrc.json index 7120640..46d5dd2 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -1 +1 @@ -{ "singleQuote": false, "tabWidth": 4, "trailingComma": "all", "printWidth": 100, "semi": true } +{ "singleQuote": true, "tabWidth": 4, "trailingComma": "all", "printWidth": 100, "semi": true } diff --git a/.woodpecker/ci.yaml b/.woodpecker/ci.yaml index cd98d36..74efaf5 100644 --- a/.woodpecker/ci.yaml +++ b/.woodpecker/ci.yaml @@ -4,7 +4,7 @@ when: branch: main labels: - performance: low + performance: high steps: verify: diff --git a/README.md b/README.md index dbd4694..c1e875b 100644 --- a/README.md +++ b/README.md @@ -3,10 +3,11 @@ Intentional, namespaced logging for TypeScript browser and Node.js applications. ```ts -import { createLogger } from "@mifi/logger"; +import { createLogger } from '@mifi/logger'; -const logger = createLogger({ environment: "production", namespace: "WIDGET" }); -logger.child("Button").debug("Rendered", () => ({ expensive: "only evaluated when shown" })); +const logger = createLogger({ environment: 'production', namespace: 'WIDGET' }); +logger.child('Button').debug('Rendered', () => ({ expensive: 'only evaluated when shown' })); +logger.debug('response', async () => ({ data: await fetchBody() })); // settled before sinks ``` ## Install @@ -20,22 +21,23 @@ Requires Node.js `>=24`. Published to the private `@mifi` registry. ## Quick start ```ts -import { createLogger } from "@mifi/logger"; +import { createLogger } from '@mifi/logger'; const logger = createLogger({ - environment: "development", // "development" | "staging" | "production" - namespace: "API", // optional; string or string[] joined with ":" + environment: 'development', // "development" | "staging" | "production" + namespace: 'API', // optional; string or string[] joined with ":" }); -logger.trace("very detailed"); -logger.debug("diagnostic", () => ({ snapshot: heavyWork() })); -logger.info("ready"); -logger.warn("slow response", { ms: 1200 }); -logger.error("request failed", error); -logger.assert(userId, "missing user id"); +logger.trace('very detailed'); +logger.debug('diagnostic', () => ({ snapshot: heavyWork() })); +logger.debug('response', async () => ({ data: await res.json(), url: res.url })); +logger.info('ready'); +logger.warn('slow response', { ms: 1200 }); +logger.error('request failed', error); +logger.assert(userId, 'missing user id'); -const auth = logger.child("auth"); // namespace → "API:auth" -auth.info("token refreshed"); +const auth = logger.child('auth'); // namespace → "API:auth" +auth.info('token refreshed'); ``` Console utility methods (`group`, `groupCollapsed`, `table`, `time`, `count`, `dir`, …) are available and gated by the same level policy as `info`. @@ -64,9 +66,9 @@ Highest wins: ### Browser session override ```js -sessionStorage.setItem("showLoggingFor", "debug"); +sessionStorage.setItem('showLoggingFor', 'debug'); // or restrict to namespaces (exact or descendants): -sessionStorage.setItem("showLoggingFor", "debug:WIDGET,API"); +sessionStorage.setItem('showLoggingFor', 'debug:WIDGET,API'); ``` `WIDGET` matches `WIDGET` and `WIDGET:Button`. @@ -127,20 +129,20 @@ Override with `logLevel` on `createSentrySink`. Console policy stays independent `trace` / `debug` / `log` / `info` / `warn` / `error` (and `assert`) accept a trailing options object. Console utilities (`group`, `time`, …) do not. ```ts -import * as Sentry from "@sentry/nextjs"; -import { createLogger } from "@mifi/logger"; -import { createSentrySink } from "@mifi/logger/sentry"; +import * as Sentry from '@sentry/nextjs'; +import { createLogger } from '@mifi/logger'; +import { createSentrySink } from '@mifi/logger/sentry'; const logger = createLogger({ - environment: "production", - namespace: "API", + environment: 'production', + namespace: 'API', sentry: createSentrySink(Sentry, { logs: true }), }); -logger.error("Request failed", error, { requestId: "req_1" }); -logger.warn("slow", { ms: 1200 }); // → Sentry Logs in production -logger.info("investigating", { orderId }, { sentry: true }); // force Logs -logger.error("expected", err, { suppressSentry: true }); // console only (when enabled) +logger.error('Request failed', error, { requestId: 'req_1' }); +logger.warn('slow', { ms: 1200 }); // → Sentry Logs in production +logger.info('investigating', { orderId }, { sentry: true }); // force Logs +logger.error('expected', err, { suppressSentry: true }); // console only (when enabled) ``` | Option | Effect | @@ -150,7 +152,7 @@ logger.error("expected", err, { suppressSentry: true }); // console only (when e A last argument is treated as options only when every key is `sentry` or `suppressSentry`. Prefer the third-argument form when you also pass data. -Logs payload: string message + flat primitive attributes (including `logger.namespace`). Nested objects are not unfurled. +Logs payload: string message + flat primitive attributes (including `logger.namespace`). Nested objects are not unfurled. When emit was deferred for thenables, the payload also includes `async: true`. Issue severities use Sentry’s union (`warning`, not logger `warn`). The sink maps `warn` → `warning` and `trace` → `debug` for Issues only; Logs keep logger level names (`sentry.logger.warn`). @@ -159,16 +161,17 @@ Issue severities use Sentry’s union (`warning`, not logger `warn`). The sink m Replace the default destinations entirely with `sinks`: ```ts -import { createLogger, createConsoleSink, type LogSink } from "@mifi/logger"; +import { createLogger, createConsoleSink, type LogSink } from '@mifi/logger'; const analyticsSink: LogSink = { emit(event) { - if (event.sendToConsole) analytics.track("log", event); + if (event.sendToConsole) analytics.track('log', event); + // event.async === true when args were settled asynchronously }, }; const logger = createLogger({ - environment: "production", + environment: 'production', sinks: [createConsoleSink(), analyticsSink], }); ``` @@ -192,16 +195,46 @@ All public APIs include JSDoc with parameter and example documentation in the Ty ## Lazy arguments -Any function passed **after** the first argument is invoked only if the event is emitted: +Any function passed **after** the first argument is invoked only if the event will actually be emitted (console and/or Sentry). That keeps expensive snapshots cheap when the level is suppressed. ```ts -logger.debug("state", () => buildHugeSnapshot()); // skipped when debug is suppressed -logger.debug("response", async () => ({ data: await res.json(), url })); +logger.debug('state', () => buildHugeSnapshot()); // skipped when debug is suppressed +logger.error('failed', error, () => ({ body: pendingBody })); ``` -Top-level thenables (including Promises returned from lazy factories, or a Promise passed directly as an argument) are settled before sinks run. The log call stays fire-and-forget (`void`). Settled events set `LogEvent.async`, and the console sink renders an `[async]` label suffix. Nested promises inside plain objects are not walked — compose them inside the async factory. Async emits may appear out of order relative to sync logs. +### Async factories and Promises -Rejection reasons replace rejected thenables in that argument slot; other arguments still emit. +Factories may be `async`, or you may pass a top-level `Promise` as an argument. Thenables are **settled before sinks run**; the log method stays fire-and-forget (`void`). + +```ts +logger.debug('response', async () => ({ + data: await res.json(), + url: res.url, +})); + +logger.error('failed', { id }, responsePromise); +``` + +| Behavior | Detail | +| ----------------- | -------------------------------------------------------------------------------------------- | +| Unwrap scope | **Shallow** — only top-level thenables in the argument list | +| Nested promises | Not walked; compose with `await` / `Promise.all` inside the factory | +| Call return type | Still `void` (no `await logger.debug(...)`) | +| Timestamp | Captured at call time (before settle), so async logs correlate with the failure moment | +| `LogEvent.async` | `true` when emit was deferred; omitted for fully sync emits | +| Console | Label gains an `[async]` suffix, e.g. `[API][async]` | +| Sentry Logs | Attribute `async: true` when set | +| Ordering | Async emits may appear after later sync logs | +| Rejections | Rejection `reason` replaces that argument slot; other args still emit (`Promise.allSettled`) | +| Console utilities | `group` / `time` / etc. do not settle thenables (emit path only) | + +```ts +// Nested promises — compose inside the factory: +logger.debug('route', async () => { + const [body, next] = await Promise.all([res.json(), nextRoute]); + return { body, next }; +}); +``` ## Releases diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8d49a80..c3b2cc9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: "9.0" +lockfileVersion: '9.0' settings: autoInstallPeers: true @@ -7,19 +7,19 @@ settings: importers: .: devDependencies: - "@semantic-release/changelog": + '@semantic-release/changelog': specifier: ^7.0.0 version: 7.0.0(semantic-release@25.0.8(typescript@6.0.3)) - "@semantic-release/git": + '@semantic-release/git': specifier: ^11.0.1 version: 11.0.1(semantic-release@25.0.8(typescript@6.0.3)) - "@sentry/node": + '@sentry/node': specifier: ^10.69.0 version: 10.69.0(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1)) - "@types/node": + '@types/node': specifier: ^24.0.0 version: 24.13.3 - "@vitest/coverage-v8": + '@vitest/coverage-v8': specifier: ^3.0.0 version: 3.2.7(vitest@3.2.7(@types/node@24.13.3)) oxlint: @@ -42,615 +42,615 @@ importers: version: 3.2.7(@types/node@24.13.3) packages: - "@actions/core@3.0.1": + '@actions/core@3.0.1': resolution: { integrity: sha512-a6d/Nwahm9fliVGRhdhofo40HjHQasUPusmc7vBfyky+7Z+P2A1J68zyFVaNcEclc/Se+eO595oAr5nwEIoIUA==, } - "@actions/exec@3.0.0": + '@actions/exec@3.0.0': resolution: { integrity: sha512-6xH/puSoNBXb72VPlZVm7vQ+svQpFyA96qdDBvhB8eNZOE8LtPf9L4oAsfzK/crCL8YZ+19fKYVnM63Sl+Xzlw==, } - "@actions/http-client@4.0.1": + '@actions/http-client@4.0.1': resolution: { integrity: sha512-+Nvd1ImaOZBSoPbsUtEhv+1z99H12xzncCkz0a3RuehINE81FZSe2QTj3uvAPTcJX/SCzUQHQ0D1GrPMbrPitg==, } - "@actions/io@3.0.2": + '@actions/io@3.0.2': resolution: { integrity: sha512-nRBchcMM+QK1pdjO7/idu86rbJI5YHUKCvKs0KxnSYbVe3F51UfGxuZX4Qy/fWlp6l7gWFwIkrOzN+oUK03kfw==, } - "@ampproject/remapping@2.3.0": + '@ampproject/remapping@2.3.0': resolution: { integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==, } - engines: { node: ">=6.0.0" } + engines: { node: '>=6.0.0' } - "@apm-js-collab/code-transformer-bundler-plugins@0.7.4": + '@apm-js-collab/code-transformer-bundler-plugins@0.7.4': resolution: { integrity: sha512-nAfOeZPSUAQvJa1iFT/5oCrTm5YQhMMrfCNthNnaXHZiOQhu1KGuLoIx7HtbAi3wfwaBYLaICPIeenIaEwcXIg==, } - engines: { node: ">=18.0.0" } + engines: { node: '>=18.0.0' } - "@apm-js-collab/code-transformer@0.18.1": + '@apm-js-collab/code-transformer@0.18.1': resolution: { integrity: sha512-u1Hb6bHjWtkSpiprwVP6YaHC1DTN4RAU3zYkUDUe7WMnJwdyU1pwTL9dFKiSJB9IiLue/EQovmyx6xhU7FFtAQ==, } hasBin: true - "@apm-js-collab/tracing-hooks@0.13.0": + '@apm-js-collab/tracing-hooks@0.13.0': resolution: { integrity: sha512-mTvWz9rnQwx1U3h0XPTHaX7bgfkpipLLTQyjlC2cdhQpQEuoLT0AGzoydeoq2NxfEVv6fWOOETcSbb2nptleyw==, } - "@babel/code-frame@7.29.7": + '@babel/code-frame@7.29.7': resolution: { integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==, } - engines: { node: ">=6.9.0" } + engines: { node: '>=6.9.0' } - "@babel/helper-string-parser@7.29.7": + '@babel/helper-string-parser@7.29.7': resolution: { integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==, } - engines: { node: ">=6.9.0" } + engines: { node: '>=6.9.0' } - "@babel/helper-validator-identifier@7.29.7": + '@babel/helper-validator-identifier@7.29.7': resolution: { integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==, } - engines: { node: ">=6.9.0" } + engines: { node: '>=6.9.0' } - "@babel/parser@7.29.8": + '@babel/parser@7.29.8': resolution: { integrity: sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==, } - engines: { node: ">=6.0.0" } + engines: { node: '>=6.0.0' } hasBin: true - "@babel/types@7.29.8": + '@babel/types@7.29.8': resolution: { integrity: sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==, } - engines: { node: ">=6.9.0" } + engines: { node: '>=6.9.0' } - "@bcoe/v8-coverage@1.0.2": + '@bcoe/v8-coverage@1.0.2': resolution: { integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==, } - engines: { node: ">=18" } + engines: { node: '>=18' } - "@colors/colors@1.5.0": + '@colors/colors@1.5.0': resolution: { integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==, } - engines: { node: ">=0.1.90" } + engines: { node: '>=0.1.90' } - "@esbuild/aix-ppc64@0.27.7": + '@esbuild/aix-ppc64@0.27.7': resolution: { integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [ppc64] os: [aix] - "@esbuild/aix-ppc64@0.28.1": + '@esbuild/aix-ppc64@0.28.1': resolution: { integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [ppc64] os: [aix] - "@esbuild/android-arm64@0.27.7": + '@esbuild/android-arm64@0.27.7': resolution: { integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [arm64] os: [android] - "@esbuild/android-arm64@0.28.1": + '@esbuild/android-arm64@0.28.1': resolution: { integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [arm64] os: [android] - "@esbuild/android-arm@0.27.7": + '@esbuild/android-arm@0.27.7': resolution: { integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [arm] os: [android] - "@esbuild/android-arm@0.28.1": + '@esbuild/android-arm@0.28.1': resolution: { integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [arm] os: [android] - "@esbuild/android-x64@0.27.7": + '@esbuild/android-x64@0.27.7': resolution: { integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [x64] os: [android] - "@esbuild/android-x64@0.28.1": + '@esbuild/android-x64@0.28.1': resolution: { integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [x64] os: [android] - "@esbuild/darwin-arm64@0.27.7": + '@esbuild/darwin-arm64@0.27.7': resolution: { integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [arm64] os: [darwin] - "@esbuild/darwin-arm64@0.28.1": + '@esbuild/darwin-arm64@0.28.1': resolution: { integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [arm64] os: [darwin] - "@esbuild/darwin-x64@0.27.7": + '@esbuild/darwin-x64@0.27.7': resolution: { integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [x64] os: [darwin] - "@esbuild/darwin-x64@0.28.1": + '@esbuild/darwin-x64@0.28.1': resolution: { integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [x64] os: [darwin] - "@esbuild/freebsd-arm64@0.27.7": + '@esbuild/freebsd-arm64@0.27.7': resolution: { integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [arm64] os: [freebsd] - "@esbuild/freebsd-arm64@0.28.1": + '@esbuild/freebsd-arm64@0.28.1': resolution: { integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [arm64] os: [freebsd] - "@esbuild/freebsd-x64@0.27.7": + '@esbuild/freebsd-x64@0.27.7': resolution: { integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [x64] os: [freebsd] - "@esbuild/freebsd-x64@0.28.1": + '@esbuild/freebsd-x64@0.28.1': resolution: { integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [x64] os: [freebsd] - "@esbuild/linux-arm64@0.27.7": + '@esbuild/linux-arm64@0.27.7': resolution: { integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [arm64] os: [linux] - "@esbuild/linux-arm64@0.28.1": + '@esbuild/linux-arm64@0.28.1': resolution: { integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [arm64] os: [linux] - "@esbuild/linux-arm@0.27.7": + '@esbuild/linux-arm@0.27.7': resolution: { integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [arm] os: [linux] - "@esbuild/linux-arm@0.28.1": + '@esbuild/linux-arm@0.28.1': resolution: { integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [arm] os: [linux] - "@esbuild/linux-ia32@0.27.7": + '@esbuild/linux-ia32@0.27.7': resolution: { integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [ia32] os: [linux] - "@esbuild/linux-ia32@0.28.1": + '@esbuild/linux-ia32@0.28.1': resolution: { integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [ia32] os: [linux] - "@esbuild/linux-loong64@0.27.7": + '@esbuild/linux-loong64@0.27.7': resolution: { integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [loong64] os: [linux] - "@esbuild/linux-loong64@0.28.1": + '@esbuild/linux-loong64@0.28.1': resolution: { integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [loong64] os: [linux] - "@esbuild/linux-mips64el@0.27.7": + '@esbuild/linux-mips64el@0.27.7': resolution: { integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [mips64el] os: [linux] - "@esbuild/linux-mips64el@0.28.1": + '@esbuild/linux-mips64el@0.28.1': resolution: { integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [mips64el] os: [linux] - "@esbuild/linux-ppc64@0.27.7": + '@esbuild/linux-ppc64@0.27.7': resolution: { integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [ppc64] os: [linux] - "@esbuild/linux-ppc64@0.28.1": + '@esbuild/linux-ppc64@0.28.1': resolution: { integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [ppc64] os: [linux] - "@esbuild/linux-riscv64@0.27.7": + '@esbuild/linux-riscv64@0.27.7': resolution: { integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [riscv64] os: [linux] - "@esbuild/linux-riscv64@0.28.1": + '@esbuild/linux-riscv64@0.28.1': resolution: { integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [riscv64] os: [linux] - "@esbuild/linux-s390x@0.27.7": + '@esbuild/linux-s390x@0.27.7': resolution: { integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [s390x] os: [linux] - "@esbuild/linux-s390x@0.28.1": + '@esbuild/linux-s390x@0.28.1': resolution: { integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [s390x] os: [linux] - "@esbuild/linux-x64@0.27.7": + '@esbuild/linux-x64@0.27.7': resolution: { integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [x64] os: [linux] - "@esbuild/linux-x64@0.28.1": + '@esbuild/linux-x64@0.28.1': resolution: { integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [x64] os: [linux] - "@esbuild/netbsd-arm64@0.27.7": + '@esbuild/netbsd-arm64@0.27.7': resolution: { integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [arm64] os: [netbsd] - "@esbuild/netbsd-arm64@0.28.1": + '@esbuild/netbsd-arm64@0.28.1': resolution: { integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [arm64] os: [netbsd] - "@esbuild/netbsd-x64@0.27.7": + '@esbuild/netbsd-x64@0.27.7': resolution: { integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [x64] os: [netbsd] - "@esbuild/netbsd-x64@0.28.1": + '@esbuild/netbsd-x64@0.28.1': resolution: { integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [x64] os: [netbsd] - "@esbuild/openbsd-arm64@0.27.7": + '@esbuild/openbsd-arm64@0.27.7': resolution: { integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [arm64] os: [openbsd] - "@esbuild/openbsd-arm64@0.28.1": + '@esbuild/openbsd-arm64@0.28.1': resolution: { integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [arm64] os: [openbsd] - "@esbuild/openbsd-x64@0.27.7": + '@esbuild/openbsd-x64@0.27.7': resolution: { integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [x64] os: [openbsd] - "@esbuild/openbsd-x64@0.28.1": + '@esbuild/openbsd-x64@0.28.1': resolution: { integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [x64] os: [openbsd] - "@esbuild/openharmony-arm64@0.27.7": + '@esbuild/openharmony-arm64@0.27.7': resolution: { integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [arm64] os: [openharmony] - "@esbuild/openharmony-arm64@0.28.1": + '@esbuild/openharmony-arm64@0.28.1': resolution: { integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [arm64] os: [openharmony] - "@esbuild/sunos-x64@0.27.7": + '@esbuild/sunos-x64@0.27.7': resolution: { integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [x64] os: [sunos] - "@esbuild/sunos-x64@0.28.1": + '@esbuild/sunos-x64@0.28.1': resolution: { integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [x64] os: [sunos] - "@esbuild/win32-arm64@0.27.7": + '@esbuild/win32-arm64@0.27.7': resolution: { integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [arm64] os: [win32] - "@esbuild/win32-arm64@0.28.1": + '@esbuild/win32-arm64@0.28.1': resolution: { integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [arm64] os: [win32] - "@esbuild/win32-ia32@0.27.7": + '@esbuild/win32-ia32@0.27.7': resolution: { integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [ia32] os: [win32] - "@esbuild/win32-ia32@0.28.1": + '@esbuild/win32-ia32@0.28.1': resolution: { integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [ia32] os: [win32] - "@esbuild/win32-x64@0.27.7": + '@esbuild/win32-x64@0.27.7': resolution: { integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [x64] os: [win32] - "@esbuild/win32-x64@0.28.1": + '@esbuild/win32-x64@0.28.1': resolution: { integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==, } - engines: { node: ">=18" } + engines: { node: '>=18' } cpu: [x64] os: [win32] - "@isaacs/cliui@8.0.2": + '@isaacs/cliui@8.0.2': resolution: { integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==, } - engines: { node: ">=12" } + engines: { node: '>=12' } - "@istanbuljs/schema@0.1.6": + '@istanbuljs/schema@0.1.6': resolution: { integrity: sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==, } - engines: { node: ">=8" } + engines: { node: '>=8' } - "@jridgewell/gen-mapping@0.3.13": + '@jridgewell/gen-mapping@0.3.13': resolution: { integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==, } - "@jridgewell/resolve-uri@3.1.2": + '@jridgewell/resolve-uri@3.1.2': resolution: { integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==, } - engines: { node: ">=6.0.0" } + engines: { node: '>=6.0.0' } - "@jridgewell/sourcemap-codec@1.5.5": + '@jridgewell/sourcemap-codec@1.5.5': resolution: { integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==, } - "@jridgewell/trace-mapping@0.3.31": + '@jridgewell/trace-mapping@0.3.31': resolution: { integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==, } - "@napi-rs/lzma-linux-x64-gnu@1.5.1": + '@napi-rs/lzma-linux-x64-gnu@1.5.1': resolution: { integrity: sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==, @@ -660,166 +660,166 @@ packages: os: [linux] libc: [glibc] - "@octokit/auth-token@6.0.0": + '@octokit/auth-token@6.0.0': resolution: { integrity: sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==, } - engines: { node: ">= 20" } + engines: { node: '>= 20' } - "@octokit/core@7.0.7": + '@octokit/core@7.0.7': resolution: { integrity: sha512-DcB0M3KFgr9ECI328lhBMVsyFT2DnmNucSBTqEN3exyNKUzkkpUSCHmTRcunF41Eou2TIQKW4seewri8ON9bSA==, } - engines: { node: ">= 20" } + engines: { node: '>= 20' } - "@octokit/endpoint@11.0.4": + '@octokit/endpoint@11.0.4': resolution: { integrity: sha512-f1cOWoHPmxryJFknxbtDdjODWfV8A9tc8Aae6ermXPNgHFZ/x91AtHIz4gicEjL8hkJiip+u21QHJORfBv/qiA==, } - engines: { node: ">= 20" } + engines: { node: '>= 20' } - "@octokit/graphql@9.0.4": + '@octokit/graphql@9.0.4': resolution: { integrity: sha512-5s15CCiY8XXQ+FG+b1YQcl6Z2FA++nwAz/tg2VUrTmnMncP+2nnGUEYANImdnxsA2Fnq+Mbl7hDjUTw7cFAwcg==, } - engines: { node: ">= 20" } + engines: { node: '>= 20' } - "@octokit/openapi-types@27.0.0": + '@octokit/openapi-types@27.0.0': resolution: { integrity: sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA==, } - "@octokit/openapi-types@28.0.0": + '@octokit/openapi-types@28.0.0': resolution: { integrity: sha512-0rFyLuyHvIj6uuZWuDslxkowFYdPXoNIkeAv4b27dzm2Tf4vGWXnPsMcxs7d65kLdMERgP3wc1AEPlqMz8e1cQ==, } - "@octokit/plugin-paginate-rest@14.0.0": + '@octokit/plugin-paginate-rest@14.0.0': resolution: { integrity: sha512-fNVRE7ufJiAA3XUrha2omTA39M6IXIc6GIZLvlbsm8QOQCYvpq/LkMNGyFlB1d8hTDzsAXa3OKtybdMAYsV/fw==, } - engines: { node: ">= 20" } + engines: { node: '>= 20' } peerDependencies: - "@octokit/core": ">=6" + '@octokit/core': '>=6' - "@octokit/plugin-retry@8.1.1": + '@octokit/plugin-retry@8.1.1': resolution: { integrity: sha512-VCVvZ/R1+u3WuiBWpNavZ0mY4aaJNAsENrpBP9aLSR2QyOpQgd7DhM5j4AW7z4MQpnJYgwBPf0XqPQoNBRdQwg==, } - engines: { node: ">= 20" } + engines: { node: '>= 20' } peerDependencies: - "@octokit/core": ">=7" + '@octokit/core': '>=7' - "@octokit/plugin-throttling@11.0.5": + '@octokit/plugin-throttling@11.0.5': resolution: { integrity: sha512-LIdrkrUv+DWbKeg/49rGuFJ3SU0d3hUS+B4MhNZLepBoNUFXms8Ic9edJjrlx+zycqJHjrMRudVpVb/bAXM2Lw==, } - engines: { node: ">= 20" } + engines: { node: '>= 20' } peerDependencies: - "@octokit/core": ^7.0.0 + '@octokit/core': ^7.0.0 - "@octokit/request-error@7.1.1": + '@octokit/request-error@7.1.1': resolution: { integrity: sha512-+eaY7G2VVpSf2pc5Gn1+mph837V/d/TYTJAgWL9Tb0ogGYcpN3IlAVFgjL+Vv93F/sevrxkvsYCedtpLdcFLzA==, } - engines: { node: ">= 20" } + engines: { node: '>= 20' } - "@octokit/request@10.0.13": + '@octokit/request@10.0.13': resolution: { integrity: sha512-v2269YxL9Yf+x3d+gRI63FP0vFQEiWgLyBzxe/Y+0yFDg2B/Tzf5dhh9VNfccVAQnfcfwQWyk/y6Bn7rUXXs7A==, } - engines: { node: ">= 20" } + engines: { node: '>= 20' } - "@octokit/types@16.0.0": + '@octokit/types@16.0.0': resolution: { integrity: sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==, } - "@octokit/types@17.0.0": + '@octokit/types@17.0.0': resolution: { integrity: sha512-ByP1v7YL5SMveFPP7+sj0/ZuWCOOg/Chs4NafOMpq6WNIM/hdGY0S7C0TCGDBWu1aGmOxmUIhMx3cO+IdwYZ1Q==, } - "@opentelemetry/api-logs@0.220.0": + '@opentelemetry/api-logs@0.220.0': resolution: { integrity: sha512-CmVa4ImJ+ynfrPMNaAXHET6Bhb44SwzmfyVJFq9ni2jgXJR/l7C6gfVFddNmHP+ZOkP9cf4f9DBe68qVLTHc9w==, } - engines: { node: ">=8.0.0" } + engines: { node: '>=8.0.0' } - "@opentelemetry/api@1.9.1": + '@opentelemetry/api@1.9.1': resolution: { integrity: sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==, } - engines: { node: ">=8.0.0" } + engines: { node: '>=8.0.0' } - "@opentelemetry/core@2.10.0": + '@opentelemetry/core@2.10.0': resolution: { integrity: sha512-/wNZ8twnEQQA4HoHu22+vcsdru6pWPWxW+7w+FlxT6Id7PE/WIbZmVKkte+PF72e0F2dnImFeHD2syyE1Mw6MQ==, } engines: { node: ^18.19.0 || >=20.6.0 } peerDependencies: - "@opentelemetry/api": ">=1.0.0 <1.10.0" + '@opentelemetry/api': '>=1.0.0 <1.10.0' - "@opentelemetry/instrumentation@0.220.0": + '@opentelemetry/instrumentation@0.220.0': resolution: { integrity: sha512-xQx3E2WxP1mDvKzxLxX+CTCtNLa560YJZ3087qYHerl2YmiKpv7AH+dAy7vmx+eVrZ5BwhfWUAVoKOoxCNHcpw==, } engines: { node: ^18.19.0 || >=20.6.0 } peerDependencies: - "@opentelemetry/api": ^1.3.0 + '@opentelemetry/api': ^1.3.0 - "@opentelemetry/resources@2.10.0": + '@opentelemetry/resources@2.10.0': resolution: { integrity: sha512-q6MMm2zhggzsHVNbabYwut+a6nbuQQe3URUoxaojM/8K1IBfwwPzvxIjNi2/lI1TFe+fMHMW9MWhrtDLEXEnkA==, } engines: { node: ^18.19.0 || >=20.6.0 } peerDependencies: - "@opentelemetry/api": ">=1.3.0 <1.10.0" + '@opentelemetry/api': '>=1.3.0 <1.10.0' - "@opentelemetry/sdk-trace-base@2.10.0": + '@opentelemetry/sdk-trace-base@2.10.0': resolution: { integrity: sha512-GuYQQT7QD2EeO8lcZLRQzcbOyhqAzL+6WWTKTU9mSUBYBazkEDl+VrQcXQhbB08OWM9anD1aHleVadzulpOaUQ==, } engines: { node: ^18.19.0 || >=20.6.0 } peerDependencies: - "@opentelemetry/api": ">=1.3.0 <1.10.0" + '@opentelemetry/api': '>=1.3.0 <1.10.0' - "@opentelemetry/sdk-trace@2.10.0": + '@opentelemetry/sdk-trace@2.10.0': resolution: { integrity: sha512-MfQGq3GRmTh5fM/y+OjaO0vj6+luCB1XO2gfXCalKCfgKw0eHL++sm75DNweC6ohlp+aFvACqeE0fYayqdRaoQ==, } engines: { node: ^18.19.0 || >=20.6.0 } peerDependencies: - "@opentelemetry/api": ">=1.3.0 <1.10.0" + '@opentelemetry/api': '>=1.3.0 <1.10.0' - "@opentelemetry/semantic-conventions@1.43.0": + '@opentelemetry/semantic-conventions@1.43.0': resolution: { integrity: sha512-eSYWTm620tTk45EKSedaUL8MFYI8hW164hIXsgIHyxu3VobUB3fFCu5t0hQby6OoWRPsG1KkKUG2M5UadiLiVg==, } - engines: { node: ">=14" } + engines: { node: '>=14' } - "@oxlint/binding-android-arm-eabi@1.77.0": + '@oxlint/binding-android-arm-eabi@1.77.0': resolution: { integrity: sha512-E06sKWS6PiI6HRxS1wyQg22HvApt01hI7fV+T3wUk3OSbaaP4a3hYGY/MIQDmASqCiRjBdpRQYkgMkqH82cWmQ==, @@ -828,7 +828,7 @@ packages: cpu: [arm] os: [android] - "@oxlint/binding-android-arm64@1.77.0": + '@oxlint/binding-android-arm64@1.77.0': resolution: { integrity: sha512-NvsKz0KZxTp9cYWPLf+FXaSZwB3oO3peAjtukpOMBgse2vhQSoIIVqeO1yR0lEo/UcdZIDL18uq+kL0LzQ0ytA==, @@ -837,7 +837,7 @@ packages: cpu: [arm64] os: [android] - "@oxlint/binding-darwin-arm64@1.77.0": + '@oxlint/binding-darwin-arm64@1.77.0': resolution: { integrity: sha512-bgjTn6nW4bQCFBvSvuHCpDD+sONvmpo4lGI4PxzMt1quBA+xYxhczk6RiCn3GZ9gY8uhaBbwhj9MdKGfu6T9DA==, @@ -846,7 +846,7 @@ packages: cpu: [arm64] os: [darwin] - "@oxlint/binding-darwin-x64@1.77.0": + '@oxlint/binding-darwin-x64@1.77.0': resolution: { integrity: sha512-aotaIttH1R6j1Rwhx0M0htgeZyGtVQqYNTVEYMN/UcgHPquGA6kmk9OyuDc3a2GKUQBC+3C3GVQCcrRPMYqAFA==, @@ -855,7 +855,7 @@ packages: cpu: [x64] os: [darwin] - "@oxlint/binding-freebsd-x64@1.77.0": + '@oxlint/binding-freebsd-x64@1.77.0': resolution: { integrity: sha512-nNx/wta7ksRAdYvq+l4AWjXkLxEXHALhENxjj2cYbQAIR4ybaA5L+hCbE63HOmft5czQ6ks+hb8vmEAnn7YGPg==, @@ -864,7 +864,7 @@ packages: cpu: [x64] os: [freebsd] - "@oxlint/binding-linux-arm-gnueabihf@1.77.0": + '@oxlint/binding-linux-arm-gnueabihf@1.77.0': resolution: { integrity: sha512-tMLLjM7xXtzXisVCzkOTXNCy9bZVId2wteNwjohlFDR/jY6WagpEDA1c1wu4xRc20Hojaxj+V6DSR7gbKxijWA==, @@ -873,7 +873,7 @@ packages: cpu: [arm] os: [linux] - "@oxlint/binding-linux-arm-musleabihf@1.77.0": + '@oxlint/binding-linux-arm-musleabihf@1.77.0': resolution: { integrity: sha512-MiAFDFaqR0tmHTAyo0YDcZ5hyLREdYw/RQhc2R3cbT+8O3tB+zqPM2th9TTQ+Uo3jn/embS+DO+HyX9ztCPkOQ==, @@ -882,7 +882,7 @@ packages: cpu: [arm] os: [linux] - "@oxlint/binding-linux-arm64-gnu@1.77.0": + '@oxlint/binding-linux-arm64-gnu@1.77.0': resolution: { integrity: sha512-/xqQ3B16i1T4cyt/9Mn+4CpzhUXoBXp7kVpIwzOXNFLj5JmK1bIjsbSnX296Gg8A/o7oDtKWikFgBx0SLwztkw==, @@ -892,7 +892,7 @@ packages: os: [linux] libc: [glibc] - "@oxlint/binding-linux-arm64-musl@1.77.0": + '@oxlint/binding-linux-arm64-musl@1.77.0': resolution: { integrity: sha512-LSbwuRKiNCenPDcbARqAZ5RfBy7gmj7vOvfJRLeCDU3gFtSxWbhv/+VTlaUqzUhNj1gFLHB8h7ALnxa/Az6z6g==, @@ -902,7 +902,7 @@ packages: os: [linux] libc: [musl] - "@oxlint/binding-linux-ppc64-gnu@1.77.0": + '@oxlint/binding-linux-ppc64-gnu@1.77.0': resolution: { integrity: sha512-QWdcH31mXEUe5Nq1s0CfCpceaKjIo9uZtwDjAuL681g1axf+5x8xrg/eXWaw//4NCxYZ4V4e5Hu5tvdR+pTBlg==, @@ -912,7 +912,7 @@ packages: os: [linux] libc: [glibc] - "@oxlint/binding-linux-riscv64-gnu@1.77.0": + '@oxlint/binding-linux-riscv64-gnu@1.77.0': resolution: { integrity: sha512-GnOfYgJxbcElOiPZaDFDl406ONddwvOWk2jvAAAEjwAl4GofNoHF+/HHUIBYa6bFCArlcGPi0XjC4cU1pkgF/Q==, @@ -922,7 +922,7 @@ packages: os: [linux] libc: [glibc] - "@oxlint/binding-linux-riscv64-musl@1.77.0": + '@oxlint/binding-linux-riscv64-musl@1.77.0': resolution: { integrity: sha512-AyEMTUCf0xY+hHF+IxqXFQIX0yQOIR8ykpY0lJNOw9xYqOzUX8dyZfRvlG0RfXwuQn2eonf/8NrMmDSZJjdqsA==, @@ -932,7 +932,7 @@ packages: os: [linux] libc: [musl] - "@oxlint/binding-linux-s390x-gnu@1.77.0": + '@oxlint/binding-linux-s390x-gnu@1.77.0': resolution: { integrity: sha512-sPLzEcNvxd/oyVQ5oZo92CiHkFkpBeRop13E/P3TPY+hZfXHKCOWKI70TE2RYwMKFJDc20EMjH16L7NZICtKTw==, @@ -942,7 +942,7 @@ packages: os: [linux] libc: [glibc] - "@oxlint/binding-linux-x64-gnu@1.77.0": + '@oxlint/binding-linux-x64-gnu@1.77.0': resolution: { integrity: sha512-1Oh2ssH2L7lwyvkdSqaMUfsGfwU2Wfvew+obBUYjRVqhpBcUpwnsPSEr1IzVi9XqkuY10geiLsNKecqaZC34Dw==, @@ -952,7 +952,7 @@ packages: os: [linux] libc: [glibc] - "@oxlint/binding-linux-x64-musl@1.77.0": + '@oxlint/binding-linux-x64-musl@1.77.0': resolution: { integrity: sha512-0j/2wRgNGO+Qj/M1uu/p57h/hFTTWWcfie0ufkbabeus2s5+/QqkCflnMOwLLN5m2GsNeWp4xdl4cPa4n7QCOQ==, @@ -962,7 +962,7 @@ packages: os: [linux] libc: [musl] - "@oxlint/binding-openharmony-arm64@1.77.0": + '@oxlint/binding-openharmony-arm64@1.77.0': resolution: { integrity: sha512-BJ/j54qS0usEnyDkLYURMj2iiD9h5Cyy+ppzeMSXBGRXaGRNWnj1Mw14NqWMR5E/PzdgB30OOCCzLzbRoduafw==, @@ -971,7 +971,7 @@ packages: cpu: [arm64] os: [openharmony] - "@oxlint/binding-win32-arm64-msvc@1.77.0": + '@oxlint/binding-win32-arm64-msvc@1.77.0': resolution: { integrity: sha512-Yh8w+g2Lpx7StrvtYkoz9JJvXjB9wxgFChFNb85nrXm/wj/XTwGWS1hve9+900HL7llrntYB3YP+y32E3tRqzA==, @@ -980,7 +980,7 @@ packages: cpu: [arm64] os: [win32] - "@oxlint/binding-win32-ia32-msvc@1.77.0": + '@oxlint/binding-win32-ia32-msvc@1.77.0': resolution: { integrity: sha512-zja5b7+6a7UsRFgAQSrnax5vrzliEyNPLCjfXONu/vTWswaIVZGFajJZptaeRvPE4LghtFdAzVFlexTm7MVTGA==, @@ -989,7 +989,7 @@ packages: cpu: [ia32] os: [win32] - "@oxlint/binding-win32-x64-msvc@1.77.0": + '@oxlint/binding-win32-x64-msvc@1.77.0': resolution: { integrity: sha512-+teyvPDZ2RjUvo+SuCqS/UhaJl1QtdW5fWT5NJTV61V5MIuIS90Db9LixmtEGvXixyttiK62P96MSu3UlpviBw==, @@ -998,35 +998,35 @@ packages: cpu: [x64] os: [win32] - "@pkgjs/parseargs@0.11.0": + '@pkgjs/parseargs@0.11.0': resolution: { integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==, } - engines: { node: ">=14" } + engines: { node: '>=14' } - "@pnpm/config.env-replace@1.1.0": + '@pnpm/config.env-replace@1.1.0': resolution: { integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==, } - engines: { node: ">=12.22.0" } + engines: { node: '>=12.22.0' } - "@pnpm/network.ca-file@1.0.2": + '@pnpm/network.ca-file@1.0.2': resolution: { integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==, } - engines: { node: ">=12.22.0" } + engines: { node: '>=12.22.0' } - "@pnpm/npm-conf@3.0.3": + '@pnpm/npm-conf@3.0.3': resolution: { integrity: sha512-//0sR/cow/s4ICQaYoAobOl4aU8cjU6x/V24V7XkKotb9+O+3zySIYp146vpaobYHnxa4pZX8NkV54Z5AwbDKA==, } - engines: { node: ">=12" } + engines: { node: '>=12' } - "@rollup/rollup-android-arm-eabi@4.62.4": + '@rollup/rollup-android-arm-eabi@4.62.4': resolution: { integrity: sha512-RrPokAb7dmbxFoeO3TloqHyOjgye8RkBhSqmp4aJMIex4c9r46ZstPnleDQOq1t46VOVjwIuwNogIqbodV1Vvg==, @@ -1034,7 +1034,7 @@ packages: cpu: [arm] os: [android] - "@rollup/rollup-android-arm64@4.62.4": + '@rollup/rollup-android-arm64@4.62.4': resolution: { integrity: sha512-JKuJc+pnpks2pjy7L/N3v/cAkZxYlnmuZoD840ldbMI5KDbC4iO9NKwPKYdjYFCMAIIlBzYSFHxIJVYzRo2/8A==, @@ -1042,7 +1042,7 @@ packages: cpu: [arm64] os: [android] - "@rollup/rollup-darwin-arm64@4.62.4": + '@rollup/rollup-darwin-arm64@4.62.4': resolution: { integrity: sha512-krw5uS2STmvJ02x0uTXHbqQNuz+9eZ1iw+qXk9dmW2gvV4jV7O2hEoOnuhFrpOPiel1mBFtqbxYZZtC46hXLOw==, @@ -1050,7 +1050,7 @@ packages: cpu: [arm64] os: [darwin] - "@rollup/rollup-darwin-x64@4.62.4": + '@rollup/rollup-darwin-x64@4.62.4': resolution: { integrity: sha512-wsTxtgApb4PrOsNJIm0FZ1h3WvCC+k9uxLJ4ad75hgoS4NiRes2SoJFlDAyMwiUY8IssDqGcHbXuN0sx1tfF1A==, @@ -1058,7 +1058,7 @@ packages: cpu: [x64] os: [darwin] - "@rollup/rollup-freebsd-arm64@4.62.4": + '@rollup/rollup-freebsd-arm64@4.62.4': resolution: { integrity: sha512-GUOnQlyZe3yAXhWOtOMsn5Qkrv5E5mZXa0thbARWi5Ei2szlVXJFQhddZ4HbAzh8q92w5twp+CQvs/eFanz9YQ==, @@ -1066,7 +1066,7 @@ packages: cpu: [arm64] os: [freebsd] - "@rollup/rollup-freebsd-x64@4.62.4": + '@rollup/rollup-freebsd-x64@4.62.4': resolution: { integrity: sha512-/Y7f3QuxjzPKsjA/rfEDa3+0vXqyjmJ50Ln8dPpCmWkKTrUoWHG1cWhTqaAMLob2m2nESWuC7yGrREz019Ztqg==, @@ -1074,7 +1074,7 @@ packages: cpu: [x64] os: [freebsd] - "@rollup/rollup-linux-arm-gnueabihf@4.62.4": + '@rollup/rollup-linux-arm-gnueabihf@4.62.4': resolution: { integrity: sha512-81wiiX3v7aqy+T+bT61TJ78yJjRquqFFTTbAPt08imfQQzkPIW8t6aJbkTagtCCrXMNc9D66+geqlK7ydLPNqA==, @@ -1083,7 +1083,7 @@ packages: os: [linux] libc: [glibc] - "@rollup/rollup-linux-arm-musleabihf@4.62.4": + '@rollup/rollup-linux-arm-musleabihf@4.62.4': resolution: { integrity: sha512-9kmDIvNZqdoHOBZgNtpTBeLWYO/LVipM3H/j62P8848/l/VPEQL6N3uxU9pvP1oZAsXyC2MEnFP3ovRjo7WYNQ==, @@ -1092,7 +1092,7 @@ packages: os: [linux] libc: [musl] - "@rollup/rollup-linux-arm64-gnu@4.62.4": + '@rollup/rollup-linux-arm64-gnu@4.62.4': resolution: { integrity: sha512-CcnXHWnXg69g+DX5VWL3FHts3qMRN2uVEHX+BZvGLdd07/gXkn3ePjYtO1LDJvxkGKVHMclKBRa1QUTH+6toYQ==, @@ -1101,7 +1101,7 @@ packages: os: [linux] libc: [glibc] - "@rollup/rollup-linux-arm64-musl@4.62.4": + '@rollup/rollup-linux-arm64-musl@4.62.4': resolution: { integrity: sha512-iFOibiHnTRuhrWLlRsOQFdZJJIa7S8OwkneJr4ocALP16u5yk6lWLINFwhHaEqBFMsKDUZofLkGos7+CPzGB3g==, @@ -1110,7 +1110,7 @@ packages: os: [linux] libc: [musl] - "@rollup/rollup-linux-loong64-gnu@4.62.4": + '@rollup/rollup-linux-loong64-gnu@4.62.4': resolution: { integrity: sha512-XnWYMI7euHlb5a871xPja+Gm7DRCFU+FGRrtS2sMq9N8FvqtpagUy6gD4YOemC5MRk9xbh8+jYMEJbigFQwsgA==, @@ -1119,7 +1119,7 @@ packages: os: [linux] libc: [glibc] - "@rollup/rollup-linux-loong64-musl@4.62.4": + '@rollup/rollup-linux-loong64-musl@4.62.4': resolution: { integrity: sha512-qGDAlO0U8xedCcsdRm9oaoQY8DAx/QT7uIxJWhCdx0ceIWX783UC9QSYkdpzAe29wNiVfp24+bZdQmn49o45SQ==, @@ -1128,7 +1128,7 @@ packages: os: [linux] libc: [musl] - "@rollup/rollup-linux-ppc64-gnu@4.62.4": + '@rollup/rollup-linux-ppc64-gnu@4.62.4': resolution: { integrity: sha512-ru4H6ezD7ysA5EiEK6qkkaEb4modH8CTej6kUy/gQi20u3kB3G7Zn8snXXkeJSCOFKG/rbPPtM/+9Wgas1961w==, @@ -1137,7 +1137,7 @@ packages: os: [linux] libc: [glibc] - "@rollup/rollup-linux-ppc64-musl@4.62.4": + '@rollup/rollup-linux-ppc64-musl@4.62.4': resolution: { integrity: sha512-2W4MO5WQVJnbJaZdvDb9rhBDuFU1nKIepPFpJUBsTh2k1YY2g+ODViaWuyOAjQ5cOP7NvrvLzt3wvHOoiAvc7w==, @@ -1146,7 +1146,7 @@ packages: os: [linux] libc: [musl] - "@rollup/rollup-linux-riscv64-gnu@4.62.4": + '@rollup/rollup-linux-riscv64-gnu@4.62.4': resolution: { integrity: sha512-+fxjfuoAmVMCYV5QyjoIpu0cp5DOiOTeqYFk1AVaxGr+/ravWLX89XfQmptsoWcaVy/TGf2hexzbUOrCQIL1CQ==, @@ -1155,7 +1155,7 @@ packages: os: [linux] libc: [glibc] - "@rollup/rollup-linux-riscv64-musl@4.62.4": + '@rollup/rollup-linux-riscv64-musl@4.62.4': resolution: { integrity: sha512-jTn8JfHGL4djjFxPuM06LmNUJDsst2jeVlsd9OmIH6zc5sC9K6rIuO4YajXatLUpBmBKl6b35ro1QZocLi+tcA==, @@ -1164,7 +1164,7 @@ packages: os: [linux] libc: [musl] - "@rollup/rollup-linux-s390x-gnu@4.62.4": + '@rollup/rollup-linux-s390x-gnu@4.62.4': resolution: { integrity: sha512-oCJCJL4pXsoDcP2QZ+JVlPTIRc6266zsIaeJJsWImmF7HO0W8nb6HuSgZlMWxJwaPf8ehbSw8yo0EUw925hKsA==, @@ -1173,7 +1173,7 @@ packages: os: [linux] libc: [glibc] - "@rollup/rollup-linux-x64-gnu@4.62.4": + '@rollup/rollup-linux-x64-gnu@4.62.4': resolution: { integrity: sha512-W69hukhZ3KKNRCaMIEzKvcFye42hh0FE1+YoYaf5+Ikacuftoco6yO/xouz0hc5d5W/s3yBro5jRiuEE/Q5vUw==, @@ -1182,7 +1182,7 @@ packages: os: [linux] libc: [glibc] - "@rollup/rollup-linux-x64-musl@4.62.4": + '@rollup/rollup-linux-x64-musl@4.62.4': resolution: { integrity: sha512-qiXbGG2jkjXhzXpsFZSR2Xpb8DN/UaxYsbb/STbuR/6fpaDgRmmaq1B/LmtF2wQFOFOSsK2jdE0RZ3a0zHn4QA==, @@ -1191,7 +1191,7 @@ packages: os: [linux] libc: [musl] - "@rollup/rollup-openbsd-x64@4.62.4": + '@rollup/rollup-openbsd-x64@4.62.4': resolution: { integrity: sha512-nWeM//hxv8mIo6jD7Hu4o48DVmV9pbV6gsKaWU+4NFyqHoPKwrkRiZGLKUhOBk8qNmDmpwFtPKg80Bo/Tn4xiQ==, @@ -1199,7 +1199,7 @@ packages: cpu: [x64] os: [openbsd] - "@rollup/rollup-openharmony-arm64@4.62.4": + '@rollup/rollup-openharmony-arm64@4.62.4': resolution: { integrity: sha512-s62SQ/vgsRSvMwDkOEfTqfgASF0f26ZNaQuTA6Aok5lrikf89yI2W0gFHvZb2Jpgc6N8JnOKZgCK2iciO3CsxQ==, @@ -1207,7 +1207,7 @@ packages: cpu: [arm64] os: [openharmony] - "@rollup/rollup-win32-arm64-msvc@4.62.4": + '@rollup/rollup-win32-arm64-msvc@4.62.4': resolution: { integrity: sha512-J6wGf8TVGbXJq+HH+ttTvrcfNKPbuZecV6KT1B8I18BC5IURUh5kl4Yl5OEP5eFIUoI5BWxCsyYMhFsDx8kekw==, @@ -1215,7 +1215,7 @@ packages: cpu: [arm64] os: [win32] - "@rollup/rollup-win32-ia32-msvc@4.62.4": + '@rollup/rollup-win32-ia32-msvc@4.62.4': resolution: { integrity: sha512-zmfrQd/0wu6oJs8Vq8KwY/YtsKSsLtKe/HwAP4Wqy8LhWjeT55fHRAkOhYQ12wI3ayS4Tt12d5CDRD7N96SAYQ==, @@ -1223,7 +1223,7 @@ packages: cpu: [ia32] os: [win32] - "@rollup/rollup-win32-x64-gnu@4.62.4": + '@rollup/rollup-win32-x64-gnu@4.62.4': resolution: { integrity: sha512-qPzHqdj9rfUD+w79dtE07zi/kFwKyCJqplp5K5ygeLTp7jLpAoc16OAH39HSmRC9UpozaecsleI8uAdEj6v2yw==, @@ -1231,7 +1231,7 @@ packages: cpu: [x64] os: [win32] - "@rollup/rollup-win32-x64-msvc@4.62.4": + '@rollup/rollup-win32-x64-msvc@4.62.4': resolution: { integrity: sha512-zD6NdeWEByGE9QF9vCrlJ5YQB4oq9q91kPZS37Jwj5hOkvR1lTBSpsKhKDw4IJtbQ35LsTS1HD9DZYGKIshU1Q==, @@ -1239,206 +1239,206 @@ packages: cpu: [x64] os: [win32] - "@sec-ant/readable-stream@0.4.1": + '@sec-ant/readable-stream@0.4.1': resolution: { integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==, } - "@semantic-release/changelog@7.0.0": + '@semantic-release/changelog@7.0.0': resolution: { integrity: sha512-TNPyag5db24o7jWjre7UwKB4EcL8oJxbRhnDQ7hmZRAYqzreAc6PgdxQuU3pppp5xQinYtiumL0iG8SSKvnlzg==, } engines: { node: ^22.22.2 || >=24.15 } peerDependencies: - semantic-release: ">=20.1.0" + semantic-release: '>=20.1.0' - "@semantic-release/commit-analyzer@13.0.1": + '@semantic-release/commit-analyzer@13.0.1': resolution: { integrity: sha512-wdnBPHKkr9HhNhXOhZD5a2LNl91+hs8CC2vsAVYxtZH3y0dV3wKn+uZSN61rdJQZ8EGxzWB3inWocBHV9+u/CQ==, } - engines: { node: ">=20.8.1" } + engines: { node: '>=20.8.1' } peerDependencies: - semantic-release: ">=20.1.0" + semantic-release: '>=20.1.0' - "@semantic-release/error@4.0.0": + '@semantic-release/error@4.0.0': resolution: { integrity: sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==, } - engines: { node: ">=18" } + engines: { node: '>=18' } - "@semantic-release/git@11.0.1": + '@semantic-release/git@11.0.1': resolution: { integrity: sha512-Zr8BUYCTZMc8V6wDKN2dpR7nJgewd9I6THL3ydLTnp3OEdTo1/4RBLNYaeRucYMsjMv+BXoCNfXA0NADj1kwhw==, } engines: { node: ^22.22.2 || >=24.15 } peerDependencies: - semantic-release: ">=20.1.0" + semantic-release: '>=20.1.0' - "@semantic-release/github@12.0.9": + '@semantic-release/github@12.0.9': resolution: { integrity: sha512-ODIqb0V3QqndipryEEiaBxUQCFjvv7Oese5Dt4omMGa60YRNEW0Sx3K+zri0uac2Y6S9nOlMehciWIzvvRCTGQ==, } engines: { node: ^22.14.0 || >= 24.10.0 } peerDependencies: - semantic-release: ">=24.1.0" + semantic-release: '>=24.1.0' - "@semantic-release/npm@13.1.5": + '@semantic-release/npm@13.1.5': resolution: { integrity: sha512-Hq5UxzoatN3LHiq2rTsWS54nCdqJHlsssGERCo8WlvdfFA9LoN0vO+OuKVSjtNapIc/S8C2LBj206wKLHg62mg==, } engines: { node: ^22.14.0 || >= 24.10.0 } peerDependencies: - semantic-release: ">=20.1.0" + semantic-release: '>=20.1.0' - "@semantic-release/release-notes-generator@14.1.1": + '@semantic-release/release-notes-generator@14.1.1': resolution: { integrity: sha512-Pbd2e2XRMUD0OxehHpgd5/YghsE76cddkRHSoDvKLK+OCy4Ewxn49rWR631MEUU01lgwF/uyVXvbnVuu6+Z6VA==, } - engines: { node: ">=20.8.1" } + engines: { node: '>=20.8.1' } peerDependencies: - semantic-release: ">=20.1.0" + semantic-release: '>=20.1.0' - "@sentry/conventions@0.16.0": + '@sentry/conventions@0.16.0': resolution: { integrity: sha512-fO9PLmHdVURcSPUpWCItWAtgKiMwGdJHbovoSEyLplX5sxs2ugvI4CBPTrkkgqhObnZOD0CnWBKDzSVQYBKEyQ==, } - engines: { node: ">=14" } + engines: { node: '>=14' } - "@sentry/core@10.69.0": + '@sentry/core@10.69.0': resolution: { integrity: sha512-+uuqVEeiDzYuAKjZLqsROKXvRTbl/QeH0gfGRtpYib1cud4rAFWRIkFmcR7Jb7JGFYwmReyQotiTj/hcDszTZg==, } - engines: { node: ">=18" } + engines: { node: '>=18' } - "@sentry/node-core@10.69.0": + '@sentry/node-core@10.69.0': resolution: { integrity: sha512-IgArHczrZJxkgxoffHscj0NxQrG6kCazgmGQnlf3j58J1ec21YaUu8Tu+7G4Lo5tCiW3teQnwlKW1ttMXSqWRw==, } - engines: { node: ">=18" } + engines: { node: '>=18' } peerDependencies: - "@opentelemetry/api": ^1.9.0 - "@opentelemetry/core": ^1.30.1 || ^2.1.0 - "@opentelemetry/exporter-trace-otlp-http": ">=0.57.0 <1" - "@opentelemetry/instrumentation": ">=0.57.1 <1" - "@opentelemetry/sdk-trace-base": ^1.30.1 || ^2.1.0 + '@opentelemetry/api': ^1.9.0 + '@opentelemetry/core': ^1.30.1 || ^2.1.0 + '@opentelemetry/exporter-trace-otlp-http': '>=0.57.0 <1' + '@opentelemetry/instrumentation': '>=0.57.1 <1' + '@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.1.0 peerDependenciesMeta: - "@opentelemetry/api": + '@opentelemetry/api': optional: true - "@opentelemetry/core": + '@opentelemetry/core': optional: true - "@opentelemetry/exporter-trace-otlp-http": + '@opentelemetry/exporter-trace-otlp-http': optional: true - "@opentelemetry/instrumentation": + '@opentelemetry/instrumentation': optional: true - "@opentelemetry/sdk-trace-base": + '@opentelemetry/sdk-trace-base': optional: true - "@sentry/node@10.69.0": + '@sentry/node@10.69.0': resolution: { integrity: sha512-xEXA1YGIiTZbrW6MWV34uS6JGQuQg2ijTI0zed+FsJb9JZKPYel/GZK8Km26vfTVb+yCXFmWZNBesKegNcVdzg==, } - engines: { node: ">=18" } + engines: { node: '>=18' } - "@sentry/opentelemetry@10.69.0": + '@sentry/opentelemetry@10.69.0': resolution: { integrity: sha512-3FyWV6YcEJuvLrlaKGE1dHXCI+1YO0a62w7PkwlRg8yp6K6YXkmdwu9GjqaYD+Ju4tm7uC7mHIsGFQMm0M7pqQ==, } - engines: { node: ">=18" } + engines: { node: '>=18' } peerDependencies: - "@opentelemetry/api": ^1.9.0 - "@opentelemetry/core": ^1.30.1 || ^2.1.0 - "@opentelemetry/sdk-trace-base": ^1.30.1 || ^2.1.0 + '@opentelemetry/api': ^1.9.0 + '@opentelemetry/core': ^1.30.1 || ^2.1.0 + '@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.1.0 - "@sentry/server-utils@10.69.0": + '@sentry/server-utils@10.69.0': resolution: { integrity: sha512-0MwHrA8+nNvMIsqf8m3cXwCBlUjr6AS7N6CZvHJtY1DkqEvQqEbD5VIrhzEyHN/KMZIgQ8XeDCQRhjnXFQGRhg==, } - engines: { node: ">=18" } + engines: { node: '>=18' } - "@simple-libs/stream-utils@1.2.0": + '@simple-libs/stream-utils@1.2.0': resolution: { integrity: sha512-KxXvfapcixpz6rVEB6HPjOUZT22yN6v0vI0urQSk1L8MlEWPDFCZkhw2xmkyoTGYeFw7tWTZd7e3lVzRZRN/EA==, } - engines: { node: ">=18" } + engines: { node: '>=18' } - "@sindresorhus/is@4.6.0": + '@sindresorhus/is@4.6.0': resolution: { integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==, } - engines: { node: ">=10" } + engines: { node: '>=10' } - "@sindresorhus/merge-streams@4.0.0": + '@sindresorhus/merge-streams@4.0.0': resolution: { integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==, } - engines: { node: ">=18" } + engines: { node: '>=18' } - "@types/chai@5.2.3": + '@types/chai@5.2.3': resolution: { integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==, } - "@types/deep-eql@4.0.2": + '@types/deep-eql@4.0.2': resolution: { integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==, } - "@types/estree@1.0.9": + '@types/estree@1.0.9': resolution: { integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==, } - "@types/node@24.13.3": + '@types/node@24.13.3': resolution: { integrity: sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q==, } - "@types/normalize-package-data@2.4.4": + '@types/normalize-package-data@2.4.4': resolution: { integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==, } - "@vitest/coverage-v8@3.2.7": + '@vitest/coverage-v8@3.2.7': resolution: { integrity: sha512-NEGWJS2XNu2PfRLQwOO3CTKj1tTETxNBdk454vDxVBhxJYhPaA/eS0nAI0c+1El1P7a60z8+i+ZrQoGESweGKg==, } peerDependencies: - "@vitest/browser": 3.2.7 + '@vitest/browser': 3.2.7 vitest: 3.2.7 peerDependenciesMeta: - "@vitest/browser": + '@vitest/browser': optional: true - "@vitest/expect@3.2.7": + '@vitest/expect@3.2.7': resolution: { integrity: sha512-E8eBXaKibuvH2pSZErOjdVb5vF4PbKYcrnluBTYxEk1l/VhhwZg1kZQsdtjq+CsF5CFydf2Rdkz7jDHKSisi3w==, } - "@vitest/mocker@3.2.7": + '@vitest/mocker@3.2.7': resolution: { integrity: sha512-Trr0hYO9CM3Wj6ksWHRhK9IZpIY6wTMO5u/MqXurMxT57sWBaOPEtP3Oq60ihZuh5JsiagKfz95OcxdEP6dBrA==, @@ -1452,31 +1452,31 @@ packages: vite: optional: true - "@vitest/pretty-format@3.2.7": + '@vitest/pretty-format@3.2.7': resolution: { integrity: sha512-KUHlwqVu0sRlhCdyPdQ/wBoTfRahjUky1MubOmYw9fWfIZy1gNoHpuaaQBPAaMaVYdQYHJLurzj8ECCj5OwTqA==, } - "@vitest/runner@3.2.7": + '@vitest/runner@3.2.7': resolution: { integrity: sha512-sB9y4ovltoQP+WaUPwmSxO9WIg9Ig694Di5PalVPsYHklAdE027mehpWF2SQSVq+k6sFgaivbTjTJwZLSHbedA==, } - "@vitest/snapshot@3.2.7": + '@vitest/snapshot@3.2.7': resolution: { integrity: sha512-7C+MwShwtBSI5Buwoyg3s/iY1eHL9PKAf+O1wVh/TdnjXUtkoL/9YQtre90i4MtNXM6edP1wJ2zOBpfCyhIS7g==, } - "@vitest/spy@3.2.7": + '@vitest/spy@3.2.7': resolution: { integrity: sha512-Q2eQGI6d2L/hBtZ0qNuKcAGid68XK6cv1xsoaIma6PaJhHPoqcEJhYpXZ/5myCMqkNgtP6UKuBhbc0nHKnrkuQ==, } - "@vitest/utils@3.2.7": + '@vitest/utils@3.2.7': resolution: { integrity: sha512-x6BDOd7dyo3PFLY3I9/HJ25X/6OurhGXk2/B9gOZNPF7XDVjeBK4k01lQE5uvDpbuheErh91qYuE1E2OEjK3Rw==, @@ -1487,7 +1487,7 @@ packages: { integrity: sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==, } - engines: { node: ">=0.4.0" } + engines: { node: '>=0.4.0' } hasBin: true agent-base@9.0.0: @@ -1495,56 +1495,56 @@ packages: { integrity: sha512-TQf59BsZnytt8GdJKLPfUZ54g/iaUL2OWDSFCCvMOhsHduDQxO8xC4PNeyIkVcA5KwL2phPSv0douC0fgWzmnA==, } - engines: { node: ">= 20" } + engines: { node: '>= 20' } aggregate-error@5.0.0: resolution: { integrity: sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==, } - engines: { node: ">=18" } + engines: { node: '>=18' } ansi-escapes@7.3.0: resolution: { integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==, } - engines: { node: ">=18" } + engines: { node: '>=18' } ansi-regex@5.0.1: resolution: { integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, } - engines: { node: ">=8" } + engines: { node: '>=8' } ansi-regex@6.2.2: resolution: { integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==, } - engines: { node: ">=12" } + engines: { node: '>=12' } ansi-styles@3.2.1: resolution: { integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==, } - engines: { node: ">=4" } + engines: { node: '>=4' } ansi-styles@4.3.0: resolution: { integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, } - engines: { node: ">=8" } + engines: { node: '>=8' } ansi-styles@6.2.3: resolution: { integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==, } - engines: { node: ">=12" } + engines: { node: '>=12' } any-promise@1.3.0: resolution: @@ -1575,7 +1575,7 @@ packages: { integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==, } - engines: { node: ">=12" } + engines: { node: '>=12' } ast-v8-to-istanbul@0.3.12: resolution: @@ -1633,7 +1633,7 @@ packages: { integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==, } - engines: { node: ">=8" } + engines: { node: '>=8' } bundle-require@5.1.0: resolution: @@ -1642,42 +1642,42 @@ packages: } engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } peerDependencies: - esbuild: ">=0.18" + esbuild: '>=0.18' cac@6.7.14: resolution: { integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==, } - engines: { node: ">=8" } + engines: { node: '>=8' } callsites@3.1.0: resolution: { integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, } - engines: { node: ">=6" } + engines: { node: '>=6' } chai@5.3.3: resolution: { integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==, } - engines: { node: ">=18" } + engines: { node: '>=18' } chalk@2.4.2: resolution: { integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==, } - engines: { node: ">=4" } + engines: { node: '>=4' } chalk@4.1.2: resolution: { integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, } - engines: { node: ">=10" } + engines: { node: '>=10' } chalk@5.6.2: resolution: @@ -1691,21 +1691,21 @@ packages: { integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==, } - engines: { node: ">=10" } + engines: { node: '>=10' } check-error@2.1.3: resolution: { integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==, } - engines: { node: ">= 16" } + engines: { node: '>= 16' } chokidar@4.0.3: resolution: { integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==, } - engines: { node: ">= 14.16.0" } + engines: { node: '>= 14.16.0' } cjs-module-lexer@2.2.0: resolution: @@ -1718,14 +1718,14 @@ packages: { integrity: sha512-9ngPTOhYGQqNVSfeJkYXHmF7AGWp4/nN5D/QqNQs3Dvxd1Kk/WpjHfNujKHYUQ/5CoGyOyFNoWSPk5afzP0QVg==, } - engines: { node: ">=14.16" } + engines: { node: '>=14.16' } cli-highlight@2.1.11: resolution: { integrity: sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==, } - engines: { node: ">=8.0.0", npm: ">=5.0.0" } + engines: { node: '>=8.0.0', npm: '>=5.0.0' } hasBin: true cli-table3@0.6.5: @@ -1746,7 +1746,7 @@ packages: { integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==, } - engines: { node: ">=20" } + engines: { node: '>=20' } color-convert@1.9.3: resolution: @@ -1759,7 +1759,7 @@ packages: { integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, } - engines: { node: ">=7.0.0" } + engines: { node: '>=7.0.0' } color-name@1.1.3: resolution: @@ -1778,7 +1778,7 @@ packages: { integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==, } - engines: { node: ">= 6" } + engines: { node: '>= 6' } compare-func@2.0.0: resolution: @@ -1810,21 +1810,21 @@ packages: { integrity: sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==, } - engines: { node: ">=18" } + engines: { node: '>=18' } conventional-changelog-angular@8.3.1: resolution: { integrity: sha512-6gfI3otXK5Ph5DfCOI1dblr+kN3FAm5a97hYoQkqNZxOaYa5WKfXH+AnpsmS+iUH2mgVC2Cg2Qw9m5OKcmNrIg==, } - engines: { node: ">=18" } + engines: { node: '>=18' } conventional-changelog-writer@8.4.0: resolution: { integrity: sha512-HHBFkk1EECxxmCi4CTu091iuDpQv5/OavuCUAuZmrkWpmYfyD816nom1CvtfXJ/uYfAAjavgHvXHX291tSLK8g==, } - engines: { node: ">=18" } + engines: { node: '>=18' } hasBin: true conventional-commits-filter@5.0.0: @@ -1832,14 +1832,14 @@ packages: { integrity: sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q==, } - engines: { node: ">=18" } + engines: { node: '>=18' } conventional-commits-parser@6.4.0: resolution: { integrity: sha512-tvRg7FIBNlyPzjdG8wWRlPHQJJHI7DylhtRGeU9Lq+JuoPh5BKpPRX83ZdLrvXuOSu5Eo/e7SzOQhU4Hd2Miuw==, } - engines: { node: ">=18" } + engines: { node: '>=18' } hasBin: true convert-hrtime@5.0.0: @@ -1847,7 +1847,7 @@ packages: { integrity: sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==, } - engines: { node: ">=12" } + engines: { node: '>=12' } core-util-is@1.0.3: resolution: @@ -1860,9 +1860,9 @@ packages: { integrity: sha512-gtTZxTDau1wL7Y7zifc2dd8jHSK/k6BTx/2Xp/BpdlAdnlYWFVt7qhJqgwi7637yRwRQ3qL4ZidbB4I8tA5VOg==, } - engines: { node: ">=14" } + engines: { node: '>=14' } peerDependencies: - typescript: ">=4.9.5" + typescript: '>=4.9.5' peerDependenciesMeta: typescript: optional: true @@ -1872,23 +1872,23 @@ packages: { integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==, } - engines: { node: ">= 8" } + engines: { node: '>= 8' } crypto-random-string@4.0.0: resolution: { integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==, } - engines: { node: ">=12" } + engines: { node: '>=12' } debug@4.4.3: resolution: { integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==, } - engines: { node: ">=6.0" } + engines: { node: '>=6.0' } peerDependencies: - supports-color: "*" + supports-color: '*' peerDependenciesMeta: supports-color: optional: true @@ -1898,28 +1898,28 @@ packages: { integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==, } - engines: { node: ">=6" } + engines: { node: '>=6' } deep-extend@0.6.0: resolution: { integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==, } - engines: { node: ">=4.0.0" } + engines: { node: '>=4.0.0' } dir-glob@3.0.1: resolution: { integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==, } - engines: { node: ">=8" } + engines: { node: '>=8' } dot-prop@5.3.0: resolution: { integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==, } - engines: { node: ">=8" } + engines: { node: '>=8' } duplexer2@0.1.4: resolution: @@ -1969,14 +1969,14 @@ packages: { integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==, } - engines: { node: ">=6" } + engines: { node: '>=6' } environment@1.1.0: resolution: { integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==, } - engines: { node: ">=18" } + engines: { node: '>=18' } error-ex@1.3.4: resolution: @@ -2001,7 +2001,7 @@ packages: { integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==, } - engines: { node: ">=18" } + engines: { node: '>=18' } hasBin: true esbuild@0.28.1: @@ -2009,7 +2009,7 @@ packages: { integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==, } - engines: { node: ">=18" } + engines: { node: '>=18' } hasBin: true escalade@3.2.0: @@ -2017,35 +2017,35 @@ packages: { integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==, } - engines: { node: ">=6" } + engines: { node: '>=6' } escape-string-regexp@1.0.5: resolution: { integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==, } - engines: { node: ">=0.8.0" } + engines: { node: '>=0.8.0' } escape-string-regexp@5.0.0: resolution: { integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==, } - engines: { node: ">=12" } + engines: { node: '>=12' } esquery@1.7.0: resolution: { integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==, } - engines: { node: ">=0.10" } + engines: { node: '>=0.10' } estraverse@5.3.0: resolution: { integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, } - engines: { node: ">=4.0" } + engines: { node: '>=4.0' } estree-walker@3.0.3: resolution: @@ -2058,14 +2058,14 @@ packages: { integrity: sha512-ge98qjkRK4IB7tL7Ju/6qmm5LHoH1eEMt5FNZrz3f4UIYhF28lggX20z3FaX1sgc67msLEn0N0BscOs29iuwyw==, } - engines: { node: ">=22" } + engines: { node: '>=22' } execa@8.0.1: resolution: { integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==, } - engines: { node: ">=16.17" } + engines: { node: '>=16.17' } execa@9.6.1: resolution: @@ -2079,14 +2079,14 @@ packages: { integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==, } - engines: { node: ">=12.0.0" } + engines: { node: '>=12.0.0' } fdir@6.5.0: resolution: { integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==, } - engines: { node: ">=12.0.0" } + engines: { node: '>=12.0.0' } peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -2098,42 +2098,42 @@ packages: { integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==, } - engines: { node: ">=4" } + engines: { node: '>=4' } figures@6.1.0: resolution: { integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==, } - engines: { node: ">=18" } + engines: { node: '>=18' } fill-range@7.1.1: resolution: { integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==, } - engines: { node: ">=8" } + engines: { node: '>=8' } find-up-simple@1.0.1: resolution: { integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==, } - engines: { node: ">=18" } + engines: { node: '>=18' } find-up@2.1.0: resolution: { integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==, } - engines: { node: ">=4" } + engines: { node: '>=4' } find-versions@6.0.0: resolution: { integrity: sha512-2kCCtc+JvcZ86IGAz3Z2Y0A1baIz9fL31pH/0S1IqZr9Iwnjq8izfPtrCyQKO6TLMPELLsQMre7VDqeIKCsHkA==, } - engines: { node: ">=18" } + engines: { node: '>=18' } fix-dts-default-cjs-exports@1.0.1: resolution: @@ -2146,14 +2146,14 @@ packages: { integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==, } - engines: { node: ">=14" } + engines: { node: '>=14' } fs-extra@11.4.0: resolution: { integrity: sha512-EQsFzMUJkCKGr1ePqlYADkIUmHW1s3ZXr5Yqy6wbGrfUCphpl2maM/kyOIRA2HpP3AaFQTZXD4ldjek+nccddA==, } - engines: { node: ">=14.14" } + engines: { node: '>=14.14' } fsevents@2.3.3: resolution: @@ -2168,7 +2168,7 @@ packages: { integrity: sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA==, } - engines: { node: ">=18" } + engines: { node: '>=18' } get-caller-file@2.0.5: resolution: @@ -2182,28 +2182,28 @@ packages: { integrity: sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==, } - engines: { node: ">=18" } + engines: { node: '>=18' } get-stream@6.0.1: resolution: { integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==, } - engines: { node: ">=10" } + engines: { node: '>=10' } get-stream@8.0.1: resolution: { integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==, } - engines: { node: ">=16" } + engines: { node: '>=16' } get-stream@9.0.1: resolution: { integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==, } - engines: { node: ">=18" } + engines: { node: '>=18' } git-log-parser@1.2.1: resolution: @@ -2236,7 +2236,7 @@ packages: { integrity: sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==, } - engines: { node: ">=0.4.7" } + engines: { node: '>=0.4.7' } hasBin: true has-flag@3.0.0: @@ -2244,14 +2244,14 @@ packages: { integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==, } - engines: { node: ">=4" } + engines: { node: '>=4' } has-flag@4.0.0: resolution: { integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, } - engines: { node: ">=8" } + engines: { node: '>=8' } highlight.js@10.7.3: resolution: @@ -2264,7 +2264,7 @@ packages: { integrity: sha512-IHI4bEVOt3vRUDJ+bFA9VUJlo7SzvFARPNLw75pqSmAOP2HmTWfFJtPvLBrDrlgjEYXY9zs7SFdHPQaJShkSCQ==, } - engines: { node: ">=20" } + engines: { node: '>=20' } hosted-git-info@7.0.2: resolution: @@ -2291,49 +2291,49 @@ packages: { integrity: sha512-2NxoveTT58mjYT4n3RPTEfCZGLMbidoO8XEieXfpSYxu+PQJ1qpx4ypwH6N+uF9twBPIvRRgvkvW5HUTYWENig==, } - engines: { node: ">= 20" } + engines: { node: '>= 20' } https-proxy-agent@9.1.0: resolution: { integrity: sha512-ag87y7cJJ9/3+GxFr8Oy4O5faDsGRGnBGsJj/YjOSsSx/5eadKLYTMPlzuR6obgoCDDm0abAAZitXXQkMOPSpA==, } - engines: { node: ">= 20" } + engines: { node: '>= 20' } human-signals@5.0.0: resolution: { integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==, } - engines: { node: ">=16.17.0" } + engines: { node: '>=16.17.0' } human-signals@8.0.1: resolution: { integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==, } - engines: { node: ">=18.18.0" } + engines: { node: '>=18.18.0' } import-fresh@3.3.1: resolution: { integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==, } - engines: { node: ">=6" } + engines: { node: '>=6' } import-from-esm@2.0.0: resolution: { integrity: sha512-YVt14UZCgsX1vZQ3gKjkWVdBdHQ6eu3MPU1TBgL1H5orXe2+jWD006WCPPtOuwlQm10NuzOW5WawiF1Q9veW8g==, } - engines: { node: ">=18.20" } + engines: { node: '>=18.20' } import-in-the-middle@3.3.3: resolution: { integrity: sha512-AiohS3H80sXO6owEltjGX+glb7qXaDhBoJb9XcQVH4UI207xu/bDLUcadVKp7Qe576reg9yr/PXZjV5qx8gfbA==, } - engines: { node: ">=18" } + engines: { node: '>=18' } import-meta-resolve@4.2.0: resolution: @@ -2346,14 +2346,14 @@ packages: { integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==, } - engines: { node: ">=12" } + engines: { node: '>=12' } index-to-position@1.2.0: resolution: { integrity: sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==, } - engines: { node: ">=18" } + engines: { node: '>=18' } inherits@2.0.4: resolution: @@ -2378,28 +2378,28 @@ packages: { integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, } - engines: { node: ">=8" } + engines: { node: '>=8' } is-number@7.0.0: resolution: { integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, } - engines: { node: ">=0.12.0" } + engines: { node: '>=0.12.0' } is-obj@2.0.0: resolution: { integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==, } - engines: { node: ">=8" } + engines: { node: '>=8' } is-plain-obj@4.1.0: resolution: { integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==, } - engines: { node: ">=12" } + engines: { node: '>=12' } is-stream@3.0.0: resolution: @@ -2413,14 +2413,14 @@ packages: { integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==, } - engines: { node: ">=18" } + engines: { node: '>=18' } is-unicode-supported@2.1.0: resolution: { integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==, } - engines: { node: ">=18" } + engines: { node: '>=18' } isarray@1.0.0: resolution: @@ -2446,28 +2446,28 @@ packages: { integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==, } - engines: { node: ">=8" } + engines: { node: '>=8' } istanbul-lib-report@3.0.1: resolution: { integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==, } - engines: { node: ">=10" } + engines: { node: '>=10' } istanbul-lib-source-maps@5.0.6: resolution: { integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==, } - engines: { node: ">=10" } + engines: { node: '>=10' } istanbul-reports@3.2.0: resolution: { integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==, } - engines: { node: ">=8" } + engines: { node: '>=8' } jackspeak@3.4.3: resolution: @@ -2480,14 +2480,14 @@ packages: { integrity: sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==, } - engines: { node: ">= 0.6.0" } + engines: { node: '>= 0.6.0' } joycon@3.1.1: resolution: { integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==, } - engines: { node: ">=10" } + engines: { node: '>=10' } js-tokens@10.0.0: resolution: @@ -2543,7 +2543,7 @@ packages: { integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==, } - engines: { node: ">=14" } + engines: { node: '>=14' } lines-and-columns@1.2.4: resolution: @@ -2556,7 +2556,7 @@ packages: { integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==, } - engines: { node: ">=4" } + engines: { node: '>=4' } load-tsconfig@0.2.5: resolution: @@ -2570,7 +2570,7 @@ packages: { integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==, } - engines: { node: ">=4" } + engines: { node: '>=4' } lodash-es@4.18.1: resolution: @@ -2644,30 +2644,30 @@ packages: { integrity: sha512-ayF7iT+44LXdxJLTrTd3TLQpFDDvPCBxXxbv+pMUSuHA5Q8zyAfwkRP6aHHwNVFBUFWtxAHqwNJxF8vMZLAbVg==, } - engines: { node: ">=18" } + engines: { node: '>=18' } make-dir@4.0.0: resolution: { integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==, } - engines: { node: ">=10" } + engines: { node: '>=10' } marked-terminal@7.3.0: resolution: { integrity: sha512-t4rBvPsHc57uE/2nJOLmMbZCQ4tgAccAED3ngXQqW6g+TxA488JzJ+FK3lQkzBQOI1mRV/r/Kq+1ZlJ4D0owQw==, } - engines: { node: ">=16.0.0" } + engines: { node: '>=16.0.0' } peerDependencies: - marked: ">=1 <16" + marked: '>=1 <16' marked@15.0.12: resolution: { integrity: sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==, } - engines: { node: ">= 18" } + engines: { node: '>= 18' } hasBin: true meow@13.2.0: @@ -2675,7 +2675,7 @@ packages: { integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==, } - engines: { node: ">=18" } + engines: { node: '>=18' } merge-stream@2.0.0: resolution: @@ -2688,21 +2688,21 @@ packages: { integrity: sha512-Sz8FzjzI0kN13GK/6MVEsVzMZEPvOhnmmI1lU5+/1cGOiK3QUahntrNNtdVeihrO7t9JpoH75iMNXg6R6uWflQ==, } - engines: { node: ">=18.0.0" } + engines: { node: '>=18.0.0' } micromatch@4.0.8: resolution: { integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==, } - engines: { node: ">=8.6" } + engines: { node: '>=8.6' } mime@4.1.0: resolution: { integrity: sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==, } - engines: { node: ">=16" } + engines: { node: '>=16' } hasBin: true mimic-fn@4.0.0: @@ -2710,7 +2710,7 @@ packages: { integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==, } - engines: { node: ">=12" } + engines: { node: '>=12' } minimatch@10.2.6: resolution: @@ -2724,7 +2724,7 @@ packages: { integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==, } - engines: { node: ">=16 || 14 >=14.17" } + engines: { node: '>=16 || 14 >=14.17' } minimist@1.2.8: resolution: @@ -2737,7 +2737,7 @@ packages: { integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==, } - engines: { node: ">=16 || 14 >=14.17" } + engines: { node: '>=16 || 14 >=14.17' } mlly@1.8.2: resolution: @@ -2788,7 +2788,7 @@ packages: { integrity: sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==, } - engines: { node: ">=18" } + engines: { node: '>=18' } normalize-package-data@6.0.2: resolution: @@ -2809,7 +2809,7 @@ packages: { integrity: sha512-ARftfC5HdUNu9jJeL8pHj8debUIHA2b91FizCoMzY4lG6dDX13jdvTK0TBe24IBDRf2HvJSzzwEPvmbkQWHRSg==, } - engines: { node: ">=20" } + engines: { node: '>=20' } npm-run-path@5.3.0: resolution: @@ -2823,7 +2823,7 @@ packages: { integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==, } - engines: { node: ">=18" } + engines: { node: '>=18' } npm@11.19.0: resolution: @@ -2833,17 +2833,17 @@ packages: engines: { node: ^20.17.0 || >=22.9.0 } hasBin: true bundledDependencies: - - "@isaacs/string-locale-compare" - - "@npmcli/arborist" - - "@npmcli/config" - - "@npmcli/fs" - - "@npmcli/map-workspaces" - - "@npmcli/metavuln-calculator" - - "@npmcli/package-json" - - "@npmcli/promise-spawn" - - "@npmcli/redact" - - "@npmcli/run-script" - - "@sigstore/tuf" + - '@isaacs/string-locale-compare' + - '@npmcli/arborist' + - '@npmcli/config' + - '@npmcli/fs' + - '@npmcli/map-workspaces' + - '@npmcli/metavuln-calculator' + - '@npmcli/package-json' + - '@npmcli/promise-spawn' + - '@npmcli/redact' + - '@npmcli/run-script' + - '@sigstore/tuf' - abbrev - archy - cacache @@ -2904,14 +2904,14 @@ packages: { integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==, } - engines: { node: ">=0.10.0" } + engines: { node: '>=0.10.0' } onetime@6.0.0: resolution: { integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==, } - engines: { node: ">=12" } + engines: { node: '>=12' } oxlint@1.77.0: resolution: @@ -2921,8 +2921,8 @@ packages: engines: { node: ^20.19.0 || >=22.12.0 } hasBin: true peerDependencies: - oxlint-tsgolint: ">=7.0.2001" - vite-plus: "*" + oxlint-tsgolint: '>=7.0.2001' + vite-plus: '*' peerDependenciesMeta: oxlint-tsgolint: optional: true @@ -2934,63 +2934,63 @@ packages: { integrity: sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==, } - engines: { node: ">=12" } + engines: { node: '>=12' } p-event@6.0.1: resolution: { integrity: sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==, } - engines: { node: ">=16.17" } + engines: { node: '>=16.17' } p-filter@4.1.0: resolution: { integrity: sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==, } - engines: { node: ">=18" } + engines: { node: '>=18' } p-limit@1.3.0: resolution: { integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==, } - engines: { node: ">=4" } + engines: { node: '>=4' } p-locate@2.0.0: resolution: { integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==, } - engines: { node: ">=4" } + engines: { node: '>=4' } p-map@7.0.6: resolution: { integrity: sha512-I4Prw6ivkd6p8PiYR1tXASOAOBzIJwu0TB7fqaX0c/8c3QAehNYmX57EijyGGGBt3c/BIowGwV03RVBtXvHEVg==, } - engines: { node: ">=18" } + engines: { node: '>=18' } p-reduce@3.0.0: resolution: { integrity: sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==, } - engines: { node: ">=12" } + engines: { node: '>=12' } p-timeout@6.1.4: resolution: { integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==, } - engines: { node: ">=14.16" } + engines: { node: '>=14.16' } p-try@1.0.0: resolution: { integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==, } - engines: { node: ">=4" } + engines: { node: '>=4' } package-json-from-dist@1.0.1: resolution: @@ -3003,35 +3003,35 @@ packages: { integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, } - engines: { node: ">=6" } + engines: { node: '>=6' } parse-json@4.0.0: resolution: { integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==, } - engines: { node: ">=4" } + engines: { node: '>=4' } parse-json@5.2.0: resolution: { integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==, } - engines: { node: ">=8" } + engines: { node: '>=8' } parse-json@8.3.0: resolution: { integrity: sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==, } - engines: { node: ">=18" } + engines: { node: '>=18' } parse-ms@4.0.0: resolution: { integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==, } - engines: { node: ">=18" } + engines: { node: '>=18' } parse5-htmlparser2-tree-adapter@6.0.1: resolution: @@ -3056,35 +3056,35 @@ packages: { integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==, } - engines: { node: ">=4" } + engines: { node: '>=4' } path-key@3.1.1: resolution: { integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, } - engines: { node: ">=8" } + engines: { node: '>=8' } path-key@4.0.0: resolution: { integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==, } - engines: { node: ">=12" } + engines: { node: '>=12' } path-scurry@1.11.1: resolution: { integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==, } - engines: { node: ">=16 || 14 >=14.18" } + engines: { node: '>=16 || 14 >=14.18' } path-type@4.0.0: resolution: { integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==, } - engines: { node: ">=8" } + engines: { node: '>=8' } pathe@2.0.3: resolution: @@ -3097,7 +3097,7 @@ packages: { integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==, } - engines: { node: ">= 14.16" } + engines: { node: '>= 14.16' } picocolors@1.1.1: resolution: @@ -3110,35 +3110,35 @@ packages: { integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==, } - engines: { node: ">=8.6" } + engines: { node: '>=8.6' } picomatch@4.0.5: resolution: { integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==, } - engines: { node: ">=12" } + engines: { node: '>=12' } pify@3.0.0: resolution: { integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==, } - engines: { node: ">=4" } + engines: { node: '>=4' } pirates@4.0.7: resolution: { integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==, } - engines: { node: ">= 6" } + engines: { node: '>= 6' } pkg-conf@2.1.0: resolution: { integrity: sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==, } - engines: { node: ">=4" } + engines: { node: '>=4' } pkg-types@1.3.1: resolution: @@ -3151,10 +3151,10 @@ packages: { integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==, } - engines: { node: ">= 18" } + engines: { node: '>= 18' } peerDependencies: - jiti: ">=1.21.0" - postcss: ">=8.0.9" + jiti: '>=1.21.0' + postcss: '>=8.0.9' tsx: ^4.8.1 yaml: ^2.4.2 peerDependenciesMeta: @@ -3179,7 +3179,7 @@ packages: { integrity: sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g==, } - engines: { node: ">=14" } + engines: { node: '>=14' } hasBin: true pretty-ms@9.3.0: @@ -3187,7 +3187,7 @@ packages: { integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==, } - engines: { node: ">=18" } + engines: { node: '>=18' } process-nextick-args@2.0.1: resolution: @@ -3206,7 +3206,7 @@ packages: { integrity: sha512-N8IBcM3UgCVzz2L2Lqv8DVntDnnC8/hiV4nEDUPkqq72TPUgYWjQc+bdZlBPZK9LzPAvOY//gAt0S0DApoOXWQ==, } - engines: { node: ">= 20" } + engines: { node: '>= 20' } peerDependencies: kerberos: ^2.0.0 peerDependenciesMeta: @@ -3225,28 +3225,28 @@ packages: { integrity: sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==, } - engines: { node: ">=18" } + engines: { node: '>=18' } read-package-up@12.0.0: resolution: { integrity: sha512-Q5hMVBYur/eQNWDdbF4/Wqqr9Bjvtrw2kjGxxBbKLbx8bVCL8gcArjTy8zDUuLGQicftpMuU0riQNcAsbtOVsw==, } - engines: { node: ">=20" } + engines: { node: '>=20' } read-pkg@10.1.0: resolution: { integrity: sha512-I8g2lArQiP78ll51UeMZojewtYgIRCKCWqZEgOO8c/uefTI+XDXvCSXu3+YNUaTNvZzobrL5+SqHjBrByRRTdg==, } - engines: { node: ">=20" } + engines: { node: '>=20' } read-pkg@9.0.1: resolution: { integrity: sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==, } - engines: { node: ">=18" } + engines: { node: '>=18' } readable-stream@2.3.8: resolution: @@ -3259,49 +3259,49 @@ packages: { integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==, } - engines: { node: ">= 14.18.0" } + engines: { node: '>= 14.18.0' } registry-auth-token@5.1.1: resolution: { integrity: sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==, } - engines: { node: ">=14" } + engines: { node: '>=14' } require-directory@2.1.1: resolution: { integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==, } - engines: { node: ">=0.10.0" } + engines: { node: '>=0.10.0' } require-in-the-middle@8.0.1: resolution: { integrity: sha512-QT7FVMXfWOYFbeRBF6nu+I6tr2Tf3u0q8RIEjNob/heKY/nh7drD/k7eeMFmSQgnTtCzLDcCu/XEnpW2wk4xCQ==, } - engines: { node: ">=9.3.0 || >=8.10.0 <9.0.0" } + engines: { node: '>=9.3.0 || >=8.10.0 <9.0.0' } resolve-from@4.0.0: resolution: { integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, } - engines: { node: ">=4" } + engines: { node: '>=4' } resolve-from@5.0.0: resolution: { integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==, } - engines: { node: ">=8" } + engines: { node: '>=8' } rollup@4.62.4: resolution: { integrity: sha512-RXOqwaPsBGjMNMa4sQjDjHieHEZDFoj/Rdr46l2MU5DfEs16wHJPC2RPTPHWhNl+M3aI472LLqFkFKut4SblOg==, } - engines: { node: ">=18.0.0", npm: ">=8.0.0" } + engines: { node: '>=18.0.0', npm: '>=8.0.0' } hasBin: true safe-buffer@5.1.2: @@ -3329,14 +3329,14 @@ packages: { integrity: sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==, } - engines: { node: ">=12" } + engines: { node: '>=12' } semver@7.8.5: resolution: { integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==, } - engines: { node: ">=10" } + engines: { node: '>=10' } hasBin: true shebang-command@2.0.0: @@ -3344,14 +3344,14 @@ packages: { integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, } - engines: { node: ">=8" } + engines: { node: '>=8' } shebang-regex@3.0.0: resolution: { integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, } - engines: { node: ">=8" } + engines: { node: '>=8' } siginfo@2.0.0: resolution: @@ -3364,42 +3364,42 @@ packages: { integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==, } - engines: { node: ">=14" } + engines: { node: '>=14' } signale@1.4.0: resolution: { integrity: sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==, } - engines: { node: ">=6" } + engines: { node: '>=6' } skin-tone@2.0.0: resolution: { integrity: sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==, } - engines: { node: ">=8" } + engines: { node: '>=8' } source-map-js@1.2.1: resolution: { integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==, } - engines: { node: ">=0.10.0" } + engines: { node: '>=0.10.0' } source-map@0.6.1: resolution: { integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, } - engines: { node: ">=0.10.0" } + engines: { node: '>=0.10.0' } source-map@0.7.6: resolution: { integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==, } - engines: { node: ">= 12" } + engines: { node: '>= 12' } spawn-error-forwarder@1.0.0: resolution: @@ -3460,28 +3460,28 @@ packages: { integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==, } - engines: { node: ">=8" } + engines: { node: '>=8' } string-width@5.1.2: resolution: { integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==, } - engines: { node: ">=12" } + engines: { node: '>=12' } string-width@7.2.0: resolution: { integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==, } - engines: { node: ">=18" } + engines: { node: '>=18' } string-width@8.2.2: resolution: { integrity: sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==, } - engines: { node: ">=20" } + engines: { node: '>=20' } string_decoder@1.1.1: resolution: @@ -3494,42 +3494,42 @@ packages: { integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, } - engines: { node: ">=8" } + engines: { node: '>=8' } strip-ansi@7.2.0: resolution: { integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==, } - engines: { node: ">=12" } + engines: { node: '>=12' } strip-bom@3.0.0: resolution: { integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==, } - engines: { node: ">=4" } + engines: { node: '>=4' } strip-final-newline@3.0.0: resolution: { integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==, } - engines: { node: ">=12" } + engines: { node: '>=12' } strip-final-newline@4.0.0: resolution: { integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==, } - engines: { node: ">=18" } + engines: { node: '>=18' } strip-json-comments@2.0.1: resolution: { integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==, } - engines: { node: ">=0.10.0" } + engines: { node: '>=0.10.0' } strip-literal@3.1.0: resolution: @@ -3542,7 +3542,7 @@ packages: { integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==, } - engines: { node: ">=16 || 14 >=14.17" } + engines: { node: '>=16 || 14 >=14.17' } hasBin: true super-regex@1.1.0: @@ -3550,63 +3550,63 @@ packages: { integrity: sha512-WHkws2ZflZe41zj6AolvvmaTrWds/VuyeYr9iPVv/oQeaIoVxMKaushfFWpOGDT+GuBrM/sVqF8KUCYQlSSTdQ==, } - engines: { node: ">=18" } + engines: { node: '>=18' } supports-color@5.5.0: resolution: { integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==, } - engines: { node: ">=4" } + engines: { node: '>=4' } supports-color@7.2.0: resolution: { integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, } - engines: { node: ">=8" } + engines: { node: '>=8' } supports-hyperlinks@3.2.0: resolution: { integrity: sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==, } - engines: { node: ">=14.18" } + engines: { node: '>=14.18' } tagged-tag@1.0.0: resolution: { integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==, } - engines: { node: ">=20" } + engines: { node: '>=20' } temp-dir@3.0.0: resolution: { integrity: sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==, } - engines: { node: ">=14.16" } + engines: { node: '>=14.16' } tempy@3.2.0: resolution: { integrity: sha512-d79HhZya5Djd7am0q+W4RTsSU+D/aJzM+4Y4AGJGuGlgM2L6sx5ZvOYTmZjqPhrDrV6xJTtRSm1JCLj6V6LHLQ==, } - engines: { node: ">=14.16" } + engines: { node: '>=14.16' } test-exclude@7.0.2: resolution: { integrity: sha512-u9E6A+ZDYdp7a4WnarkXPZOx8Ilz46+kby6p1yZ8zsGTz9gYa6FIS7lj2oezzNKmtdyyJNNmmXDppga5GB7kSw==, } - engines: { node: ">=18" } + engines: { node: '>=18' } thenify-all@1.6.0: resolution: { integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==, } - engines: { node: ">=0.8" } + engines: { node: '>=0.8' } thenify@3.3.1: resolution: @@ -3625,7 +3625,7 @@ packages: { integrity: sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==, } - engines: { node: ">=12" } + engines: { node: '>=12' } tinybench@2.9.0: resolution: @@ -3644,7 +3644,7 @@ packages: { integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==, } - engines: { node: ">=12.0.0" } + engines: { node: '>=12.0.0' } tinypool@1.1.1: resolution: @@ -3658,28 +3658,28 @@ packages: { integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==, } - engines: { node: ">=14.0.0" } + engines: { node: '>=14.0.0' } tinyspy@4.0.4: resolution: { integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==, } - engines: { node: ">=14.0.0" } + engines: { node: '>=14.0.0' } to-regex-range@5.0.1: resolution: { integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, } - engines: { node: ">=8.0" } + engines: { node: '>=8.0' } traverse@0.6.8: resolution: { integrity: sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==, } - engines: { node: ">= 0.4" } + engines: { node: '>= 0.4' } tree-kill@1.2.2: resolution: @@ -3699,17 +3699,17 @@ packages: { integrity: sha512-xtgkqwdhpKWr3tKPmCkvYmS9xnQK3m3XgxZHwSUjvfTjp7YfXe5tT3GgWi0F2N+ZSMsOeWeZFh7ZZFg5iPhing==, } - engines: { node: ">=18" } + engines: { node: '>=18' } hasBin: true peerDependencies: - "@microsoft/api-extractor": ^7.36.0 - "@swc/core": ^1 + '@microsoft/api-extractor': ^7.36.0 + '@swc/core': ^1 postcss: ^8.4.12 - typescript: ">=4.5.0" + typescript: '>=4.5.0' peerDependenciesMeta: - "@microsoft/api-extractor": + '@microsoft/api-extractor': optional: true - "@swc/core": + '@swc/core': optional: true postcss: optional: true @@ -3721,42 +3721,42 @@ packages: { integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==, } - engines: { node: ">=0.6.11 <=0.7.0 || >=0.7.3" } + engines: { node: '>=0.6.11 <=0.7.0 || >=0.7.3' } type-fest@1.4.0: resolution: { integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==, } - engines: { node: ">=10" } + engines: { node: '>=10' } type-fest@2.19.0: resolution: { integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==, } - engines: { node: ">=12.20" } + engines: { node: '>=12.20' } type-fest@4.41.0: resolution: { integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==, } - engines: { node: ">=16" } + engines: { node: '>=16' } type-fest@5.8.0: resolution: { integrity: sha512-YGYEVz3Fm5iy/AybuA0oyNFq7H4CgQNfRp/qfe8nurE1kuCeNm3/vfm9X4Mtl+qLyaKJUh5xrFZwogr41SMjYA==, } - engines: { node: ">=20" } + engines: { node: '>=20' } typescript@6.0.3: resolution: { integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==, } - engines: { node: ">=14.17" } + engines: { node: '>=14.17' } hasBin: true ufo@1.6.4: @@ -3770,7 +3770,7 @@ packages: { integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==, } - engines: { node: ">=0.8.0" } + engines: { node: '>=0.8.0' } hasBin: true undici-types@7.18.2: @@ -3784,49 +3784,49 @@ packages: { integrity: sha512-LIY910g9TI13YS95lrMFrs8Rm/u/irgHeTWoKCoteeJ04CUJ92eEfj0rVn+7VKMPBpUPiUoBKfhNyLI23EE/KA==, } - engines: { node: ">=18.17" } + engines: { node: '>=18.17' } undici@7.29.0: resolution: { integrity: sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw==, } - engines: { node: ">=20.18.1" } + engines: { node: '>=20.18.1' } unicode-emoji-modifier-base@1.0.0: resolution: { integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==, } - engines: { node: ">=4" } + engines: { node: '>=4' } unicorn-magic@0.1.0: resolution: { integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==, } - engines: { node: ">=18" } + engines: { node: '>=18' } unicorn-magic@0.3.0: resolution: { integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==, } - engines: { node: ">=18" } + engines: { node: '>=18' } unicorn-magic@0.4.0: resolution: { integrity: sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==, } - engines: { node: ">=20" } + engines: { node: '>=20' } unique-string@3.0.0: resolution: { integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==, } - engines: { node: ">=12" } + engines: { node: '>=12' } universal-user-agent@7.0.3: resolution: @@ -3839,7 +3839,7 @@ packages: { integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==, } - engines: { node: ">= 10.0.0" } + engines: { node: '>= 10.0.0' } url-join@5.0.0: resolution: @@ -3876,19 +3876,19 @@ packages: engines: { node: ^20.19.0 || >=22.12.0 } hasBin: true peerDependencies: - "@types/node": ^20.19.0 || >=22.12.0 - jiti: ">=1.21.0" + '@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" + stylus: '>=0.54.8' sugarss: ^5.0.0 terser: ^5.16.0 tsx: ^4.8.1 yaml: ^2.4.2 peerDependenciesMeta: - "@types/node": + '@types/node': optional: true jiti: optional: true @@ -3919,23 +3919,23 @@ packages: engines: { node: ^18.0.0 || ^20.0.0 || >=22.0.0 } hasBin: true peerDependencies: - "@edge-runtime/vm": "*" - "@types/debug": ^4.1.12 - "@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0 - "@vitest/browser": 3.2.7 - "@vitest/ui": 3.2.7 - happy-dom: "*" - jsdom: "*" + '@edge-runtime/vm': '*' + '@types/debug': ^4.1.12 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@vitest/browser': 3.2.7 + '@vitest/ui': 3.2.7 + happy-dom: '*' + jsdom: '*' peerDependenciesMeta: - "@edge-runtime/vm": + '@edge-runtime/vm': optional: true - "@types/debug": + '@types/debug': optional: true - "@types/node": + '@types/node': optional: true - "@vitest/browser": + '@vitest/browser': optional: true - "@vitest/ui": + '@vitest/ui': optional: true happy-dom: optional: true @@ -3953,7 +3953,7 @@ packages: { integrity: sha512-XZyoF5/5hZtXitIwzrU4NKK+Wtbb9aB9CezUEw2Q0wlYK8NUYQxC1rRXgNueYLtBAJwXIb+/tFVk4dozciNJMA==, } - engines: { node: ">=22" } + engines: { node: '>=22' } hasBin: true which@2.0.2: @@ -3961,7 +3961,7 @@ packages: { integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, } - engines: { node: ">= 8" } + engines: { node: '>= 8' } hasBin: true why-is-node-running@2.3.0: @@ -3969,7 +3969,7 @@ packages: { integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==, } - engines: { node: ">=8" } + engines: { node: '>=8' } hasBin: true wordwrap@1.0.0: @@ -3983,42 +3983,42 @@ packages: { integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==, } - engines: { node: ">=10" } + engines: { node: '>=10' } wrap-ansi@8.1.0: resolution: { integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==, } - engines: { node: ">=12" } + engines: { node: '>=12' } wrap-ansi@9.0.2: resolution: { integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==, } - engines: { node: ">=18" } + engines: { node: '>=18' } xtend@4.0.2: resolution: { integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==, } - engines: { node: ">=0.4" } + engines: { node: '>=0.4' } y18n@5.0.8: resolution: { integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==, } - engines: { node: ">=10" } + engines: { node: '>=10' } yargs-parser@20.2.9: resolution: { integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==, } - engines: { node: ">=10" } + engines: { node: '>=10' } yargs-parser@22.0.0: resolution: @@ -4032,7 +4032,7 @@ packages: { integrity: sha512-Nt9ZJjXTv5R8MHbqby/wXQ6Gi0Bb3TcYZkR1bzuL4yB2OxWPkXknz513gEF0GoA6tn00UpbPvERW8rzCuWCA6w==, } - engines: { node: ">=10" } + engines: { node: '>=10' } yargs@18.1.0: resolution: @@ -4046,235 +4046,235 @@ packages: { integrity: sha512-xYqdZFUK/VYazNl/oCDYN+3WloWQwMfZxBoiNt6qNyk+xfOdi598muWE42rNZFp1kNOiqW936q5RhUdnpqElSg==, } - engines: { node: ">=18" } + engines: { node: '>=18' } snapshots: - "@actions/core@3.0.1": + '@actions/core@3.0.1': dependencies: - "@actions/exec": 3.0.0 - "@actions/http-client": 4.0.1 + '@actions/exec': 3.0.0 + '@actions/http-client': 4.0.1 - "@actions/exec@3.0.0": + '@actions/exec@3.0.0': dependencies: - "@actions/io": 3.0.2 + '@actions/io': 3.0.2 - "@actions/http-client@4.0.1": + '@actions/http-client@4.0.1': dependencies: tunnel: 0.0.6 undici: 6.28.0 - "@actions/io@3.0.2": {} + '@actions/io@3.0.2': {} - "@ampproject/remapping@2.3.0": + '@ampproject/remapping@2.3.0': dependencies: - "@jridgewell/gen-mapping": 0.3.13 - "@jridgewell/trace-mapping": 0.3.31 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 - "@apm-js-collab/code-transformer-bundler-plugins@0.7.4": + '@apm-js-collab/code-transformer-bundler-plugins@0.7.4': dependencies: - "@apm-js-collab/code-transformer": 0.18.1 + '@apm-js-collab/code-transformer': 0.18.1 es-module-lexer: 2.3.1 magic-string: 0.30.21 module-details-from-path: 1.0.4 - "@apm-js-collab/code-transformer@0.18.1": + '@apm-js-collab/code-transformer@0.18.1': dependencies: - "@types/estree": 1.0.9 + '@types/estree': 1.0.9 astring: 1.9.0 esquery: 1.7.0 meriyah: 6.1.4 semifies: 1.0.0 source-map: 0.6.1 - "@apm-js-collab/tracing-hooks@0.13.0": + '@apm-js-collab/tracing-hooks@0.13.0': dependencies: - "@apm-js-collab/code-transformer": 0.18.1 + '@apm-js-collab/code-transformer': 0.18.1 debug: 4.4.3 module-details-from-path: 1.0.4 transitivePeerDependencies: - supports-color - "@babel/code-frame@7.29.7": + '@babel/code-frame@7.29.7': dependencies: - "@babel/helper-validator-identifier": 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 js-tokens: 4.0.0 picocolors: 1.1.1 - "@babel/helper-string-parser@7.29.7": {} + '@babel/helper-string-parser@7.29.7': {} - "@babel/helper-validator-identifier@7.29.7": {} + '@babel/helper-validator-identifier@7.29.7': {} - "@babel/parser@7.29.8": + '@babel/parser@7.29.8': dependencies: - "@babel/types": 7.29.8 + '@babel/types': 7.29.8 - "@babel/types@7.29.8": + '@babel/types@7.29.8': dependencies: - "@babel/helper-string-parser": 7.29.7 - "@babel/helper-validator-identifier": 7.29.7 + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 - "@bcoe/v8-coverage@1.0.2": {} + '@bcoe/v8-coverage@1.0.2': {} - "@colors/colors@1.5.0": + '@colors/colors@1.5.0': optional: true - "@esbuild/aix-ppc64@0.27.7": + '@esbuild/aix-ppc64@0.27.7': optional: true - "@esbuild/aix-ppc64@0.28.1": + '@esbuild/aix-ppc64@0.28.1': optional: true - "@esbuild/android-arm64@0.27.7": + '@esbuild/android-arm64@0.27.7': optional: true - "@esbuild/android-arm64@0.28.1": + '@esbuild/android-arm64@0.28.1': optional: true - "@esbuild/android-arm@0.27.7": + '@esbuild/android-arm@0.27.7': optional: true - "@esbuild/android-arm@0.28.1": + '@esbuild/android-arm@0.28.1': optional: true - "@esbuild/android-x64@0.27.7": + '@esbuild/android-x64@0.27.7': optional: true - "@esbuild/android-x64@0.28.1": + '@esbuild/android-x64@0.28.1': optional: true - "@esbuild/darwin-arm64@0.27.7": + '@esbuild/darwin-arm64@0.27.7': optional: true - "@esbuild/darwin-arm64@0.28.1": + '@esbuild/darwin-arm64@0.28.1': optional: true - "@esbuild/darwin-x64@0.27.7": + '@esbuild/darwin-x64@0.27.7': optional: true - "@esbuild/darwin-x64@0.28.1": + '@esbuild/darwin-x64@0.28.1': optional: true - "@esbuild/freebsd-arm64@0.27.7": + '@esbuild/freebsd-arm64@0.27.7': optional: true - "@esbuild/freebsd-arm64@0.28.1": + '@esbuild/freebsd-arm64@0.28.1': optional: true - "@esbuild/freebsd-x64@0.27.7": + '@esbuild/freebsd-x64@0.27.7': optional: true - "@esbuild/freebsd-x64@0.28.1": + '@esbuild/freebsd-x64@0.28.1': optional: true - "@esbuild/linux-arm64@0.27.7": + '@esbuild/linux-arm64@0.27.7': optional: true - "@esbuild/linux-arm64@0.28.1": + '@esbuild/linux-arm64@0.28.1': optional: true - "@esbuild/linux-arm@0.27.7": + '@esbuild/linux-arm@0.27.7': optional: true - "@esbuild/linux-arm@0.28.1": + '@esbuild/linux-arm@0.28.1': optional: true - "@esbuild/linux-ia32@0.27.7": + '@esbuild/linux-ia32@0.27.7': optional: true - "@esbuild/linux-ia32@0.28.1": + '@esbuild/linux-ia32@0.28.1': optional: true - "@esbuild/linux-loong64@0.27.7": + '@esbuild/linux-loong64@0.27.7': optional: true - "@esbuild/linux-loong64@0.28.1": + '@esbuild/linux-loong64@0.28.1': optional: true - "@esbuild/linux-mips64el@0.27.7": + '@esbuild/linux-mips64el@0.27.7': optional: true - "@esbuild/linux-mips64el@0.28.1": + '@esbuild/linux-mips64el@0.28.1': optional: true - "@esbuild/linux-ppc64@0.27.7": + '@esbuild/linux-ppc64@0.27.7': optional: true - "@esbuild/linux-ppc64@0.28.1": + '@esbuild/linux-ppc64@0.28.1': optional: true - "@esbuild/linux-riscv64@0.27.7": + '@esbuild/linux-riscv64@0.27.7': optional: true - "@esbuild/linux-riscv64@0.28.1": + '@esbuild/linux-riscv64@0.28.1': optional: true - "@esbuild/linux-s390x@0.27.7": + '@esbuild/linux-s390x@0.27.7': optional: true - "@esbuild/linux-s390x@0.28.1": + '@esbuild/linux-s390x@0.28.1': optional: true - "@esbuild/linux-x64@0.27.7": + '@esbuild/linux-x64@0.27.7': optional: true - "@esbuild/linux-x64@0.28.1": + '@esbuild/linux-x64@0.28.1': optional: true - "@esbuild/netbsd-arm64@0.27.7": + '@esbuild/netbsd-arm64@0.27.7': optional: true - "@esbuild/netbsd-arm64@0.28.1": + '@esbuild/netbsd-arm64@0.28.1': optional: true - "@esbuild/netbsd-x64@0.27.7": + '@esbuild/netbsd-x64@0.27.7': optional: true - "@esbuild/netbsd-x64@0.28.1": + '@esbuild/netbsd-x64@0.28.1': optional: true - "@esbuild/openbsd-arm64@0.27.7": + '@esbuild/openbsd-arm64@0.27.7': optional: true - "@esbuild/openbsd-arm64@0.28.1": + '@esbuild/openbsd-arm64@0.28.1': optional: true - "@esbuild/openbsd-x64@0.27.7": + '@esbuild/openbsd-x64@0.27.7': optional: true - "@esbuild/openbsd-x64@0.28.1": + '@esbuild/openbsd-x64@0.28.1': optional: true - "@esbuild/openharmony-arm64@0.27.7": + '@esbuild/openharmony-arm64@0.27.7': optional: true - "@esbuild/openharmony-arm64@0.28.1": + '@esbuild/openharmony-arm64@0.28.1': optional: true - "@esbuild/sunos-x64@0.27.7": + '@esbuild/sunos-x64@0.27.7': optional: true - "@esbuild/sunos-x64@0.28.1": + '@esbuild/sunos-x64@0.28.1': optional: true - "@esbuild/win32-arm64@0.27.7": + '@esbuild/win32-arm64@0.27.7': optional: true - "@esbuild/win32-arm64@0.28.1": + '@esbuild/win32-arm64@0.28.1': optional: true - "@esbuild/win32-ia32@0.27.7": + '@esbuild/win32-ia32@0.27.7': optional: true - "@esbuild/win32-ia32@0.28.1": + '@esbuild/win32-ia32@0.28.1': optional: true - "@esbuild/win32-x64@0.27.7": + '@esbuild/win32-x64@0.27.7': optional: true - "@esbuild/win32-x64@0.28.1": + '@esbuild/win32-x64@0.28.1': optional: true - "@isaacs/cliui@8.0.2": + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 string-width-cjs: string-width@4.2.3 @@ -4283,291 +4283,291 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - "@istanbuljs/schema@0.1.6": {} + '@istanbuljs/schema@0.1.6': {} - "@jridgewell/gen-mapping@0.3.13": + '@jridgewell/gen-mapping@0.3.13': dependencies: - "@jridgewell/sourcemap-codec": 1.5.5 - "@jridgewell/trace-mapping": 0.3.31 + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 - "@jridgewell/resolve-uri@3.1.2": {} + '@jridgewell/resolve-uri@3.1.2': {} - "@jridgewell/sourcemap-codec@1.5.5": {} + '@jridgewell/sourcemap-codec@1.5.5': {} - "@jridgewell/trace-mapping@0.3.31": + '@jridgewell/trace-mapping@0.3.31': dependencies: - "@jridgewell/resolve-uri": 3.1.2 - "@jridgewell/sourcemap-codec": 1.5.5 + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 - "@napi-rs/lzma-linux-x64-gnu@1.5.1": + '@napi-rs/lzma-linux-x64-gnu@1.5.1': optional: true - "@octokit/auth-token@6.0.0": {} + '@octokit/auth-token@6.0.0': {} - "@octokit/core@7.0.7": + '@octokit/core@7.0.7': dependencies: - "@octokit/auth-token": 6.0.0 - "@octokit/graphql": 9.0.4 - "@octokit/request": 10.0.13 - "@octokit/request-error": 7.1.1 - "@octokit/types": 17.0.0 + '@octokit/auth-token': 6.0.0 + '@octokit/graphql': 9.0.4 + '@octokit/request': 10.0.13 + '@octokit/request-error': 7.1.1 + '@octokit/types': 17.0.0 before-after-hook: 4.0.0 universal-user-agent: 7.0.3 - "@octokit/endpoint@11.0.4": + '@octokit/endpoint@11.0.4': dependencies: - "@octokit/types": 17.0.0 + '@octokit/types': 17.0.0 universal-user-agent: 7.0.3 - "@octokit/graphql@9.0.4": + '@octokit/graphql@9.0.4': dependencies: - "@octokit/request": 10.0.13 - "@octokit/types": 17.0.0 + '@octokit/request': 10.0.13 + '@octokit/types': 17.0.0 universal-user-agent: 7.0.3 - "@octokit/openapi-types@27.0.0": {} + '@octokit/openapi-types@27.0.0': {} - "@octokit/openapi-types@28.0.0": {} + '@octokit/openapi-types@28.0.0': {} - "@octokit/plugin-paginate-rest@14.0.0(@octokit/core@7.0.7)": + '@octokit/plugin-paginate-rest@14.0.0(@octokit/core@7.0.7)': dependencies: - "@octokit/core": 7.0.7 - "@octokit/types": 16.0.0 + '@octokit/core': 7.0.7 + '@octokit/types': 16.0.0 - "@octokit/plugin-retry@8.1.1(@octokit/core@7.0.7)": + '@octokit/plugin-retry@8.1.1(@octokit/core@7.0.7)': dependencies: - "@octokit/core": 7.0.7 - "@octokit/request-error": 7.1.1 - "@octokit/types": 17.0.0 + '@octokit/core': 7.0.7 + '@octokit/request-error': 7.1.1 + '@octokit/types': 17.0.0 bottleneck: 2.19.5 - "@octokit/plugin-throttling@11.0.5(@octokit/core@7.0.7)": + '@octokit/plugin-throttling@11.0.5(@octokit/core@7.0.7)': dependencies: - "@octokit/core": 7.0.7 - "@octokit/types": 17.0.0 + '@octokit/core': 7.0.7 + '@octokit/types': 17.0.0 bottleneck: 2.19.5 - "@octokit/request-error@7.1.1": + '@octokit/request-error@7.1.1': dependencies: - "@octokit/types": 17.0.0 + '@octokit/types': 17.0.0 - "@octokit/request@10.0.13": + '@octokit/request@10.0.13': dependencies: - "@octokit/endpoint": 11.0.4 - "@octokit/request-error": 7.1.1 - "@octokit/types": 17.0.0 + '@octokit/endpoint': 11.0.4 + '@octokit/request-error': 7.1.1 + '@octokit/types': 17.0.0 content-type: 2.0.0 json-with-bigint: 3.5.10 universal-user-agent: 7.0.3 - "@octokit/types@16.0.0": + '@octokit/types@16.0.0': dependencies: - "@octokit/openapi-types": 27.0.0 + '@octokit/openapi-types': 27.0.0 - "@octokit/types@17.0.0": + '@octokit/types@17.0.0': dependencies: - "@octokit/openapi-types": 28.0.0 + '@octokit/openapi-types': 28.0.0 - "@opentelemetry/api-logs@0.220.0": + '@opentelemetry/api-logs@0.220.0': dependencies: - "@opentelemetry/api": 1.9.1 + '@opentelemetry/api': 1.9.1 - "@opentelemetry/api@1.9.1": {} + '@opentelemetry/api@1.9.1': {} - "@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1)": + '@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1)': dependencies: - "@opentelemetry/api": 1.9.1 - "@opentelemetry/semantic-conventions": 1.43.0 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/semantic-conventions': 1.43.0 - "@opentelemetry/instrumentation@0.220.0(@opentelemetry/api@1.9.1)": + '@opentelemetry/instrumentation@0.220.0(@opentelemetry/api@1.9.1)': dependencies: - "@opentelemetry/api": 1.9.1 - "@opentelemetry/api-logs": 0.220.0 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/api-logs': 0.220.0 import-in-the-middle: 3.3.3 require-in-the-middle: 8.0.1 transitivePeerDependencies: - supports-color - "@opentelemetry/resources@2.10.0(@opentelemetry/api@1.9.1)": + '@opentelemetry/resources@2.10.0(@opentelemetry/api@1.9.1)': dependencies: - "@opentelemetry/api": 1.9.1 - "@opentelemetry/core": 2.10.0(@opentelemetry/api@1.9.1) - "@opentelemetry/semantic-conventions": 1.43.0 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.43.0 - "@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1)": + '@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1)': dependencies: - "@opentelemetry/api": 1.9.1 - "@opentelemetry/core": 2.10.0(@opentelemetry/api@1.9.1) - "@opentelemetry/resources": 2.10.0(@opentelemetry/api@1.9.1) - "@opentelemetry/sdk-trace": 2.10.0(@opentelemetry/api@1.9.1) - "@opentelemetry/semantic-conventions": 1.43.0 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.43.0 - "@opentelemetry/sdk-trace@2.10.0(@opentelemetry/api@1.9.1)": + '@opentelemetry/sdk-trace@2.10.0(@opentelemetry/api@1.9.1)': dependencies: - "@opentelemetry/api": 1.9.1 - "@opentelemetry/core": 2.10.0(@opentelemetry/api@1.9.1) - "@opentelemetry/resources": 2.10.0(@opentelemetry/api@1.9.1) - "@opentelemetry/semantic-conventions": 1.43.0 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.43.0 - "@opentelemetry/semantic-conventions@1.43.0": {} + '@opentelemetry/semantic-conventions@1.43.0': {} - "@oxlint/binding-android-arm-eabi@1.77.0": + '@oxlint/binding-android-arm-eabi@1.77.0': optional: true - "@oxlint/binding-android-arm64@1.77.0": + '@oxlint/binding-android-arm64@1.77.0': optional: true - "@oxlint/binding-darwin-arm64@1.77.0": + '@oxlint/binding-darwin-arm64@1.77.0': optional: true - "@oxlint/binding-darwin-x64@1.77.0": + '@oxlint/binding-darwin-x64@1.77.0': optional: true - "@oxlint/binding-freebsd-x64@1.77.0": + '@oxlint/binding-freebsd-x64@1.77.0': optional: true - "@oxlint/binding-linux-arm-gnueabihf@1.77.0": + '@oxlint/binding-linux-arm-gnueabihf@1.77.0': optional: true - "@oxlint/binding-linux-arm-musleabihf@1.77.0": + '@oxlint/binding-linux-arm-musleabihf@1.77.0': optional: true - "@oxlint/binding-linux-arm64-gnu@1.77.0": + '@oxlint/binding-linux-arm64-gnu@1.77.0': optional: true - "@oxlint/binding-linux-arm64-musl@1.77.0": + '@oxlint/binding-linux-arm64-musl@1.77.0': optional: true - "@oxlint/binding-linux-ppc64-gnu@1.77.0": + '@oxlint/binding-linux-ppc64-gnu@1.77.0': optional: true - "@oxlint/binding-linux-riscv64-gnu@1.77.0": + '@oxlint/binding-linux-riscv64-gnu@1.77.0': optional: true - "@oxlint/binding-linux-riscv64-musl@1.77.0": + '@oxlint/binding-linux-riscv64-musl@1.77.0': optional: true - "@oxlint/binding-linux-s390x-gnu@1.77.0": + '@oxlint/binding-linux-s390x-gnu@1.77.0': optional: true - "@oxlint/binding-linux-x64-gnu@1.77.0": + '@oxlint/binding-linux-x64-gnu@1.77.0': optional: true - "@oxlint/binding-linux-x64-musl@1.77.0": + '@oxlint/binding-linux-x64-musl@1.77.0': optional: true - "@oxlint/binding-openharmony-arm64@1.77.0": + '@oxlint/binding-openharmony-arm64@1.77.0': optional: true - "@oxlint/binding-win32-arm64-msvc@1.77.0": + '@oxlint/binding-win32-arm64-msvc@1.77.0': optional: true - "@oxlint/binding-win32-ia32-msvc@1.77.0": + '@oxlint/binding-win32-ia32-msvc@1.77.0': optional: true - "@oxlint/binding-win32-x64-msvc@1.77.0": + '@oxlint/binding-win32-x64-msvc@1.77.0': optional: true - "@pkgjs/parseargs@0.11.0": + '@pkgjs/parseargs@0.11.0': optional: true - "@pnpm/config.env-replace@1.1.0": {} + '@pnpm/config.env-replace@1.1.0': {} - "@pnpm/network.ca-file@1.0.2": + '@pnpm/network.ca-file@1.0.2': dependencies: graceful-fs: 4.2.10 - "@pnpm/npm-conf@3.0.3": + '@pnpm/npm-conf@3.0.3': dependencies: - "@pnpm/config.env-replace": 1.1.0 - "@pnpm/network.ca-file": 1.0.2 + '@pnpm/config.env-replace': 1.1.0 + '@pnpm/network.ca-file': 1.0.2 config-chain: 1.1.13 - "@rollup/rollup-android-arm-eabi@4.62.4": + '@rollup/rollup-android-arm-eabi@4.62.4': optional: true - "@rollup/rollup-android-arm64@4.62.4": + '@rollup/rollup-android-arm64@4.62.4': optional: true - "@rollup/rollup-darwin-arm64@4.62.4": + '@rollup/rollup-darwin-arm64@4.62.4': optional: true - "@rollup/rollup-darwin-x64@4.62.4": + '@rollup/rollup-darwin-x64@4.62.4': optional: true - "@rollup/rollup-freebsd-arm64@4.62.4": + '@rollup/rollup-freebsd-arm64@4.62.4': optional: true - "@rollup/rollup-freebsd-x64@4.62.4": + '@rollup/rollup-freebsd-x64@4.62.4': optional: true - "@rollup/rollup-linux-arm-gnueabihf@4.62.4": + '@rollup/rollup-linux-arm-gnueabihf@4.62.4': optional: true - "@rollup/rollup-linux-arm-musleabihf@4.62.4": + '@rollup/rollup-linux-arm-musleabihf@4.62.4': optional: true - "@rollup/rollup-linux-arm64-gnu@4.62.4": + '@rollup/rollup-linux-arm64-gnu@4.62.4': optional: true - "@rollup/rollup-linux-arm64-musl@4.62.4": + '@rollup/rollup-linux-arm64-musl@4.62.4': optional: true - "@rollup/rollup-linux-loong64-gnu@4.62.4": + '@rollup/rollup-linux-loong64-gnu@4.62.4': optional: true - "@rollup/rollup-linux-loong64-musl@4.62.4": + '@rollup/rollup-linux-loong64-musl@4.62.4': optional: true - "@rollup/rollup-linux-ppc64-gnu@4.62.4": + '@rollup/rollup-linux-ppc64-gnu@4.62.4': optional: true - "@rollup/rollup-linux-ppc64-musl@4.62.4": + '@rollup/rollup-linux-ppc64-musl@4.62.4': optional: true - "@rollup/rollup-linux-riscv64-gnu@4.62.4": + '@rollup/rollup-linux-riscv64-gnu@4.62.4': optional: true - "@rollup/rollup-linux-riscv64-musl@4.62.4": + '@rollup/rollup-linux-riscv64-musl@4.62.4': optional: true - "@rollup/rollup-linux-s390x-gnu@4.62.4": + '@rollup/rollup-linux-s390x-gnu@4.62.4': optional: true - "@rollup/rollup-linux-x64-gnu@4.62.4": + '@rollup/rollup-linux-x64-gnu@4.62.4': optional: true - "@rollup/rollup-linux-x64-musl@4.62.4": + '@rollup/rollup-linux-x64-musl@4.62.4': optional: true - "@rollup/rollup-openbsd-x64@4.62.4": + '@rollup/rollup-openbsd-x64@4.62.4': optional: true - "@rollup/rollup-openharmony-arm64@4.62.4": + '@rollup/rollup-openharmony-arm64@4.62.4': optional: true - "@rollup/rollup-win32-arm64-msvc@4.62.4": + '@rollup/rollup-win32-arm64-msvc@4.62.4': optional: true - "@rollup/rollup-win32-ia32-msvc@4.62.4": + '@rollup/rollup-win32-ia32-msvc@4.62.4': optional: true - "@rollup/rollup-win32-x64-gnu@4.62.4": + '@rollup/rollup-win32-x64-gnu@4.62.4': optional: true - "@rollup/rollup-win32-x64-msvc@4.62.4": + '@rollup/rollup-win32-x64-msvc@4.62.4': optional: true - "@sec-ant/readable-stream@0.4.1": {} + '@sec-ant/readable-stream@0.4.1': {} - "@semantic-release/changelog@7.0.0(semantic-release@25.0.8(typescript@6.0.3))": + '@semantic-release/changelog@7.0.0(semantic-release@25.0.8(typescript@6.0.3))': dependencies: - "@semantic-release/error": 4.0.0 + '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 lodash-es: 4.18.1 semantic-release: 25.0.8(typescript@6.0.3) - "@semantic-release/commit-analyzer@13.0.1(semantic-release@25.0.8(typescript@6.0.3))": + '@semantic-release/commit-analyzer@13.0.1(semantic-release@25.0.8(typescript@6.0.3))': dependencies: conventional-changelog-angular: 8.3.1 conventional-changelog-writer: 8.4.0 @@ -4581,11 +4581,11 @@ snapshots: transitivePeerDependencies: - supports-color - "@semantic-release/error@4.0.0": {} + '@semantic-release/error@4.0.0': {} - "@semantic-release/git@11.0.1(semantic-release@25.0.8(typescript@6.0.3))": + '@semantic-release/git@11.0.1(semantic-release@25.0.8(typescript@6.0.3))': dependencies: - "@semantic-release/error": 4.0.0 + '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 debug: 4.4.3 dir-glob: 3.0.1 @@ -4597,13 +4597,13 @@ snapshots: transitivePeerDependencies: - supports-color - "@semantic-release/github@12.0.9(semantic-release@25.0.8(typescript@6.0.3))": + '@semantic-release/github@12.0.9(semantic-release@25.0.8(typescript@6.0.3))': dependencies: - "@octokit/core": 7.0.7 - "@octokit/plugin-paginate-rest": 14.0.0(@octokit/core@7.0.7) - "@octokit/plugin-retry": 8.1.1(@octokit/core@7.0.7) - "@octokit/plugin-throttling": 11.0.5(@octokit/core@7.0.7) - "@semantic-release/error": 4.0.0 + '@octokit/core': 7.0.7 + '@octokit/plugin-paginate-rest': 14.0.0(@octokit/core@7.0.7) + '@octokit/plugin-retry': 8.1.1(@octokit/core@7.0.7) + '@octokit/plugin-throttling': 11.0.5(@octokit/core@7.0.7) + '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 debug: 4.4.3 dir-glob: 3.0.1 @@ -4621,10 +4621,10 @@ snapshots: - kerberos - supports-color - "@semantic-release/npm@13.1.5(semantic-release@25.0.8(typescript@6.0.3))": + '@semantic-release/npm@13.1.5(semantic-release@25.0.8(typescript@6.0.3))': dependencies: - "@actions/core": 3.0.1 - "@semantic-release/error": 4.0.0 + '@actions/core': 3.0.1 + '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 env-ci: 11.2.0 execa: 9.6.1 @@ -4640,7 +4640,7 @@ snapshots: semver: 7.8.5 tempy: 3.2.0 - "@semantic-release/release-notes-generator@14.1.1(semantic-release@25.0.8(typescript@6.0.3))": + '@semantic-release/release-notes-generator@14.1.1(semantic-release@25.0.8(typescript@6.0.3))': dependencies: conventional-changelog-angular: 8.3.1 conventional-changelog-writer: 8.4.0 @@ -4654,83 +4654,83 @@ snapshots: transitivePeerDependencies: - supports-color - "@sentry/conventions@0.16.0": {} + '@sentry/conventions@0.16.0': {} - "@sentry/core@10.69.0": + '@sentry/core@10.69.0': dependencies: - "@sentry/conventions": 0.16.0 + '@sentry/conventions': 0.16.0 - "@sentry/node-core@10.69.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.220.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1))": + '@sentry/node-core@10.69.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.220.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1))': dependencies: - "@sentry/conventions": 0.16.0 - "@sentry/core": 10.69.0 - "@sentry/opentelemetry": 10.69.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1)) + '@sentry/conventions': 0.16.0 + '@sentry/core': 10.69.0 + '@sentry/opentelemetry': 10.69.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1)) import-in-the-middle: 3.3.3 optionalDependencies: - "@opentelemetry/api": 1.9.1 - "@opentelemetry/core": 2.10.0(@opentelemetry/api@1.9.1) - "@opentelemetry/instrumentation": 0.220.0(@opentelemetry/api@1.9.1) - "@opentelemetry/sdk-trace-base": 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.220.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.10.0(@opentelemetry/api@1.9.1) - "@sentry/node@10.69.0(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))": + '@sentry/node@10.69.0(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))': dependencies: - "@opentelemetry/api": 1.9.1 - "@opentelemetry/instrumentation": 0.220.0(@opentelemetry/api@1.9.1) - "@opentelemetry/sdk-trace-base": 2.10.0(@opentelemetry/api@1.9.1) - "@sentry/conventions": 0.16.0 - "@sentry/core": 10.69.0 - "@sentry/node-core": 10.69.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.220.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1)) - "@sentry/opentelemetry": 10.69.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1)) - "@sentry/server-utils": 10.69.0 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/instrumentation': 0.220.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.10.0(@opentelemetry/api@1.9.1) + '@sentry/conventions': 0.16.0 + '@sentry/core': 10.69.0 + '@sentry/node-core': 10.69.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.220.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1)) + '@sentry/opentelemetry': 10.69.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1)) + '@sentry/server-utils': 10.69.0 import-in-the-middle: 3.3.3 transitivePeerDependencies: - - "@opentelemetry/core" - - "@opentelemetry/exporter-trace-otlp-http" + - '@opentelemetry/core' + - '@opentelemetry/exporter-trace-otlp-http' - supports-color - "@sentry/opentelemetry@10.69.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1))": + '@sentry/opentelemetry@10.69.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1))': dependencies: - "@opentelemetry/api": 1.9.1 - "@opentelemetry/core": 2.10.0(@opentelemetry/api@1.9.1) - "@opentelemetry/sdk-trace-base": 2.10.0(@opentelemetry/api@1.9.1) - "@sentry/conventions": 0.16.0 - "@sentry/core": 10.69.0 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.10.0(@opentelemetry/api@1.9.1) + '@sentry/conventions': 0.16.0 + '@sentry/core': 10.69.0 - "@sentry/server-utils@10.69.0": + '@sentry/server-utils@10.69.0': dependencies: - "@apm-js-collab/code-transformer-bundler-plugins": 0.7.4 - "@apm-js-collab/tracing-hooks": 0.13.0 - "@sentry/conventions": 0.16.0 - "@sentry/core": 10.69.0 + '@apm-js-collab/code-transformer-bundler-plugins': 0.7.4 + '@apm-js-collab/tracing-hooks': 0.13.0 + '@sentry/conventions': 0.16.0 + '@sentry/core': 10.69.0 meriyah: 6.1.4 transitivePeerDependencies: - supports-color - "@simple-libs/stream-utils@1.2.0": {} + '@simple-libs/stream-utils@1.2.0': {} - "@sindresorhus/is@4.6.0": {} + '@sindresorhus/is@4.6.0': {} - "@sindresorhus/merge-streams@4.0.0": {} + '@sindresorhus/merge-streams@4.0.0': {} - "@types/chai@5.2.3": + '@types/chai@5.2.3': dependencies: - "@types/deep-eql": 4.0.2 + '@types/deep-eql': 4.0.2 assertion-error: 2.0.1 - "@types/deep-eql@4.0.2": {} + '@types/deep-eql@4.0.2': {} - "@types/estree@1.0.9": {} + '@types/estree@1.0.9': {} - "@types/node@24.13.3": + '@types/node@24.13.3': dependencies: undici-types: 7.18.2 - "@types/normalize-package-data@2.4.4": {} + '@types/normalize-package-data@2.4.4': {} - "@vitest/coverage-v8@3.2.7(vitest@3.2.7(@types/node@24.13.3))": + '@vitest/coverage-v8@3.2.7(vitest@3.2.7(@types/node@24.13.3))': dependencies: - "@ampproject/remapping": 2.3.0 - "@bcoe/v8-coverage": 1.0.2 + '@ampproject/remapping': 2.3.0 + '@bcoe/v8-coverage': 1.0.2 ast-v8-to-istanbul: 0.3.12 debug: 4.4.3 istanbul-lib-coverage: 3.2.2 @@ -4746,45 +4746,45 @@ snapshots: transitivePeerDependencies: - supports-color - "@vitest/expect@3.2.7": + '@vitest/expect@3.2.7': dependencies: - "@types/chai": 5.2.3 - "@vitest/spy": 3.2.7 - "@vitest/utils": 3.2.7 + '@types/chai': 5.2.3 + '@vitest/spy': 3.2.7 + '@vitest/utils': 3.2.7 chai: 5.3.3 tinyrainbow: 2.0.0 - "@vitest/mocker@3.2.7(vite@7.3.6(@types/node@24.13.3))": + '@vitest/mocker@3.2.7(vite@7.3.6(@types/node@24.13.3))': dependencies: - "@vitest/spy": 3.2.7 + '@vitest/spy': 3.2.7 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: vite: 7.3.6(@types/node@24.13.3) - "@vitest/pretty-format@3.2.7": + '@vitest/pretty-format@3.2.7': dependencies: tinyrainbow: 2.0.0 - "@vitest/runner@3.2.7": + '@vitest/runner@3.2.7': dependencies: - "@vitest/utils": 3.2.7 + '@vitest/utils': 3.2.7 pathe: 2.0.3 strip-literal: 3.1.0 - "@vitest/snapshot@3.2.7": + '@vitest/snapshot@3.2.7': dependencies: - "@vitest/pretty-format": 3.2.7 + '@vitest/pretty-format': 3.2.7 magic-string: 0.30.21 pathe: 2.0.3 - "@vitest/spy@3.2.7": + '@vitest/spy@3.2.7': dependencies: tinyspy: 4.0.4 - "@vitest/utils@3.2.7": + '@vitest/utils@3.2.7': dependencies: - "@vitest/pretty-format": 3.2.7 + '@vitest/pretty-format': 3.2.7 loupe: 3.2.1 tinyrainbow: 2.0.0 @@ -4827,7 +4827,7 @@ snapshots: ast-v8-to-istanbul@0.3.12: dependencies: - "@jridgewell/trace-mapping": 0.3.31 + '@jridgewell/trace-mapping': 0.3.31 estree-walker: 3.0.3 js-tokens: 10.0.0 @@ -4910,7 +4910,7 @@ snapshots: dependencies: string-width: 4.2.3 optionalDependencies: - "@colors/colors": 1.5.0 + '@colors/colors': 1.5.0 cliui@7.0.4: dependencies: @@ -4960,7 +4960,7 @@ snapshots: conventional-changelog-writer@8.4.0: dependencies: - "@simple-libs/stream-utils": 1.2.0 + '@simple-libs/stream-utils': 1.2.0 conventional-commits-filter: 5.0.0 handlebars: 4.7.9 meow: 13.2.0 @@ -4970,7 +4970,7 @@ snapshots: conventional-commits-parser@6.4.0: dependencies: - "@simple-libs/stream-utils": 1.2.0 + '@simple-libs/stream-utils': 1.2.0 meow: 13.2.0 convert-hrtime@5.0.0: {} @@ -5045,61 +5045,61 @@ snapshots: esbuild@0.27.7: optionalDependencies: - "@esbuild/aix-ppc64": 0.27.7 - "@esbuild/android-arm": 0.27.7 - "@esbuild/android-arm64": 0.27.7 - "@esbuild/android-x64": 0.27.7 - "@esbuild/darwin-arm64": 0.27.7 - "@esbuild/darwin-x64": 0.27.7 - "@esbuild/freebsd-arm64": 0.27.7 - "@esbuild/freebsd-x64": 0.27.7 - "@esbuild/linux-arm": 0.27.7 - "@esbuild/linux-arm64": 0.27.7 - "@esbuild/linux-ia32": 0.27.7 - "@esbuild/linux-loong64": 0.27.7 - "@esbuild/linux-mips64el": 0.27.7 - "@esbuild/linux-ppc64": 0.27.7 - "@esbuild/linux-riscv64": 0.27.7 - "@esbuild/linux-s390x": 0.27.7 - "@esbuild/linux-x64": 0.27.7 - "@esbuild/netbsd-arm64": 0.27.7 - "@esbuild/netbsd-x64": 0.27.7 - "@esbuild/openbsd-arm64": 0.27.7 - "@esbuild/openbsd-x64": 0.27.7 - "@esbuild/openharmony-arm64": 0.27.7 - "@esbuild/sunos-x64": 0.27.7 - "@esbuild/win32-arm64": 0.27.7 - "@esbuild/win32-ia32": 0.27.7 - "@esbuild/win32-x64": 0.27.7 + '@esbuild/aix-ppc64': 0.27.7 + '@esbuild/android-arm': 0.27.7 + '@esbuild/android-arm64': 0.27.7 + '@esbuild/android-x64': 0.27.7 + '@esbuild/darwin-arm64': 0.27.7 + '@esbuild/darwin-x64': 0.27.7 + '@esbuild/freebsd-arm64': 0.27.7 + '@esbuild/freebsd-x64': 0.27.7 + '@esbuild/linux-arm': 0.27.7 + '@esbuild/linux-arm64': 0.27.7 + '@esbuild/linux-ia32': 0.27.7 + '@esbuild/linux-loong64': 0.27.7 + '@esbuild/linux-mips64el': 0.27.7 + '@esbuild/linux-ppc64': 0.27.7 + '@esbuild/linux-riscv64': 0.27.7 + '@esbuild/linux-s390x': 0.27.7 + '@esbuild/linux-x64': 0.27.7 + '@esbuild/netbsd-arm64': 0.27.7 + '@esbuild/netbsd-x64': 0.27.7 + '@esbuild/openbsd-arm64': 0.27.7 + '@esbuild/openbsd-x64': 0.27.7 + '@esbuild/openharmony-arm64': 0.27.7 + '@esbuild/sunos-x64': 0.27.7 + '@esbuild/win32-arm64': 0.27.7 + '@esbuild/win32-ia32': 0.27.7 + '@esbuild/win32-x64': 0.27.7 esbuild@0.28.1: 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 + '@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 escalade@3.2.0: {} @@ -5115,11 +5115,11 @@ snapshots: estree-walker@3.0.3: dependencies: - "@types/estree": 1.0.9 + '@types/estree': 1.0.9 execa@10.0.1: dependencies: - "@sindresorhus/merge-streams": 4.0.0 + '@sindresorhus/merge-streams': 4.0.0 figures: 6.1.0 get-stream: 9.0.1 human-signals: 8.0.1 @@ -5146,7 +5146,7 @@ snapshots: execa@9.6.1: dependencies: - "@sindresorhus/merge-streams": 4.0.0 + '@sindresorhus/merge-streams': 4.0.0 cross-spawn: 7.0.6 figures: 6.1.0 get-stream: 9.0.1 @@ -5220,7 +5220,7 @@ snapshots: get-stream@9.0.1: dependencies: - "@sec-ant/readable-stream": 0.4.1 + '@sec-ant/readable-stream': 0.4.1 is-stream: 4.0.1 git-log-parser@1.2.1: @@ -5360,7 +5360,7 @@ snapshots: istanbul-lib-source-maps@5.0.6: dependencies: - "@jridgewell/trace-mapping": 0.3.31 + '@jridgewell/trace-mapping': 0.3.31 debug: 4.4.3 istanbul-lib-coverage: 3.2.2 transitivePeerDependencies: @@ -5373,9 +5373,9 @@ snapshots: jackspeak@3.4.3: dependencies: - "@isaacs/cliui": 8.0.2 + '@isaacs/cliui': 8.0.2 optionalDependencies: - "@pkgjs/parseargs": 0.11.0 + '@pkgjs/parseargs': 0.11.0 java-properties@1.0.2: {} @@ -5441,12 +5441,12 @@ snapshots: magic-string@0.30.21: dependencies: - "@jridgewell/sourcemap-codec": 1.5.5 + '@jridgewell/sourcemap-codec': 1.5.5 magicast@0.3.5: dependencies: - "@babel/parser": 7.29.8 - "@babel/types": 7.29.8 + '@babel/parser': 7.29.8 + '@babel/types': 7.29.8 source-map-js: 1.2.1 make-asynchronous@1.1.0: @@ -5524,7 +5524,7 @@ snapshots: node-emoji@2.2.0: dependencies: - "@sindresorhus/is": 4.6.0 + '@sindresorhus/is': 4.6.0 char-regex: 1.0.2 emojilib: 2.4.0 skin-tone: 2.0.0 @@ -5562,25 +5562,25 @@ snapshots: oxlint@1.77.0: optionalDependencies: - "@oxlint/binding-android-arm-eabi": 1.77.0 - "@oxlint/binding-android-arm64": 1.77.0 - "@oxlint/binding-darwin-arm64": 1.77.0 - "@oxlint/binding-darwin-x64": 1.77.0 - "@oxlint/binding-freebsd-x64": 1.77.0 - "@oxlint/binding-linux-arm-gnueabihf": 1.77.0 - "@oxlint/binding-linux-arm-musleabihf": 1.77.0 - "@oxlint/binding-linux-arm64-gnu": 1.77.0 - "@oxlint/binding-linux-arm64-musl": 1.77.0 - "@oxlint/binding-linux-ppc64-gnu": 1.77.0 - "@oxlint/binding-linux-riscv64-gnu": 1.77.0 - "@oxlint/binding-linux-riscv64-musl": 1.77.0 - "@oxlint/binding-linux-s390x-gnu": 1.77.0 - "@oxlint/binding-linux-x64-gnu": 1.77.0 - "@oxlint/binding-linux-x64-musl": 1.77.0 - "@oxlint/binding-openharmony-arm64": 1.77.0 - "@oxlint/binding-win32-arm64-msvc": 1.77.0 - "@oxlint/binding-win32-ia32-msvc": 1.77.0 - "@oxlint/binding-win32-x64-msvc": 1.77.0 + '@oxlint/binding-android-arm-eabi': 1.77.0 + '@oxlint/binding-android-arm64': 1.77.0 + '@oxlint/binding-darwin-arm64': 1.77.0 + '@oxlint/binding-darwin-x64': 1.77.0 + '@oxlint/binding-freebsd-x64': 1.77.0 + '@oxlint/binding-linux-arm-gnueabihf': 1.77.0 + '@oxlint/binding-linux-arm-musleabihf': 1.77.0 + '@oxlint/binding-linux-arm64-gnu': 1.77.0 + '@oxlint/binding-linux-arm64-musl': 1.77.0 + '@oxlint/binding-linux-ppc64-gnu': 1.77.0 + '@oxlint/binding-linux-riscv64-gnu': 1.77.0 + '@oxlint/binding-linux-riscv64-musl': 1.77.0 + '@oxlint/binding-linux-s390x-gnu': 1.77.0 + '@oxlint/binding-linux-x64-gnu': 1.77.0 + '@oxlint/binding-linux-x64-musl': 1.77.0 + '@oxlint/binding-openharmony-arm64': 1.77.0 + '@oxlint/binding-win32-arm64-msvc': 1.77.0 + '@oxlint/binding-win32-ia32-msvc': 1.77.0 + '@oxlint/binding-win32-x64-msvc': 1.77.0 p-each-series@3.0.0: {} @@ -5621,14 +5621,14 @@ snapshots: parse-json@5.2.0: dependencies: - "@babel/code-frame": 7.29.7 + '@babel/code-frame': 7.29.7 error-ex: 1.3.4 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 parse-json@8.3.0: dependencies: - "@babel/code-frame": 7.29.7 + '@babel/code-frame': 7.29.7 index-to-position: 1.2.0 type-fest: 4.41.0 @@ -5725,7 +5725,7 @@ snapshots: read-pkg@10.1.0: dependencies: - "@types/normalize-package-data": 2.4.4 + '@types/normalize-package-data': 2.4.4 normalize-package-data: 8.0.0 parse-json: 8.3.0 type-fest: 5.8.0 @@ -5733,7 +5733,7 @@ snapshots: read-pkg@9.0.1: dependencies: - "@types/normalize-package-data": 2.4.4 + '@types/normalize-package-data': 2.4.4 normalize-package-data: 6.0.2 parse-json: 8.3.0 type-fest: 4.41.0 @@ -5753,7 +5753,7 @@ snapshots: registry-auth-token@5.1.1: dependencies: - "@pnpm/npm-conf": 3.0.3 + '@pnpm/npm-conf': 3.0.3 require-directory@2.1.1: {} @@ -5770,45 +5770,45 @@ snapshots: rollup@4.62.4: dependencies: - "@types/estree": 1.0.9 + '@types/estree': 1.0.9 optionalDependencies: - "@napi-rs/lzma-linux-x64-gnu": 1.5.1 - "@rollup/rollup-android-arm-eabi": 4.62.4 - "@rollup/rollup-android-arm64": 4.62.4 - "@rollup/rollup-darwin-arm64": 4.62.4 - "@rollup/rollup-darwin-x64": 4.62.4 - "@rollup/rollup-freebsd-arm64": 4.62.4 - "@rollup/rollup-freebsd-x64": 4.62.4 - "@rollup/rollup-linux-arm-gnueabihf": 4.62.4 - "@rollup/rollup-linux-arm-musleabihf": 4.62.4 - "@rollup/rollup-linux-arm64-gnu": 4.62.4 - "@rollup/rollup-linux-arm64-musl": 4.62.4 - "@rollup/rollup-linux-loong64-gnu": 4.62.4 - "@rollup/rollup-linux-loong64-musl": 4.62.4 - "@rollup/rollup-linux-ppc64-gnu": 4.62.4 - "@rollup/rollup-linux-ppc64-musl": 4.62.4 - "@rollup/rollup-linux-riscv64-gnu": 4.62.4 - "@rollup/rollup-linux-riscv64-musl": 4.62.4 - "@rollup/rollup-linux-s390x-gnu": 4.62.4 - "@rollup/rollup-linux-x64-gnu": 4.62.4 - "@rollup/rollup-linux-x64-musl": 4.62.4 - "@rollup/rollup-openbsd-x64": 4.62.4 - "@rollup/rollup-openharmony-arm64": 4.62.4 - "@rollup/rollup-win32-arm64-msvc": 4.62.4 - "@rollup/rollup-win32-ia32-msvc": 4.62.4 - "@rollup/rollup-win32-x64-gnu": 4.62.4 - "@rollup/rollup-win32-x64-msvc": 4.62.4 + '@napi-rs/lzma-linux-x64-gnu': 1.5.1 + '@rollup/rollup-android-arm-eabi': 4.62.4 + '@rollup/rollup-android-arm64': 4.62.4 + '@rollup/rollup-darwin-arm64': 4.62.4 + '@rollup/rollup-darwin-x64': 4.62.4 + '@rollup/rollup-freebsd-arm64': 4.62.4 + '@rollup/rollup-freebsd-x64': 4.62.4 + '@rollup/rollup-linux-arm-gnueabihf': 4.62.4 + '@rollup/rollup-linux-arm-musleabihf': 4.62.4 + '@rollup/rollup-linux-arm64-gnu': 4.62.4 + '@rollup/rollup-linux-arm64-musl': 4.62.4 + '@rollup/rollup-linux-loong64-gnu': 4.62.4 + '@rollup/rollup-linux-loong64-musl': 4.62.4 + '@rollup/rollup-linux-ppc64-gnu': 4.62.4 + '@rollup/rollup-linux-ppc64-musl': 4.62.4 + '@rollup/rollup-linux-riscv64-gnu': 4.62.4 + '@rollup/rollup-linux-riscv64-musl': 4.62.4 + '@rollup/rollup-linux-s390x-gnu': 4.62.4 + '@rollup/rollup-linux-x64-gnu': 4.62.4 + '@rollup/rollup-linux-x64-musl': 4.62.4 + '@rollup/rollup-openbsd-x64': 4.62.4 + '@rollup/rollup-openharmony-arm64': 4.62.4 + '@rollup/rollup-win32-arm64-msvc': 4.62.4 + '@rollup/rollup-win32-ia32-msvc': 4.62.4 + '@rollup/rollup-win32-x64-gnu': 4.62.4 + '@rollup/rollup-win32-x64-msvc': 4.62.4 fsevents: 2.3.3 safe-buffer@5.1.2: {} semantic-release@25.0.8(typescript@6.0.3): dependencies: - "@semantic-release/commit-analyzer": 13.0.1(semantic-release@25.0.8(typescript@6.0.3)) - "@semantic-release/error": 4.0.0 - "@semantic-release/github": 12.0.9(semantic-release@25.0.8(typescript@6.0.3)) - "@semantic-release/npm": 13.1.5(semantic-release@25.0.8(typescript@6.0.3)) - "@semantic-release/release-notes-generator": 14.1.1(semantic-release@25.0.8(typescript@6.0.3)) + '@semantic-release/commit-analyzer': 13.0.1(semantic-release@25.0.8(typescript@6.0.3)) + '@semantic-release/error': 4.0.0 + '@semantic-release/github': 12.0.9(semantic-release@25.0.8(typescript@6.0.3)) + '@semantic-release/npm': 13.1.5(semantic-release@25.0.8(typescript@6.0.3)) + '@semantic-release/release-notes-generator': 14.1.1(semantic-release@25.0.8(typescript@6.0.3)) aggregate-error: 5.0.0 cosmiconfig: 9.0.2(typescript@6.0.3) debug: 4.4.3 @@ -5947,7 +5947,7 @@ snapshots: sucrase@3.35.1: dependencies: - "@jridgewell/gen-mapping": 0.3.13 + '@jridgewell/gen-mapping': 0.3.13 commander: 4.1.1 lines-and-columns: 1.2.4 mz: 2.7.0 @@ -5987,7 +5987,7 @@ snapshots: test-exclude@7.0.2: dependencies: - "@istanbuljs/schema": 0.1.6 + '@istanbuljs/schema': 0.1.6 glob: 10.5.0 minimatch: 10.2.6 @@ -6119,7 +6119,7 @@ snapshots: pathe: 2.0.3 vite: 7.3.6(@types/node@24.13.3) transitivePeerDependencies: - - "@types/node" + - '@types/node' - jiti - less - lightningcss @@ -6141,19 +6141,19 @@ snapshots: rollup: 4.62.4 tinyglobby: 0.2.17 optionalDependencies: - "@types/node": 24.13.3 + '@types/node': 24.13.3 fsevents: 2.3.3 vitest@3.2.7(@types/node@24.13.3): dependencies: - "@types/chai": 5.2.3 - "@vitest/expect": 3.2.7 - "@vitest/mocker": 3.2.7(vite@7.3.6(@types/node@24.13.3)) - "@vitest/pretty-format": 3.2.7 - "@vitest/runner": 3.2.7 - "@vitest/snapshot": 3.2.7 - "@vitest/spy": 3.2.7 - "@vitest/utils": 3.2.7 + '@types/chai': 5.2.3 + '@vitest/expect': 3.2.7 + '@vitest/mocker': 3.2.7(vite@7.3.6(@types/node@24.13.3)) + '@vitest/pretty-format': 3.2.7 + '@vitest/runner': 3.2.7 + '@vitest/snapshot': 3.2.7 + '@vitest/spy': 3.2.7 + '@vitest/utils': 3.2.7 chai: 5.3.3 debug: 4.4.3 expect-type: 1.4.0 @@ -6170,7 +6170,7 @@ snapshots: vite-node: 3.2.4(@types/node@24.13.3) why-is-node-running: 2.3.0 optionalDependencies: - "@types/node": 24.13.3 + '@types/node': 24.13.3 transitivePeerDependencies: - jiti - less diff --git a/release.config.cjs b/release.config.cjs index 2114e9c..671e952 100644 --- a/release.config.cjs +++ b/release.config.cjs @@ -3,7 +3,7 @@ const releaseToken = process.env.GITEA_RELEASE_TOKEN; const repositoryUrl = releaseUsername && releaseToken ? `https://${encodeURIComponent(releaseUsername)}:${encodeURIComponent(releaseToken)}@git.mifi.dev/mifi/logger.git` - : "https://git.mifi.dev/mifi/logger.git"; + : 'https://git.mifi.dev/mifi/logger.git'; /** * Default Angular preset rejects `feat!` / `fix!` headers entirely (no release). @@ -12,23 +12,23 @@ const repositoryUrl = const conventionalCommitParserOpts = { headerPattern: /^(\w*)(?:\((.*)\))?!?: (.*)$/, breakingHeaderPattern: /^(\w*)(?:\((.*)\))?!: (.*)$/, - noteKeywords: ["BREAKING CHANGE", "BREAKING-CHANGE"], + noteKeywords: ['BREAKING CHANGE', 'BREAKING-CHANGE'], }; module.exports = { - branches: ["main"], + branches: ['main'], repositoryUrl, - tagFormat: "v${version}", + tagFormat: 'v${version}', plugins: [ - ["@semantic-release/commit-analyzer", { parserOpts: conventionalCommitParserOpts }], - ["@semantic-release/release-notes-generator", { parserOpts: conventionalCommitParserOpts }], - ["@semantic-release/changelog", { changelogFile: "CHANGELOG.md" }], - "@semantic-release/npm", + ['@semantic-release/commit-analyzer', { parserOpts: conventionalCommitParserOpts }], + ['@semantic-release/release-notes-generator', { parserOpts: conventionalCommitParserOpts }], + ['@semantic-release/changelog', { changelogFile: 'CHANGELOG.md' }], + '@semantic-release/npm', [ - "@semantic-release/git", + '@semantic-release/git', { - assets: ["CHANGELOG.md", "package.json", "pnpm-lock.yaml"], - message: "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}", + assets: ['CHANGELOG.md', 'package.json', 'pnpm-lock.yaml'], + message: 'chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}', }, ], ], diff --git a/src/constants.ts b/src/constants.ts index 3e93ba7..2a5e6c0 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -14,12 +14,12 @@ * allows `warn` and `error`). */ export enum LogLevel { - TRACE = "trace", - DEBUG = "debug", - INFO = "info", - WARN = "warn", - ERROR = "error", - SILENT = "silent", + TRACE = 'trace', + DEBUG = 'debug', + INFO = 'info', + WARN = 'warn', + ERROR = 'error', + SILENT = 'silent', } /** @@ -27,7 +27,7 @@ export enum LogLevel { * explicitly or via runtime overrides. */ export enum LoggerEnvironment { - DEVELOPMENT = "development", - STAGING = "staging", - PRODUCTION = "production", + DEVELOPMENT = 'development', + STAGING = 'staging', + PRODUCTION = 'production', } diff --git a/src/index.ts b/src/index.ts index a6b12be..e1dc539 100644 --- a/src/index.ts +++ b/src/index.ts @@ -11,6 +11,16 @@ * logger.info("started"); * ``` */ -export * from "./logger"; -export * from "./sinks/console"; -export * from "./types"; +export * from './constants'; +export * from './logger'; +export * from './sinks/console'; +export type { + LogLevel, + LoggerEnvironment, + LoggerOptions, + Logger, + LogData, + LogCallOptions, + LogEvent, + LogSink, +} from './types'; diff --git a/src/logger.ts b/src/logger.ts index f6d66dc..23d6b1a 100644 --- a/src/logger.ts +++ b/src/logger.ts @@ -1,4 +1,4 @@ -import { createConsoleSink } from "./sinks/console"; +import { createConsoleSink } from './sinks/console'; import type { LogCallOptions, LogEvent, @@ -7,24 +7,24 @@ import type { LoggerOptions, LogLevel, LogSink, -} from "./types"; +} from './types'; /** Duck-type for sinks created by `createSentrySink` (avoids importing the sentry entry). */ type SentrySinkLike = LogSink & { - kind: "sentry"; + kind: 'sentry'; options: { logs?: boolean; logLevel?: LogLevel }; }; function isSentrySinkLike(sink: LogSink): sink is SentrySinkLike { - return "kind" in sink && (sink as { kind?: unknown }).kind === "sentry"; + return 'kind' in sink && (sink as { kind?: unknown }).kind === 'sentry'; } -const LEVELS: readonly Exclude[] = ["trace", "debug", "info", "warn", "error"]; -const LOG_CALL_OPTION_KEYS = new Set(["sentry", "suppressSentry"]); +const LEVELS: readonly Exclude[] = ['trace', 'debug', 'info', 'warn', 'error']; +const LOG_CALL_OPTION_KEYS = new Set(['sentry', 'suppressSentry']); /** Numeric rank for comparing levels; `silent` is above every emit level. */ const levelRank = (level: LogLevel): number => - level === "silent" ? Infinity : LEVELS.indexOf(level); + level === 'silent' ? Infinity : LEVELS.indexOf(level); /** * Default {@link LogLevel} for a {@link LoggerEnvironment} when no override is set. @@ -33,7 +33,7 @@ const levelRank = (level: LogLevel): number => * @returns `trace` (development), `warn` (staging), or `error` (production). */ const defaultLevel = (environment: LoggerEnvironment): LogLevel => - environment === "development" ? "trace" : environment === "staging" ? "warn" : "error"; + environment === 'development' ? 'trace' : environment === 'staging' ? 'warn' : 'error'; /** * Default Sentry Logs threshold when `createSentrySink(..., { logs: true })` is @@ -43,7 +43,7 @@ const defaultLevel = (environment: LoggerEnvironment): LogLevel => * @returns `info` (staging) or `warn` (production). Development never sends. */ export const defaultSentryLogLevel = (environment: LoggerEnvironment): LogLevel => - environment === "staging" ? "info" : "warn"; + environment === 'staging' ? 'info' : 'warn'; /** * Parses a runtime logging override string used by browser session storage and @@ -73,13 +73,13 @@ export function parseLoggingOverride( value: string | null | undefined, ): { level: LogLevel; namespaces: readonly string[] } | undefined { if (!value) return undefined; - const [rawLevel, rawNamespaces = ""] = value.trim().split(":", 2); - if (!(["trace", "debug", "info", "warn", "error", "silent"] as string[]).includes(rawLevel)) + const [rawLevel, rawNamespaces = ''] = value.trim().split(':', 2); + if (!(['trace', 'debug', 'info', 'warn', 'error', 'silent'] as string[]).includes(rawLevel)) return undefined; return { level: rawLevel as LogLevel, namespaces: rawNamespaces - .split(",") + .split(',') .map((item) => item.trim()) .filter(Boolean), }; @@ -91,7 +91,7 @@ export function parseLoggingOverride( * @param value - Candidate last argument from a log call. */ export function isLogCallOptions(value: unknown): value is LogCallOptions { - if (!value || typeof value !== "object" || Array.isArray(value) || value instanceof Error) + if (!value || typeof value !== 'object' || Array.isArray(value) || value instanceof Error) return false; const keys = Object.keys(value); return keys.length > 0 && keys.every((key) => LOG_CALL_OPTION_KEYS.has(key)); @@ -119,7 +119,7 @@ function splitLogCallArguments(arguments_: readonly unknown[]): { * @param provided - Optional storage; when omitted, uses `globalThis.sessionStorage`. * @returns A `getItem`-compatible storage, or `undefined` if unavailable. */ -function resolveStorage(provided?: Pick): Pick | undefined { +function resolveStorage(provided?: Pick): Pick | undefined { if (provided) return provided; try { return globalThis.sessionStorage; @@ -150,9 +150,9 @@ function resolveEnv( * @param provided - Explicit runtime; when omitted, inferred from `globalThis.window`. * @returns `"browser"` if `window` is defined, otherwise `"node"`. */ -function resolveRuntime(provided?: "browser" | "node"): "browser" | "node" { +function resolveRuntime(provided?: 'browser' | 'node'): 'browser' | 'node' { if (provided) return provided; - return typeof (globalThis as { window?: unknown }).window === "undefined" ? "node" : "browser"; + return typeof (globalThis as { window?: unknown }).window === 'undefined' ? 'node' : 'browser'; } /** @@ -184,7 +184,7 @@ function namespaceMatches(namespace: string | undefined, filters: readonly strin */ function evaluate(arguments_: readonly unknown[]): readonly unknown[] { return arguments_.map((argument, index) => - index > 0 && typeof argument === "function" ? (argument as () => unknown)() : argument, + index > 0 && typeof argument === 'function' ? (argument as () => unknown)() : argument, ); } @@ -192,8 +192,8 @@ function evaluate(arguments_: readonly unknown[]): readonly unknown[] { function isThenable(value: unknown): value is PromiseLike { return ( value !== null && - (typeof value === "object" || typeof value === "function") && - typeof (value as { then?: unknown }).then === "function" + (typeof value === 'object' || typeof value === 'function') && + typeof (value as { then?: unknown }).then === 'function' ); } @@ -205,7 +205,7 @@ async function settleArguments(arguments_: readonly unknown[]): Promise (isThenable(argument) ? argument : Promise.resolve(argument))), ); - return settled.map((result) => (result.status === "fulfilled" ? result.value : result.reason)); + return settled.map((result) => (result.status === 'fulfilled' ? result.value : result.reason)); } function hasThenable(arguments_: readonly unknown[]): boolean { @@ -219,7 +219,7 @@ function hasThenable(arguments_: readonly unknown[]): boolean { function resolveSentrySinkOptions( options: LoggerOptions, ): { logs: boolean; logLevel: LogLevel } | undefined { - if (options.environment === "development") return undefined; + if (options.environment === 'development') return undefined; const candidate = options.sentry ? options.sentry : options.sinks?.find(isSentrySinkLike); if (!candidate) return undefined; if (isSentrySinkLike(candidate)) { @@ -271,15 +271,15 @@ function resolveSentrySinkOptions( */ export function createLogger(options: LoggerOptions): Logger { const namespace = - typeof options.namespace === "string" + typeof options.namespace === 'string' ? options.namespace - : options.namespace?.filter(Boolean).join(":"); + : options.namespace?.filter(Boolean).join(':'); const env = resolveEnv(options.env); const runtimeOverride = - parseLoggingOverride(resolveStorage(options.sessionStorage)?.getItem("showLoggingFor")) ?? + parseLoggingOverride(resolveStorage(options.sessionStorage)?.getItem('showLoggingFor')) ?? parseLoggingOverride( env.MIFI_LOG_LEVEL - ? `${env.MIFI_LOG_LEVEL}${env.MIFI_LOG_NAMESPACES ? `:${env.MIFI_LOG_NAMESPACES}` : ""}` + ? `${env.MIFI_LOG_LEVEL}${env.MIFI_LOG_NAMESPACES ? `:${env.MIFI_LOG_NAMESPACES}` : ''}` : undefined, ); const threshold = options.level ?? runtimeOverride?.level ?? defaultLevel(options.environment); @@ -287,26 +287,26 @@ export function createLogger(options: LoggerOptions): Logger { const sentrySinkOptions = resolveSentrySinkOptions(options); const sentryActive = sentrySinkOptions !== undefined; const sinks: readonly LogSink[] = options.sinks ?? [ - ...(runtime === "node" || options.environment !== "production" || !options.sentry + ...(runtime === 'node' || options.environment !== 'production' || !options.sentry ? [createConsoleSink()] : []), - ...(options.sentry && options.environment !== "development" ? [options.sentry] : []), + ...(options.sentry && options.environment !== 'development' ? [options.sentry] : []), ]; - const enabled = (level: Exclude) => + const enabled = (level: Exclude) => levelRank(level) >= levelRank(threshold) && (!runtimeOverride?.namespaces.length || namespaceMatches(namespace, runtimeOverride.namespaces)); const deliver = (event: LogEvent) => { sinks.forEach((sink) => sink.emit(event)); }; - const emit = (level: Exclude, arguments_: readonly unknown[]) => { + const emit = (level: Exclude, arguments_: readonly unknown[]) => { const split = splitLogCallArguments(arguments_); const sendToConsole = enabled(level); const sendToSentryIssue = - sentryActive && level === "error" && !split.options.suppressSentry; + sentryActive && level === 'error' && !split.options.suppressSentry; const sendToSentryLogs = sentryActive && - level !== "error" && + level !== 'error' && (Boolean(split.options.sentry) || (Boolean(sentrySinkOptions?.logs) && levelRank(level) >= levelRank(sentrySinkOptions.logLevel))); @@ -333,14 +333,14 @@ export function createLogger(options: LoggerOptions): Logger { }); }; const consoleMethod = ( - method: keyof Console | "profile" | "profileEnd", - level: Exclude, + method: keyof Console | 'profile' | 'profileEnd', + level: Exclude, arguments_: readonly unknown[], ) => { if (!enabled(level)) return; const console_ = globalThis.console as Console & Record; const fn = console_[method]; - if (typeof fn !== "function") return; + if (typeof fn !== 'function') return; (fn as (...items: unknown[]) => void).apply( console_, Array.from(prefix(namespace, evaluate(arguments_))), @@ -350,30 +350,30 @@ export function createLogger(options: LoggerOptions): Logger { namespace, child: (child) => createLogger({ ...options, namespace: [namespace, child].filter(Boolean) as string[] }), - trace: (...items) => emit("trace", items), - debug: (...items) => emit("debug", items), - log: (...items) => emit("info", items), - info: (...items) => emit("info", items), - warn: (...items) => emit("warn", items), - error: (...items) => emit("error", items), + trace: (...items) => emit('trace', items), + debug: (...items) => emit('debug', items), + log: (...items) => emit('info', items), + info: (...items) => emit('info', items), + warn: (...items) => emit('warn', items), + error: (...items) => emit('error', items), assert: (condition, ...items) => { - if (!condition) emit("error", ["Assertion failed", ...items]); + if (!condition) emit('error', ['Assertion failed', ...items]); }, - group: (...items) => consoleMethod("group", "info", items), - groupCollapsed: (...items) => consoleMethod("groupCollapsed", "info", items), - groupEnd: () => consoleMethod("groupEnd", "info", []), - dir: (item, options_) => consoleMethod("dir", "info", [item, options_]), - dirxml: (...items) => consoleMethod("dirxml", "info", items), - table: (data, properties) => consoleMethod("table", "info", [data, properties]), - clear: () => consoleMethod("clear", "info", []), - count: (label) => consoleMethod("count", "info", [label]), - countReset: (label) => consoleMethod("countReset", "info", [label]), - time: (label) => consoleMethod("time", "info", [label]), - timeLog: (label, ...items) => consoleMethod("timeLog", "info", [label, ...items]), - timeEnd: (label) => consoleMethod("timeEnd", "info", [label]), - timeStamp: (label) => consoleMethod("timeStamp", "info", [label]), - profile: (label) => consoleMethod("profile", "info", [label]), - profileEnd: (label) => consoleMethod("profileEnd", "info", [label]), + group: (...items) => consoleMethod('group', 'info', items), + groupCollapsed: (...items) => consoleMethod('groupCollapsed', 'info', items), + groupEnd: () => consoleMethod('groupEnd', 'info', []), + dir: (item, options_) => consoleMethod('dir', 'info', [item, options_]), + dirxml: (...items) => consoleMethod('dirxml', 'info', items), + table: (data, properties) => consoleMethod('table', 'info', [data, properties]), + clear: () => consoleMethod('clear', 'info', []), + count: (label) => consoleMethod('count', 'info', [label]), + countReset: (label) => consoleMethod('countReset', 'info', [label]), + time: (label) => consoleMethod('time', 'info', [label]), + timeLog: (label, ...items) => consoleMethod('timeLog', 'info', [label, ...items]), + timeEnd: (label) => consoleMethod('timeEnd', 'info', [label]), + timeStamp: (label) => consoleMethod('timeStamp', 'info', [label]), + profile: (label) => consoleMethod('profile', 'info', [label]), + profileEnd: (label) => consoleMethod('profileEnd', 'info', [label]), }; return api; } @@ -386,5 +386,5 @@ export function createLogger(options: LoggerOptions): Logger { * @returns Arguments with `[A][B]` prefix when namespaced. */ function prefix(namespace: string | undefined, arguments_: readonly unknown[]): readonly unknown[] { - return namespace ? [`[${namespace.split(":").join("][")}]`, ...arguments_] : arguments_; + return namespace ? [`[${namespace.split(':').join('][')}]`, ...arguments_] : arguments_; } diff --git a/src/sentry.ts b/src/sentry.ts index 3be7fee..3d349ba 100644 --- a/src/sentry.ts +++ b/src/sentry.ts @@ -1,2 +1,2 @@ /** Public entry for `@mifi/logger/sentry`. Implementation: `src/sinks/sentry.ts`. */ -export * from "./sinks/sentry"; +export * from './sinks/sentry'; diff --git a/src/sinks/console.ts b/src/sinks/console.ts index 01eb3ae..32121ce 100644 --- a/src/sinks/console.ts +++ b/src/sinks/console.ts @@ -1,24 +1,24 @@ -import type { LogLevel, LogSink } from "../types"; +import type { LogLevel, LogSink } from '../types'; -const ANSI_RESET = "\u001B[0m"; -const ANSI_BY_LEVEL: Record, string> = { - trace: "\u001B[90m", - debug: "\u001B[36m", - info: "\u001B[32m", - warn: "\u001B[33m", - error: "\u001B[31m", +const ANSI_RESET = '\u001B[0m'; +const ANSI_BY_LEVEL: Record, string> = { + trace: '\u001B[90m', + debug: '\u001B[36m', + info: '\u001B[32m', + warn: '\u001B[33m', + error: '\u001B[31m', }; -const BROWSER_STYLE_BY_LEVEL: Record, string> = { - trace: "color: #6b7280; font-weight: 600", - debug: "color: #0891b2; font-weight: 600", - info: "color: #15803d; font-weight: 600", - warn: "color: #a16207; font-weight: 700", - error: "color: #dc2626; font-weight: 700", +const BROWSER_STYLE_BY_LEVEL: Record, string> = { + trace: 'color: #6b7280; font-weight: 600', + debug: 'color: #0891b2; font-weight: 600', + info: 'color: #15803d; font-weight: 600', + warn: 'color: #a16207; font-weight: 700', + error: 'color: #dc2626; font-weight: 700', }; /** Whether the current global looks like a browser (`window` is defined). */ function isBrowser(): boolean { - return typeof (globalThis as { window?: unknown }).window !== "undefined"; + return typeof (globalThis as { window?: unknown }).window !== 'undefined'; } /** Whether Node stdout is a TTY that can display ANSI colors. */ @@ -52,13 +52,13 @@ export function createConsoleSink(): LogSink { return { emit: (event) => { if (!event.sendToConsole) return; - const method = event.level === "trace" ? "debug" : event.level; + const method = event.level === 'trace' ? 'debug' : event.level; const console_ = globalThis.console as Console & Record; const fn = console_[method]; - if (typeof fn !== "function") return; + if (typeof fn !== 'function') return; const labelBase = event.namespace - ? `[${event.namespace.split(":").join("][")}]` - : "[LOG]"; + ? `[${event.namespace.split(':').join('][')}]` + : '[LOG]'; const label = event.async ? `${labelBase}[async]` : labelBase; const arguments_ = isBrowser() ? [`%c${label}`, BROWSER_STYLE_BY_LEVEL[event.level], ...event.arguments] diff --git a/src/sinks/sentry.ts b/src/sinks/sentry.ts index c654fd1..966c6fc 100644 --- a/src/sinks/sentry.ts +++ b/src/sinks/sentry.ts @@ -1,10 +1,10 @@ -import type { LogEvent, LogLevel, LogSink } from "../types"; +import type { LogEvent, LogLevel, LogSink } from '../types'; /** * Sentry Issue severity levels (`@sentry/core` `SeverityLevel`). * Note: Issues use `"warning"`; Logs use `"warn"`. */ -export type SentrySeverityLevel = "fatal" | "error" | "warning" | "log" | "info" | "debug"; +export type SentrySeverityLevel = 'fatal' | 'error' | 'warning' | 'log' | 'info' | 'debug'; /** * Options for {@link createSentrySink}. @@ -102,7 +102,7 @@ export interface SentryLike { /** Sink returned by {@link createSentrySink}. */ export interface SentrySink extends LogSink { - readonly kind: "sentry"; + readonly kind: 'sentry'; readonly options: SentrySinkOptions; } @@ -112,7 +112,7 @@ export interface SentrySink extends LogSink { * @param sink - Any {@link LogSink}. */ export function isSentrySink(sink: LogSink): sink is SentrySink { - return "kind" in sink && (sink as { kind?: unknown }).kind === "sentry"; + return 'kind' in sink && (sink as { kind?: unknown }).kind === 'sentry'; } /** @@ -124,14 +124,14 @@ export function isSentrySink(sink: LogSink): sink is SentrySink { * * @param level - Logger emit level (never `silent`). */ -export function toSentrySeverity(level: Exclude): SentrySeverityLevel { - if (level === "warn") return "warning"; - if (level === "trace") return "debug"; +export function toSentrySeverity(level: Exclude): SentrySeverityLevel { + if (level === 'warn') return 'warning'; + if (level === 'trace') return 'debug'; return level; } function isAttributeValue(value: unknown): value is string | number | boolean { - return typeof value === "string" || typeof value === "number" || typeof value === "boolean"; + return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean'; } /** @@ -144,12 +144,12 @@ export function toSentryLogPayload(event: LogEvent): { attributes: Record; } { const message = - event.arguments.filter((item) => typeof item === "string").join(" ") || "Log event"; + event.arguments.filter((item) => typeof item === 'string').join(' ') || 'Log event'; const attributes: Record = {}; - if (event.namespace) attributes["logger.namespace"] = event.namespace; + if (event.namespace) attributes['logger.namespace'] = event.namespace; if (event.async) attributes.async = true; for (const item of event.arguments) { - if (!item || typeof item !== "object" || item instanceof Error || Array.isArray(item)) + if (!item || typeof item !== 'object' || item instanceof Error || Array.isArray(item)) continue; for (const [key, value] of Object.entries(item as Record)) { if (isAttributeValue(value)) attributes[key] = value; @@ -198,17 +198,17 @@ export function toSentryLogPayload(event: LogEvent): { */ export function createSentrySink(sentry: SentryLike, options: SentrySinkOptions = {}): SentrySink { return { - kind: "sentry", + kind: 'sentry', options, emit(event: LogEvent) { - if (event.environment === "development") return; + if (event.environment === 'development') return; if (event.sendToSentryIssue) { const error = event.arguments.find((item): item is Error => item instanceof Error); const { message, attributes } = toSentryLogPayload(event); const severity = toSentrySeverity(event.level); sentry.withScope((scope) => { scope.setLevel(severity); - if (event.namespace) scope.setTag("logger.namespace", event.namespace); + if (event.namespace) scope.setTag('logger.namespace', event.namespace); scope.setExtras(attributes); if (error) sentry.captureException(error); else sentry.captureMessage(message, severity); @@ -216,9 +216,9 @@ export function createSentrySink(sentry: SentryLike, options: SentrySinkOptions return; } if (!event.sendToSentryLogs || !sentry.logger) return; - const method = event.level === "trace" ? "trace" : event.level; + const method = event.level === 'trace' ? 'trace' : event.level; const log = sentry.logger[method]; - if (typeof log !== "function") return; + if (typeof log !== 'function') return; const { message, attributes } = toSentryLogPayload(event); log.call(sentry.logger, message, attributes); }, diff --git a/src/types.ts b/src/types.ts index cce5b8b..b128ced 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,4 +1,4 @@ -import { LogLevel as LogLevelEnum, LoggerEnvironment as LoggerEnvironmentEnum } from "./constants"; +import { LogLevel as LogLevelEnum, LoggerEnvironment as LoggerEnvironmentEnum } from './constants'; /** * Severity threshold for log filtering, ordered from most to least verbose. @@ -70,7 +70,7 @@ export interface LogCallOptions { */ export interface LogEvent { /** Severity of this event. Never `silent`. */ - level: Exclude; + level: Exclude; /** * Colon-joined namespace for this logger (e.g. `"WIDGET:Button"`). * Omitted when the logger was created without a namespace. @@ -165,7 +165,7 @@ export interface LoggerOptions { * Runtime used for the default destination policy (console vs Sentry-only * in production browsers). Inferred from `globalThis.window` when omitted. */ - runtime?: "browser" | "node"; + runtime?: 'browser' | 'node'; /** * Hard level override. Takes precedence over session storage, env vars, * and environment defaults. @@ -178,7 +178,7 @@ export interface LoggerOptions { * Expected value format matches {@link parseLoggingOverride}: * `debug` or `debug:WIDGET,API`. */ - sessionStorage?: Pick; + sessionStorage?: Pick; /** * Node/container environment variable map. Defaults to `process.env` * when available. diff --git a/test/console.test.ts b/test/console.test.ts index e7cafe5..26624a4 100644 --- a/test/console.test.ts +++ b/test/console.test.ts @@ -1,14 +1,14 @@ -import { afterEach, describe, expect, it, vi } from "vitest"; -import { createConsoleSink } from "../src/index"; -import type { LogEvent } from "../src/index"; +import { afterEach, describe, expect, it, vi } from 'vitest'; +import { createConsoleSink } from '../src/index'; +import type { LogEvent } from '../src/index'; function event(overrides: Partial = {}): LogEvent { return { - level: "debug", - namespace: "API", - arguments: ["hello"], + level: 'debug', + namespace: 'API', + arguments: ['hello'], timestamp: new Date(), - environment: "development", + environment: 'development', sendToSentryLogs: false, sendToSentryIssue: false, sendToConsole: true, @@ -16,25 +16,25 @@ function event(overrides: Partial = {}): LogEvent { }; } -describe("createConsoleSink", () => { +describe('createConsoleSink', () => { afterEach(() => { vi.restoreAllMocks(); }); - it("appends [async] to the namespace label when event.async is set", () => { - const debug = vi.spyOn(console, "debug").mockImplementation(() => undefined); + it('appends [async] to the namespace label when event.async is set', () => { + const debug = vi.spyOn(console, 'debug').mockImplementation(() => undefined); createConsoleSink().emit(event({ async: true })); expect(debug).toHaveBeenCalled(); const first = debug.mock.calls[0]?.[0]; - expect(String(first)).toContain("[API][async]"); + expect(String(first)).toContain('[API][async]'); }); - it("omits [async] for synchronous events", () => { - const debug = vi.spyOn(console, "debug").mockImplementation(() => undefined); + it('omits [async] for synchronous events', () => { + const debug = vi.spyOn(console, 'debug').mockImplementation(() => undefined); createConsoleSink().emit(event()); expect(debug).toHaveBeenCalled(); const first = debug.mock.calls[0]?.[0]; - expect(String(first)).toContain("[API]"); - expect(String(first)).not.toContain("[async]"); + expect(String(first)).toContain('[API]'); + expect(String(first)).not.toContain('[async]'); }); }); diff --git a/test/logger.test.ts b/test/logger.test.ts index 0c4c377..aff0b45 100644 --- a/test/logger.test.ts +++ b/test/logger.test.ts @@ -1,127 +1,127 @@ -import { describe, expect, it, vi } from "vitest"; -import { createLogger, isLogCallOptions, parseLoggingOverride } from "../src/index"; -import type { LogEvent, LogSink } from "../src/index"; -import { createSentrySink } from "../src/sentry"; +import { describe, expect, it, vi } from 'vitest'; +import { createLogger, isLogCallOptions, parseLoggingOverride } from '../src/index'; +import type { LogEvent, LogSink } from '../src/index'; +import { createSentrySink } from '../src/sentry'; function sink(): { sink: LogSink; events: LogEvent[] } { const events: LogEvent[] = []; return { events, sink: { emit: (event) => events.push(event) } }; } -describe("parseLoggingOverride", () => { - it("accepts a global level and a namespace-filtered level", () => { - expect(parseLoggingOverride("debug")).toEqual({ level: "debug", namespaces: [] }); - expect(parseLoggingOverride("debug:WIDGET, API")).toEqual({ - level: "debug", - namespaces: ["WIDGET", "API"], +describe('parseLoggingOverride', () => { + it('accepts a global level and a namespace-filtered level', () => { + expect(parseLoggingOverride('debug')).toEqual({ level: 'debug', namespaces: [] }); + expect(parseLoggingOverride('debug:WIDGET, API')).toEqual({ + level: 'debug', + namespaces: ['WIDGET', 'API'], }); - expect(parseLoggingOverride("verbose")).toBeUndefined(); + expect(parseLoggingOverride('verbose')).toBeUndefined(); }); }); -describe("isLogCallOptions", () => { - it("accepts only known option keys", () => { +describe('isLogCallOptions', () => { + it('accepts only known option keys', () => { expect(isLogCallOptions({ sentry: true })).toBe(true); expect(isLogCallOptions({ suppressSentry: true })).toBe(true); expect(isLogCallOptions({ sentry: true, suppressSentry: false })).toBe(true); - expect(isLogCallOptions({ requestId: "req_1" })).toBe(false); - expect(isLogCallOptions({ sentry: true, requestId: "req_1" })).toBe(false); + expect(isLogCallOptions({ requestId: 'req_1' })).toBe(false); + expect(isLogCallOptions({ sentry: true, requestId: 'req_1' })).toBe(false); expect(isLogCallOptions({})).toBe(false); }); }); -describe("createLogger", () => { - it("uses environment defaults and never evaluates suppressed lazy data", () => { +describe('createLogger', () => { + it('uses environment defaults and never evaluates suppressed lazy data', () => { const destination = sink(); - const expensive = vi.fn(() => ({ huge: "snapshot" })); - const logger = createLogger({ environment: "production", sinks: [destination.sink] }); - logger.debug("ignored", expensive); - logger.error("kept", expensive); + const expensive = vi.fn(() => ({ huge: 'snapshot' })); + const logger = createLogger({ environment: 'production', sinks: [destination.sink] }); + logger.debug('ignored', expensive); + logger.error('kept', expensive); expect(expensive).toHaveBeenCalledTimes(1); expect(destination.events).toHaveLength(1); - expect(destination.events[0]?.arguments).toEqual(["kept", { huge: "snapshot" }]); + expect(destination.events[0]?.arguments).toEqual(['kept', { huge: 'snapshot' }]); expect(destination.events[0]?.async).toBeUndefined(); }); - it("never starts suppressed async lazy factories", () => { + it('never starts suppressed async lazy factories', () => { const destination = sink(); - const expensive = vi.fn(async () => ({ huge: "snapshot" })); - const logger = createLogger({ environment: "production", sinks: [destination.sink] }); - logger.debug("ignored", expensive); + const expensive = vi.fn(async () => ({ huge: 'snapshot' })); + const logger = createLogger({ environment: 'production', sinks: [destination.sink] }); + logger.debug('ignored', expensive); expect(expensive).not.toHaveBeenCalled(); expect(destination.events).toHaveLength(0); }); - it("settles async lazy factories before emitting and sets async", async () => { + it('settles async lazy factories before emitting and sets async', async () => { const destination = sink(); const factory = vi.fn(async () => ({ data: 1 })); - const logger = createLogger({ environment: "development", sinks: [destination.sink] }); - logger.debug("response", factory); + const logger = createLogger({ environment: 'development', sinks: [destination.sink] }); + logger.debug('response', factory); expect(factory).toHaveBeenCalledTimes(1); expect(destination.events).toHaveLength(0); await vi.waitFor(() => expect(destination.events).toHaveLength(1)); expect(destination.events[0]).toMatchObject({ - arguments: ["response", { data: 1 }], + arguments: ['response', { data: 1 }], async: true, }); }); - it("unwraps direct Promise arguments and keeps rejection reasons", async () => { + it('unwraps direct Promise arguments and keeps rejection reasons', async () => { const destination = sink(); - const reason = new Error("boom"); - const logger = createLogger({ environment: "development", sinks: [destination.sink] }); - logger.error("failed", { id: 1 }, Promise.reject(reason)); + const reason = new Error('boom'); + const logger = createLogger({ environment: 'development', sinks: [destination.sink] }); + logger.error('failed', { id: 1 }, Promise.reject(reason)); expect(destination.events).toHaveLength(0); await vi.waitFor(() => expect(destination.events).toHaveLength(1)); expect(destination.events[0]).toMatchObject({ - arguments: ["failed", { id: 1 }, reason], + arguments: ['failed', { id: 1 }, reason], async: true, }); }); - it("applies session namespace filtering to namespace descendants", () => { + it('applies session namespace filtering to namespace descendants', () => { const destination = sink(); - const storage = { getItem: () => "debug:WIDGET" }; + const storage = { getItem: () => 'debug:WIDGET' }; createLogger({ - environment: "production", - namespace: "WIDGET:Button", + environment: 'production', + namespace: 'WIDGET:Button', sessionStorage: storage, sinks: [destination.sink], - }).debug("shown"); + }).debug('shown'); createLogger({ - environment: "production", - namespace: "API", + environment: 'production', + namespace: 'API', sessionStorage: storage, sinks: [destination.sink], - }).debug("hidden"); - expect(destination.events.map((event) => event.arguments[0])).toEqual(["shown"]); + }).debug('hidden'); + expect(destination.events.map((event) => event.arguments[0])).toEqual(['shown']); }); - it("builds immutable child namespaces and reports failed assertions as errors", () => { + it('builds immutable child namespaces and reports failed assertions as errors', () => { const destination = sink(); const root = createLogger({ - environment: "development", - namespace: "WIDGET", + environment: 'development', + namespace: 'WIDGET', sinks: [destination.sink], }); - root.child("Button").assert(false, "missing label"); - expect(root.namespace).toBe("WIDGET"); + root.child('Button').assert(false, 'missing label'); + expect(root.namespace).toBe('WIDGET'); expect(destination.events[0]).toMatchObject({ - level: "error", - namespace: "WIDGET:Button", - arguments: ["Assertion failed", "missing label"], + level: 'error', + namespace: 'WIDGET:Button', + arguments: ['Assertion failed', 'missing label'], }); }); - it("sends production browser errors to Sentry without writing to the console", () => { + it('sends production browser errors to Sentry without writing to the console', () => { const destination = sink(); - const consoleError = vi.spyOn(console, "error").mockImplementation(() => undefined); + const consoleError = vi.spyOn(console, 'error').mockImplementation(() => undefined); const logger = createLogger({ - environment: "production", - runtime: "browser", + environment: 'production', + runtime: 'browser', sentry: destination.sink, }); - logger.error("captured"); + logger.error('captured'); expect(destination.events).toHaveLength(1); expect(destination.events[0]).toMatchObject({ sendToSentryIssue: true, @@ -132,19 +132,19 @@ describe("createLogger", () => { consoleError.mockRestore(); }); - it("forces selected events to Sentry Logs without writing them to the console", () => { + it('forces selected events to Sentry Logs without writing them to the console', () => { const destination = sink(); - const consoleInfo = vi.spyOn(console, "info").mockImplementation(() => undefined); + const consoleInfo = vi.spyOn(console, 'info').mockImplementation(() => undefined); const logger = createLogger({ - environment: "production", - runtime: "browser", + environment: 'production', + runtime: 'browser', sentry: destination.sink, }); - logger.info("Cache warmed", { sentry: true }); + logger.info('Cache warmed', { sentry: true }); expect(destination.events).toHaveLength(1); expect(destination.events[0]).toMatchObject({ - level: "info", - arguments: ["Cache warmed"], + level: 'info', + arguments: ['Cache warmed'], sendToSentryLogs: true, sendToSentryIssue: false, sendToConsole: false, @@ -153,42 +153,42 @@ describe("createLogger", () => { consoleInfo.mockRestore(); }); - it("strips trailing call options from event arguments and supports data plus options", () => { + it('strips trailing call options from event arguments and supports data plus options', () => { const destination = sink(); const logger = createLogger({ - environment: "production", - runtime: "browser", + environment: 'production', + runtime: 'browser', sentry: destination.sink, }); - logger.warn("slow", { ms: 1200 }, { sentry: true }); + logger.warn('slow', { ms: 1200 }, { sentry: true }); expect(destination.events[0]).toMatchObject({ - level: "warn", - arguments: ["slow", { ms: 1200 }], + level: 'warn', + arguments: ['slow', { ms: 1200 }], sendToSentryLogs: true, sendToConsole: false, }); }); - it("suppresses Sentry Issues when suppressSentry is set", () => { + it('suppresses Sentry Issues when suppressSentry is set', () => { const destination = sink(); const logger = createLogger({ - environment: "production", - runtime: "browser", + environment: 'production', + runtime: 'browser', sentry: destination.sink, }); - logger.error("expected", new Error("nope"), { suppressSentry: true }); + logger.error('expected', new Error('nope'), { suppressSentry: true }); expect(destination.events).toHaveLength(1); expect(destination.events[0]).toMatchObject({ sendToSentryIssue: false, sendToSentryLogs: false, - arguments: ["expected", expect.any(Error)], + arguments: ['expected', expect.any(Error)], }); }); - it("never marks events for Sentry in development", () => { + it('never marks events for Sentry in development', () => { const destination = sink(); const logger = createLogger({ - environment: "development", + environment: 'development', sinks: [ destination.sink, createSentrySink( @@ -213,8 +213,8 @@ describe("createLogger", () => { ), ], }); - logger.error("local only"); - logger.info("probe", { sentry: true }); + logger.error('local only'); + logger.info('probe', { sentry: true }); expect(destination.events).toHaveLength(2); expect( destination.events.every( @@ -223,25 +223,25 @@ describe("createLogger", () => { ).toBe(true); }); - it("keeps production Node errors on stderr as well as sending them to Sentry", () => { + it('keeps production Node errors on stderr as well as sending them to Sentry', () => { const destination = sink(); - const consoleError = vi.spyOn(console, "error").mockImplementation(() => undefined); + const consoleError = vi.spyOn(console, 'error').mockImplementation(() => undefined); const logger = createLogger({ - environment: "production", - runtime: "node", + environment: 'production', + runtime: 'node', sentry: destination.sink, }); - logger.error("captured"); + logger.error('captured'); expect(destination.events).toHaveLength(1); expect(consoleError).toHaveBeenCalledTimes(1); consoleError.mockRestore(); }); - it("mirrors warn to Sentry Logs in production when logs are enabled on the sink", () => { + it('mirrors warn to Sentry Logs in production when logs are enabled on the sink', () => { const destination = sink(); const logger = createLogger({ - environment: "production", - runtime: "browser", + environment: 'production', + runtime: 'browser', sinks: [ destination.sink, createSentrySink( @@ -261,21 +261,21 @@ describe("createLogger", () => { ), ], }); - logger.warn("noisy"); - logger.info("below default production logs threshold"); + logger.warn('noisy'); + logger.info('below default production logs threshold'); expect(destination.events).toHaveLength(1); expect(destination.events[0]).toMatchObject({ - level: "warn", + level: 'warn', sendToSentryLogs: true, sendToConsole: false, }); }); - it("mirrors info to Sentry Logs in staging when logs are enabled", () => { + it('mirrors info to Sentry Logs in staging when logs are enabled', () => { const destination = sink(); const logger = createLogger({ - environment: "staging", - runtime: "browser", + environment: 'staging', + runtime: 'browser', sinks: [ destination.sink, createSentrySink( @@ -295,10 +295,10 @@ describe("createLogger", () => { ), ], }); - logger.info("visible in staging logs"); - logger.debug("still below staging logs threshold"); + logger.info('visible in staging logs'); + logger.debug('still below staging logs threshold'); expect(destination.events.map((event) => event.arguments[0])).toEqual([ - "visible in staging logs", + 'visible in staging logs', ]); expect(destination.events[0]).toMatchObject({ sendToSentryLogs: true, diff --git a/test/sentry-assignability.ts b/test/sentry-assignability.ts index daf25c7..55d5060 100644 --- a/test/sentry-assignability.ts +++ b/test/sentry-assignability.ts @@ -2,8 +2,8 @@ * Compile-time regression: official Sentry SDKs must assign to {@link SentryLike} * without casts or consumer adapters. Checked by `pnpm check` (`tsc --noEmit`). */ -import * as Sentry from "@sentry/node"; -import { createSentrySink, type SentryLike } from "../src/sentry"; +import * as Sentry from '@sentry/node'; +import { createSentrySink, type SentryLike } from '../src/sentry'; const _sdk: SentryLike = Sentry; createSentrySink(Sentry); diff --git a/test/sentry.test.ts b/test/sentry.test.ts index 37f367b..16a5d90 100644 --- a/test/sentry.test.ts +++ b/test/sentry.test.ts @@ -1,6 +1,6 @@ -import { describe, expect, it, vi } from "vitest"; -import { createLogger, type LogEvent } from "../src/index"; -import { createSentrySink, toSentryLogPayload, toSentrySeverity } from "../src/sentry"; +import { describe, expect, it, vi } from 'vitest'; +import { createLogger, type LogEvent } from '../src/index'; +import { createSentrySink, toSentryLogPayload, toSentrySeverity } from '../src/sentry'; function createFakeSentry() { const scope = { setLevel: vi.fn(), setTag: vi.fn(), setExtras: vi.fn() }; @@ -23,10 +23,10 @@ function createFakeSentry() { function issueEvent(overrides: Partial = {}): LogEvent { return { - level: "error", - arguments: ["message"], + level: 'error', + arguments: ['message'], timestamp: new Date(), - environment: "production", + environment: 'production', sendToSentryLogs: false, sendToSentryIssue: true, sendToConsole: false, @@ -34,46 +34,46 @@ function issueEvent(overrides: Partial = {}): LogEvent { }; } -describe("toSentrySeverity", () => { - it("maps logger levels to Sentry Issue severities", () => { - expect(toSentrySeverity("warn")).toBe("warning"); - expect(toSentrySeverity("trace")).toBe("debug"); - expect(toSentrySeverity("error")).toBe("error"); - expect(toSentrySeverity("info")).toBe("info"); - expect(toSentrySeverity("debug")).toBe("debug"); +describe('toSentrySeverity', () => { + it('maps logger levels to Sentry Issue severities', () => { + expect(toSentrySeverity('warn')).toBe('warning'); + expect(toSentrySeverity('trace')).toBe('debug'); + expect(toSentrySeverity('error')).toBe('error'); + expect(toSentrySeverity('info')).toBe('info'); + expect(toSentrySeverity('debug')).toBe('debug'); }); }); -describe("toSentryLogPayload", () => { - it("joins string messages and flattens primitive object attributes", () => { +describe('toSentryLogPayload', () => { + it('joins string messages and flattens primitive object attributes', () => { expect( toSentryLogPayload({ - level: "info", - namespace: "API", - arguments: ["Cache warmed", { entries: 42, ok: true, nested: { a: 1 } }], + level: 'info', + namespace: 'API', + arguments: ['Cache warmed', { entries: 42, ok: true, nested: { a: 1 } }], timestamp: new Date(), - environment: "production", + environment: 'production', sendToSentryLogs: true, sendToSentryIssue: false, sendToConsole: false, }), ).toEqual({ - message: "Cache warmed", + message: 'Cache warmed', attributes: { - "logger.namespace": "API", + 'logger.namespace': 'API', entries: 42, ok: true, }, }); }); - it("includes async when the event was deferred for thenables", () => { + it('includes async when the event was deferred for thenables', () => { expect( toSentryLogPayload({ - level: "debug", - arguments: ["response"], + level: 'debug', + arguments: ['response'], timestamp: new Date(), - environment: "development", + environment: 'development', sendToSentryLogs: true, sendToSentryIssue: false, sendToConsole: true, @@ -83,112 +83,112 @@ describe("toSentryLogPayload", () => { }); }); -describe("createSentrySink", () => { - it("captures errors as Issues with namespace and structured attributes", () => { +describe('createSentrySink', () => { + it('captures errors as Issues with namespace and structured attributes', () => { const { scope, sentry } = createFakeSentry(); const logger = createLogger({ - environment: "production", - namespace: "API", + environment: 'production', + namespace: 'API', sinks: [createSentrySink(sentry)], }); - const error = new Error("offline"); - logger.warn("ignored without logs"); - logger.error("Request failed", error, { requestId: "req_1" }); + const error = new Error('offline'); + logger.warn('ignored without logs'); + logger.error('Request failed', error, { requestId: 'req_1' }); expect(sentry.captureException).toHaveBeenCalledWith(error); expect(sentry.captureMessage).not.toHaveBeenCalled(); expect(sentry.logger.info).not.toHaveBeenCalled(); - expect(scope.setLevel).toHaveBeenCalledWith("error"); - expect(scope.setTag).toHaveBeenCalledWith("logger.namespace", "API"); + expect(scope.setLevel).toHaveBeenCalledWith('error'); + expect(scope.setTag).toHaveBeenCalledWith('logger.namespace', 'API'); expect(scope.setExtras).toHaveBeenCalledWith({ - "logger.namespace": "API", - requestId: "req_1", + 'logger.namespace': 'API', + requestId: 'req_1', }); }); - it("writes non-error events to Sentry Logs when enabled, not as Issues", () => { + it('writes non-error events to Sentry Logs when enabled, not as Issues', () => { const { sentry } = createFakeSentry(); const logger = createLogger({ - environment: "production", - namespace: "API", + environment: 'production', + namespace: 'API', sinks: [createSentrySink(sentry, { logs: true })], }); - logger.warn("slow", { ms: 1200 }); - logger.info("forced", { id: 1 }, { sentry: true }); + logger.warn('slow', { ms: 1200 }); + logger.info('forced', { id: 1 }, { sentry: true }); expect(sentry.captureMessage).not.toHaveBeenCalled(); expect(sentry.captureException).not.toHaveBeenCalled(); - expect(sentry.logger.warn).toHaveBeenCalledWith("slow", { - "logger.namespace": "API", + expect(sentry.logger.warn).toHaveBeenCalledWith('slow', { + 'logger.namespace': 'API', ms: 1200, }); - expect(sentry.logger.info).toHaveBeenCalledWith("forced", { - "logger.namespace": "API", + expect(sentry.logger.info).toHaveBeenCalledWith('forced', { + 'logger.namespace': 'API', id: 1, }); }); - it("does not create an Issue when suppressSentry is set", () => { + it('does not create an Issue when suppressSentry is set', () => { const { sentry } = createFakeSentry(); const logger = createLogger({ - environment: "production", - runtime: "node", + environment: 'production', + runtime: 'node', sinks: [createSentrySink(sentry, { logs: true })], }); - logger.error("expected", new Error("nope"), { suppressSentry: true }); + logger.error('expected', new Error('nope'), { suppressSentry: true }); expect(sentry.captureException).not.toHaveBeenCalled(); expect(sentry.logger.error).not.toHaveBeenCalled(); }); - it("never sends in development", () => { + it('never sends in development', () => { const { sentry } = createFakeSentry(); const logger = createLogger({ - environment: "development", + environment: 'development', sinks: [createSentrySink(sentry, { logs: true })], }); - logger.error("local", new Error("x")); - logger.warn("local warn", { sentry: true }); + logger.error('local', new Error('x')); + logger.warn('local warn', { sentry: true }); expect(sentry.captureException).not.toHaveBeenCalled(); expect(sentry.logger.warn).not.toHaveBeenCalled(); }); - it("maps warn → warning on the Issues path and keeps warn on the Logs path", () => { + it('maps warn → warning on the Issues path and keeps warn on the Logs path', () => { const { scope, sentry } = createFakeSentry(); const sink = createSentrySink(sentry, { logs: true }); sink.emit( issueEvent({ - level: "warn", - arguments: ["degraded"], + level: 'warn', + arguments: ['degraded'], }), ); - expect(scope.setLevel).toHaveBeenCalledWith("warning"); - expect(sentry.captureMessage).toHaveBeenCalledWith("degraded", "warning"); + expect(scope.setLevel).toHaveBeenCalledWith('warning'); + expect(sentry.captureMessage).toHaveBeenCalledWith('degraded', 'warning'); expect(sentry.logger.warn).not.toHaveBeenCalled(); sink.emit({ - level: "warn", - namespace: "API", - arguments: ["slow", { ms: 10 }], + level: 'warn', + namespace: 'API', + arguments: ['slow', { ms: 10 }], timestamp: new Date(), - environment: "production", + environment: 'production', sendToSentryLogs: true, sendToSentryIssue: false, sendToConsole: false, }); - expect(sentry.logger.warn).toHaveBeenCalledWith("slow", { - "logger.namespace": "API", + expect(sentry.logger.warn).toHaveBeenCalledWith('slow', { + 'logger.namespace': 'API', ms: 10, }); }); - it("maps error Issue severity as error", () => { + it('maps error Issue severity as error', () => { const { scope, sentry } = createFakeSentry(); createSentrySink(sentry).emit( issueEvent({ - level: "error", - arguments: ["failed"], + level: 'error', + arguments: ['failed'], }), ); - expect(scope.setLevel).toHaveBeenCalledWith("error"); - expect(sentry.captureMessage).toHaveBeenCalledWith("failed", "error"); + expect(scope.setLevel).toHaveBeenCalledWith('error'); + expect(sentry.captureMessage).toHaveBeenCalledWith('failed', 'error'); }); }); diff --git a/tsup.config.ts b/tsup.config.ts index 4f56ca7..1a7f0c7 100644 --- a/tsup.config.ts +++ b/tsup.config.ts @@ -1,16 +1,16 @@ -import { defineConfig } from "tsup"; +import { defineConfig } from 'tsup'; export default defineConfig({ - entry: { index: "src/index.ts", sentry: "src/sentry.ts" }, - format: ["esm", "cjs"], + entry: { index: 'src/index.ts', sentry: 'src/sentry.ts' }, + format: ['esm', 'cjs'], // tsup injects baseUrl for DTS; TS 6 treats that as an error until tsup stops // (https://github.com/egoist/tsup/issues/1388) dts: { compilerOptions: { - ignoreDeprecations: "6.0", + ignoreDeprecations: '6.0', }, }, clean: true, - target: "es2022", + target: 'es2022', sourcemap: true, }); diff --git a/vitest.config.ts b/vitest.config.ts index f47aac8..c977443 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -1,5 +1,5 @@ -import { defineConfig } from "vitest/config"; +import { defineConfig } from 'vitest/config'; export default defineConfig({ - test: { environment: "node", coverage: { provider: "v8", reporter: ["text", "html"] } }, + test: { environment: 'node', coverage: { provider: 'v8', reporter: ['text', 'html'] } }, });